diff --git a/.github/assets/book-dark.png b/.github/assets/book-dark.png new file mode 100644 index 00000000000..983e35880f8 Binary files /dev/null and b/.github/assets/book-dark.png differ diff --git a/.github/assets/book-light.png b/.github/assets/book-light.png new file mode 100644 index 00000000000..2568426a80c Binary files /dev/null and b/.github/assets/book-light.png differ diff --git a/.github/assets/compiles-sometimes.svg b/.github/assets/compiles-sometimes.svg new file mode 100644 index 00000000000..8232884ef84 --- /dev/null +++ b/.github/assets/compiles-sometimes.svg @@ -0,0 +1 @@ +COMPILESSOMETIMES \ No newline at end of file diff --git a/.github/assets/discord-dark.png b/.github/assets/discord-dark.png new file mode 100644 index 00000000000..ecddfb9d12a Binary files /dev/null and b/.github/assets/discord-dark.png differ diff --git a/.github/assets/discord-light.png b/.github/assets/discord-light.png new file mode 100644 index 00000000000..bf235384388 Binary files /dev/null and b/.github/assets/discord-light.png differ diff --git a/.github/assets/light-dark template.psd b/.github/assets/light-dark template.psd new file mode 100644 index 00000000000..b1c8eb0dfe8 Binary files /dev/null and b/.github/assets/light-dark template.psd differ diff --git a/.github/assets/made-in-byond.gif b/.github/assets/made-in-byond.gif new file mode 100644 index 00000000000..aed1b7ca243 Binary files /dev/null and b/.github/assets/made-in-byond.gif differ diff --git a/.github/assets/made-with-crayons.svg b/.github/assets/made-with-crayons.svg new file mode 100644 index 00000000000..3b727ea8bd9 --- /dev/null +++ b/.github/assets/made-with-crayons.svg @@ -0,0 +1,31 @@ + + made-with-crayons + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.github/assets/paradise.png b/.github/assets/paradise.png new file mode 100644 index 00000000000..859a3f4f635 Binary files /dev/null and b/.github/assets/paradise.png differ diff --git a/.github/assets/web-dark.png b/.github/assets/web-dark.png new file mode 100644 index 00000000000..d304acdcc30 Binary files /dev/null and b/.github/assets/web-dark.png differ diff --git a/.github/assets/web-light.png b/.github/assets/web-light.png new file mode 100644 index 00000000000..5c61978f8a7 Binary files /dev/null and b/.github/assets/web-light.png differ diff --git a/.github/assets/wiki-dark.png b/.github/assets/wiki-dark.png new file mode 100644 index 00000000000..26e0806faac Binary files /dev/null and b/.github/assets/wiki-dark.png differ diff --git a/.github/assets/wiki-light.png b/.github/assets/wiki-light.png new file mode 100644 index 00000000000..0b321777957 Binary files /dev/null and b/.github/assets/wiki-light.png differ diff --git a/.github/workflows/render_nanomaps.yml b/.github/workflows/render_nanomaps.yml index 7ba495b3540..c9449cc382d 100644 --- a/.github/workflows/render_nanomaps.yml +++ b/.github/workflows/render_nanomaps.yml @@ -43,4 +43,7 @@ jobs: git pull origin master git commit -m "NanoMap Auto-Update (`date`)" -a || true git push -f -u origin nanomap-render - gh pr create -t "Automatic NanoMap Update" -b "This pull request updates the server NanoMaps. Please review the diff images before merging." -l "NanoMaps" -H "nanomap-render" -B "master" + result=$(gh pr create -t "Automatic NanoMap Update" -b "This pull request updates the server NanoMaps. Please review the diff images before merging." -l "NanoMaps" -H "nanomap-render" -B "master") + if echo "$result" | grep -q "No commits between master and nanomap-render" + echo "No NanoMaps update required, skipping." + exit 78 diff --git a/COPYING b/COPYING deleted file mode 100644 index a4192d74542..00000000000 --- a/COPYING +++ /dev/null @@ -1,19 +0,0 @@ -Paradise -Copyright (C) 2010-2016 Paradise, Baystation12, Goonstation and tgstation13. - -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 . - - - -Any files located in the Paradise/goon, Paradise/icons/goonstation, or Paradise/sound/goonstation directories, or any subdirectories of mentioned directories are licensed under the Creative Commons 3.0 BY-NC-SA license (https://creativecommons.org/licenses/by-nc-sa/3.0) from Goonstation. diff --git a/LICENSE-AGPL3.txt b/LICENSE-AGPLv3.txt similarity index 100% rename from LICENSE-AGPL3.txt rename to LICENSE-AGPLv3.txt diff --git a/LICENSE-CC-BY-NC-SA-3.0.txt b/LICENSE-CC-BY-NC-SA-3.0.txt new file mode 100644 index 00000000000..46c8191674e --- /dev/null +++ b/LICENSE-CC-BY-NC-SA-3.0.txt @@ -0,0 +1,361 @@ +Creative Commons Legal Code + +Attribution-NonCommercial-ShareAlike 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY +BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(g) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined above) for the purposes of this + License. + c. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + d. "License Elements" means the following high-level license attributes + as selected by Licensor and indicated in the title of this License: + Attribution, Noncommercial, ShareAlike. + e. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + f. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + g. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + h. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + i. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + j. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved, including but not limited to the +rights described in Section 4(e). + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(d), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(d), as requested. + b. You may Distribute or Publicly Perform an Adaptation only under: (i) + the terms of this License; (ii) a later version of this License with + the same License Elements as this License; (iii) a Creative Commons + jurisdiction license (either this or a later license version) that + contains the same License Elements as this License (e.g., + Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). + You must include a copy of, or the URI, for Applicable License with + every copy of each Adaptation You Distribute or Publicly Perform. You + may not offer or impose any terms on the Adaptation that restrict the + terms of the Applicable License or the ability of the recipient of the + Adaptation to exercise the rights granted to that recipient under the + terms of the Applicable License. You must keep intact all notices that + refer to the Applicable License and to the disclaimer of warranties + with every copy of the Work as included in the Adaptation You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Adaptation, You may not impose any effective technological + measures on the Adaptation that restrict the ability of a recipient of + the Adaptation from You to exercise the rights granted to that + recipient under the terms of the Applicable License. This Section 4(b) + applies to the Adaptation as incorporated in a Collection, but this + does not require the Collection apart from the Adaptation itself to be + made subject to the terms of the Applicable License. + c. You may not exercise any of the rights granted to You in Section 3 + above in any manner that is primarily intended for or directed toward + commercial advantage or private monetary compensation. The exchange of + the Work for other copyrighted works by means of digital file-sharing + or otherwise shall not be considered to be intended for or directed + toward commercial advantage or private monetary compensation, provided + there is no payment of any monetary compensation in con-nection with + the exchange of copyrighted works. + d. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and, (iv) consistent with Section 3(b), in the case of an Adaptation, + a credit identifying the use of the Work in the Adaptation (e.g., + "French translation of the Work by Original Author," or "Screenplay + based on original Work by Original Author"). The credit required by + this Section 4(d) may be implemented in any reasonable manner; + provided, however, that in the case of a Adaptation or Collection, at + a minimum such credit will appear, if a credit for all contributing + authors of the Adaptation or Collection appears, then as part of these + credits and in a manner at least as prominent as the credits for the + other contributing authors. For the avoidance of doubt, You may only + use the credit required by this Section for the purpose of attribution + in the manner set out above and, by exercising Your rights under this + License, You may not implicitly or explicitly assert or imply any + connection with, sponsorship or endorsement by the Original Author, + Licensor and/or Attribution Parties, as appropriate, of You or Your + use of the Work, without the separate, express prior written + permission of the Original Author, Licensor and/or Attribution + Parties. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor reserves + the exclusive right to collect such royalties for any exercise by + You of the rights granted under this License if Your exercise of + such rights is for a purpose or use which is otherwise than + noncommercial as permitted under Section 4(c) and otherwise waives + the right to collect royalties through any statutory or compulsory + licensing scheme; and, + iii. Voluntary License Schemes. The Licensor reserves the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License that is for a + purpose or use which is otherwise than noncommercial as permitted + under Section 4(c). + f. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE +FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS +AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE +WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT +LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, +ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT +DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED +WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of this License. + + Creative Commons may be contacted at https://creativecommons.org/. + diff --git a/LICENSE-CC-BY-NC-SA.txt b/LICENSE-CC-BY-NC-SA.txt deleted file mode 100644 index 860915c5c0e..00000000000 --- a/LICENSE-CC-BY-NC-SA.txt +++ /dev/null @@ -1,60 +0,0 @@ -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - - "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. - "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. - "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. - "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike. - "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. - "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. - "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. - "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. - "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. - "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - - to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; - to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; - to Distribute and Publicly Perform the Work including as incorporated in Collections; and, - to Distribute and Publicly Perform Adaptations. - -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e). - -4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - - You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested. - You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. - You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works. - If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - - For the avoidance of doubt: - Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; - Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, - Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c). - Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - - This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. - Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -8. Miscellaneous - - Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. - Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. - If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. - This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. - The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. diff --git a/LICENSE-CC-BY-SA-3.0.txt b/LICENSE-CC-BY-SA-3.0.txt new file mode 100644 index 00000000000..604209a8046 --- /dev/null +++ b/LICENSE-CC-BY-SA-3.0.txt @@ -0,0 +1,359 @@ +Creative Commons Legal Code + +Attribution-ShareAlike 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY +BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined below) for the purposes of this + License. + c. "Creative Commons Compatible License" means a license that is listed + at https://creativecommons.org/compatiblelicenses that has been + approved by Creative Commons as being essentially equivalent to this + License, including, at a minimum, because that license: (i) contains + terms that have the same purpose, meaning and effect as the License + Elements of this License; and, (ii) explicitly permits the relicensing + of adaptations of works made available under that license under this + License or a Creative Commons jurisdiction license with the same + License Elements as this License. + d. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + e. "License Elements" means the following high-level license attributes + as selected by Licensor and indicated in the title of this License: + Attribution, ShareAlike. + f. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + g. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + h. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + i. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + j. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + k. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor waives the + exclusive right to collect such royalties for any exercise by You + of the rights granted under this License; and, + iii. Voluntary License Schemes. The Licensor waives the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(c), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(c), as requested. + b. You may Distribute or Publicly Perform an Adaptation only under the + terms of: (i) this License; (ii) a later version of this License with + the same License Elements as this License; (iii) a Creative Commons + jurisdiction license (either this or a later license version) that + contains the same License Elements as this License (e.g., + Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible + License. If you license the Adaptation under one of the licenses + mentioned in (iv), you must comply with the terms of that license. If + you license the Adaptation under the terms of any of the licenses + mentioned in (i), (ii) or (iii) (the "Applicable License"), you must + comply with the terms of the Applicable License generally and the + following provisions: (I) You must include a copy of, or the URI for, + the Applicable License with every copy of each Adaptation You + Distribute or Publicly Perform; (II) You may not offer or impose any + terms on the Adaptation that restrict the terms of the Applicable + License or the ability of the recipient of the Adaptation to exercise + the rights granted to that recipient under the terms of the Applicable + License; (III) You must keep intact all notices that refer to the + Applicable License and to the disclaimer of warranties with every copy + of the Work as included in the Adaptation You Distribute or Publicly + Perform; (IV) when You Distribute or Publicly Perform the Adaptation, + You may not impose any effective technological measures on the + Adaptation that restrict the ability of a recipient of the Adaptation + from You to exercise the rights granted to that recipient under the + terms of the Applicable License. This Section 4(b) applies to the + Adaptation as incorporated in a Collection, but this does not require + the Collection apart from the Adaptation itself to be made subject to + the terms of the Applicable License. + c. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and (iv) , consistent with Ssection 3(b), in the case of an + Adaptation, a credit identifying the use of the Work in the Adaptation + (e.g., "French translation of the Work by Original Author," or + "Screenplay based on original Work by Original Author"). The credit + required by this Section 4(c) may be implemented in any reasonable + manner; provided, however, that in the case of a Adaptation or + Collection, at a minimum such credit will appear, if a credit for all + contributing authors of the Adaptation or Collection appears, then as + part of these credits and in a manner at least as prominent as the + credits for the other contributing authors. For the avoidance of + doubt, You may only use the credit required by this Section for the + purpose of attribution in the manner set out above and, by exercising + Your rights under this License, You may not implicitly or explicitly + assert or imply any connection with, sponsorship or endorsement by the + Original Author, Licensor and/or Attribution Parties, as appropriate, + of You or Your use of the Work, without the separate, express prior + written permission of the Original Author, Licensor and/or Attribution + Parties. + d. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of the License. + + Creative Commons may be contacted at https://creativecommons.org/. diff --git a/LICENSE-GPL3.txt b/LICENSE-GPLv3.txt similarity index 99% rename from LICENSE-GPL3.txt rename to LICENSE-GPLv3.txt index e4ca08d4b0d..94a9ed024d3 100644 --- a/LICENSE-GPL3.txt +++ b/LICENSE-GPLv3.txt @@ -1,7 +1,3 @@ -Note: New submissions as of 5th January 2015 now fall under AGPL v3, prior code is -still licensed GPL v3, see README.md for details. - - GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 diff --git a/README.md b/README.md index 196fb7376a2..4976414fc67 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,146 @@ -# Paradise -[![CI](https://github.com/ParadiseSS13/Paradise/workflows/CI/badge.svg)](https://github.com/ParadiseSS13/Paradise/actions?query=workflow%3ACI) -[![Render Nanomaps](https://github.com/ParadiseSS13/Paradise/workflows/Render%20Nanomaps/badge.svg)](https://github.com/ParadiseSS13/Paradise/actions?query=workflow%3A%22Render+Nanomaps%22) -[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/paradisess13/paradise.svg)](http://isitmaintained.com/project/paradisess13/paradise "Average time to resolve an issue") -[![Percentage of issues still open](http://isitmaintained.com/badge/open/paradisess13/paradise.svg)](http://isitmaintained.com/project/paradisess13/paradise "Percentage of issues still open") +Paradise Station -[![forthebadge](http://forthebadge.com/images/badges/60-percent-of-the-time-works-every-time.svg)](http://forthebadge.com) -[![forthebadge](http://forthebadge.com/images/badges/contains-technical-debt.svg)](http://forthebadge.com) -[![forthebadge](http://forthebadge.com/images/badges/fuck-it-ship-it.svg)](http://forthebadge.com) +##

Welcome to the main repository for the Paradise Station version of [Space Station 13](https://spacestation13.com/).

-# Useful Links +

+ CI + Render Nanomaps + Average time to resolve an issue + Percentage of issues still open +

-- [Discord](https://discordapp.com/invite/YJDsXFE) -- [Documentation](https://codedocs.paradisestation.org) -- [Website](https://www.paradisestation.org/) -# Useful Documents +

+ Compiles sometimes + Made in BYOND + Made with crayons +

-- [Autodocumentation Guide](.github/AUTODOC_GUIDE.md) -- [Code of Conduct](./CODE_OF_CONDUCT.md) -- [Contribution Guide](.github/CONTRIBUTING.md) -- [Installation Guide](.github/DOWNLOADING.md) + + + +

+ + + + + Discord + + + + + + + Code docs + + + + + + + Website + + + + + + + Game Wiki + + +

+ + + + +> [!TIP] +> Want to contribute for the first time but unsure where to start?
+> Join our Discord and check out the [#coding_chat](https://discord.com/channels/145533722026967040/145700319819464704) channel for helpful links and advice!
+> Alternatively, have a look at our community maintained [Guide to Contributing](https://paradisestation.org/wiki/index.php?title=Guide_to_Contributing) + +# Useful Documents and Links + +- ### [Dream Maker (DM) Reference](https://www.byond.com/docs/ref/) + +This reference site by the creators of BYOND details information on the DM language, the syntax used, functionality of native procs, and a lot more. This is always useful to have on hand when contributing. + +- ### [Autodocumentation Guide](.github/AUTODOC_GUIDE.md) + +This guide shows you how to leave code comments that comply with "autodocumentation", a system designed to make everyone's lives easier when reading or reviewing code! + +- ### [Code of Conduct](./CODE_OF_CONDUCT.md) + +All contributors are expected to read our Code of Conduct before they take part in our community. + +- ### [Contribution Guide](.github/CONTRIBUTING.md) + +Not sure how to take part and contribute? This guide gives an overview of how to make comments, pull requests, and open issues. + +This guide also sets out our code standards that we expect all submitted code to adhere to. + +- ### [Community Maintained Guide to Contributing](https://paradisestation.org/wiki/index.php?title=Guide_to_Contributing) + +This community maintained guide covers how to set yourself up for success when attempting to contribute to Paracode. + +> [!IMPORTANT] +> Paradise does not provide precompiled binaries, requiring you to build from source to host a local server.
+> Building Paradise is quick and simple, all you need to install is [BYOND](https://www.byond.com/download/).
+> You can learn more in our [Installation Guide](.github/DOWNLOADING.md). + +- ### [Paradise Station Development Team Structure](https://www.paradisestation.org/dev/policy/) + +A detailed policy document that governs how the Paradise Station Development Team functions, from the various roles that help keep things running to the process each PR goes through depending on the content. + +- ### [TGUI Tutorial](tgui/docs/tutorial-and-examples.md) + +TGUI is a user interface framework, built on InfernoJS, for all new player-facing UIs. + +TGUI is very different to most other BYOND user interfaces as it is written entirely in JavaScript with some data passed to and from DreamMaker. If you are looking to get to grips with TGUI, this tutorial is a good starting point. Additional information can also be found [here.](tgui) + +- ### [Mapping Guide](https://hackmd.io/@tgstation/SyVma0dS5#san7890s-A-Z-Guide-to-Mapping) + +Mapping for Paradise station can be daunting to new contributors. Here's a comprehensive quick-start put together by a community member that takes you from A-Z. --- -### LICENSE +# LICENSES -Paradise is licensed under the GNU Affero General Public License version 3. -As of 5th January 2015 any new contributions are licensed under the AGPL as well, -if you wish to submit code under the GPL v3 then commits and files must be marked as such -in comments. If you wish to use our code in a closed source manner you may use anything -before commit 445615b8439bf606ff204a42c8e7b6b69d983255, -which is licensed under GPL v3. -The major change here is that if you host a server using any code licensed under AGPL you -are required to provide full source code for your servers users as well, -including addons and modifications you have made. +> [!CAUTION] +> If you wish to use our code in a closed source manner (i.e. not make it available to the public and/or those who connect to services you offer using this code) you must **only** use code prior to commit [1af3ddef2af85937251e24384c2173c4b6c3222b on 2015/01/05 22:04 GMT](https://github.com/ParadiseSS13/Paradise/commit/1af3ddef2af85937251e24384c2173c4b6c3222b), which is licenced under GPLv3. -See [this](https://www.gnu.org/licenses/why-affero-gpl.html) for more information. +### Click each banner for further information -Any files located in the -`Paradise/goon`, -`Paradise/icons/goonstation`, or -`Paradise/sound/goonstation` -directories, or any subdirectories of mentioned directories are licensed under the -Creative Commons 3.0 BY-NC-SA license -(https://creativecommons.org/licenses/by-nc-sa/3.0) +--- -All other assets including icons and sound files are licensed under the -Creative Commons 3.0 BY-SA license (https://creativecommons.org/licenses/by-sa/3.0/), -unless otherwise indicated. +
+AGPLv3 license + +>All code after and including commit [1af3ddef2af85937251e24384c2173c4b6c3222b on 2015/01/05 22:04 GMT](https://github.com/ParadiseSS13/Paradise/commit/1af3ddef2af85937251e24384c2173c4b6c3222b) is licensed under the [GNU Affero General Public License version 3](https://www.gnu.org/licenses/agpl-3.0.en.html) unless otherwise specified within the folder or file. +
+ +
+GPLv3 license + +>All code prior to commit [1af3ddef2af85937251e24384c2173c4b6c3222b on 2015/01/05 22:04 GMT](https://github.com/ParadiseSS13/Paradise/commit/1af3ddef2af85937251e24384c2173c4b6c3222b) is licensed under the [GPL General Public License version 3](https://www.gnu.org/licenses/gpl-3.0.en.html) +
+ +
+MIT license + +>Some files are licenced under the [MIT license](https://opensource.org/license/MIT), these files will clearly specify this licence at the head of each file. +
+ +
+Creative Commons 3.0 BY-NC-SA + +>Any files with the ancestor directories [`Paradise/icons/goonstation`](icons/goonstation) or [`Paradise/sound/goonstation`](sound/goonstation) are licensed under the [Creative Commons 3.0 BY-NC-SA license](https://creativecommons.org/licenses/by-nc-sa/3.0). +> +>Further files or folders may also fall under this licence, and any such instances will be specified within the folder or file. +
+ +
+Creative Commons 3.0 BY-SA + +>All other non-code assets, including icons and sound files, are licensed under the [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/), unless otherwise specified within the folder or file. +
diff --git a/_maps/map_files/generic/centcomm.dmm b/_maps/map_files/generic/centcomm.dmm index 816b7af9022..eff94377911 100644 --- a/_maps/map_files/generic/centcomm.dmm +++ b/_maps/map_files/generic/centcomm.dmm @@ -377,6 +377,10 @@ }, /turf/simulated/floor/plasteel/dark, /area/ninja/outpost) +"bA" = ( +/obj/effect/landmark/spawner/tradergearminor, +/turf/simulated/floor/mineral/titanium, +/area/shuttle/trade/sol) "bB" = ( /obj/effect/landmark/abductor/scientist, /turf/simulated/floor/plating/abductor, @@ -2878,12 +2882,12 @@ "kf" = ( /obj/docking_port/stationary{ area_type = /area/syndicate_mothership; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_syndicate"; name = "404 Not Found"; turf_type = /turf/simulated/floor/plating/asteroid/snow/airless; - width = 33 + width = 41 }, /turf/simulated/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) @@ -4489,11 +4493,11 @@ "pf" = ( /obj/docking_port/stationary/transit{ dir = 4; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_transit"; name = "emergency in transit"; - width = 33 + width = 41 }, /turf/space/transit, /area/space/centcomm) @@ -6181,7 +6185,7 @@ /turf/simulated/floor/carpet/green, /area/ghost_bar) "vf" = ( -/obj/effect/landmark/spawner/soltrader, +/obj/effect/landmark/spawner/trader, /obj/structure/chair/comfy/brown, /turf/simulated/floor/wood, /area/trader_station/sol) @@ -6281,7 +6285,7 @@ /area/centcom/control) "vu" = ( /obj/structure/railing, -/obj/effect/landmark/spawner/soltrader, +/obj/effect/landmark/spawner/trader, /obj/structure/chair/comfy/brown{ dir = 4 }, @@ -6331,7 +6335,7 @@ /area/trader_station/sol) "vD" = ( /obj/structure/railing, -/obj/effect/landmark/spawner/soltrader, +/obj/effect/landmark/spawner/trader, /obj/structure/chair/comfy/brown{ dir = 8 }, @@ -12184,11 +12188,11 @@ }, /obj/docking_port/stationary{ dir = 4; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_away"; name = "emergency centcom"; - width = 33 + width = 41 }, /turf/simulated/floor/plating, /area/shuttle/escape) @@ -12756,6 +12760,10 @@ icon_state = "bot" }, /area/shuttle/escape) +"SU" = ( +/obj/effect/landmark/spawner/tradergearmajor, +/turf/simulated/floor/mineral/titanium, +/area/shuttle/trade/sol) "SV" = ( /turf/simulated/wall/indestructible/fakeglass, /area/tdome/tdomeadmin) @@ -48808,9 +48816,9 @@ vG of oI pc -rK +bA pc -uP +SU pc vY of @@ -49322,9 +49330,9 @@ vG of oS pc -pa +rK pc -pa +uP pc wa of @@ -49336,11 +49344,11 @@ aN aN aN aN -aN Db aN aN aN +aN Db aN aN @@ -49375,10 +49383,10 @@ Db aN aN aN +Db aN aN -aN -aN +Db aN aN aN @@ -50621,12 +50629,12 @@ aN aN aN aN -aN Db aN aN aN aN +aN od od vy @@ -50656,6 +50664,13 @@ XB od ux ux +aN +aN +aN +aN +aN +aN +aN Db aN aN @@ -50746,13 +50761,6 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN "} (141,1,1) = {" aN @@ -51906,12 +51914,12 @@ aN aN aN aN -aN Db aN aN aN aN +aN vy Ez Fq @@ -51941,6 +51949,13 @@ Pb vy Iv Zp +aN +aN +aN +aN +aN +aN +aN Db aN aN @@ -52031,13 +52046,6 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN "} (146,1,1) = {" aN @@ -52420,12 +52428,12 @@ aN aN aN aN -aN Db aN aN aN aN +aN vy EE Fo @@ -52455,6 +52463,13 @@ JC vy Iv Zp +aN +aN +aN +aN +aN +aN +aN Db aN aN @@ -52545,13 +52560,6 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN "} (148,1,1) = {" aN @@ -53705,7 +53713,6 @@ aN aN aN aN -aN Db aN aN @@ -53716,6 +53723,7 @@ aN aN aN aN +aN od JC Mc @@ -53740,6 +53748,13 @@ qF od Iv Zp +aN +aN +aN +aN +aN +aN +aN Db aN aN @@ -53830,13 +53845,6 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN "} (153,1,1) = {" aN @@ -54990,11 +54998,11 @@ aN aN aN aN -aN Db aN aN aN +aN Db aN aN @@ -55029,10 +55037,10 @@ Db aN aN aN +Db aN aN -aN -aN +Db aN aN aN diff --git a/_maps/map_files/shuttles/emergency_shadow.dmm b/_maps/map_files/shuttles/emergency_shadow.dmm new file mode 100644 index 00000000000..3b4a0de97d8 --- /dev/null +++ b/_maps/map_files/shuttles/emergency_shadow.dmm @@ -0,0 +1,1871 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"af" = ( +/obj/structure/bed/dogbed, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"ao" = ( +/obj/effect/turf_decal/stripes/white/corner{ + dir = 1 + }, +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"aK" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/electrical{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -1; + pixel_y = -3 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow" + }, +/area/shuttle/escape) +"aZ" = ( +/obj/effect/turf_decal/stripes/red/corner, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"bh" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/structure/window/plasmareinforced, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"bD" = ( +/obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"bH" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/restraints/handcuffs, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"bT" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"cv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/table/glass/reinforced/plastitanium, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/hyper, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"cF" = ( +/obj/structure/chair/comfy/shuttle, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"cH" = ( +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow" + }, +/area/shuttle/escape) +"cV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"cX" = ( +/obj/structure/window/full/plasmareinforced, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"dw" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"ee" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Escape Shuttle Infirmary" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/shuttle/escape) +"eJ" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"fb" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"fi" = ( +/obj/machinery/recharger, +/obj/structure/table/glass/reinforced/plastitanium, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"fE" = ( +/obj/structure/window/plasmareinforced{ + dir = 4 + }, +/obj/structure/shuttle/engine/heater{ + dir = 8 + }, +/obj/machinery/igniter/on, +/obj/machinery/atmospherics/unary/passive_vent/high_volume/shadow{ + dir = 4; + invisibility = 99 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"fV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"ge" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/storage/fancy/donut_box, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"gs" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/trinary/filter/shadow{ + invisibility = 99 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"gF" = ( +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"gG" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"gV" = ( +/obj/structure/marker_beacon/dock_marker/collision, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"hm" = ( +/obj/structure/window/plasmareinforced{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"hz" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/dispenser, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"ix" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"jl" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"jB" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/catwalk, +/area/shuttle/escape) +"jR" = ( +/turf/simulated/floor/engine/o2, +/area/shuttle/escape) +"kx" = ( +/obj/structure/chair/comfy/shuttle, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"kU" = ( +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"kY" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/storage/surgical_tray, +/obj/item/stack/nanopaste, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"ll" = ( +/obj/machinery/computer/security, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"lo" = ( +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"lw" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/storage/fancy/donut_box, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"lD" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"mp" = ( +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"mw" = ( +/obj/machinery/sleeper, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"my" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"nq" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"nL" = ( +/obj/machinery/computer/crew{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"nQ" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"ow" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/catwalk, +/area/shuttle/escape) +"oK" = ( +/mob/living/simple_animal/bot/medbot, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/shuttle/escape) +"oQ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"pi" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/item/kirbyplants, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"qk" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"qo" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/flash, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"rg" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"rm" = ( +/obj/machinery/computer/emergency_shuttle{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"rS" = ( +/obj/structure/chair/comfy/shuttle, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"sh" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"sE" = ( +/obj/machinery/computer/secure_data{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"tb" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"uu" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"uA" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"uF" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"uL" = ( +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass{ + name = "Cockpit" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"uW" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/catwalk, +/area/shuttle/escape) +"vv" = ( +/obj/machinery/atmospherics/portable/canister/air, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"vw" = ( +/obj/structure/window/plasmareinforced{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"vx" = ( +/obj/item/defibrillator/loaded, +/obj/structure/table/glass/reinforced/plastitanium, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"vU" = ( +/turf/simulated/wall/mineral/plastitanium, +/area/shuttle/escape) +"wb" = ( +/obj/structure/window/full/plastitanium, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/grille, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"wj" = ( +/obj/machinery/space_heater, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow" + }, +/area/shuttle/escape) +"wz" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"wF" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"xy" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/item/kirbyplants, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"yg" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"yQ" = ( +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 8 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"yU" = ( +/obj/machinery/computer/atmos_alert{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/shuttle/escape) +"zj" = ( +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"zs" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow"; + dir = 1 + }, +/area/shuttle/escape) +"zu" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"zI" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"Ah" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow"; + dir = 1 + }, +/area/shuttle/escape) +"AA" = ( +/obj/effect/turf_decal/arrows, +/obj/effect/turf_decal/arrows{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"AS" = ( +/obj/effect/turf_decal/stripes/white/line, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Bm" = ( +/obj/machinery/sleeper, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Bu" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/window/plasmareinforced, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"BB" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/machinery/recharger, +/obj/item/gun/energy/gun/mini, +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"BJ" = ( +/mob/living/simple_animal/bot/secbot, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"Cw" = ( +/turf/template_noop, +/area/template_noop) +"CD" = ( +/obj/machinery/igniter/shadow, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"CK" = ( +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"Dl" = ( +/obj/structure/window/full/plastitanium, +/obj/structure/grille, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"Dq" = ( +/obj/effect/turf_decal/stripes/white/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Dz" = ( +/obj/item/storage/box/cups, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/table/glass/reinforced/plastitanium, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"DN" = ( +/obj/structure/window/full/plastitanium, +/obj/machinery/door/firedoor/heavy, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/shuttle/escape) +"DY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"DZ" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"EM" = ( +/obj/structure/window/plasmareinforced{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"Fn" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"Fu" = ( +/obj/machinery/door/firedoor/heavy, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Fz" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"FT" = ( +/obj/structure/closet/crate/freezer/iv_storage, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/shuttle/escape) +"FW" = ( +/obj/machinery/door/firedoor/heavy, +/obj/effect/turf_decal/delivery/red, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Gp" = ( +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Gs" = ( +/obj/machinery/atmospherics/unary/passive_vent/high_volume/shadow{ + dir = 4; + invisibility = 99 + }, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"Gx" = ( +/obj/structure/extinguisher_cabinet{ + name = "south bump"; + pixel_y = -30 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/shuttle/escape) +"GB" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/storage/firstaid/doctor, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"GC" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + name = "south bump"; + pixel_y = -30 + }, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"GI" = ( +/obj/machinery/computer/station_alert{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"GK" = ( +/obj/structure/chair/comfy/shuttle, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"GR" = ( +/obj/machinery/recharge_station, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Hh" = ( +/obj/structure/rack, +/obj/item/soap/nanotrasen, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/item/grenade/chem_grenade/metalfoam, +/obj/machinery/alarm/directional/north, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow"; + dir = 1 + }, +/area/shuttle/escape) +"Hu" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/storage/fancy/donut_box, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"HB" = ( +/obj/effect/turf_decal/stripes/white/corner{ + dir = 8 + }, +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"IG" = ( +/obj/structure/chair/comfy/shuttle, +/obj/structure/extinguisher_cabinet{ + name = "north bump"; + pixel_y = 30 + }, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"IR" = ( +/obj/effect/turf_decal/stripes/white/line, +/obj/structure/extinguisher_cabinet{ + name = "north bump"; + pixel_y = 30 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Jh" = ( +/obj/structure/extinguisher_cabinet{ + name = "north bump"; + pixel_y = 30 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Jw" = ( +/obj/structure/chair/comfy/shuttle, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"JM" = ( +/obj/machinery/door/airlock/hatch, +/obj/docking_port/mobile/emergency{ + dir = 2; + name = "NTSS Shadow emergency shuttle"; + dwidth = 16; + width = 41; + timid = 1; + height = 13; + shuttle_speed_factor = 2 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"Kf" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/structure/decorative_structures/flammable/lava_land_display{ + pixel_x = 12 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Lv" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/delivery, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"LA" = ( +/obj/structure/window/plasmareinforced{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/meter, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"LI" = ( +/obj/effect/turf_decal/stripes/white/line, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"LJ" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/megaphone, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"MP" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"MT" = ( +/obj/effect/turf_decal/stripes/red/corner, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"Nd" = ( +/obj/machinery/hologram/holopad, +/obj/effect/turf_decal/box/white, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"NI" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"NO" = ( +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/obj/machinery/door/airlock/security/glass{ + name = "Escape Shuttle Brig" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"Oe" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/item/kirbyplants, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"OL" = ( +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow"; + dir = 1 + }, +/area/shuttle/escape) +"OU" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellow" + }, +/area/shuttle/escape) +"OX" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"PX" = ( +/obj/machinery/door/airlock/hatch, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"Qj" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/plasteel{ + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/shuttle/escape) +"Qz" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"QM" = ( +/obj/effect/turf_decal/stripes/white/corner, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Rk" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"RL" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"RS" = ( +/obj/structure/chair/comfy/shuttle, +/turf/simulated/floor/plasteel{ + icon_state = "darkbluecorners" + }, +/area/shuttle/escape) +"RV" = ( +/obj/machinery/door/firedoor/heavy, +/obj/effect/turf_decal/caution/stand_clear, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Sb" = ( +/obj/item/clothing/suit/apron/surgical, +/obj/item/clothing/mask/surgical, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/reagent_containers/glass/bottle/reagent/hydrocodone, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Sn" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/obj/structure/window/plasmareinforced, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"So" = ( +/obj/item/lazarus_injector, +/obj/item/healthanalyzer, +/obj/machinery/light, +/obj/structure/table/glass/reinforced/plastitanium, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Tl" = ( +/obj/structure/table/glass/reinforced/plastitanium, +/obj/item/reagent_containers/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass{ + pixel_x = -5 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"TW" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Ux" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + name = "south bump"; + pixel_y = -30 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"US" = ( +/obj/structure/window/full/plastitanium, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/shuttle/escape) +"Vg" = ( +/obj/structure/rack, +/obj/item/storage/firstaid/toxin, +/obj/item/storage/firstaid/fire, +/obj/item/storage/firstaid/brute, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"VD" = ( +/obj/machinery/computer/communications{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"VR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + name = "west bump"; + pixel_x = -27 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Wv" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"Wy" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engine Room" + }, +/obj/machinery/door/firedoor/heavy, +/obj/effect/mapping_helpers/airlock/access/any/engineering/construction, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"WQ" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/shuttle/escape) +"WW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/meter, +/turf/simulated/floor/engine/plasma, +/area/shuttle/escape) +"Xp" = ( +/obj/structure/marker_beacon/dock_marker/collision, +/obj/machinery/atmospherics/unary/outlet_injector/on{ + dir = 1; + invisibility = 99 + }, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"XA" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/escape) +"XW" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Yb" = ( +/obj/structure/window/full/plasmareinforced, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/engine/airless, +/area/shuttle/escape) +"Yc" = ( +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Yq" = ( +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/machinery/door/airlock/command/glass{ + name = "Cockpit" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/shuttle/escape) +"YD" = ( +/obj/machinery/economy/vending/medical, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"YP" = ( +/obj/effect/turf_decal/delivery/blue/partial{ + dir = 4 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) +"Zc" = ( +/obj/item/surgical_drapes, +/obj/machinery/optable, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/shuttle/escape) +"Zk" = ( +/obj/item/storage/box/handcuffs, +/obj/structure/table/glass/reinforced/plastitanium, +/turf/simulated/floor/mineral/plastitanium/red/brig, +/area/shuttle/escape) +"Zq" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/pod/dark, +/area/shuttle/escape) +"ZN" = ( +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel/dark, +/area/shuttle/escape) + +(1,1,1) = {" +Cw +Cw +Cw +CK +CK +CK +vU +CK +CK +CK +Cw +Cw +Cw +"} +(2,1,1) = {" +Cw +Cw +vU +fE +fE +fE +vU +fE +fE +fE +vU +Cw +Cw +"} +(3,1,1) = {" +Cw +Cw +vU +uW +uW +jB +vv +ow +uW +uW +vU +Cw +Cw +"} +(4,1,1) = {" +Cw +vU +XA +MT +vw +vw +LA +vw +vw +fb +XA +vU +Cw +"} +(5,1,1) = {" +gV +Dl +zs +Bu +NI +Yb +zu +cX +cX +Zq +wj +wb +Xp +"} +(6,1,1) = {" +Cw +vU +Ah +Sn +uu +fV +zj +Gs +cX +wF +OU +vU +Cw +"} +(7,1,1) = {" +vU +XA +Hh +bh +gs +oQ +DY +WW +cX +wF +aK +XA +vU +"} +(8,1,1) = {" +US +Lv +OL +Bu +tb +jR +CD +jR +cX +wF +cH +Lv +US +"} +(9,1,1) = {" +vU +hz +OL +Bu +Wv +Yb +Yb +Yb +Yb +my +cH +GR +vU +"} +(10,1,1) = {" +US +eJ +OL +wz +EM +EM +hm +EM +EM +nQ +cH +eJ +US +"} +(11,1,1) = {" +vU +vU +Wy +vU +DN +DN +vU +DN +DN +vU +Wy +vU +vU +"} +(12,1,1) = {" +US +xy +Dq +VR +cV +cV +cV +cV +cV +VR +QM +Oe +US +"} +(13,1,1) = {" +US +Jw +Rk +aZ +nq +nq +nq +nq +nq +DZ +AS +MP +US +"} +(14,1,1) = {" +vU +GK +Rk +XA +US +US +US +US +US +XA +AS +lD +vU +"} +(15,1,1) = {" +US +Jw +Rk +vU +kx +gF +Zk +gF +zI +vU +AS +MP +vU +"} +(16,1,1) = {" +US +Jw +Rk +vU +kx +gF +fi +gF +zI +vU +AS +MP +US +"} +(17,1,1) = {" +PX +AA +Rk +vU +cF +gF +BJ +gF +uF +vU +AS +MP +vU +"} +(18,1,1) = {" +vU +bD +Rk +vU +IG +gF +gF +gF +GC +vU +AS +MP +vU +"} +(19,1,1) = {" +PX +AA +Ux +vU +kx +gF +gF +gF +zI +vU +IR +MP +US +"} +(20,1,1) = {" +US +Qj +Rk +XA +US +US +NO +US +US +XA +AS +lD +vU +"} +(21,1,1) = {" +US +Hu +jl +RL +XW +XW +bT +XW +XW +yg +Gp +Dz +US +"} +(22,1,1) = {" +vU +FW +Fu +FW +Fu +FW +RV +FW +Fu +FW +Fu +FW +vU +"} +(23,1,1) = {" +US +ge +ZN +cV +yQ +yQ +lo +yQ +yQ +cV +LI +cv +US +"} +(24,1,1) = {" +US +OX +Rk +XA +US +US +ee +US +US +XA +AS +lD +vU +"} +(25,1,1) = {" +JM +AA +Rk +vU +vx +Fz +WQ +dw +Vg +vU +AS +MP +US +"} +(26,1,1) = {" +vU +bD +Rk +vU +qk +WQ +WQ +WQ +FT +vU +AS +MP +US +"} +(27,1,1) = {" +PX +AA +Rk +vU +Sb +WQ +oK +WQ +So +vU +AS +MP +vU +"} +(28,1,1) = {" +US +Jw +Rk +vU +Jh +WQ +WQ +WQ +Gx +vU +AS +MP +US +"} +(29,1,1) = {" +US +Jw +Ux +vU +Zc +kY +mw +YD +Bm +vU +IR +MP +US +"} +(30,1,1) = {" +vU +GK +Rk +XA +US +US +US +US +US +XA +AS +lD +vU +"} +(31,1,1) = {" +US +Jw +Rk +kU +YP +YP +YP +YP +YP +kU +AS +MP +US +"} +(32,1,1) = {" +US +pi +ao +mp +mp +mp +mp +mp +mp +mp +HB +pi +US +"} +(33,1,1) = {" +vU +vU +US +US +uL +vU +vU +vU +Yq +US +US +vU +vU +"} +(34,1,1) = {" +Cw +vU +lw +uA +kU +qo +BB +GB +kU +rS +bH +vU +Cw +"} +(35,1,1) = {" +Cw +vU +Tl +Qz +kU +sh +kU +sh +kU +RS +LJ +vU +Cw +"} +(36,1,1) = {" +Cw +vU +XA +TW +kU +kU +Nd +kU +kU +Yc +XA +vU +Cw +"} +(37,1,1) = {" +Cw +Cw +US +af +gG +kU +kU +kU +Fn +ix +US +Cw +Cw +"} +(38,1,1) = {" +Cw +Cw +US +US +sE +kU +Kf +kU +yU +US +US +Cw +Cw +"} +(39,1,1) = {" +Cw +Cw +Cw +US +ll +gG +rg +Fn +GI +US +Cw +Cw +Cw +"} +(40,1,1) = {" +Cw +Cw +Cw +US +US +VD +rm +nL +US +US +Cw +Cw +Cw +"} +(41,1,1) = {" +Cw +Cw +Cw +Cw +US +US +US +US +US +Cw +Cw +Cw +Cw +"} diff --git a/_maps/map_files/stations/boxstation.dmm b/_maps/map_files/stations/boxstation.dmm index 31bfcbabf97..66adb73fc8a 100644 --- a/_maps/map_files/stations/boxstation.dmm +++ b/_maps/map_files/stations/boxstation.dmm @@ -22947,11 +22947,11 @@ "brK" = ( /obj/docking_port/stationary{ dir = 4; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_home"; name = "emergency evac bay"; - width = 33 + width = 41 }, /turf/space, /area/space) @@ -40410,6 +40410,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/structure/closet/emcloset, /turf/simulated/floor/plating/airless, /area/station/science/toxins/test) "cDL" = ( @@ -67422,13 +67423,6 @@ icon_state = "darkyellow" }, /area/station/science/robotics/chargebay) -"kOa" = ( -/obj/structure/closet/emcloset, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating/airless, -/area/station/science/toxins/test) "kOt" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, @@ -73862,6 +73856,15 @@ icon_state = "arrival" }, /area/station/hallway/secondary/entry/north) +"oao" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel/airless, +/area/station/science/toxins/test) "oap" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ @@ -76502,6 +76505,13 @@ icon_state = "dark" }, /area/station/medical/morgue) +"pkf" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel/airless, +/area/station/science/toxins/test) "pko" = ( /obj/structure/chair/stool{ dir = 8 @@ -79640,6 +79650,11 @@ /obj/item/storage/toolbox/mechanical, /turf/simulated/floor/plating/airless, /area/station/science/toxins/test) +"qES" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plasteel/airless, +/area/station/science/toxins/test) "qFg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -152677,9 +152692,9 @@ aaa aaa aaa aaa -doE -doE -doE +aaa +aaa +aaa aaa aaa aab @@ -152932,15 +152947,15 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa +aaa +aaa aab -gnU -ldS -clB -cnk -cid -cie -cie cie +cij cvs cie cie @@ -153189,18 +153204,18 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa +aaa +aab aab -ldS -cjZ -cjZ -cjZ cie -cie -ckb -cdK +pkf cjZ -udq -ckb +oao +cie cie cie clA @@ -153446,19 +153461,19 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa aab -ldS -cjZ -cjZ -cjZ -clB -ckb -ckb +aab +cie +cie cdK cjZ udq ckb -ckb +cie cie jgm cjZ @@ -153703,13 +153718,13 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aab aab -ldS -clA -kOa -jgm cie -ckb +cie ckb cdK cjZ @@ -153961,9 +153976,9 @@ aaa aaa aaa aaa -cid -cid -cie +aaa +aab +aab cie cie ckb @@ -154218,13 +154233,13 @@ aaa aaa aaa aaa -cid +aab +aab cie cie ckb ckb ckb -ckb cdK cjZ udq @@ -154474,10 +154489,10 @@ aaa aaa aaa aaa -aaa -cij +aab +aab +cie cie -ckb ckb ckb ckb @@ -154731,9 +154746,9 @@ aaa aaa aaa aaa -aaa +aab +cie cie -ckb ckb ckb ckb @@ -155247,7 +155262,7 @@ aaa aaa aab cie -ckb +qES ckb ckb ckb diff --git a/_maps/map_files/stations/cerestation.dmm b/_maps/map_files/stations/cerestation.dmm index 31aa308fa5a..c85769be6e9 100644 --- a/_maps/map_files/stations/cerestation.dmm +++ b/_maps/map_files/stations/cerestation.dmm @@ -60296,11 +60296,11 @@ "mgu" = ( /obj/docking_port/stationary{ dir = 4; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_home"; name = "emergency evac bay"; - width = 33 + width = 41 }, /turf/space, /area/space) diff --git a/_maps/map_files/stations/deltastation.dmm b/_maps/map_files/stations/deltastation.dmm index 37a1dedd289..6d0af2fbf78 100644 --- a/_maps/map_files/stations/deltastation.dmm +++ b/_maps/map_files/stations/deltastation.dmm @@ -13792,6 +13792,10 @@ icon_state = "bar" }, /area/station/service/bar) +"aTq" = ( +/obj/effect/spawner/airlock, +/turf/simulated/wall, +/area/station/hallway/secondary/exit) "aTr" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -61705,21 +61709,13 @@ /turf/simulated/floor/plasteel, /area/station/hallway/primary/aft/south) "dHO" = ( -/obj/effect/spawner/window/reinforced/grilled, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/structure/cable{ d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" + d2 = 2; + icon_state = "1-2" }, +/obj/structure/cable, +/obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/hallway/secondary/exit) "dHQ" = ( @@ -62698,11 +62694,11 @@ "dNS" = ( /obj/docking_port/stationary{ dir = 4; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_home"; name = "emergency evac bay"; - width = 33 + width = 41 }, /turf/space, /area/space) @@ -63953,6 +63949,16 @@ /obj/item/crowbar/red, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/apmaint) +"dSB" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 + }, +/obj/machinery/atmospherics/portable/canister/air, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/exit) "dSD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -64687,8 +64693,8 @@ /area/station/hallway/primary/central) "dUY" = ( /obj/machinery/light, -/obj/machinery/alarm/directional/south, /obj/effect/turf_decal/stripes/line, +/obj/machinery/alarm/directional/south, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "dUZ" = ( @@ -66426,16 +66432,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/wall, /area/station/legal/lawoffice) -"evE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable, -/obj/effect/spawner/window/reinforced/grilled, -/turf/simulated/floor/plating, -/area/station/hallway/secondary/exit) "evX" = ( /obj/structure/cable, /obj/effect/spawner/window/reinforced/grilled, @@ -66570,22 +66566,6 @@ icon_state = "yellowcorner" }, /area/station/hallway/primary/port/east) -"ezr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/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/plasteel/white, -/area/station/medical/virology) "ezR" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -71043,16 +71023,6 @@ }, /turf/simulated/floor/plating, /area/station/command/office/rd) -"hli" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 8 - }, -/obj/machinery/atmospherics/portable/canister/air, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/exit) "hly" = ( /obj/structure/table/wood, /turf/simulated/floor/plasteel/dark, @@ -73770,10 +73740,6 @@ icon_state = "bar" }, /area/station/service/kitchen) -"iVe" = ( -/obj/effect/spawner/airlock, -/turf/simulated/wall, -/area/station/service/chapel/office) "iVg" = ( /obj/machinery/economy/atm/directional/west, /turf/simulated/floor/plasteel{ @@ -75594,6 +75560,15 @@ icon_state = "whiteblue" }, /area/station/medical/storage) +"kdg" = ( +/obj/structure/sign/vacuum{ + pixel_x = -32 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/exit) "kdm" = ( /obj/machinery/power/apc/critical/directional/north, /obj/machinery/firealarm{ @@ -75694,15 +75669,6 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/medical/morgue) -"kfC" = ( -/obj/structure/sign/vacuum{ - pixel_x = -32 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/exit) "kfT" = ( /obj/structure/cable{ d2 = 4; @@ -82388,6 +82354,22 @@ icon_state = "red" }, /area/station/security/permabrig) +"ogR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/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/plasteel/white, +/area/station/medical/virology) "ogX" = ( /obj/machinery/camera{ c_tag = "Experimentation Lab Office"; @@ -91325,21 +91307,6 @@ }, /turf/simulated/floor/plasteel, /area/station/science/research) -"tjT" = ( -/obj/item/radio/intercom{ - name = "west bump"; - pixel_x = -28 - }, -/obj/machinery/newscaster{ - dir = 1; - name = "south bump"; - pixel_y = -28 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/simulated/floor/plasteel, -/area/station/hallway/secondary/exit) "tkb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -91872,6 +91839,24 @@ icon_state = "yellowcorner" }, /area/station/hallway/primary/port/west) +"tEp" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/station/hallway/secondary/exit) "tEw" = ( /obj/structure/showcase{ density = 0; @@ -92369,6 +92354,21 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/security/prison/cell_block) +"tSp" = ( +/obj/item/radio/intercom{ + name = "west bump"; + pixel_x = -28 + }, +/obj/machinery/newscaster{ + dir = 1; + name = "south bump"; + pixel_y = -28 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/simulated/floor/plasteel, +/area/station/hallway/secondary/exit) "tSt" = ( /obj/structure/table, /obj/item/reagent_containers/drinks/drinkingglass{ @@ -136431,7 +136431,7 @@ dUQ dYU dIx abj -aaa +abj aaa aaa aaa @@ -136686,7 +136686,8 @@ dIx dIx dIx dIx -iVe +dIx +aTq abj aaa aaa @@ -136730,7 +136731,6 @@ aaa aaa aaa aaa -aaa "} (145,1,1) = {" aaa @@ -136931,6 +136931,7 @@ dLA dMo dKP dKP +dKP dOv dPb eBl @@ -136987,7 +136988,6 @@ aaa aaa aaa aaa -aaa "} (146,1,1) = {" aaa @@ -137189,6 +137189,7 @@ sZI dPM dPM dPM +dPM rCw dPM dPM @@ -137197,7 +137198,7 @@ dPM dkq dSs dSP -hli +dSB dIH dIH dIH @@ -137244,7 +137245,6 @@ aaa aaa aaa aaa -aaa "} (147,1,1) = {" aaa @@ -137446,6 +137446,7 @@ hVf dKo dKo dKo +dKo rvx dKo dKo @@ -137455,8 +137456,8 @@ dNa dXJ dKo dUj -kfC -tjT +kdg +tSp dIH abj aaa @@ -137501,7 +137502,6 @@ aaa aaa aaa aaa -aaa "} (148,1,1) = {" aaa @@ -137700,6 +137700,7 @@ cYk cYk cYk dbR +cYk dbV ddw dNa @@ -137758,7 +137759,6 @@ aaa aaa aaa aaa -aaa "} (149,1,1) = {" aaa @@ -137957,6 +137957,7 @@ dKo dKo dKo hVf +dKo dNb dNN dOw @@ -138015,7 +138016,6 @@ aaa aaa aaa aaa -aaa "} (150,1,1) = {" aaa @@ -138214,6 +138214,7 @@ dKo gkk dKo hVf +dKo dNc dNO dXF @@ -138272,7 +138273,6 @@ aaa aaa aaa aaa -aaa "} (151,1,1) = {" aaa @@ -138471,6 +138471,7 @@ dKo dKo dKo hVf +dKo dNb dNP dOw @@ -138529,7 +138530,6 @@ aaa aaa aaa aaa -aaa "} (152,1,1) = {" aaa @@ -138728,6 +138728,7 @@ dKp dKp dKp dIh +dKo dOu dNQ dOx @@ -138786,7 +138787,6 @@ aaa aaa aaa aaa -aaa "} (153,1,1) = {" aaa @@ -138985,6 +138985,7 @@ wgY rIb rIb pJE +dKo dNb bGr dOw @@ -139043,7 +139044,6 @@ aaa aaa aaa aaa -aaa "} (154,1,1) = {" aaa @@ -139245,6 +139245,7 @@ iFB iqq iqq iqq +iqq uFa sbt sDb @@ -139268,7 +139269,6 @@ aaa aaa aaa aaa -aaa aaZ aaa aaa @@ -139501,6 +139501,7 @@ nIs ngE kuJ kuJ +kuJ tJT dXn dXn @@ -139557,7 +139558,6 @@ aaa aaa aaa aaa -aaa "} (156,1,1) = {" aaa @@ -139758,6 +139758,7 @@ dTJ dMs jac jac +jac vSW scA ajq @@ -139814,7 +139815,6 @@ aaa aaa aaa aaa -aaa "} (157,1,1) = {" aaa @@ -140016,6 +140016,7 @@ dVp dKp dKp dKp +dKp pGr rev vJu @@ -140071,7 +140072,6 @@ aaa aaa aaa aaa -aaa "} (158,1,1) = {" aaa @@ -140273,6 +140273,7 @@ ulH dTy dTy dTy +dTy rmq msT dKP @@ -140328,7 +140329,6 @@ aaa aaa aaa aaa -aaa "} (159,1,1) = {" aaa @@ -140526,9 +140526,10 @@ pIY kuJ kpd kpd +tEp +dHO +dHO dHO -evE -evE tJT dKQ jpk @@ -140585,7 +140586,6 @@ aaa aaa aaa aaa -aaa "} (160,1,1) = {" aaa @@ -140786,6 +140786,7 @@ abj abj abj abj +abj pjC dKP pjC @@ -140842,7 +140843,6 @@ aaa aaa aaa aaa -aaa "} (161,1,1) = {" aaa @@ -141043,6 +141043,7 @@ aaa aaa aaa aaa +aaa pjC dKQ pjC @@ -141099,7 +141100,6 @@ aaa aaa aaa aaa -aaa "} (162,1,1) = {" aaa @@ -141303,8 +141303,8 @@ aaa aaa aaa aaa -dNS aaa +dNS aaa aaa aaa @@ -149011,7 +149011,7 @@ dGw dGw hGZ qgr -ezr +ogR wWW qfH sRk diff --git a/_maps/map_files/stations/metastation.dmm b/_maps/map_files/stations/metastation.dmm index 2876dab601b..188474412c2 100644 --- a/_maps/map_files/stations/metastation.dmm +++ b/_maps/map_files/stations/metastation.dmm @@ -42602,11 +42602,11 @@ "cZp" = ( /obj/docking_port/stationary{ dir = 2; - dwidth = 15; + dwidth = 16; height = 21; id = "emergency_home"; name = "emergency evac bay"; - width = 33 + width = 41 }, /turf/space, /area/space) diff --git a/code/__DEFINES/antag_defines.dm b/code/__DEFINES/antag_defines.dm index fe136abd200..24cfb19d97e 100644 --- a/code/__DEFINES/antag_defines.dm +++ b/code/__DEFINES/antag_defines.dm @@ -47,7 +47,7 @@ GLOBAL_LIST(contractors) /// Denotes that this power can not be obtained normally. Primarily used for base types such as [/datum/action/changeling/weapon]. #define CHANGELING_UNOBTAINABLE_POWER 3 -#define CHANGELING_FAKEDEATH_TIME 50 SECONDS +#define CHANGELING_FAKEDEATH_TIME 50 SECONDS #define CHANGELING_ABSORB_RECENT_SPEECH 8 //The amount of recent spoken lines to gain on absorbing a mob /** @@ -62,9 +62,6 @@ GLOBAL_LIST(contractors) */ #define PULSEDEMON_SOURCE_DRAIN_INVALID (-1) -/proc/ischangeling(mob/M) // TODO: Someone please convert these to proper defines some day. - return M.mind?.has_antag_datum(/datum/antagonist/changeling) +#define IS_CHANGELING(mob) (isliving(mob) && mob?:mind?:has_antag_datum(/datum/antagonist/changeling)) -// Helper proc that determines if a mob is a mindslave. -/proc/ismindslave(mob/living/carbon/human/H) - return istype(H) && H.mind.has_antag_datum(/datum/antagonist/mindslave, FALSE) +#define IS_MINDSLAVE(mob) (ishuman(mob) && mob?:mind?:has_antag_datum(/datum/antagonist/mindslave, FALSE)) diff --git a/code/__DEFINES/genetics_defines.dm b/code/__DEFINES/genetics_defines.dm index f03a2fcdfb1..d437121dbbb 100644 --- a/code/__DEFINES/genetics_defines.dm +++ b/code/__DEFINES/genetics_defines.dm @@ -42,6 +42,7 @@ #define BLOOD_VOLUME_MAXIMUM 2000 #define BLOOD_VOLUME_NORMAL 560 #define BLOOD_VOLUME_SAFE 501 +#define BLOOD_VOLUME_STABLE 357 #define BLOOD_VOLUME_OKAY 336 #define BLOOD_VOLUME_BAD 224 #define BLOOD_VOLUME_SURVIVE 122 diff --git a/code/__DEFINES/hud_locations.dm b/code/__DEFINES/hud_locations.dm index d14a51d3593..3c907ddf9b5 100644 --- a/code/__DEFINES/hud_locations.dm +++ b/code/__DEFINES/hud_locations.dm @@ -107,6 +107,7 @@ #define ui_healthdoll "EAST-1:28,CENTER-1:15" #define ui_health "EAST-1:28,CENTER:17" #define ui_internal "EAST-1:28,CENTER+1:19" +#define ui_stamina "EAST-1:28,CENTER-2:15" //borgs #define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator. diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index f5362ea9643..0648b0ac77d 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -73,18 +73,6 @@ /proc/file2list(filename, seperator="\n") return splittext(return_file_text(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 - stack_trace("UNKNOWN DIRECTION: [direction]") - /proc/dir2text(direction) switch(direction) if(1.0) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 636430e1b64..0fa4f14daaf 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -262,40 +262,6 @@ /proc/format_frequency(f) return "[round(f / 10)].[f % 10]" -/obj/proc/atmosanalyzer_scan(datum/gas_mixture/air_contents, mob/user, obj/target = src) - var/obj/icon = target - if(isliving(user)) - user.visible_message("[user] uses the analyzer on [target].", "You use the analyzer on [target].") - var/pressure = air_contents.return_pressure() - var/total_moles = air_contents.total_moles() - var/volume = air_contents.return_volume() - - user.show_message("Results of analysis of [bicon(icon)] [target].", 1) - if(total_moles>0) - var/o2_concentration = air_contents.oxygen/total_moles - var/n2_concentration = air_contents.nitrogen/total_moles - var/co2_concentration = air_contents.carbon_dioxide/total_moles - var/plasma_concentration = air_contents.toxins/total_moles - var/n2o_concentration = air_contents.sleeping_agent/total_moles - - var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration+n2o_concentration) - - user.show_message("Pressure: [round(pressure,0.1)] kPa", 1) - user.show_message("Nitrogen: [round(n2_concentration*100)] % ([round(air_contents.nitrogen,0.01)] moles)", 1) - user.show_message("Oxygen: [round(o2_concentration*100)] % ([round(air_contents.oxygen,0.01)] moles)", 1) - user.show_message("CO2: [round(co2_concentration*100)] % ([round(air_contents.carbon_dioxide,0.01)] moles)", 1) - user.show_message("Plasma: [round(plasma_concentration*100)] % ([round(air_contents.toxins,0.01)] moles)", 1) - user.show_message("Nitrous Oxide: [round(n2o_concentration*100)] % ([round(air_contents.sleeping_agent,0.01)] moles)", 1) - if(unknown_concentration>0.01) - user.show_message("Unknown: [round(unknown_concentration*100)] % ([round(unknown_concentration*total_moles,0.01)] moles)", 1) - user.show_message("Total: [round(total_moles,0.01)] moles", 1) - user.show_message("Temperature: [round(air_contents.temperature-T0C)] °C", 1) - user.show_message("Volume: [round(volume)] Liters", 1) - else - user.show_message("[target] is empty!", 1) - user.show_message("Volume: [round(volume)] Liters", 1) - return - //Picks a string of symbols to display as the law number for hacked or ion laws /proc/ionnum() return "[pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]" diff --git a/code/_onclick/hud/human_hud.dm b/code/_onclick/hud/human_hud.dm index 43ab2c14b69..848fd46b2b9 100644 --- a/code/_onclick/hud/human_hud.dm +++ b/code/_onclick/hud/human_hud.dm @@ -329,6 +329,9 @@ mymob.healths = new /atom/movable/screen/healths() infodisplay += mymob.healths + mymob.staminas = new /atom/movable/screen/healths/stamina() + infodisplay += mymob.staminas + mymob.healthdoll = new() infodisplay += mymob.healthdoll diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index bb041323527..d10e0006fb3 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -562,3 +562,7 @@ /atom/movable/screen/component_button/Click(params) if(parent) parent.component_click(src, params) + +/atom/movable/screen/healths/stamina + icon_state = "stamina_0" + screen_loc = ui_stamina diff --git a/code/_onclick/observer_onclick.dm b/code/_onclick/observer_onclick.dm index d0a20b1519e..b0632715a47 100644 --- a/code/_onclick/observer_onclick.dm +++ b/code/_onclick/observer_onclick.dm @@ -77,9 +77,12 @@ /mob/dead/observer/MiddleShiftControlClickOn(atom/A) return -/atom/proc/attack_ghost(mob/user) +/atom/proc/attack_ghost(mob/dead/observer/user) if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_GHOST, user) & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE + if(user.client) + if(user.gas_scan && atmos_scan(user=user, target=src, silent=TRUE)) + return TRUE // health + machine analyzer for ghosts /mob/living/attack_ghost(mob/dead/observer/user) @@ -106,14 +109,3 @@ /obj/effect/portal/attack_ghost(mob/user as mob) if(target) user.forceMove(get_turf(target)) - -/obj/machinery/atmospherics/attack_ghost(mob/dead/observer/user) - if(!istype(user)) // Make sure user is actually an observer. Revenents also use attack_ghost, but do not have the toggle gas analyzer var. - return - if(user.gas_analyzer) - if(istype(src, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/T = src - atmosanalyzer_scan(T.parent.air, user, T) - else if(istype(src, /obj/machinery/atmospherics/unary)) - var/obj/machinery/atmospherics/unary/T = src - atmosanalyzer_scan(T.air_contents, user, T) diff --git a/code/controllers/subsystem/non_firing/SSmapping.dm b/code/controllers/subsystem/non_firing/SSmapping.dm index 34870242284..3823c267e71 100644 --- a/code/controllers/subsystem/non_firing/SSmapping.dm +++ b/code/controllers/subsystem/non_firing/SSmapping.dm @@ -49,6 +49,7 @@ SUBSYSTEM_DEF(mapping) log_startup_progress("We feel like [cave_theme] today...") // Load all Z level templates preloadTemplates() + preloadTemplates(path = "code/modules/unit_tests/atmos/") // Load the station loadStation() diff --git a/code/datums/emote.dm b/code/datums/emote.dm index e549d8b1314..fb1dbb66722 100644 --- a/code/datums/emote.dm +++ b/code/datums/emote.dm @@ -209,11 +209,11 @@ if(!ghost.client) continue if((ghost.client.prefs.toggles & PREFTOGGLE_CHAT_GHOSTSIGHT) && !(ghost in viewers(user_turf, null))) - ghost.show_message("[user] ([ghost_follow_link(user, ghost)]) [msg]") + ghost.show_message("[user] ([ghost_follow_link(user, ghost)]) [msg]", chat_message_type = MESSAGE_TYPE_LOCALCHAT) if(isobserver(user)) for(var/mob/dead/observer/ghost in viewers(user)) - ghost.show_message("[displayed_msg]", EMOTE_VISIBLE) + ghost.show_message("[displayed_msg]", EMOTE_VISIBLE, chat_message_type = MESSAGE_TYPE_LOCALCHAT) else if((emote_type & EMOTE_AUDIBLE) && !user.mind?.miming) user.audible_message(displayed_msg, deaf_message = "You see how [user] [msg]") @@ -283,10 +283,10 @@ for(var/mob/O as anything in can_see) if(O.status_flags & PASSEMOTES) for(var/obj/item/holder/H in O.contents) - H.show_message(text, EMOTE_VISIBLE) + H.show_message(text, EMOTE_VISIBLE, chat_message_type = MESSAGE_TYPE_LOCALCHAT) for(var/mob/living/M in O.contents) - M.show_message(text, EMOTE_VISIBLE) + M.show_message(text, EMOTE_VISIBLE, chat_message_type = MESSAGE_TYPE_LOCALCHAT) if(O.client?.prefs.toggles2 & PREFTOGGLE_2_RUNECHAT) O.create_chat_message(user, runechat_text, symbol = RUNECHAT_SYMBOL_EMOTE) @@ -636,7 +636,7 @@ if(!ghost.client) continue if(ghost.client.prefs.toggles & PREFTOGGLE_CHAT_GHOSTSIGHT && !(ghost in viewers(origin_turf, null))) - ghost.show_message("[ghost_follow_link(src, ghost)] [ghost_text]") + ghost.show_message("[ghost_follow_link(src, ghost)] [ghost_text]", chat_message_type = MESSAGE_TYPE_LOCALCHAT) visible_message(text) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 73608ba323e..5bde8280239 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -962,12 +962,12 @@ else if(href_list["changeling"]) switch(href_list["changeling"]) if("clear") - if(ischangeling(current)) + if(IS_CHANGELING(current)) remove_antag_datum(/datum/antagonist/changeling) log_admin("[key_name(usr)] has de-changelinged [key_name(current)]") message_admins("[key_name_admin(usr)] has de-changelinged [key_name_admin(current)]") if("changeling") - if(!ischangeling(current)) + if(!IS_CHANGELING(current)) add_antag_datum(/datum/antagonist/changeling) to_chat(current, "Your powers have awoken. A flash of memory returns to us... we are a changeling!") log_admin("[key_name(usr)] has changelinged [key_name(current)]") diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index f6067d0a316..aeeb4f1a16a 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -834,25 +834,23 @@ ) is_solgov_lieutenant = TRUE -/datum/outfit/admin/sol_trader - name = "Sol Trader" - +/datum/outfit/admin/trader + name = "Trader" uniform = /obj/item/clothing/under/rank/cargo/tech back = /obj/item/storage/backpack/industrial belt = /obj/item/melee/classic_baton - head = /obj/item/clothing/head/soft shoes = /obj/item/clothing/shoes/black l_ear = /obj/item/radio/headset glasses = /obj/item/clothing/glasses/sunglasses id = /obj/item/card/id/supply pda = /obj/item/pda backpack_contents = list( - /obj/item/storage/box/survival = 1, /obj/item/hand_labeler = 1, - /obj/item/hand_labeler_refill = 1 + /obj/item/hand_labeler_refill = 2 ) + box = /obj/item/storage/box/survival -/datum/outfit/admin/sol_trader/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) +/datum/outfit/admin/trader/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() if(visualsOnly) return @@ -862,6 +860,78 @@ apply_to_card(I, H, list(ACCESS_TRADE_SOL, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS), name) H.sec_hud_set_ID() +/datum/outfit/admin/trader/sol + name = "Trans-Solar Federation Trader" + suit = /obj/item/clothing/suit/jacket/cargobomber + head = /obj/item/clothing/head/soft + +/datum/outfit/admin/trader/cyber + name = "Cybersun Industries Trader" + uniform = /obj/item/clothing/under/syndicate/tacticool + suit = /obj/item/clothing/suit/jacket/syndicatebomber + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/combat + belt = /obj/item/melee/classic_baton/telescopic + back = /obj/item/storage/backpack/security + box = /obj/item/storage/box/survival + +/datum/outfit/admin/trader/commie + name = "USSP Trader" + uniform = /obj/item/clothing/under/new_soviet + suit = /obj/item/clothing/suit/sovietcoat + head = /obj/item/clothing/head/ushanka + box = /obj/item/storage/box/soviet + +/datum/outfit/admin/trader/unathi + name = "Glint-Scales Trader" + uniform = /obj/item/clothing/under/rank/cargo/qm + suit = /obj/item/clothing/suit/unathi/robe + shoes = /obj/item/clothing/shoes/footwraps + +/datum/outfit/admin/trader/vulp + name = "Steadfast Trading Co. Trader" + uniform = /obj/item/clothing/under/rank/cargo/qm/formal + suit = /obj/item/clothing/suit/jacket/leather/overcoat + belt = /obj/item/melee/classic_baton/telescopic + +/datum/outfit/admin/trader/ipc + name = "Synthetic Union Trader" + uniform = /obj/item/clothing/under/misc/vice + suit = /obj/item/clothing/suit/storage/iaa/blackjacket/armored + belt = /obj/item/melee/classic_baton/telescopic + back = /obj/item/storage/backpack/robotics + +/datum/outfit/admin/trader/vox + name = "Skipjack Trader" + uniform = /obj/item/clothing/under/vox/vox_casual + suit = /obj/item/clothing/suit/hooded/vox_robes + gloves = /obj/item/clothing/gloves/color/yellow/vox + shoes = /obj/item/clothing/shoes/magboots/vox + belt = /obj/item/melee/classic_baton/telescopic + mask = /obj/item/clothing/mask/breath/vox/respirator + suit_store = /obj/item/tank/internals/emergency_oxygen/double/vox + box = /obj/item/storage/box/survival_vox + +/datum/outfit/admin/trader/skrell + name = "Solar-Central Compact Trader" + uniform = /obj/item/clothing/under/misc/durathread + suit = /obj/item/clothing/suit/space/skrell/white + belt = /obj/item/melee/classic_baton/telescopic + +/datum/outfit/admin/trader/grey + name = "Technocracy Trader" + uniform = /obj/item/clothing/under/costume/psyjump + suit = /obj/item/clothing/suit/jacket/robobomber + belt = /obj/item/melee/classic_baton/telescopic + back = /obj/item/storage/backpack/robotics + +/datum/outfit/admin/trader/nian + name = "Merchant Guild Trader" + uniform = /obj/item/clothing/under/suit/really_black + suit = /obj/item/clothing/suit/pimpcoat + shoes = /obj/item/clothing/shoes/fluff/noble_boot + belt = /obj/item/melee/classic_baton/ntcane + /datum/outfit/admin/chrono name = "Chrono Legionnaire" diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 7c47f32eb81..a848d94a8bc 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -119,6 +119,12 @@ This escape shuttle boasts shields and numerous anti-personnel turrets guarding its perimeter to fend off meteors and enemy boarding attempts." admin_notes = "Comes with turrets that will target simple mobs." +/datum/map_template/shuttle/emergency/shadow + suffix = "shadow" + name = "The NTSS Shadow" + description = "Guaranteed to get you somewhere FAST. With a custom-built plasma engine, this bad boy will put more distance between you and certain danger than any other!" + admin_notes = "The aft of the ship has a plasma tank that starts ignited. May get released by crew. The plasma windows next to the engine heaters will also erupt into flame, and also risk getting released by crew." + /datum/map_template/shuttle/ferry/base suffix = "base" name = "transport ferry" diff --git a/code/datums/uplink_items/uplink_traitor.dm b/code/datums/uplink_items/uplink_traitor.dm index f3cbb83b9ab..545ec96e3bc 100644 --- a/code/datums/uplink_items/uplink_traitor.dm +++ b/code/datums/uplink_items/uplink_traitor.dm @@ -587,7 +587,7 @@ else if(!AT) to_chat(usr, "Error: Embedded Syndicate credentials not found.") return - else if(ischangeling(usr) || mind.has_antag_datum(/datum/antagonist/vampire)) + else if(IS_CHANGELING(usr) || mind.has_antag_datum(/datum/antagonist/vampire)) to_chat(usr, "Error: Embedded Syndicate credentials contain an abnormal signature. Aborting.") return diff --git a/code/defines/procs/announcer_datum.dm b/code/defines/procs/announcer_datum.dm index 35caf3367f3..055430b2736 100644 --- a/code/defines/procs/announcer_datum.dm +++ b/code/defines/procs/announcer_datum.dm @@ -101,9 +101,9 @@ GLOBAL_DATUM_INIT(major_announcement, /datum/announcer, new(config_type = /datum /datum/announcer/proc/Message(message, garbled_message, receivers, garbled_receivers) for(var/mob/M in receivers) - to_chat(M, message) + to_chat(M, message, MESSAGE_TYPE_WARNING) for(var/mob/M in garbled_receivers) - to_chat(M, garbled_message) + to_chat(M, garbled_message, MESSAGE_TYPE_WARNING) /datum/announcer/proc/Format(message, title, subtitle = null) var/formatted_message diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 996ba8dd2f6..9e643b7f756 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -288,6 +288,10 @@ else return null +///Return the air if we can analyze it +/atom/proc/return_analyzable_air() + return null + /atom/proc/check_eye(mob/user) return diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 81e111ea154..9d85e02c738 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -532,7 +532,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} if(ishuman(L)) var/mob/living/carbon/human/H = L species = "[H.dna.species.name]" - if(ischangeling(L)) + if(IS_CHANGELING(L)) species = "Changeling lifeform" var/obj/item/organ/internal/heart/gland/temp = locate() in H.internal_organs if(temp) diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index 0f2e2f4efaa..35bd921e8a2 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -276,7 +276,7 @@ if(has_guardian(user)) to_chat(user, "You already have a [mob_name]!") return - if(user.mind && (ischangeling(user) || user.mind.has_antag_datum(/datum/antagonist/vampire))) + if(user.mind && (IS_CHANGELING(user) || user.mind.has_antag_datum(/datum/antagonist/vampire))) to_chat(user, "[ling_failure]") return if(used) diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index 81a9f959218..54971912554 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -113,7 +113,7 @@ var/obj/item/clothing/under/U = H.w_uniform U.turn_sensors_off() - A.pulledby.stop_pulling() + A.pulledby?.stop_pulling() A.extinguish_light() A.forceMove(src) var/food_value = calc_food_gained(A) diff --git a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm index fd11e7048cf..71af7f47793 100644 --- a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm +++ b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm @@ -585,7 +585,7 @@ else return ..() -/mob/living/simple_animal/demon/pulse_demon/visible_message(message, self_message, blind_message) +/mob/living/simple_animal/demon/pulse_demon/visible_message(message, self_message, blind_message, chat_message_type) // overriden because pulse demon is quite often in non-turf locs, and /mob/visible_message acts differently there for(var/mob/M as anything in get_mobs_in_view(7, src)) if(M.see_invisible < invisibility) @@ -593,7 +593,7 @@ var/msg = message if(self_message && M == src) msg = self_message - M.show_message(msg, EMOTE_VISIBLE, blind_message, EMOTE_AUDIBLE) + M.show_message(msg, EMOTE_VISIBLE, blind_message, EMOTE_AUDIBLE, chat_message_type = MESSAGE_TYPE_LOCALCHAT) /mob/living/simple_animal/demon/pulse_demon/has_internal_radio_channel_access(mob/user, list/req_one_accesses) return has_access(list(), req_one_accesses, get_all_accesses()) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 327bc892abf..8d4b34139fa 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -55,6 +55,8 @@ GLOBAL_VAR(bomb_set) var/core_stage = NUKE_CORE_EVERYTHING_FINE ///How many sheets of various metals we need to fix it var/sheets_to_fix = 5 + ///Bombs Internal Radio + var/obj/item/radio/radio /obj/machinery/nuclearbomb/syndicate is_syndicate = TRUE @@ -74,11 +76,16 @@ GLOBAL_VAR(bomb_set) core = new /obj/item/nuke_core/plutonium(src) STOP_PROCESSING(SSobj, core) //Let us not irradiate the vault by default. update_icon(UPDATE_OVERLAYS) + radio = new(src) + radio.listening = FALSE + radio.follow_target = src + radio.config(list("Special Ops" = 0)) /obj/machinery/nuclearbomb/Destroy() SStgui.close_uis(wires) QDEL_NULL(wires) QDEL_NULL(core) + QDEL_NULL(radio) GLOB.poi_list.Remove(src) return ..() @@ -507,6 +514,8 @@ GLOBAL_VAR(bomb_set) if(!is_syndicate && SSsecurity_level.get_current_level_as_number() != SEC_LEVEL_EPSILON) SSsecurity_level.set_level(SEC_LEVEL_DELTA) GLOB.bomb_set = TRUE // There can still be issues with this resetting when there are multiple bombs. Not a big deal though for Nuke + if(SSsecurity_level.get_current_level_as_number() == SEC_LEVEL_EPSILON) + radio.autosay("The Nuclear Bomb has been armed, retreat from the station immediately!", name, "Special Ops") else GLOB.bomb_set = TRUE else diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 222ff61365b..b7f98ddc1ba 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -276,7 +276,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) if(.) return // If the target is a changeling, then it's an invalid target. Since changelings can not be debrained. - if(ischangeling(possible_target.current)) + if(IS_CHANGELING(possible_target.current)) return TARGET_INVALID_CHANGELING /datum/objective/debrain/update_explanation_text() diff --git a/code/game/machinery/clonescanner.dm b/code/game/machinery/clonescanner.dm index 83105a45ba4..4ad65dd355c 100644 --- a/code/game/machinery/clonescanner.dm +++ b/code/game/machinery/clonescanner.dm @@ -109,7 +109,7 @@ return SCANNER_HUSKED if(NO_CLONESCAN in scanned.dna.species.species_traits) return SCANNER_UNCLONEABLE_SPECIES - if(!scanned.ckey || !scanned.client || ischangeling(scanned)) + if(!scanned.ckey || !scanned.client || IS_CHANGELING(scanned)) return SCANNER_NO_SOUL if(scanned.suiciding || !scanned.get_int_organ(/obj/item/organ/internal/brain)) return SCANNER_BRAIN_ISSUE diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index c8817e2f0b4..ba8c47942fe 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -233,7 +233,6 @@ icon_state = "carpet-255" base_icon_state = "carpet" floor_tile = /obj/item/stack/tile/carpet - broken_states = list("damaged") smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_TURF, SMOOTH_GROUP_CARPET) canSmoothWith = list(SMOOTH_GROUP_CARPET) @@ -252,6 +251,9 @@ if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK)) QUEUE_SMOOTH(src) +/turf/simulated/floor/holofloor/carpet/get_broken_states() + return list("damaged") + /turf/simulated/floor/holofloor/grass name = "Lush Grass" icon = 'icons/turf/floors/grass.dmi' diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index d829305b3d6..00defea21fb 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -338,7 +338,6 @@ name = "heavy firelock" icon = 'icons/obj/doors/doorfire.dmi' glass = FALSE - opacity = TRUE explosion_block = 2 assemblytype = /obj/structure/firelock_frame/heavy max_integrity = 550 diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index e95ef133f7b..65a02ec584d 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -531,7 +531,8 @@ GLOBAL_LIST_EMPTY(turret_icons) if(ismecha(A)) var/obj/mecha/ME = A - assess_and_assign(ME.occupant, targets, secondarytargets) + if(isliving(ME.occupant)) + assess_and_assign(ME.occupant, targets, secondarytargets) else if(istype(A, /obj/vehicle)) var/obj/vehicle/T = A diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index f8f4c97d9d9..da18bf23f57 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -50,6 +50,9 @@ starting_voice = /obj/item/mecha_modkit/voice/syndicate destruction_sleep_duration = 2 SECONDS +/obj/mecha/combat/gygax/dark/trader + operation_req_access = list() //Jailbroken mech + /obj/mecha/combat/gygax/dark/loaded/Initialize(mapload) . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index f53faf14515..1f537cabbac 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -120,6 +120,9 @@ starting_voice = /obj/item/mecha_modkit/voice/syndicate emag_proof = FALSE //The crew can steal a syndicate mech. As a treat. +/obj/mecha/combat/marauder/mauler/trader + operation_req_access = list() //Jailbroken mech + /obj/mecha/combat/marauder/mauler/loaded/Initialize(mapload) . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index be6f53bc5fa..5376c152d85 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1046,6 +1046,11 @@ return cabin_air return get_turf_air() +/obj/mecha/return_analyzable_air() + if(use_internal_tank) + return cabin_air + return null + /obj/mecha/proc/return_pressure() var/datum/gas_mixture/t_air = return_air() if(t_air) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index a2f5b11cbdd..a977b08c726 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -36,10 +36,18 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/newplayer_start) //Without this you sp spawner_list += loc return INITIALIZE_HINT_QDEL -/obj/effect/landmark/spawner/soltrader - name = "traderstart_sol" +/obj/effect/landmark/spawner/trader + name = "traderstart" icon_state = "Trader" +/obj/effect/landmark/spawner/tradergearminor + name = "traderstart_specificgear_minor" + icon_state = "questionmark" + +/obj/effect/landmark/spawner/tradergearmajor + name = "traderstart_specificgear_major" + icon_state = "questionmark" + /obj/effect/landmark/spawner/ert name = "Response Team" icon_state = "ERT" diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index a556d64132a..016f9af8e51 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -218,7 +218,6 @@ /obj/item/soap = 50, /obj/item/clothing/under/syndicate/combat = 50, /obj/item/soap/syndie = 50, - /obj/item/lighter/zippo/gonzofist = 50, /obj/item/clothing/under/costume/psyjump = 50, /obj/item/immortality_talisman = 50, /obj/item/clothing/mask/holo_cigar = 100, @@ -338,8 +337,7 @@ // Ranged weapons /obj/item/storage/box/enforcer_rubber = 50, //Lethal ammo can be printed at an autolathe, so no need for the lethal subtype /obj/item/gun/projectile/shotgun/automatic/dual_tube = 100, // cycler shotgun, not normally available to crew - /obj/item/weaponcrafting/gunkit/universal_gun_kit/sol_gov = 50, //Weapon crafting, lets officers experiment however lets not have it be C class - + /obj/item/weaponcrafting/gunkit/universal_gun_kit/sol_gov = 20 ) /obj/effect/spawner/lootdrop/trade_sol/eng @@ -417,7 +415,328 @@ /obj/structure/constructshell = 50 //Fuck it we ball what could go wrong ) +/obj/effect/spawner/lootdrop/trade_sol/federation_minor + name = "11. trans-solar federation small gear" + loot = list( + /obj/item/storage/box/enforcer_rubber = 50, + /obj/item/lighter/zippo/gonzofist = 50, + /obj/item/clothing/glasses/welding/superior = 50, + /obj/item/clothing/suit/armor/bulletproof = 50, + /obj/item/clothing/mask/gas/explorer/marines = 50, + /obj/item/clothing/gloves/combat = 50, + /obj/item/storage/belt/military/assault = 50, + /obj/item/clothing/under/solgov = 50, + /obj/item/mod/module/dispenser = 50, + /obj/item/flag/solgov = 30 + ) +/obj/effect/spawner/lootdrop/trade_sol/federation_major + name = "12. trans-solar federation large gear" + lootcount = 3 + loot = list( + /obj/item/storage/box/deagle = 20, //One mag + /obj/item/gun/projectile/automatic/pistol/m1911 = 30, //Again, one mag. Don't lose it. + /obj/item/melee/baseball_bat/homerun = 50, + /obj/item/rcd/combat = 50, + /obj/item/weaponcrafting/gunkit/universal_gun_kit/sol_gov = 50, + /obj/item/storage/box/buck = 30, //Only seven shots, make them count + /obj/item/mod/module/noslip = 40, + /obj/item/clothing/mask/holo_cigar = 50 + ) + +/obj/effect/spawner/lootdrop/trade_sol/cybersun_minor + name = "11. cybersun industries small gear" + loot = list( + /obj/item/storage/box/syndidonkpockets = 50, + /obj/item/clothing/suit/jacket/syndicatebomber = 50, + /obj/item/storage/box/syndie_kit/space = 50, + /obj/item/clothing/glasses/meson/sunglasses = 50, + /obj/item/storage/pill_bottle/zoom = 50, + /obj/item/clothing/mask/gas/voice_modulator/chameleon = 50, + /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray = 30, + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine = 30, + /obj/item/flag/syndi = 30 + ) + +// Damn near all of this is illegal. Gives officers something to do on a shift quiet enough to spawn traders. +/obj/effect/spawner/lootdrop/trade_sol/cybersun_major + name = "12. cybersun industries large gear" + lootcount = 3 + loot = list( + /obj/item/shield/energy = 20, + /obj/item/gun/projectile/automatic/pistol = 50, + /obj/item/bio_chip/storage = 50, + /obj/item/melee/knuckleduster/syndie = 50, + /obj/item/clothing/glasses/thermal/eyepatch = 50, + /obj/item/toy/syndicateballoon = 60, + /obj/item/organ/internal/cyberimp/arm/razorwire = 30, + /obj/item/organ/internal/cyberimp/arm/shell_launcher = 30, + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/dual = 30, + /obj/item/clothing/mask/holo_cigar = 50, + /obj/mecha/combat/marauder/mauler/trader = 3 //Extremely rare, unloaded so crew need to arm it for it to have any use. Also most definitely needs one helluva permit. + ) + lootdoubles = FALSE //No double mechs. + +/obj/effect/spawner/lootdrop/trade_sol/ussp_minor + name = "11. USSP small gear" + lootcount = 8 //Mostly flavor items + loot = list( + /obj/item/clothing/under/new_soviet = 50, + /obj/item/clothing/suit/sovietcoat = 50, + /obj/item/clothing/head/ushanka = 50, + /obj/item/food/snacks/grown/potato = 50, + /obj/item/reagent_containers/drinks/bottle/vodka/badminka = 50, + /obj/item/clothing/head/sovietsidecap = 50, + /obj/item/flag/ussp = 30, + /obj/item/ammo_box/magazine/apsm10mm = 15, //Spare mags for APS pistol. Sometimes you don't get the APS, in which case, soviet logistics. + /obj/item/ammo_box/a762 = 15 + ) + +// Lots of things to write permits for. Gives officers something to do on a shift quiet enough to spawn traders. +/obj/effect/spawner/lootdrop/trade_sol/ussp_major + name = "12. USSP large gear" + lootcount = 2 //Lots of dangerous stuff here - reduced amount + loot = list( + /obj/item/gun/projectile/revolver/nagant = 50, + /obj/item/gun/projectile/automatic/pistol/APS = 30, + /obj/item/gun/projectile/shotgun/boltaction = 50, + /obj/item/clothing/suit/space/hardsuit/soviet = 40, + /obj/item/clothing/glasses/thermal/eyepatch = 50, + /obj/item/clothing/mask/holo_cigar = 10 + ) + +/obj/effect/spawner/lootdrop/trade_sol/glintscale_minor + name = "11. glint-scale small gear" + loot = list( + /obj/item/clothing/suit/armor/vest/combat = 50, + /obj/item/clothing/under/syndicate/combat = 50, + /obj/item/claymore/ceremonial = 50, + /obj/item/harpoon = 50, + /obj/item/nullrod/claymore/chainsaw_sword = 50, + /obj/item/whetstone = 50, + /obj/item/flag/species/unathi = 20, + /obj/item/clothing/suit/armor/riot/knight/templar = 40, + /obj/item/clothing/head/helmet/riot/knight/templar = 40, + /obj/item/clothing/suit/unathi/robe = 20 + ) + +/obj/effect/spawner/lootdrop/trade_sol/glintscale_major + name = "12. glint-scale large gear" + lootcount = 3 + loot = list( + /obj/item/melee/energy/sword/pirate = 30, + /obj/item/storage/box/breacher = 30, + /obj/item/fireaxe = 50, + /obj/item/fireaxe/boneaxe = 50, + /obj/item/gun/energy/kinetic_accelerator/crossbow/large = 10 //Big ebow. + ) + +/obj/effect/spawner/lootdrop/trade_sol/steadfast_minor + name = "11. steadfast trading co. small gear" + lootcount = 8 //Since it's a lot of seeds, boosted amount + loot = list( + /obj/item/storage/box/botany_labelled_seeds = 50, + /obj/item/seeds/chili/ice = 20, + /obj/item/seeds/chili/ghost = 20, + /obj/item/seeds/cannabis/ultimate = 10, + /obj/item/seeds/cannabis/white = 20, + /obj/item/seeds/wheat/meat = 20, + /obj/item/seeds/glowshroom = 20, + /obj/item/seeds/glowshroom/glowcap = 20, + /obj/item/seeds/tobacco/space = 20, + /obj/item/storage/box/hydroponics_starter = 40, + /obj/item/mod/module/thermal_regulator = 20, + /obj/item/flag/species/vulp = 20 + ) + +/obj/effect/spawner/lootdrop/trade_sol/steadfast_major + name = "12. steadfast trading co. large gear" + lootcount = 3 + loot = list( + /obj/item/mod/construction/plating/research = 30, + /obj/item/assembly/signaler/anomaly/random = 20, + /obj/item/gun/energy/gun = 50, + /obj/item/storage/box/dragonsbreath = 30, + /obj/item/storage/box/turbine_kit = 20, + /obj/item/mod/module/firefighting_tank = 40, + /obj/item/mod/module/jetpack/advanced = 40 + ) + +/obj/effect/spawner/lootdrop/trade_sol/syntheticunion_minor + name = "11. synthetic union small gear" + lootcount = 8 //A lot of these are available on station, so the amount of items spawned here is increased + loot = list( + /obj/item/clothing/glasses/meson/sunglasses = 50, + /obj/item/clothing/glasses/thermal/monocle = 50, + /obj/item/organ/internal/cyberimp/arm/toolset = 50, + /obj/item/organ/internal/cyberimp/arm/surgery = 50, + /obj/item/organ/internal/cyberimp/arm/janitorial = 50, + /obj/item/organ/internal/cyberimp/brain/anti_stam = 50, + /obj/item/organ/internal/cyberimp/brain/anti_sleep = 50, + /obj/item/organ/internal/cyberimp/brain/clown_voice = 40, + /obj/item/organ/internal/cyberimp/mouth/breathing_tube = 50, + /obj/item/organ/internal/cyberimp/chest/ipc_repair = 50, + /obj/item/organ/internal/cyberimp/chest/ipc_joints/magnetic_joints = 50, + /obj/item/organ/internal/cyberimp/chest/ipc_joints/sealed = 50, + /obj/item/autosurgeon/organ = 10, + /obj/item/flag/species/machine = 20 + ) + +/obj/effect/spawner/lootdrop/trade_sol/syntheticunion_major + name = "12. synthetic union large gear" + lootcount = 4 + loot = list( + /obj/item/organ/internal/cyberimp/arm/toolset_abductor = 20, + /obj/item/organ/internal/cyberimp/arm/esword = 10, + /obj/item/organ/internal/cyberimp/arm/flash = 50, + /obj/item/organ/internal/cyberimp/chest/nutriment/plus/hardened = 50, + /obj/item/organ/internal/cyberimp/arm/telebaton = 25, //Security'll love this one + /obj/item/organ/internal/cyberimp/arm/razorwire = 30, + /obj/item/organ/internal/cyberimp/arm/shell_launcher = 30, + /obj/item/organ/internal/cyberimp/brain/anti_drop/hardened = 20, + /obj/item/organ/internal/cyberimp/brain/anti_stam/hardened = 30, + /obj/item/surveillance_upgrade = 35 + ) + +/obj/effect/spawner/lootdrop/trade_sol/skipjack_minor + name = "11. skipjack small gear" + loot = list( + /obj/item/clothing/glasses/meson/gar = 50, + /obj/item/clothing/glasses/thermal/eyepatch = 50, + /obj/item/melee/energy/sword/pirate = 50, + /obj/item/clothing/suit/hooded/vox_robes = 30, + /obj/item/clothing/under/vox/vox_casual = 30, + /obj/item/clothing/gloves/color/yellow/vox = 10, //Species limited - rare item + /obj/item/clothing/shoes/magboots/vox = 10, //Species limited - rare item + /obj/item/organ/internal/cyberimp/mouth/breathing_tube = 50, + /obj/item/mod/module/jetpack/advanced = 50, + /obj/item/gun/energy/plasma_pistol = 50, + /obj/item/mod/control/pre_equipped/standard = 40, + /obj/item/flag/species/vox = 20 + ) + +/obj/effect/spawner/lootdrop/trade_sol/skipjack_major //contains a variety of things - raider loot + name = "12. skipjack large gear" + lootcount = 3 + loot = list( + /obj/item/storage/box/vox_spacesuit = 20, + /obj/item/storage/box/syndie_kit/chameleon = 50, + /obj/item/organ/internal/cyberimp/arm/esword = 10, + /obj/item/gun/energy/spikethrower = 20, + /obj/item/organ/internal/cyberimp/arm/medibeam = 50, + /obj/item/organ/internal/cyberimp/arm/toolset_abductor = 50, + /obj/item/organ/internal/cyberimp/brain/anti_stam/hardened = 10, + /obj/item/organ/internal/cyberimp/arm/gun/laser = 10, + /obj/item/fireaxe = 10, + /obj/item/gun/projectile/revolver/nagant = 10, + /obj/item/bio_chip/storage = 10, + /obj/item/rcd/combat = 10 + ) + +/obj/effect/spawner/lootdrop/trade_sol/solarcentral_minor + name = "11. skrellian central authority small gear" //Medical and protection theme - shields, mods, meds, and love + loot = list( + /obj/item/mod/control/pre_equipped/rescue = 60, + /obj/item/pen/sleepy/love = 50, + /obj/item/reagent_containers/glass/bottle/reagent/omnizine = 50, + /obj/item/reagent_containers/glass/bottle/love = 50, + /obj/item/reagent_containers/glass/bottle/reagent/lazarus_reagent = 50, + /obj/item/reagent_containers/applicator/dual = 50, + /obj/item/reagent_containers/hypospray/autoinjector/nanocalcium = 30, + /obj/item/storage/firstaid/surgery = 40, + /obj/item/dnainjector/nobreath = 50, + /obj/item/dnainjector/regenerate = 50, + /obj/item/dnainjector/insulation = 50, + /obj/item/flag/species/skrell = 20 + ) + +/obj/effect/spawner/lootdrop/trade_sol/solarcentral_major + name = "12. skrellian central authority large gear" + lootcount = 3 + loot = list( + /obj/item/mod/module/energy_shield = 40, + /obj/item/shield/energy = 40, + /obj/item/reagent_containers/applicator/dual/syndi = 50, //Same as the above but comes emagged + /obj/item/gun/medbeam = 30, + /obj/item/gun/syringe/syndicate = 50, + /obj/item/storage/box/skrell_suit/black = 30, + /obj/item/storage/box/skrell_suit/white = 30, + /obj/item/rod_of_asclepius = 20 + ) + +/obj/effect/spawner/lootdrop/trade_sol/technocracy_minor + name = "11. technocracy small gear" + loot = list( + /obj/item/paper/researchnotes = 150, //More research from the smart ones + /obj/item/storage/box/beakers/bluespace = 50, + /obj/item/storage/box/stockparts/deluxe = 50, + /obj/item/clothing/glasses/thermal/monocle = 50, + /obj/item/organ/internal/cyberimp/arm/toolset_abductor = 30, + /obj/item/organ/internal/cyberimp/arm/surgery = 40, + /obj/item/organ/internal/cyberimp/arm/advmop = 30, + /obj/item/organ/internal/cyberimp/brain/anti_stam = 50, + /obj/item/organ/internal/cyberimp/brain/anti_sleep = 50, + /obj/item/organ/internal/cyberimp/brain/anti_drop = 50, + /obj/item/autosurgeon/organ = 10, + /obj/item/flag/species/greys = 20 + ) + +/obj/effect/spawner/lootdrop/trade_sol/technocracy_major + name = "12. technocracy large gear" + lootcount = 3 + loot = list( + /obj/item/storage/box/syndie_kit/prescan = 30, + /obj/item/gun/energy/decloner = 50, + /obj/item/organ/internal/cyberimp/brain/anti_drop/hardened = 20, + /obj/item/organ/internal/cyberimp/brain/anti_stam/hardened = 30, + /obj/item/assembly/signaler/anomaly/random = 50, + /obj/item/surveillance_upgrade = 35, + /obj/item/mod/module/storage/bluespace = 40 + ) + +/obj/effect/spawner/lootdrop/trade_sol/merchantguild_minor + name = "11. merchant guild small gear" + lootcount = 12 //Much larger selection due to it being almost all clothes. + loot = list( + /obj/item/flag/species/nian = 20, + /obj/item/clothing/under/suit/really_black = 50, + /obj/item/clothing/under/syndicate/combat = 50, + /obj/item/clothing/under/syndicate/sniper = 50, + /obj/item/clothing/under/new_soviet/sovietofficer = 50, + /obj/item/clothing/under/solgov/elite = 50, + /obj/item/clothing/under/solgov/command = 50, + /obj/item/clothing/under/retro/security = 50, + /obj/item/clothing/under/misc/gimmick/rank/captain/suit = 50, + /obj/item/clothing/under/misc/durathread = 50, + /obj/item/clothing/under/psysuit = 50, + /obj/item/clothing/under/costume/cuban_suit = 50, + /obj/item/clothing/suit/armor/vest/jacket = 50, + /obj/item/clothing/head/collectable/petehat = 20, + /obj/item/clothing/head/collectable/tophat = 50, + /obj/item/clothing/head/collectable/police = 50, + /obj/item/clothing/head/collectable/kitty = 50, + /obj/item/clothing/under/costume/janimaid = 50, + /obj/item/clothing/under/costume/maid = 50, + /obj/item/storage/box/syndie_kit/chameleon = 60 + ) + +/obj/effect/spawner/lootdrop/trade_sol/merchantguild_major + name = "12. merchant guild large gear" + lootcount = 6 //Low-risk items, flavorful knick knacks - higher stock + loot = list( + /obj/item/clothing/suit/pimpcoat = 50, + /obj/item/dualsaber/toy = 50, + /obj/item/toy/sword = 50, + /obj/item/toy/plushie/carpplushie/dragon = 50, + /obj/item/toy/plushie/carpplushie/void = 50, + /obj/item/toy/plushie/ipcplushie = 30, + /obj/item/toy/plushie/nukeplushie = 30, + /obj/item/toy/plushie/nianplushie = 50, //*buzz + /obj/item/toy/windup_toolbox = 50, + /obj/item/toy/AI = 50, + /obj/item/clothing/mask/gas/voice_modulator/chameleon = 50, + /obj/item/storage/box/syndie_kit/chameleon = 50 + ) /obj/effect/spawner/lootdrop/three_course_meal name = "three course meal spawner" diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 04d3b60581a..02350ef8814 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -520,50 +520,7 @@ SLIME SCANNER if(!isturf(location)) return - var/datum/gas_mixture/environment = location.return_air() - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles() - - to_chat(user, "Results:") - if(abs(pressure - ONE_ATMOSPHERE) < 10) - to_chat(user, "Pressure: [round(pressure,0.1)] kPa") - else - to_chat(user, "Pressure: [round(pressure,0.1)] kPa") - if(total_moles) - var/o2_concentration = environment.oxygen/total_moles - var/n2_concentration = environment.nitrogen/total_moles - var/co2_concentration = environment.carbon_dioxide/total_moles - var/plasma_concentration = environment.toxins/total_moles - var/n2o_concentration = environment.sleeping_agent/total_moles - - var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration+n2o_concentration) - if(abs(n2_concentration - N2STANDARD) < 20) - to_chat(user, "Nitrogen: [round(n2_concentration*100)] %") - else - to_chat(user, "Nitrogen: [round(n2_concentration*100)] %") - - if(abs(o2_concentration - O2STANDARD) < 2) - to_chat(user, "Oxygen: [round(o2_concentration*100)] %") - else - to_chat(user, "Oxygen: [round(o2_concentration*100)] %") - - if(co2_concentration > 0.01) - to_chat(user, "CO2: [round(co2_concentration*100)] %") - else - to_chat(user, "CO2: [round(co2_concentration*100)] %") - - if(plasma_concentration > 0.01) - to_chat(user, "Plasma: [round(plasma_concentration*100)] %") - - if(n2o_concentration > 0.01) - to_chat(user, "Nitrous Oxide: [round(n2o_concentration*100)] %") - - if(unknown_concentration > 0.01) - to_chat(user, "Unknown: [round(unknown_concentration*100)] %") - - to_chat(user, "Temperature: [round(environment.temperature-T0C)] °C") - + atmos_scan(user, location) add_fingerprint(user) /obj/item/analyzer/AltClick(mob/user) //Barometer output for measuring when the next storm happens @@ -629,6 +586,72 @@ SLIME SCANNER amount += inaccurate return DisplayTimeText(max(1, amount)) +/obj/item/analyzer/afterattack(atom/target, mob/user, proximity, params) + . = ..() + if(!can_see(user, target, 1)) + return + if(target.return_analyzable_air()) + atmos_scan(user, target) + else + atmos_scan(user, get_turf(target)) + +/** + * Outputs a message to the user describing the target's gasmixes. + * Used in chat-based gas scans. + */ +/proc/atmos_scan(mob/user, atom/target, silent = FALSE, print = TRUE) + var/mixture = target.return_analyzable_air() + if(!mixture) + return FALSE + + var/list/message = list() + if(!silent && isliving(user)) + user.visible_message("[user] uses the analyzer on [target].", "You use the analyzer on [target].") + message += "Results of analysis of [bicon(target)] [target]." + + if(!print) + return TRUE + + var/list/airs = islist(mixture) ? mixture : list(mixture) + for(var/datum/gas_mixture/air as anything in airs) + var/mix_name = capitalize(lowertext(target.name)) + if(length(air) > 1) //not a unary gas mixture + var/mix_number = airs.Find(air) + message += "Node [mix_number]" + mix_name += " - Node [mix_number]" + + var/total_moles = air.total_moles() + var/pressure = air.return_pressure() + var/volume = air.return_volume() //could just do mixture.volume... but safety, I guess? + var/heat_capacity = air.heat_capacity() + var/thermal_energy = air.thermal_energy() + + if(total_moles) + message += "Total: [round(total_moles, 0.01)] moles" + if(air.oxygen && air.oxygen / total_moles > 0.01) + message += " Oxygen: [round(air.oxygen, 0.01)] moles ([round(air.oxygen / total_moles * 100, 0.01)] %)" + if(air.nitrogen && air.nitrogen / total_moles > 0.01) + message += " Nitrogen: [round(air.nitrogen, 0.01)] moles ([round(air.nitrogen / total_moles * 100, 0.01)] %)" + if(air.carbon_dioxide && air.carbon_dioxide / total_moles > 0.01) + message += " Carbon Dioxide: [round(air.carbon_dioxide, 0.01)] moles ([round(air.carbon_dioxide / total_moles * 100, 0.01)] %)" + if(air.toxins && air.toxins / total_moles > 0.01) + message += " Plasma: [round(air.toxins, 0.01)] moles ([round(air.toxins / total_moles * 100, 0.01)] %)" + if(air.sleeping_agent && air.sleeping_agent / total_moles > 0.01) + message += " Nitrous Oxide: [round(air.sleeping_agent, 0.01)] moles ([round(air.sleeping_agent / total_moles * 100, 0.01)] %)" + if(air.agent_b && air.agent_b / total_moles > 0.01) + message += " Agent B: [round(air.agent_b, 0.01)] moles ([round(air.agent_b / total_moles * 100, 0.01)] %)" + message += "Temperature: [round(air.temperature-T0C)] °C ([round(air.temperature)] K)" + message += "Volume: [round(volume)] Liters" + message += "Pressure: [round(pressure, 0.1)] kPa" + message += "Heat Capacity: [DisplayJoules(heat_capacity)] / K" + message += "Thermal Energy: [DisplayJoules(thermal_energy)]" + else + message += length(airs) > 1 ? "This node is empty!" : "[target] is empty!" + message += "Volume: [round(volume)] Liters" // don't want to change the order volume appears in, suck it + + to_chat(user, chat_box_examine(message.Join("\n"))) + return TRUE + /******************************/ /*** REAGENT SCANNERS ***/ /******************************/ diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 62c6af8cb8d..464886db05e 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -271,7 +271,7 @@ if(HAS_TRAIT(user, TRAIT_RESISTHEAT)) to_chat(user, "You are already fireproof!") return - if(user.mind && (ischangeling(user) || user.mind.has_antag_datum(/datum/antagonist/vampire)) || (user.dna && user.dna.species.name != "Plasmaman")) + if(user.mind && (IS_CHANGELING(user) || user.mind.has_antag_datum(/datum/antagonist/vampire)) || (user.dna && user.dna.species.name != "Plasmaman")) to_chat(user, "The injector is not compatable with your biology!") return if(used) diff --git a/code/game/objects/items/weapons/bio_chips/bio_chip_traitor.dm b/code/game/objects/items/weapons/bio_chips/bio_chip_traitor.dm index b937df4540a..656e82f74c2 100644 --- a/code/game/objects/items/weapons/bio_chips/bio_chip_traitor.dm +++ b/code/game/objects/items/weapons/bio_chips/bio_chip_traitor.dm @@ -20,7 +20,7 @@ return FALSE // Fails if they're already a mindslave of someone, or if they're mindshielded. - if(ismindslave(mindslave_target) || ismindshielded(mindslave_target)) + if(IS_MINDSLAVE(mindslave_target) || ismindshielded(mindslave_target)) mindslave_target.visible_message( "[mindslave_target] seems to resist the bio-chip!", \ "You feel a strange sensation in your head that quickly dissipates.") diff --git a/code/game/objects/items/weapons/caution.dm b/code/game/objects/items/weapons/caution.dm index a32c548d648..8c0a3ba13e3 100644 --- a/code/game/objects/items/weapons/caution.dm +++ b/code/game/objects/items/weapons/caution.dm @@ -24,7 +24,7 @@ /obj/item/caution/proximity_sign/attack_self(mob/user as mob) if(ishuman(user)) var/mob/living/carbon/human/H = user - if(!H.mind.has_antag_datum(/datum/antagonist/traitor) && !ismindslave(H)) + if(!H.mind.has_antag_datum(/datum/antagonist/traitor) && !IS_MINDSLAVE(H)) return if(armed) armed = FALSE diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 67bc3f4994e..c5c72de57f8 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -122,8 +122,6 @@ update_icon() return - else if(istype(I, /obj/item/analyzer) && ptank) - atmosanalyzer_scan(ptank.air_contents, user) else return ..() @@ -156,6 +154,11 @@ to_chat(user, "[igniter] is now [status ? "secured" : "unsecured"]!") update_icon() +/obj/item/flamethrower/return_analyzable_air() + if(ptank) + return ptank.return_analyzable_air() + return null + /obj/item/flamethrower/attack_self(mob/user) toggle_igniter(user) diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index a117746c570..884989b976f 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -757,7 +757,7 @@ if(!target || !ishuman(target) || !missionary || !ishuman(missionary)) return - if(ismindslave(target) || target.mind.zealot_master) //mindslaves and zealots override the staff because the staff is just a temporary mindslave + if(IS_MINDSLAVE(target) || target.mind.zealot_master) //mindslaves and zealots override the staff because the staff is just a temporary mindslave to_chat(missionary, "Your faith is strong, but [target.p_their()] mind is already slaved to someone else's ideals. Perhaps an inquisition would reveal more...") faith -= 25 //same faith cost as losing sight of them mid-conversion, but did you just find someone who can lead you to a fellow traitor? return diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm index c2b33e30083..c1d1b85dfee 100644 --- a/code/game/objects/items/weapons/powerfist.dm +++ b/code/game/objects/items/weapons/powerfist.dm @@ -31,8 +31,8 @@ /obj/item/melee/powerfist/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/tank/internals)) - if(!iscarbon(loc)) - to_chat(user, "You have to hold the powerfist in your hand!") + if(!user.is_holding(src)) + to_chat(user, "You have to hold [src] in your hand!") return if(!tank) var/obj/item/tank/internals/IT = W diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 57598089247..a2578bc2cb5 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -777,6 +777,78 @@ new /obj/item/ammo_box/magazine/enforcer/lethal(src) new /obj/item/ammo_box/magazine/enforcer/lethal(src) +/obj/item/storage/box/hydroponics_starter + name = "hydroponics starter kit" + desc = "Everything you need to start your own botany lab." + +/obj/item/storage/box/hydroponics_starter/populate_contents() + for(var/I in 1 to 2) + new /obj/item/circuitboard/hydroponics(src) + new /obj/item/stock_parts/matter_bin(src) + new /obj/item/stock_parts/matter_bin(src) + new /obj/item/stock_parts/manipulator(src) + new /obj/item/reagent_containers/glass/bucket(src) + +/obj/item/storage/box/turbine_kit + name = "turbine kit" + desc = "Somehow, they managed to fit almost an entire turbine assembly into this box." + +/obj/item/storage/box/turbine_kit/populate_contents() + new /obj/item/circuitboard/turbine_computer(src) + new /obj/item/circuitboard/power_compressor(src) + new /obj/item/circuitboard/power_turbine(src) + for(var/I in 1 to 6) + new /obj/item/stock_parts/capacitor(src) + new /obj/item/stock_parts/manipulator(src) + +/obj/item/storage/box/deagle + name = "desert eagle handcannon kit" + desc = "A box marked with pictures of the iconic Desert Eagle pistol, one ammo clip, and the word 'LETHAL'." + icon_state = "doom_box" + +/obj/item/storage/box/deagle/populate_contents() + new /obj/item/gun/projectile/automatic/pistol/deagle(src) + new /obj/item/ammo_box/magazine/m50(src) + +/obj/item/storage/box/skrell_suit + name = "skrellian suit box" + desc = "A box containing a skrell-designed medical spacesuit." + icon_state = "doom_box" + +/obj/item/storage/box/skrell_suit/white + name = "white skrellian suit box" + desc = "A box containing a skrell-designed medical spacesuit. This one is white." + +/obj/item/storage/box/skrell_suit/white/populate_contents() + new /obj/item/clothing/head/helmet/space/skrell/white(src) + new /obj/item/clothing/suit/space/skrell/white(src) + +/obj/item/storage/box/skrell_suit/black + name = "black skrellian suit box" + desc = "A box containing a skrell-designed medical spacesuit. This one is black." + +/obj/item/storage/box/skrell_suit/black/populate_contents() + new /obj/item/clothing/head/helmet/space/skrell/black(src) + new /obj/item/clothing/suit/space/skrell/black(src) + +/obj/item/storage/box/breacher + name = "unathi breacher suit box" + desc = "A box containing a bulky unathi battlesuit." + icon_state = "doom_box" + +/obj/item/storage/box/breacher/populate_contents() + new /obj/item/clothing/suit/space/unathi/breacher(src) + new /obj/item/clothing/head/helmet/space/unathi/breacher(src) + +/obj/item/storage/box/vox_spacesuit + name = "vox voidsuit box" + desc = "A box containing an old, dusty voidsuit fit for vox." + icon_state = "doom_box" + +/obj/item/storage/box/vox_spacesuit/populate_contents() + new /obj/item/clothing/head/helmet/space/vox/pressure(src) + new /obj/item/clothing/suit/space/vox/pressure(src) + /obj/item/storage/box/telescience name = "babies first telescience kit" desc = "A now restricted kit for those who want to learn about telescience!" diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 9081c6bc5fe..96acdc91e60 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -145,9 +145,6 @@ if(istype(loc, /obj/item/assembly)) icon = loc - if((istype(W, /obj/item/analyzer)) && get_dist(user, src) <= 1) - atmosanalyzer_scan(air_contents, user) - if(istype(W, /obj/item/assembly_holder)) bomb_assemble(W,user) @@ -215,6 +212,9 @@ RETURN_TYPE(/datum/gas_mixture) return air_contents +/obj/item/tank/return_analyzable_air() + return air_contents + /obj/item/tank/assume_air(datum/gas_mixture/giver) air_contents.merge(giver) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index abdf1443cc0..587724cdf1e 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -8,6 +8,8 @@ var/creates_cover = FALSE var/mob/living/climber var/broken = FALSE + /// How long this takes to unbuckle yourself from. + var/unbuckle_time = 0 SECONDS /obj/structure/New() ..() diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 5bee6f32e4a..f367879cae3 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -9,13 +9,22 @@ armor = list(MELEE = 30, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, RAD = 0, FIRE = 70, ACID = 100) max_integrity = 200 integrity_failure = 50 - var/obj/item/showpiece = null - var/alert = FALSE //Basic display cases have no alarms + /// The object stored inside. + var/obj/item/showpiece + /// If true, this is alarmed and will set off a siren when opened without proper access. + var/alert = FALSE + /// If this is currently unlocked var/open = FALSE + /// If false, this can never be opened, and the item inside should be inaccessible. Good for showcases. var/openable = TRUE + /// The electronics currently installed in this showpiece. var/obj/item/airlock_electronics/electronics - var/start_showpiece_type = null //add type for items on display - var/list/start_showpieces = list() //Takes sublists in the form of list("type" = /obj/item/bikehorn, "trophy_message" = "henk") + /// The type that should be instantiated to fill the showpiece. + var/start_showpiece_type + /// A list of random items that could possibly fill the case, as well as a flavor message for them. + /// Takes sublists in the form of list("type" = /obj/item/bikehorn, "trophy_message" = "henk") + var/list/start_showpieces = list() + /// A flavor message to show with this item. var/trophy_message = "" /obj/structure/displaycase/Initialize(mapload) @@ -46,18 +55,29 @@ /obj/structure/displaycase/examine(mob/user) . = ..() - if(alert) - . += "Hooked up with an anti-theft system." - if(emagged) - . += "The ID lock has been shorted out." if(showpiece) - . += "There's [showpiece] inside." + . += "There's \a [showpiece] displayed inside." + else + . += "It's empty." if(trophy_message) . += "The plaque reads:\n [trophy_message]" + if(!openable) + . += "It seems to be sealed shut, there's no way you're getting that open." + else + if(!open) + . += "The ID lock is active, you need to swipe an ID to open it." + else if((broken || open) && showpiece) + . += "[showpiece] is held in a loose low gravity suspension field. You can take [showpiece] out[broken ? "." : ", or lock [src] with an ID"]." -/obj/structure/displaycase/proc/dump() + if(alert) + . += "It is hooked up with an anti-theft system." + if(emagged) + . += "The ID lock has been shorted out." + +/obj/structure/displaycase/proc/dump(mob/user) if(showpiece) - showpiece.forceMove(loc) + if(!user || !user.put_in_hands(showpiece)) + showpiece.forceMove(loc) showpiece = null /obj/structure/displaycase/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) @@ -109,9 +129,15 @@ . += "glassbox_closed" /obj/structure/displaycase/attackby(obj/item/I, mob/user, params) - if(I.GetID() && !broken && openable) + if(I.GetID()) + if(!openable) + to_chat(user, "There is no ID scanner, looks like this one is sealed shut.") + return + if(broken) + to_chat(user, "[src] is broken, the ID lock won't do anything.") + return if(allowed(user) || emagged) - to_chat(user, "You [open ? "close":"open"] [src].") + to_chat(user, "You use [I] to [open ? "close" : "open"] [src].") toggle_lock() else to_chat(user, "Access denied.") @@ -181,17 +207,19 @@ user.changeNext_move(CLICK_CD_MELEE) if(showpiece && (broken || open)) to_chat(user, "You deactivate the hover field built into the case.") - dump() + dump(user) add_fingerprint(user) update_icon(UPDATE_OVERLAYS) return - else - //prevents remote "kicks" with TK - if(!Adjacent(user)) - return - user.visible_message("[user] kicks the display case.") - user.do_attack_animation(src, ATTACK_EFFECT_KICK) - take_damage(2) + if(!open && openable) + to_chat(user, "The ID lock is active, you'll need to unlock it first.") + return + //prevents remote "kicks" with TK + if(!Adjacent(user)) + return + user.visible_message("[user] kicks the display case.") + user.do_attack_animation(src, ATTACK_EFFECT_KICK) + take_damage(2) /obj/structure/displaycase_chassis anchored = TRUE @@ -205,9 +233,9 @@ /obj/structure/displaycase_chassis/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/airlock_electronics)) to_chat(user, "You start installing the electronics into [src]...") - playsound(loc, I.usesound, 50, 1) + playsound(loc, I.usesound, 50, TRUE) if(do_after(user, 30, target = src)) - var/obj/item/airlock_electronics/new_electronics = I + var/obj/item/airlock_electronics/new_electronics = I if(user.drop_item() && !new_electronics.is_installed) new_electronics.forceMove(src) electronics = new_electronics diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index e472f9b19e7..cf373931ea2 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -129,7 +129,7 @@ handle_rotation(newdir) /obj/structure/chair/AltClick(mob/user) - if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user)) + if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user) || is_ventcrawling(user)) return rotate() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 6671d35a935..1016fb4af1e 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -326,7 +326,7 @@ return T.straight_table_check(direction) /obj/structure/table/AltShiftClick(mob/living/carbon/human/user) - if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user) || !can_be_flipped) + if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user) || !can_be_flipped || is_ventcrawling(user)) return if(!flipped) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 812a640ac7b..496a9753e5e 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -23,9 +23,6 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama var/burnt = FALSE var/current_overlay = null var/floor_tile = null //tile that this floor drops - var/list/broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") - var/list/burnt_states = list("floorscorched1", "floorscorched2") - var/list/prying_tool_list = list(TOOL_CROWBAR) //What tool/s can we use to pry up the tile? var/keep_dir = TRUE //When false, resets dir to default on changeturf() var/footstep = FOOTSTEP_FLOOR @@ -114,14 +111,14 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama /turf/simulated/floor/break_tile() if(broken) return - current_overlay = pick(broken_states) + current_overlay = pick(get_broken_states()) broken = TRUE update_icon() /turf/simulated/floor/burn_tile() if(burnt) return - current_overlay = pick(burnt_states) + current_overlay = pick(get_burnt_states()) burnt = TRUE update_icon() @@ -209,7 +206,7 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama if(T.turf_type == type) return var/obj/item/thing = user.get_inactive_hand() - if(!thing || !prying_tool_list.Find(thing.tool_behaviour)) + if(!thing || !(thing.tool_behaviour in get_prying_tools())) return var/turf/simulated/floor/plating/P = pry_tile(thing, user, TRUE) if(!istype(P)) @@ -264,3 +261,12 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama /turf/simulated/floor/can_have_cabling() return !burnt && !broken + +/turf/simulated/floor/proc/get_broken_states() + return list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") + +/turf/simulated/floor/proc/get_burnt_states() + return list("floorscorched1", "floorscorched2") + +/turf/simulated/floor/proc/get_prying_tools() + return list(TOOL_CROWBAR) diff --git a/code/game/turfs/simulated/floor/asteroid_floors.dm b/code/game/turfs/simulated/floor/asteroid_floors.dm index 2294fd1f82c..440f2643f92 100644 --- a/code/game/turfs/simulated/floor/asteroid_floors.dm +++ b/code/game/turfs/simulated/floor/asteroid_floors.dm @@ -446,7 +446,6 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me slowdown = 2 environment_type = "snow" planetary_atmos = TRUE - burnt_states = list("snow_dug") digResult = /obj/item/stack/sheet/mineral/snow /turf/simulated/floor/plating/asteroid/snow/burn_tile() @@ -458,6 +457,9 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me return TRUE return FALSE +/turf/simulated/floor/plating/asteroid/snow/get_burnt_states() + return list("snow_dug") + /turf/simulated/floor/plating/asteroid/snow/airless temperature = TCMB oxygen = 0 diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index 5a025355fa5..d50da939c83 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -1,8 +1,6 @@ /turf/simulated/floor/wood icon_state = "wood" floor_tile = /obj/item/stack/tile/wood - prying_tool_list = list(TOOL_SCREWDRIVER) - broken_states = list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7") footstep = FOOTSTEP_WOOD barefootstep = FOOTSTEP_WOOD_BAREFOOT clawfootstep = FOOTSTEP_WOOD_CLAW @@ -19,6 +17,12 @@ if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return remove_tile(user, FALSE, FALSE) + +/turf/simulated/floor/wood/get_broken_states() + return list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7") + +/turf/simulated/floor/wood/get_prying_tools() + return list(TOOL_SCREWDRIVER) /turf/simulated/floor/wood/remove_tile(mob/user, silent = FALSE, make_tile = TRUE) if(broken || burnt) @@ -63,7 +67,6 @@ smoothing_groups = list(SMOOTH_GROUP_TURF, SMOOTH_GROUP_GRASS) canSmoothWith = list(SMOOTH_GROUP_GRASS, SMOOTH_GROUP_JUNGLE_GRASS) layer = ABOVE_OPEN_TURF_LAYER - broken_states = list("damaged") floor_tile = /obj/item/stack/tile/grass footstep = FOOTSTEP_GRASS barefootstep = FOOTSTEP_GRASS @@ -71,6 +74,9 @@ heavyfootstep = FOOTSTEP_GENERIC_HEAVY transform = matrix(1, 0, -9, 0, 1, -9) //Yes, these sprites are 50x50px, big grass control the industry +/turf/simulated/floor/grass/get_broken_states() + return list("damaged") + /turf/simulated/floor/grass/attackby(obj/item/C, mob/user, params) if(..()) return @@ -109,7 +115,6 @@ icon_state = "carpet-255" base_icon_state = "carpet" floor_tile = /obj/item/stack/tile/carpet - broken_states = list("damaged") smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_TURF, SMOOTH_GROUP_CARPET) canSmoothWith = list(SMOOTH_GROUP_CARPET) @@ -146,6 +151,9 @@ /turf/simulated/floor/carpet/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) return FALSE +/turf/simulated/floor/carpet/get_broken_states() + return list("damaged") + /turf/simulated/floor/carpet/black icon = 'icons/turf/floors/carpet_black.dmi' floor_tile = /obj/item/stack/tile/carpet/black @@ -213,8 +221,6 @@ icon_state = "mat-0" base_icon_state = "mat" floor_tile = /obj/item/stack/tile/bamboo - prying_tool_list = list(TOOL_SCREWDRIVER) - broken_states = list("bamboo-damaged") smoothing_flags = SMOOTH_BITMASK smoothing_groups = list(SMOOTH_GROUP_TURF, SMOOTH_GROUP_BAMBOO) canSmoothWith = list(SMOOTH_GROUP_BAMBOO) @@ -247,6 +253,12 @@ /turf/simulated/floor/bamboo/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) return FALSE +/turf/simulated/floor/bamboo/get_broken_states() + return list("bamboo-damaged") + +/turf/simulated/floor/bamboo/get_prying_tools() + return list(TOOL_SCREWDRIVER) + /turf/simulated/floor/bamboo/airless oxygen = 0 nitrogen = 0 @@ -256,10 +268,12 @@ /turf/simulated/floor/bamboo/tatami desc = "A traditional Japanese floor mat." icon_state = "bamboo-green" - broken_states = list("tatami-damaged") floor_tile = /obj/item/stack/tile/bamboo/tatami smoothing_flags = NONE +/turf/simulated/floor/bamboo/tatami/get_broken_states() + return list("tatami-damaged") + /turf/simulated/floor/bamboo/tatami/purple icon_state = "bamboo-purple" floor_tile = /obj/item/stack/tile/bamboo/tatami/purple @@ -273,7 +287,6 @@ icon = 'icons/turf/space.dmi' icon_state = "0" floor_tile = /obj/item/stack/tile/fakespace - broken_states = list("damaged") smoothing_flags = NONE plane = PLANE_SPACE @@ -281,6 +294,9 @@ . = ..() icon_state = SPACE_ICON_STATE +/turf/simulated/floor/fakespace/get_broken_states() + return list("damaged") + /turf/simulated/floor/fakespace/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) underlay_appearance.icon = 'icons/turf/space.dmi' underlay_appearance.icon_state = SPACE_ICON_STATE diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index 5726cc958b9..8268cb51af4 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -3,7 +3,6 @@ light_range = 0 icon_state = "light_off" floor_tile = /obj/item/stack/tile/light - broken_states = list("light_off") /// Are we on var/on = FALSE /// Are we broken @@ -114,6 +113,9 @@ ..() color = color_save +/turf/simulated/floor/light/get_broken_states() + return list("light_off") + // These tiles change color every now and then /turf/simulated/floor/light/disco floor_tile = /obj/item/stack/tile/disco_light diff --git a/code/game/turfs/simulated/floor/mineral_floors.dm b/code/game/turfs/simulated/floor/mineral_floors.dm index 8e0edb6f103..f1fb94e507f 100644 --- a/code/game/turfs/simulated/floor/mineral_floors.dm +++ b/code/game/turfs/simulated/floor/mineral_floors.dm @@ -14,9 +14,8 @@ icon_state = "" var/list/icons = list() -/turf/simulated/floor/mineral/Initialize(mapload) - . = ..() - broken_states = list("[initial(icon_state)]_dam") +/turf/simulated/floor/mineral/get_broken_states() + return list("[initial(icon_state)]_dam") /turf/simulated/floor/mineral/update_icon_state() if(!broken && !burnt) @@ -95,7 +94,9 @@ name = "shuttle floor" icon_state = "titanium" floor_tile = /obj/item/stack/tile/mineral/titanium - broken_states = list("titanium_dam1","titanium_dam2","titanium_dam3","titanium_dam4","titanium_dam5") + +/turf/simulated/floor/mineral/titanium/get_broken_states() + return list("titanium_dam1", "titanium_dam2", "titanium_dam3", "titanium_dam4", "titanium_dam5") /turf/simulated/floor/mineral/titanium/airless oxygen = 0 @@ -132,7 +133,9 @@ name = "shuttle floor" icon_state = "plastitanium" floor_tile = /obj/item/stack/tile/mineral/plastitanium - broken_states = list("plastitanium_dam1","plastitanium_dam2","plastitanium_dam3","plastitanium_dam4","plastitanium_dam5") + +/turf/simulated/floor/mineral/plastitanium/get_broken_states() + return list("plastitanium_dam1", "plastitanium_dam2", "plastitanium_dam3", "plastitanium_dam4", "plastitanium_dam5") /turf/simulated/floor/mineral/plastitanium/red icon_state = "plastitanium_red" diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index a1591d1f312..5bd564b6b78 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -134,10 +134,14 @@ name = "high-traction floor" icon_state = "noslip" floor_tile = /obj/item/stack/tile/noslip - broken_states = list("noslip-damaged1","noslip-damaged2","noslip-damaged3") - burnt_states = list("noslip-scorched1","noslip-scorched2") slowdown = -0.3 +/turf/simulated/floor/noslip/get_broken_states() + return list("noslip-damaged1", "noslip-damaged2", "noslip-damaged3") + +/turf/simulated/floor/plating/asteroid/snow/get_burnt_states() + return list("noslip-scorched1", "noslip-scorched2") + /turf/simulated/floor/noslip/MakeSlippery() return diff --git a/code/game/turfs/simulated/floor/plasteel_floor.dm b/code/game/turfs/simulated/floor/plasteel_floor.dm index 2e8f6935c2c..6911afdce1f 100644 --- a/code/game/turfs/simulated/floor/plasteel_floor.dm +++ b/code/game/turfs/simulated/floor/plasteel_floor.dm @@ -1,13 +1,14 @@ /turf/simulated/floor/plasteel icon_state = "floor" floor_tile = /obj/item/stack/tile/plasteel - broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") - burnt_states = list("floorscorched1", "floorscorched2") /turf/simulated/floor/plasteel/update_icon_state() if(!broken && !burnt) icon_state = icon_regular_floor +/turf/simulated/floor/plasteel/get_broken_states() + return list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") + /turf/simulated/floor/plasteel/airless name = "airless floor" oxygen = 0 diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 2672ed9e734..6fd8d12ffed 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -4,8 +4,6 @@ icon = 'icons/turf/floors/plating.dmi' intact = FALSE floor_tile = null - broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") - burnt_states = list("floorscorched1", "floorscorched2") var/unfastened = FALSE footstep = FOOTSTEP_PLATING barefootstep = FOOTSTEP_HARD_BAREFOOT @@ -19,6 +17,9 @@ icon_plating = icon_state update_icon() +/turf/simulated/floor/plating/get_broken_states() + return list("floorscorched1", "floorscorched2") + /turf/simulated/floor/plating/damaged/Initialize(mapload) . = ..() break_tile() diff --git a/code/game/turfs/simulated/floor/transparent.dm b/code/game/turfs/simulated/floor/transparent.dm index 2803985e333..ba8a4c85d6c 100644 --- a/code/game/turfs/simulated/floor/transparent.dm +++ b/code/game/turfs/simulated/floor/transparent.dm @@ -123,7 +123,7 @@ /turf/simulated/floor/transparent/glass/try_replace_tile(obj/item/stack/tile/T, mob/user, params) var/obj/item/thing = user.get_inactive_hand() - if(!thing || !prying_tool_list.Find(thing.tool_behaviour)) + if(!thing || !(thing.tool_behaviour in get_prying_tools())) return to_chat(user, "You need to hold two sheets of metal to dismantle \the [src]!") diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index fe2374e5940..f3fc59dfa41 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -192,7 +192,7 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") prefix = "(R)" if(send) - to_chat(target, "LOOC[prefix]: [display_name][admin_stuff]: [msg]") + to_chat(target, "LOOC[prefix]: [display_name][admin_stuff]: [msg]", MESSAGE_TYPE_OOC) // Ported from /tg/, full credit to SpaceManiac and Timberpoes. diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index 31a0992848a..4a88e697163 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -19,7 +19,7 @@ var/confirm = null if(!forced) - if(ischangeling(src)) + if(IS_CHANGELING(src)) // the alternative is to allow clings to commit suicide, but then you'd probably have them // killing themselves as soon as they're in cuffs to_chat(src, "We refuse to take the coward's way out.") diff --git a/code/modules/admin/misc_admin_procs.dm b/code/modules/admin/misc_admin_procs.dm index 03aa0b49fb0..11ff0c37bb6 100644 --- a/code/modules/admin/misc_admin_procs.dm +++ b/code/modules/admin/misc_admin_procs.dm @@ -27,7 +27,7 @@ GLOBAL_VAR_INIT(nologevent, 0) for(var/client/C in GLOB.admins) if(R_ADMIN & C.holder.rights) if(important || (C.prefs && !(C.prefs.toggles & PREFTOGGLE_CHAT_NO_TICKETLOGS))) - to_chat(C, msg, MESSAGE_TYPE_ADMINPM, confidential = TRUE) + to_chat(C, msg, MESSAGE_TYPE_ADMINCHAT, confidential = TRUE) if(important) if(C.prefs?.sound & SOUND_ADMINHELP) SEND_SOUND(C, sound('sound/effects/adminhelp.ogg')) @@ -660,7 +660,7 @@ GLOBAL_VAR_INIT(nologevent, 0) antag_list += "Nuclear Operative" if(iswizard(M)) antag_list += "Wizard" - if(ischangeling(M)) + if(IS_CHANGELING(M)) antag_list += "Changeling" if(M.mind in SSticker.mode.abductors) antag_list += "Abductor" @@ -670,7 +670,7 @@ GLOBAL_VAR_INIT(nologevent, 0) antag_list += "Vampire Thrall" if(M.mind.has_antag_datum(/datum/antagonist/traitor)) antag_list += "Traitor" - if(M.mind.has_antag_datum(/datum/antagonist/mindslave, FALSE)) + if(IS_MINDSLAVE(M)) antag_list += "Mindslave" if(isrobot(M)) var/mob/living/silicon/robot/R = M diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 852168cb285..45776251a40 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -223,10 +223,10 @@ if(X.key != key && X.key != C.key) if(message_type == MESSAGE_TYPE_MENTORPM) if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob)) - to_chat(X, third_party_message) + to_chat(X, third_party_message, MESSAGE_TYPE_ADMINPM) else if(check_rights(R_ADMIN|R_MOD, 0, X.mob)) - to_chat(X, third_party_message) + to_chat(X, third_party_message, MESSAGE_TYPE_ADMINPM) //Check if the mob being PM'd has any open tickets. var/list/tickets = tickets_system.checkForTicket(C, ticket_id) diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index f791d97fa99..1c1cb0965b6 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -34,7 +34,7 @@ for(var/client/X in GLOB.admins) if(check_rights(R_EVENT,0,X.mob)) - to_chat(X, msg) + to_chat(X, msg, MESSAGE_TYPE_ADMINPM) if(X.prefs.sound & SOUND_PRAYERNOTIFY) SEND_SOUND(X, sound('sound/items/PDA/ambicha4-short.ogg')) to_chat(usr, "Your prayers have been received by the gods.") diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 67261202e52..f3e98d67d27 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -40,7 +40,7 @@ /datum/action/changeling/weapon/proc/retract(atom/target, any_hand = FALSE) SIGNAL_HANDLER - if(!ischangeling(owner)) + if(!IS_CHANGELING(owner)) return if(!any_hand && !istype(owner.get_active_hand(), weapon_type)) return diff --git a/code/modules/antagonists/changeling/powers/shriek.dm b/code/modules/antagonists/changeling/powers/shriek.dm index c7e629bd661..7fd6c4ec3a0 100644 --- a/code/modules/antagonists/changeling/powers/shriek.dm +++ b/code/modules/antagonists/changeling/powers/shriek.dm @@ -19,7 +19,7 @@ var/mob/living/carbon/human/H = M if(H.check_ear_prot() >= HEARING_PROTECTION_TOTAL) continue - if(!M.mind || !ischangeling(M)) + if(!M.mind || !IS_CHANGELING(M)) M.Deaf(30 SECONDS) M.AdjustConfused(40 SECONDS) M.Jitter(100 SECONDS) diff --git a/code/modules/antagonists/changeling/powers/swap_form.dm b/code/modules/antagonists/changeling/powers/swap_form.dm index 71a838c1fdc..168e6b850a0 100644 --- a/code/modules/antagonists/changeling/powers/swap_form.dm +++ b/code/modules/antagonists/changeling/powers/swap_form.dm @@ -23,7 +23,7 @@ if(!istype(target) || !target.mind || issmall(target) || HAS_TRAIT(target, TRAIT_GENELESS)) to_chat(user, "[target] is not compatible with this ability.") return FALSE - if(ischangeling(target)) + if(IS_CHANGELING(target)) to_chat(user, "We are unable to swap forms with another changeling!") return FALSE return TRUE diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index 39b34d94949..044805cfe39 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -57,7 +57,7 @@ if(ismachineperson(target)) to_chat(user, "This won't work on synthetics.") return FALSE - if(ischangeling(target)) + if(IS_CHANGELING(target)) sting_feedback(user, target) take_chemical_cost() return FALSE @@ -67,7 +67,7 @@ if(!target) return to_chat(user, "We stealthily sting [target.name].") - if(ischangeling(target)) + if(IS_CHANGELING(target)) to_chat(target, "You feel a tiny prick.") add_attack_logs(user, target, "Unsuccessful sting (changeling)") return TRUE diff --git a/code/modules/antagonists/cult/team_cult.dm b/code/modules/antagonists/cult/team_cult.dm index f6c31962fee..7e82d789e23 100644 --- a/code/modules/antagonists/cult/team_cult.dm +++ b/code/modules/antagonists/cult/team_cult.dm @@ -28,6 +28,9 @@ RESTRICT_TYPE(/datum/team/cult) // Disables the station-wide announcements, unused except for admin editing. var/no_announcements = FALSE + /// Boolean that prevents all_members_timer from being called multiple times + var/is_in_transition = FALSE + /datum/team/cult/create_team(list/starting_members) cult_threshold_check() // Set this ALWAYS before any check_cult_size check, or . = ..() @@ -145,6 +148,9 @@ RESTRICT_TYPE(/datum/team/cult) INVOKE_ASYNC(src, PROC_REF(remove_member), deleting_cultist.mind) /datum/team/cult/proc/check_cult_size() + if(is_in_transition) + return + if(!ascend_percent) stack_trace("[src]'s check_cult_size was called before cult_threshold_check, which leads to weird logic! This should be fixed ASAP.") cult_threshold_check() @@ -165,36 +171,36 @@ RESTRICT_TYPE(/datum/team/cult) cult_ascend() /datum/team/cult/proc/cult_rise() - cult_risen = TRUE + is_in_transition = TRUE for(var/datum/mind/M in members) if(!ishuman(M.current)) continue SEND_SOUND(M.current, sound('sound/hallucinations/i_see_you2.ogg')) to_chat(M.current, "The veil weakens as your cult grows, your eyes begin to glow...") - addtimer(CALLBACK(src, PROC_REF(all_members_timer), TYPE_PROC_REF(/datum/antagonist/cultist, rise)), 20 SECONDS) + addtimer(CALLBACK(src, PROC_REF(all_members_timer), TYPE_PROC_REF(/datum/antagonist/cultist, rise), VARSET_CALLBACK(src, cult_risen, TRUE)), 20 SECONDS) /datum/team/cult/proc/cult_ascend() - cult_ascendant = TRUE + is_in_transition = TRUE for(var/datum/mind/M in members) if(!ishuman(M.current)) continue SEND_SOUND(M.current, sound('sound/hallucinations/im_here1.ogg')) to_chat(M.current, "Your cult is ascendant and the red harvest approaches - you cannot hide your true nature for much longer!") - addtimer(CALLBACK(src, PROC_REF(all_members_timer), TYPE_PROC_REF(/datum/antagonist/cultist, ascend)), 20 SECONDS) + addtimer(CALLBACK(src, PROC_REF(all_members_timer), TYPE_PROC_REF(/datum/antagonist/cultist, ascend), VARSET_CALLBACK(src, cult_ascendant, TRUE)), 20 SECONDS) if(!no_announcements) GLOB.major_announcement.Announce("Picking up extradimensional activity related to the Cult of [GET_CULT_DATA(entity_name, "Nar'Sie")] from your station. Data suggests that about [ascend_percent * 100]% of the station has been converted. Security staff are authorized to use lethal force freely against cultists. Non-security staff should be prepared to defend themselves and their work areas from hostile cultists. Self defense permits non-security staff to use lethal force as a last resort, but non-security staff should be defending their work areas, not hunting down cultists. Dead crewmembers must be revived and deconverted once the situation is under control.", "Central Command Higher Dimensional Affairs", 'sound/AI/commandreport.ogg') /datum/team/cult/proc/cult_fall() - cult_ascendant = FALSE + is_in_transition = TRUE for(var/datum/mind/M in members) if(!ishuman(M.current)) continue SEND_SOUND(M.current, sound('sound/hallucinations/wail.ogg')) to_chat(M.current, "The veil repairs itself, your power grows weaker...") - addtimer(CALLBACK(src, PROC_REF(all_members_timer), TYPE_PROC_REF(/datum/antagonist/cultist, descend)), 20 SECONDS) + addtimer(CALLBACK(src, PROC_REF(all_members_timer), TYPE_PROC_REF(/datum/antagonist/cultist, descend), VARSET_CALLBACK(src, cult_ascendant, FALSE)), 20 SECONDS) if(!no_announcements) GLOB.major_announcement.Announce("Paranormal activity has returned to minimal levels. \ Security staff should minimize lethal force against cultists, using non-lethals where possible. \ @@ -209,13 +215,18 @@ RESTRICT_TYPE(/datum/team/cult) * Created so that we don't make 1000 timers, and I'm too lazy to make a proc for all of these. * Used in callbacks for some *magic bullshit*. */ -/datum/team/cult/proc/all_members_timer(proc_ref_to_call) +/datum/team/cult/proc/all_members_timer(cultist_proc_ref, datum/callback/varset_callback) + if(istype(varset_callback)) + varset_callback.Invoke() + for(var/datum/mind/M in members) if(!ishuman(M.current)) continue var/datum/antagonist/cultist/cultist = M.has_antag_datum(/datum/antagonist/cultist) if(cultist) - call(cultist, proc_ref_to_call)() // yes this is a type proc ref passed by a callback, i know its deranged + call(cultist, cultist_proc_ref)() // yes this is a type proc ref passed by a callback, i know its deranged + + is_in_transition = FALSE /datum/team/cult/proc/is_convertable_to_cult(datum/mind/mind) if(!mind) diff --git a/code/modules/antagonists/vampire/vamp_datum.dm b/code/modules/antagonists/vampire/vamp_datum.dm index 251c758c6dc..d0846411bff 100644 --- a/code/modules/antagonists/vampire/vamp_datum.dm +++ b/code/modules/antagonists/vampire/vamp_datum.dm @@ -125,7 +125,7 @@ RESTRICT_TYPE(/datum/antagonist/vampire) if(H.blood_volume) if(H.blood_volume <= BLOOD_VOLUME_BAD && blood_volume_warning > BLOOD_VOLUME_BAD) to_chat(owner.current, "Your victim's blood volume is dangerously low.") - else if(H.blood_volume <= BLOOD_VOLUME_OKAY && blood_volume_warning > BLOOD_VOLUME_OKAY) + else if(H.blood_volume <= BLOOD_VOLUME_STABLE && blood_volume_warning > BLOOD_VOLUME_STABLE) to_chat(owner.current, "Your victim's blood is at an unsafe level.") blood_volume_warning = H.blood_volume //Set to blood volume, so that you only get the message once else diff --git a/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm b/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm index e078349bf7e..39b7869ec86 100644 --- a/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm @@ -55,7 +55,7 @@ if(V.subclass.thrall_cap <= length(user.mind.som.serv)) to_chat(user, "You don't have enough power to enthrall any more people!") return - if(ismindshielded(C) || C.mind.has_antag_datum(/datum/antagonist/vampire) || C.mind.has_antag_datum(/datum/antagonist/mindslave)) + if(ismindshielded(C) || C.mind.has_antag_datum(/datum/antagonist/vampire) || IS_MINDSLAVE(C)) C.visible_message("[C] seems to resist the takeover!", "You feel a familiar sensation in your skull that quickly dissipates.") return if(HAS_MIND_TRAIT(C, TRAIT_HOLY)) diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index a5cd8cd86a6..c3706032100 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -18,6 +18,9 @@ return GM +/turf/return_analyzable_air() + return return_air() + /turf/remove_air(amount) var/datum/gas_mixture/GM = new diff --git a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm index df5daac3548..4468f0a662f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm @@ -21,7 +21,6 @@ /obj/machinery/atmospherics/unary/passive_vent/process_atmos() ..() - if(!node) return 0 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm index 8d09bddb6fe..79522616de3 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm @@ -7,7 +7,7 @@ max_integrity = 800 density = TRUE /// in liters, 1 meters by 1 meters by 2 meters - var/volume = 10000 + var/volume = 10000 /obj/machinery/atmospherics/unary/tank/update_underlays() if(..()) @@ -17,12 +17,8 @@ return add_underlay(T, node, dir) -/obj/machinery/atmospherics/unary/tank/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/analyzer)) - atmosanalyzer_scan(air_contents, user) - return - - return ..() +/obj/machinery/atmospherics/unary/tank/return_analyzable_air() + return air_contents /obj/machinery/atmospherics/unary/tank/air name = "Pressure Tank (Air)" diff --git a/code/modules/atmospherics/machinery/pipes/pipe.dm b/code/modules/atmospherics/machinery/pipes/pipe.dm index 2d3eb724fe0..04fb677ccc5 100644 --- a/code/modules/atmospherics/machinery/pipes/pipe.dm +++ b/code/modules/atmospherics/machinery/pipes/pipe.dm @@ -46,12 +46,6 @@ . = ..() . += "This pipe can be disconnected from a pipenet using a wrench. If the pipe's pressure is too high, you'll end up flying." -/obj/machinery/atmospherics/pipe/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/analyzer)) - atmosanalyzer_scan(parent.air, user) - return - return ..() - /obj/machinery/atmospherics/proc/pipeline_expansion() return null @@ -67,6 +61,11 @@ return 0 return parent.air +/obj/machinery/atmospherics/pipe/return_analyzable_air() + if(!parent) + return null + return parent.air + /obj/machinery/atmospherics/pipe/build_network(remove_deferral = FALSE) if(!parent) parent = new /datum/pipeline() diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index bc686483102..6d690ef6b85 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -302,6 +302,8 @@ GLOBAL_DATUM_INIT(canister_icon_container, /datum/canister_icons, new()) return attack_hand(user) /obj/machinery/atmospherics/portable/canister/attack_ghost(mob/user) + if(..()) + return return ui_interact(user) /obj/machinery/atmospherics/portable/canister/attack_hand(mob/user) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 50d1d55d51c..673b139e2d2 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -103,6 +103,9 @@ if(holding_tank) . += "\The [src] contains [holding_tank]. Alt-click [src] to remove it." +/obj/machinery/atmospherics/portable/return_analyzable_air() + return air_contents + /obj/machinery/atmospherics/portable/proc/replace_tank(mob/living/user, close_valve, obj/item/tank/new_tank) if(holding_tank) holding_tank.forceMove(drop_location()) @@ -129,9 +132,6 @@ holding_tank = T update_icon() return - if((istype(W, /obj/item/analyzer)) && get_dist(user, src) <= 1) - atmosanalyzer_scan(air_contents, user) - return return ..() /obj/machinery/atmospherics/portable/wrench_act(mob/user, obj/item/I) diff --git a/code/modules/atmospherics/machinery/portable/portable_pump.dm b/code/modules/atmospherics/machinery/portable/portable_pump.dm index 31b1c273215..71093b327fd 100644 --- a/code/modules/atmospherics/machinery/portable/portable_pump.dm +++ b/code/modules/atmospherics/machinery/portable/portable_pump.dm @@ -114,6 +114,8 @@ return attack_hand(user) /obj/machinery/atmospherics/portable/pump/attack_ghost(mob/user) + if(..()) + return return attack_hand(user) /obj/machinery/atmospherics/portable/pump/attack_hand(mob/user) diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index e52ab86a068..34c7cd59b46 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -108,6 +108,8 @@ return attack_hand(user) /obj/machinery/atmospherics/portable/scrubber/attack_ghost(mob/user) + if(..()) + return return attack_hand(user) /obj/machinery/atmospherics/portable/scrubber/attack_hand(mob/user) @@ -189,12 +191,6 @@ /obj/machinery/atmospherics/portable/scrubber/huge/update_icon_state() icon_state = "scrubber:[on]" -/obj/machinery/atmospherics/portable/scrubber/huge/attackby(obj/item/W, mob/user, params) - if((istype(W, /obj/item/analyzer)) && get_dist(user, src) <= 1) - atmosanalyzer_scan(air_contents, user) - return - return ..() - /obj/machinery/atmospherics/portable/scrubber/huge/wrench_act(mob/user, obj/item/I) . = TRUE if(stationary) diff --git a/code/modules/awaymissions/mission_code/shuttle_shadow.dm b/code/modules/awaymissions/mission_code/shuttle_shadow.dm new file mode 100644 index 00000000000..e1ed6df4c1f --- /dev/null +++ b/code/modules/awaymissions/mission_code/shuttle_shadow.dm @@ -0,0 +1,32 @@ +/obj/machinery/atmospherics/unary/passive_vent/high_volume/shadow + on = FALSE + +/obj/machinery/atmospherics/unary/passive_vent/high_volume/shadow/process_atmos() + if(!on) + return + ..() + +/obj/machinery/atmospherics/unary/passive_vent/high_volume/shadow/onTransitZ(old_z, new_z) + . = ..() + if(is_station_level(new_z)) + on = TRUE + +/obj/machinery/atmospherics/trinary/filter/shadow + name = "gas filter (Co2 Outlet)" + dir = 1 + filter_type = 3 + on = FALSE + target_pressure = 99999 + +/obj/machinery/atmospherics/trinary/filter/shadow/onTransitZ(old_z, new_z) + . = ..() + if(is_station_level(new_z)) + on = TRUE + +/obj/machinery/igniter/shadow + +/obj/machinery/igniter/shadow/onTransitZ(old_z, new_z) + . = ..() + if(is_station_level(new_z)) + on = TRUE + update_icon() diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index a5af129ca4f..723bee03e32 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -1,28 +1,34 @@ -//Biosuit complete with shoes (in the item sprite) +//Basic biosuit, white and yellow /obj/item/clothing/head/bio_hood name = "bio hood" - icon_state = "bio" desc = "A hood that protects the head and face from biological contaminants." + icon = 'icons/obj/clothing/head/bio.dmi' + icon_state = "bio" + item_state = 'icons/mob/clothing/head/bio.dmi' + icon_override = 'icons/mob/clothing/head/bio.dmi' permeability_coefficient = 0.01 flags = BLOCKHAIR | THICKMATERIAL flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 200, FIRE = 20, ACID = INFINITY) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES resistance_flags = ACID_PROOF - sprite_sheets = list( - "Vox" = 'icons/mob/clothing/species/vox/helmet.dmi', - "Unathi" = 'icons/mob/clothing/species/unathi/head.dmi', - "Tajaran" = 'icons/mob/clothing/species/tajaran/head.dmi', - "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/head.dmi', - "Grey" = 'icons/mob/clothing/species/grey/head.dmi' + "Vox" = 'icons/mob/clothing/species/vox/head/bio.dmi', + "Unathi" = 'icons/mob/clothing/species/unathi/head/bio.dmi', + "Tajaran" = 'icons/mob/clothing/species/tajaran/head/bio.dmi', + "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/head/bio.dmi', + "Grey" = 'icons/mob/clothing/species/grey/head/bio.dmi', + "Drask" = 'icons/mob/clothing/species/drask/head/bio.dmi', + "Kidan" = 'icons/mob/clothing/species/kidan/head/bio.dmi' ) /obj/item/clothing/suit/bio_suit name = "bio suit" desc = "A suit that protects against biological contamination." + icon = 'icons/obj/clothing/suits/bio.dmi' icon_state = "bio" - item_state = "bio_suit" + item_state = 'icons/mob/clothing/suits/bio.dmi' + icon_override = 'icons/mob/clothing/suits/bio.dmi' w_class = WEIGHT_CLASS_BULKY gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 @@ -36,14 +42,17 @@ put_on_delay = 70 resistance_flags = ACID_PROOF sprite_sheets = list( - "Tajaran" = 'icons/mob/clothing/species/tajaran/suit.dmi', - "Unathi" = 'icons/mob/clothing/species/unathi/suit.dmi', - "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/suit.dmi', - "Vox" = 'icons/mob/clothing/species/vox/suit.dmi' + "Tajaran" = 'icons/mob/clothing/species/tajaran/suits/bio.dmi', + "Unathi" = 'icons/mob/clothing/species/unathi/suits/bio.dmi', + "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/suits/bio.dmi', + "Vox" = 'icons/mob/clothing/species/vox/suits/bio.dmi', + "Grey" = 'icons/mob/clothing/species/grey/suits/bio.dmi', + "Drask" = 'icons/mob/clothing/species/drask/suits/bio.dmi', + "Kidan" = 'icons/mob/clothing/species/kidan/suits/bio.dmi' ) -//Standard biosuit, orange stripe +//Medical biosuit, white with blue /obj/item/clothing/head/bio_hood/general icon_state = "bio_general" @@ -51,7 +60,7 @@ icon_state = "bio_general" -//Virology biosuit, green stripe +//Virology biosuit, white with green /obj/item/clothing/head/bio_hood/virology icon_state = "bio_virology" @@ -59,7 +68,7 @@ icon_state = "bio_virology" -//Security biosuit, grey with red stripe across the chest +//Security biosuit, white with red and a vest /obj/item/clothing/head/bio_hood/security armor = list(MELEE = 15, BULLET = 10, LASER = 15, ENERGY = 5, BOMB = 15, RAD = 200, FIRE = 20, ACID = INFINITY) icon_state = "bio_security" @@ -69,7 +78,7 @@ icon_state = "bio_security" -//Janitor's biosuit, grey with purple arms +//Janitor's biosuit, grey with purple /obj/item/clothing/head/bio_hood/janitor icon_state = "bio_janitor" @@ -77,7 +86,7 @@ icon_state = "bio_janitor" -//Scientist's biosuit, white with a pink-ish hue +//Scientist's biosuit, white with purple /obj/item/clothing/head/bio_hood/scientist icon_state = "bio_scientist" @@ -85,7 +94,7 @@ icon_state = "bio_scientist" -//CMO's biosuit, blue stripe +//CMO's biosuit, blue with white /obj/item/clothing/suit/bio_suit/cmo icon_state = "bio_cmo" @@ -102,9 +111,4 @@ strip_delay = 40 put_on_delay = 20 - sprite_sheets = list( - "Tajaran" = 'icons/mob/clothing/species/tajaran/suit.dmi', - "Unathi" = 'icons/mob/clothing/species/unathi/suit.dmi', - "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/suit.dmi', - ) hide_tail_by_species = list("Unathi", "Tajaran", "Vulpkanin") diff --git a/code/modules/crafting/guncrafting.dm b/code/modules/crafting/guncrafting.dm index e4d0b3b0d8b..572854dfe28 100644 --- a/code/modules/crafting/guncrafting.dm +++ b/code/modules/crafting/guncrafting.dm @@ -93,6 +93,12 @@ origin_tech = "combat=4;magnets=4;powerstorage=3" outcome = /obj/item/gun/energy/plasma_pistol +/obj/item/weaponcrafting/gunkit/sparker + name = "\improper SPRK-12 pistol parts kit" + desc = "A suitcase containing the necessary gun parts to transform a mini energy gun into a SPRK-12 pistol. Double or nothing!" + origin_tech = "combat=4;magnets=4;powerstorage=3" + outcome = /obj/item/gun/energy/sparker + /obj/item/weaponcrafting/gunkit/u_ionsilencer name = "u-ion silencer parts kit" desc = "A suitcase containing the necessary gun parts to transform a standard disabler into a silenced and lethal disabling weapon. Look officer, he has no wounds from me!" @@ -114,13 +120,21 @@ if(!gunkit_to_use.outcome) to_chat(user, "That gunkit can not be used to craft a weapon.") return + playsound(user, 'sound/items/drill_use.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE) if(!do_after(user, 5 SECONDS, target = user)) return playsound(user, 'sound/items/drill_use.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE) - var/obj/item/gun_produced = new gunkit_to_use.outcome - user.unEquip(src) - user.put_in_hands(gun_produced) + if(istype(gunkit_to_use, /obj/item/weaponcrafting/gunkit/sparker)) //Snowflake checking, but I don't want a person with a self assembling kit to be robbed + var/obj/item/gun_produceda = new gunkit_to_use.outcome + var/obj/item/gun_producedb = new gunkit_to_use.outcome + user.unEquip(src) + user.put_in_hands(gun_produceda) + user.put_in_hands(gun_producedb) + else + var/obj/item/gun_produced = new gunkit_to_use.outcome + user.unEquip(src) + user.put_in_hands(gun_produced) qdel(gunkit_to_use) qdel(src) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index e178aa0c44e..d084d690ed2 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -221,6 +221,21 @@ ..() blacklist += subtypesof(/obj/item/gun/energy/laser) +/datum/crafting_recipe/sparker + name = "SPRK-12 Pistol" + tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) + result = list(/obj/item/gun/energy/sparker) + reqs = list(/obj/item/gun/energy/gun/mini = 1, + /obj/item/stack/cable_coil = 5, + /obj/item/weaponcrafting/gunkit/sparker = 1) + time = 10 SECONDS + category = CAT_WEAPONRY + subcategory = CAT_WEAPON + +/datum/crafting_recipe/sparker/New() + ..() + blacklist += subtypesof(/obj/item/gun/energy/gun/mini) + /datum/crafting_recipe/teslarevolver name = "Arc Revolver" tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) @@ -477,6 +492,15 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON +/datum/crafting_recipe/spear_primal // alternative recipe for Ash Walkers + name = "Spear" + result = list(/obj/item/spear) + reqs = list(/obj/item/restraints/handcuffs/sinew = 1, + /obj/item/shard = 1, + /obj/item/stack/rods = 1) + time = 4 SECONDS + category = CAT_PRIMAL + /datum/crafting_recipe/spooky_camera name = "Camera Obscura" result = list(/obj/item/camera/spooky) diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 94c5f21a236..8b6d4f1cad3 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -81,8 +81,9 @@ /turf/simulated/floor/vines color = "#aa77aa" icon_state = "vinefloor" - broken_states = list() +/turf/simulated/floor/vines/get_broken_states() + return list() //All of this shit is useless for vines @@ -395,6 +396,7 @@ mouse_opacity = MOUSE_OPACITY_OPAQUE //Clicking anywhere on the turf is good enough pass_flags = PASSTABLE | PASSGRILLE max_integrity = 50 + unbuckle_time = 5 SECONDS var/energy = 0 var/obj/structure/spacevine_controller/master = null var/list/mutations = list() @@ -510,10 +512,14 @@ wither() /obj/structure/spacevine/Crossed(mob/crosser, oldloc) - if(isliving(crosser)) - for(var/SM_type in mutations) - var/datum/spacevine_mutation/SM = mutations[SM_type] - SM.on_cross(src, crosser) + if(!isliving(crosser)) + return + for(var/SM_type in mutations) + var/datum/spacevine_mutation/SM = mutations[SM_type] + SM.on_cross(src, crosser) + + if(prob(30 * energy)) + entangle(crosser) /obj/structure/spacevine/attack_hand(mob/user) for(var/SM_type in mutations) diff --git a/code/modules/events/traders.dm b/code/modules/events/traders.dm index 3b1427bed87..b0eb67f4df5 100644 --- a/code/modules/events/traders.dm +++ b/code/modules/events/traders.dm @@ -15,34 +15,58 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) /datum/event/traders/fake_announce() . = TRUE + var/datum/traders/T = pick(/datum/traders/sol, + /datum/traders/cyber, + /datum/traders/commie, + /datum/traders/unathi, + /datum/traders/vulp, + /datum/traders/ipc, + /datum/traders/vox, + /datum/traders/skrell, + /datum/traders/grey, + /datum/traders/nian) + if(SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED) - GLOB.minor_announcement.Announce("A trading shuttle from Jupiter Station has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused") + GLOB.minor_announcement.Announce("A trading shuttle from [T.trader_location] has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused") return - GLOB.minor_announcement.Announce("A trading shuttle from Jupiter Station has been granted docking permission at [station_name()] arrivals port 4.", "Trader Shuttle Docking Request Accepted") + GLOB.minor_announcement.Announce("A trading shuttle from [T.trader_location] has been granted docking permission at [station_name()] arrivals port 4.", "Trader Shuttle Docking Request Accepted") /datum/event/traders/start() if(!station) // If there are no unused stations, just no. return + + var/datum/traders/T = pick(/datum/traders/sol, + /datum/traders/cyber, + /datum/traders/commie, + /datum/traders/unathi, + /datum/traders/vulp, + /datum/traders/ipc, + /datum/traders/vox, + /datum/traders/skrell, + /datum/traders/grey, + /datum/traders/nian) + if(SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED) - GLOB.minor_announcement.Announce("A trading shuttle from Jupiter Station has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused") + GLOB.minor_announcement.Announce("A trading shuttle from [T.trader_location] has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused") // if the docking request was refused, fire another major event in 60 seconds var/datum/event_container/EC = SSevents.event_containers[EVENT_LEVEL_MAJOR] EC.next_event_time = world.time + (60 * 10) return + //Get the list of spawn locations for traders var/list/spawnlocs = list() - for(var/obj/effect/landmark/spawner/soltrader/S in GLOB.landmarks_list) + for(var/obj/effect/landmark/spawner/trader/S in GLOB.landmarks_list) spawnlocs += get_turf(S) if(!length(spawnlocs)) return trader_objectives = forge_trader_objectives() - INVOKE_ASYNC(src, PROC_REF(spawn_traders), spawnlocs) + INVOKE_ASYNC(src, PROC_REF(spawn_traders), spawnlocs, T) -/datum/event/traders/proc/spawn_traders(list/spawnlocs) - var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a Sol Trader?", ROLE_TRADER, TRUE) +/datum/event/traders/proc/spawn_traders(list/spawnlocs, datum/traders/T) + var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a [T.trader_type] Trader?", ROLE_TRADER, TRUE) var/index = 1 while(spawn_count > 0 && length(candidates)) if(index > length(spawnlocs)) @@ -53,27 +77,41 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) var/mob/C = pick_n_take(candidates) spawn_count-- if(C) - var/mob/living/carbon/human/M = new /mob/living/carbon/human(picked_loc) + var/mob/living/carbon/human/M = new T.trader_species(picked_loc) M.ckey = C.ckey // must be before equipOutfit, or that will runtime due to lack of mind dust_if_respawnable(C) - M.equipOutfit(/datum/outfit/admin/sol_trader) + M.equipOutfit(T.trader_outfit) M.dna.species.after_equip_job(null, M) for(var/datum/objective/O in trader_objectives) M.mind.objective_holder.add_objective(O) // traders dont have a team, so we manually have to add this objective to all of their minds, without setting an owner M.mind.offstation_role = TRUE - greet_trader(M) + + //Get the list of spawn locations for company specific items, spawn gear + for(var/obj/effect/landmark/spawner/tradergearminor/A in GLOB.landmarks_list) + var/obj/structure/closet/locker = new /obj/structure/closet(get_turf(A)) + locker.open() + new T.trader_minor_special(locker) + locker.close() + + for(var/obj/effect/landmark/spawner/tradergearmajor/B in GLOB.landmarks_list) + var/obj/structure/closet/locker = new /obj/structure/closet(get_turf(B)) + locker.open() + new T.trader_major_special(locker) + locker.close() + + greet_trader(M, T) success_spawn = TRUE if(success_spawn) - GLOB.minor_announcement.Announce("A trading shuttle from Jupiter Station has been granted docking permission at [station_name()] arrivals port 4.", "Trader Shuttle Docking Request Accepted") + GLOB.minor_announcement.Announce("A trading shuttle from [T.trader_location] has been granted docking permission at [station_name()] arrivals port 4.", "Trader Shuttle Docking Request Accepted") else GLOB.unused_trade_stations += station // Return the station to the list of usable stations. -/datum/event/traders/proc/greet_trader(mob/living/carbon/human/M) +/datum/event/traders/proc/greet_trader(mob/living/carbon/human/M, datum/traders/T) var/list/messages = list() - messages.Add("You are a trader!You are currently docked at [get_area(M)].
You are about to trade with [station_name()].

") + messages.Add("You are a trader! You are currently docked at [T.dock_site].
You are about to trade with [station_name()].

") messages.Add(M.mind.prepare_announce_objectives()) to_chat(M, chat_box_green(messages.Join("
"))) - M.create_log(MISC_LOG, "[M] was made into a Sol Trader") + M.create_log(MISC_LOG, "[M] was made into a [T.trader_type] Trader") /datum/event/traders/proc/forge_trader_objectives() var/list/objs = list() @@ -82,3 +120,110 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) objs += new /datum/objective/trade/credits return objs + +//Datums that handle the various announcements, species, outfits, and item lists. +/datum/traders + /// What faction the trader is + var/trader_type + /// Where the traders originate from + var/trader_location + /// What specific station the traders came from + var/dock_site + /// What species the traders consist of + var/trader_species + /// What outfit do the traders spawn with + var/trader_outfit + /// What standard faction gear do they start with + var/trader_minor_special + /// What big ticket faction gear do they start with + var/trader_major_special + +/datum/traders/sol + trader_type = "Trans-Solar Federation" + trader_location = "Kayani Station" + dock_site = "Kayani Station" + trader_species = /mob/living/carbon/human + trader_outfit = /datum/outfit/admin/trader/sol + trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/federation_minor + trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/federation_major + +/datum/traders/cyber + trader_type = "Cybersun Industries" + trader_location = "-=ERROR: Unregisted Station Charter=-" + dock_site = "an undercover robotics factory" + trader_species = /mob/living/carbon/human + trader_outfit = /datum/outfit/admin/trader/cyber + trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/cybersun_minor + trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/cybersun_major + +/datum/traders/commie + trader_type = "USSP" + trader_location = "Belastrav" + dock_site = "Belastrav Station" + trader_species = /mob/living/carbon/human + trader_outfit = /datum/outfit/admin/trader/commie + trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/ussp_minor + trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/ussp_major + +/datum/traders/unathi + trader_type = "Glint Scales" + trader_location = "Moghes" + dock_site = "a Glint-Scale outpost" + trader_species = /mob/living/carbon/human/unathi + trader_outfit = /datum/outfit/admin/trader/unathi + trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/glintscale_minor + trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/glintscale_major + +/datum/traders/vulp + trader_type = "Steadfast Trading Co." + trader_location = "Vazzend" + dock_site = "the MV Steadfast Platinum" + trader_species = /mob/living/carbon/human/vulpkanin + trader_outfit = /datum/outfit/admin/trader/vulp + trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/steadfast_minor + trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/steadfast_major + +/datum/traders/ipc + trader_type = "Synthetic Union" + trader_location = "Cadraenov Epsilon" + dock_site = "Cadraenov Station" + trader_species = /mob/living/carbon/human/machine + trader_outfit = /datum/outfit/admin/trader/ipc + trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/syntheticunion_minor + trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/syntheticunion_major + +/datum/traders/vox + trader_type = "Skipjack" + trader_location = "a nearby skipjack" + dock_site = "a trading skipjack" + trader_species = /mob/living/carbon/human/vox + trader_outfit = /datum/outfit/admin/trader/vox + trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/skipjack_minor + trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/skipjack_major + +/datum/traders/skrell + trader_type = "Skrellian Central Authority" + trader_location = "the Crown" + dock_site = "Crown Station" + trader_species = /mob/living/carbon/human/skrell + trader_outfit = /datum/outfit/admin/trader/skrell + trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/solarcentral_minor + trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/solarcentral_major + +/datum/traders/grey + trader_type = "Technocracy" + trader_location = "Mauna-b" + dock_site = "Orbital Commerce Outpost 58" + trader_species = /mob/living/carbon/human/grey + trader_outfit = /datum/outfit/admin/trader/grey + trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/technocracy_minor + trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/technocracy_major + +/datum/traders/nian + trader_type = "Merchant Guild" + trader_location = "the Nian Merchant Guild" + dock_site = "Guild Subsidiary Station 'Gilded Comet'" + trader_species = /mob/living/carbon/human/moth + trader_outfit = /datum/outfit/admin/trader/nian + trader_minor_special = /obj/effect/spawner/lootdrop/trade_sol/merchantguild_minor + trader_major_special = /obj/effect/spawner/lootdrop/trade_sol/merchantguild_major diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index 36e99c67e57..8ab6c179008 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -316,7 +316,7 @@ if(!istype(user) || !user) return if(user.mind) //Prevents changelings and vampires from being able to learn it - if(ischangeling(user)) + if(IS_CHANGELING(user)) to_chat(user, "We try multiple times, but we are not able to comprehend the contents of the scroll!") return else if(user.mind.has_antag_datum(/datum/antagonist/vampire)) //Vampires @@ -340,7 +340,7 @@ if(!istype(user) || !user) return if(user.mind) //Prevents changelings and vampires from being able to learn it - if(ischangeling(user)) + if(IS_CHANGELING(user)) to_chat(user, "We try multiple times, but we simply cannot grasp the basics of CQC!") return else if(user.mind.has_antag_datum(/datum/antagonist/vampire)) //Vampires diff --git a/code/modules/mob/dead/observer/observer_base.dm b/code/modules/mob/dead/observer/observer_base.dm index 8b158b8f18e..7125defde13 100644 --- a/code/modules/mob/dead/observer/observer_base.dm +++ b/code/modules/mob/dead/observer/observer_base.dm @@ -35,7 +35,7 @@ GLOBAL_DATUM_INIT(ghost_crew_monitor, /datum/ui_module/crew_monitor/ghost, new) var/ghost_orbit = GHOST_ORBIT_CIRCLE var/health_scan = FALSE //does the ghost have health scanner mode on? by default it should be off ///toggle for ghost gas analyzer - var/gas_analyzer = FALSE + var/gas_scan = FALSE ///toggle for ghost plant analyzer var/plant_analyzer = FALSE var/datum/orbit_menu/orbit_menu @@ -217,7 +217,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/obj/machinery/cryopod/P = istype(loc, /obj/machinery/cryopod) && loc if(frozen) - to_chat(src, "You cannot do this while admin frozen.") + to_chat(src, "You cannot do this while admin frozen.", MESSAGE_TYPE_WARNING) message_admins("[key_name_admin(src)] tried to ghost while admin frozen") return @@ -575,17 +575,16 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, "Health scan enabled.") health_scan = TRUE -/mob/dead/observer/verb/toggle_gas_anaylzer() - set name = "Toggle Gas Analyzer" - set desc = "Toggles wether you can anaylze gas contents on click" +/mob/dead/observer/verb/toggle_gas_scan() + set name = "Toggle Gas Scan" + set desc = "Toggles whether you analyze gas contents on click" set category = "Ghost" - if(gas_analyzer) - to_chat(src, "Gas Analyzer disabled.") - gas_analyzer = FALSE + gas_scan = !gas_scan + if(gas_scan) + to_chat(src, "Gas scan enabled.") else - to_chat(src, "Gas Analyzer enabled. Click on a pipe to analyze.") - gas_analyzer = TRUE + to_chat(src, "Gas scan disabled.") /mob/dead/observer/verb/toggle_plant_anaylzer() set name = "Toggle Plant Analyzer" @@ -599,62 +598,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, "Plant Analyzer enabled. Click on a plant or seed to analyze.") plant_analyzer = TRUE -/mob/dead/observer/verb/analyze_air() - set name = "Analyze Air" - set category = "Ghost" - - if(!isobserver(usr)) - return - - // Shamelessly copied from the Gas Analyzers - if(!isturf(usr.loc)) - return - - var/datum/gas_mixture/environment = usr.loc.return_air() - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles() - - to_chat(src, "Results:") - if(abs(pressure - ONE_ATMOSPHERE) < 10) - to_chat(src, "Pressure: [round(pressure, 0.1)] kPa") - else - to_chat(src, "Pressure: [round(pressure, 0.1)] kPa") - if(total_moles) - var/o2_concentration = environment.oxygen / total_moles - var/n2_concentration = environment.nitrogen / total_moles - var/co2_concentration = environment.carbon_dioxide / total_moles - var/plasma_concentration = environment.toxins / total_moles - var/n2o_concentration = environment.sleeping_agent / total_moles - - var/unknown_concentration = 1 - (o2_concentration + n2_concentration + co2_concentration + plasma_concentration + n2o_concentration) - if(abs(n2_concentration - N2STANDARD) < 20) - to_chat(src, "Nitrogen: [round(n2_concentration * 100)]% ([round(environment.nitrogen, 0.01)] moles)") - else - to_chat(src, "Nitrogen: [round(n2_concentration * 100)]% ([round(environment.nitrogen, 0.01)] moles)") - - if(abs(o2_concentration - O2STANDARD) < 2) - to_chat(src, "Oxygen: [round(o2_concentration * 100)]% ([round(environment.oxygen, 0.01)] moles)") - else - to_chat(src, "Oxygen: [round(o2_concentration * 100)]% ([round(environment.oxygen, 0.01)] moles)") - - if(co2_concentration > 0.01) - to_chat(src, "CO2: [round(co2_concentration * 100)]% ([round(environment.carbon_dioxide, 0.01)] moles)") - else - to_chat(src, "CO2: [round(co2_concentration * 100)]% ([round(environment.carbon_dioxide, 0.01)] moles)") - - if(plasma_concentration > 0.01) - to_chat(src, "Plasma: [round(plasma_concentration * 100)]% ([round(environment.toxins, 0.01)] moles)") - - if(n2o_concentration > 0.01) - to_chat(src, "N2O: [round(n2o_concentration * 100)]% ([round(environment.sleeping_agent, 0.01)] moles)") - - if(unknown_concentration > 0.01) - to_chat(src, "Unknown: [round(unknown_concentration * 100)]% ([round(unknown_concentration * total_moles, 0.01)] moles)") - - to_chat(src, "Temperature: [round(environment.temperature - T0C, 0.1)]°C") - to_chat(src, "Heat Capacity: [round(environment.heat_capacity(), 0.1)]") - /mob/dead/observer/verb/view_manifest() set name = "View Crew Manifest" set category = "Ghost" diff --git a/code/modules/mob/living/carbon/carbon_life.dm b/code/modules/mob/living/carbon/carbon_life.dm index ea63a7763df..4f393cbe8ee 100644 --- a/code/modules/mob/living/carbon/carbon_life.dm +++ b/code/modules/mob/living/carbon/carbon_life.dm @@ -253,6 +253,7 @@ if(staminaloss) setStaminaLoss(0, FALSE) SEND_SIGNAL(src, COMSIG_CARBON_STAMINA_REGENERATED) + update_stamina_hud() update_health_hud() // Keep SSD people asleep @@ -285,6 +286,11 @@ else healths.icon_state = "health7" + + +/mob/living/carbon/perceived_stamina() + return staminaloss - shock_reduction() + /mob/living/carbon/update_damage_hud() if(!client) return diff --git a/code/modules/mob/living/carbon/carbon_procs.dm b/code/modules/mob/living/carbon/carbon_procs.dm index fd665b3a777..18dcfc8b270 100644 --- a/code/modules/mob/living/carbon/carbon_procs.dm +++ b/code/modules/mob/living/carbon/carbon_procs.dm @@ -500,11 +500,15 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven visible_message("[src] begins climbing into the ventilation system...", \ "You begin climbing into the ventilation system...") - if(!do_after(src, 4.5 SECONDS, target = src)) - return - +#ifdef UNIT_TESTS + var/ventcrawl_delay = 0 SECONDS +#else + var/ventcrawl_delay = 4.5 SECONDS if(!client) return +#endif + if(!do_after(src, ventcrawl_delay, target = src)) + return if(!vent_found.can_crawl_through()) to_chat(src, "You can't vent crawl through that!") @@ -545,7 +549,8 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven if(!A.pipe_image) A.update_pipe_image() pipes_shown += A.pipe_image - client.images += A.pipe_image + if(client) + client.images += A.pipe_image /mob/living/proc/remove_ventcrawl() if(client) @@ -805,7 +810,14 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven /mob/living/carbon/resist_buckle() INVOKE_ASYNC(src, PROC_REF(resist_muzzle)) var/obj/item/I = get_restraining_item() - if(!I) // If there is nothing to restrain him then he is not restrained + var/time = 0 + if(istype(I)) + time = I.breakouttime + else if(isstructure(buckled)) + var/obj/structure/struct = buckled + time = struct.unbuckle_time + + if(time == 0) buckled.user_unbuckle_mob(src, src) return @@ -813,7 +825,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven to_chat(src, "You are already trying to unbuckle!") return apply_status_effect(STATUS_EFFECT_UNBUCKLE) - var/time = I.breakouttime + visible_message("[src] attempts to unbuckle [p_themselves()]!", "You attempt to unbuckle yourself... (This will take around [time / 10] seconds and you need to stay still.)") if(!do_after(src, time, FALSE, src, extra_checks = list(CALLBACK(src, PROC_REF(buckle_check))))) diff --git a/code/modules/mob/living/carbon/carbon_update_status.dm b/code/modules/mob/living/carbon/carbon_update_status.dm index 6a4713b6741..0fd519126c0 100644 --- a/code/modules/mob/living/carbon/carbon_update_status.dm +++ b/code/modules/mob/living/carbon/carbon_update_status.dm @@ -18,6 +18,7 @@ create_debug_log("woke up, trigger reason: [reason]") update_damage_hud() update_health_hud() + update_stamina_hud() med_hud_set_health() med_hud_set_status() diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 565d09412c5..caad6f0e60d 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -58,7 +58,7 @@ if(sponge) return min(sponge.damage,maxHealth*2) else - if(ischangeling(src)) + if(IS_CHANGELING(src)) // if a changeling has no brain, they have no brain damage. return 0 diff --git a/code/modules/mob/living/carbon/human/human_death.dm b/code/modules/mob/living/carbon/human/human_death.dm index 6a0e9f7a0df..fe2c5bd74d7 100644 --- a/code/modules/mob/living/carbon/human/human_death.dm +++ b/code/modules/mob/living/carbon/human/human_death.dm @@ -104,6 +104,7 @@ // We're alive again, so re-build the entire healthdoll healthdoll.cached_healthdoll_overlays.Cut() update_health_hud() + update_stamina_hud() // Update healthdoll if(dna.species) dna.species.update_sight(src) diff --git a/code/modules/mob/living/carbon/human/human_mob.dm b/code/modules/mob/living/carbon/human/human_mob.dm index 59786362d25..d9c0e6b9032 100644 --- a/code/modules/mob/living/carbon/human/human_mob.dm +++ b/code/modules/mob/living/carbon/human/human_mob.dm @@ -1904,7 +1904,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X visible_message("[src] is engulfed in shadows and fades into the darkness.", "A sense of dread washes over you as you suddenly dim dark.") /mob/living/carbon/human/proc/get_perceived_trauma(shock_reduction) - return min(health, maxHealth - getStaminaLoss()) + shock_reduction + return min(health, maxHealth) + shock_reduction /mob/living/carbon/human/WakeUp(updating = TRUE) if(dna.species.spec_WakeUp(src)) diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 9c743a9e373..78100d015d6 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -845,14 +845,14 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) if(head) var/mutable_appearance/standing - if(head.icon_override) - standing = mutable_appearance(head.icon_override, "[head.icon_state]", layer = -HEAD_LAYER) - else if(head.sprite_sheets && head.sprite_sheets[dna.species.sprite_sheet_name]) + if(head.sprite_sheets && head.sprite_sheets[dna.species.sprite_sheet_name]) standing = mutable_appearance(head.sprite_sheets[dna.species.sprite_sheet_name], "[head.icon_state]", layer = -HEAD_LAYER) if(istype(head, /obj/item/clothing/head/helmet/space/plasmaman)) var/obj/item/clothing/head/helmet/space/plasmaman/P = head if(!P.up) standing.overlays += P.visor_icon + else if(head.icon_override) + standing = mutable_appearance(head.icon_override, "[head.icon_state]", layer = -HEAD_LAYER) else standing = mutable_appearance('icons/mob/clothing/head.dmi', "[head.icon_state]", layer = -HEAD_LAYER) @@ -905,10 +905,10 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) client.screen += wear_suit //Either way, add the item to the HUD var/mutable_appearance/standing - if(wear_suit.icon_override) - standing = mutable_appearance(wear_suit.icon_override, "[wear_suit.icon_state]", layer = -SUIT_LAYER) - else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[dna.species.sprite_sheet_name]) + if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[dna.species.sprite_sheet_name]) standing = mutable_appearance(wear_suit.sprite_sheets[dna.species.sprite_sheet_name], "[wear_suit.icon_state]", layer = -SUIT_LAYER) + else if(wear_suit.icon_override) + standing = mutable_appearance(wear_suit.icon_override, "[wear_suit.icon_state]", layer = -SUIT_LAYER) else standing = mutable_appearance('icons/mob/clothing/suit.dmi', "[wear_suit.icon_state]", layer = -SUIT_LAYER) diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 9da5da6e35d..380010d7606 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -286,7 +286,7 @@ if(amount > 0) stam_regen_start_time = world.time + (STAMINA_REGEN_BLOCK_TIME * stamina_regen_block_modifier) if(updating) - update_health_hud() + update_stamina_hud() update_stamina() /mob/living/proc/setStaminaLoss(amount, updating = TRUE) @@ -302,7 +302,7 @@ if(amount > 0) stam_regen_start_time = world.time + (STAMINA_REGEN_BLOCK_TIME * stamina_regen_block_modifier) if(updating) - update_health_hud() + update_stamina_hud() update_stamina() /mob/living/proc/getMaxHealth() diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index fac9c031dc9..890b5209345 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -71,6 +71,7 @@ ADD_TRAIT(src, TRAIT_HANDS_BLOCKED, STAT_TRAIT) // immobilized is superfluous as moving when dead ghosts you. update_damage_hud() update_health_hud() + update_stamina_hud() med_hud_set_health() med_hud_set_status() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 406d4154a65..f824aa6c3d5 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -354,6 +354,7 @@ med_hud_set_health() med_hud_set_status() update_health_hud() + update_stamina_hud() //This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually diff --git a/code/modules/mob/living/living_life.dm b/code/modules/mob/living/living_life.dm index f930e555c9e..1611a0a09c8 100644 --- a/code/modules/mob/living/living_life.dm +++ b/code/modules/mob/living/living_life.dm @@ -180,3 +180,31 @@ throw_alert("succumb", /atom/movable/screen/alert/succumb) else clear_alert("succumb") + +/mob/living/proc/perceived_stamina() + return staminaloss + +/mob/living/update_stamina_hud() + if(!client || !staminas) + return + + var/perceived_stamina = perceived_stamina() + + switch(perceived_stamina) + if(100 to INFINITY) + staminas.icon_state = "stamina6" + if(80 to 100) + staminas.icon_state = "stamina5" + if(60 to 80) + staminas.icon_state = "stamina4" + if(40 to 60) + staminas.icon_state = "stamina3" + if(20 to 40) + staminas.icon_state = "stamina2" + if(1 to 20) + staminas.icon_state = "stamina1" + else + staminas.icon_state = null +/* else // The 100% stamina is currently disabled, to reduce clutter on your screen + staminas.icon_state = "stamina0" + */ diff --git a/code/modules/mob/living/silicon/silicon_say.dm b/code/modules/mob/living/silicon/silicon_say.dm index 43eae896cac..97e6bb9377d 100644 --- a/code/modules/mob/living/silicon/silicon_say.dm +++ b/code/modules/mob/living/silicon/silicon_say.dm @@ -99,7 +99,7 @@ to_chat(src, "Holopad action relayed, [real_name] [message]") for(var/mob/M in viewers(T.loc)) - M.show_message(rendered, EMOTE_VISIBLE) + M.show_message(rendered, EMOTE_VISIBLE, chat_message_type = MESSAGE_TYPE_LOCALCHAT) log_emote("(HPAD) [message]", src) else //This shouldn't occur, but better safe then sorry. diff --git a/code/modules/mob/living/simple_animal/hostile/headslug.dm b/code/modules/mob/living/simple_animal/hostile/headslug.dm index 55c1d05008c..2a9066a6784 100644 --- a/code/modules/mob/living/simple_animal/hostile/headslug.dm +++ b/code/modules/mob/living/simple_animal/hostile/headslug.dm @@ -62,7 +62,7 @@ /mob/living/simple_animal/hostile/headslug/projectile_hit_check(obj/item/projectile/P) return (stat || FALSE) - + /obj/item/organ/internal/body_egg/changeling_egg name = "changeling egg" desc = "Twitching and disgusting." @@ -95,7 +95,7 @@ if(origin && origin.current && (origin.current.stat == DEAD)) origin.transfer_to(M) - var/datum/antagonist/changeling/cling = M.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/cling = IS_CHANGELING(M) if(cling.can_absorb_dna(owner)) cling.absorb_dna(owner) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 69ea8e7a312..9036a7298c6 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -399,7 +399,7 @@ Difficulty: Medium return FALSE return ..() -/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message) +/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, chat_message_type) if(swooping & SWOOP_INVULNERABLE) //to suppress attack messages without overriding every single proc that could send a message saying we got hit return return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm index 37d3a4cd8b4..5f132fa5487 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ghost_interaction.dm @@ -16,10 +16,6 @@ humanize_prompt += " Role: [spider_role_summary]" if(user.ckey in GLOB.ts_ckey_blacklist) error_on_humanize = "You are not able to control any terror spider this round." - else if(isobserver(user)) - var/mob/dead/observer/O = user - if(!O.check_ahud_rejoin_eligibility()) - error_on_humanize = "You have enabled antag HUD and are unable to re-enter the round." else if(!ai_playercontrol_allowtype) error_on_humanize = "This specific type of terror spider is not player-controllable." else if(degenerate) @@ -28,6 +24,10 @@ error_on_humanize = "Dead spiders are not player-controllable." else if(!HAS_TRAIT(user, TRAIT_RESPAWNABLE)) error_on_humanize = "You are not able to rejoin the round." + else if(isobserver(user)) + var/mob/dead/observer/O = user + if(!O.check_ahud_rejoin_eligibility()) + error_on_humanize = "You have enabled antag HUD and are unable to re-enter the round." if(jobban_isbanned(user, ROLE_SYNDICATE) || jobban_isbanned(user, ROLE_TSPIDER)) to_chat(user, "You are jobbanned from role of syndicate and/or terror spider.") return diff --git a/code/modules/mob/living/simple_animal/slime/slime_life.dm b/code/modules/mob/living/simple_animal/slime/slime_life.dm index b15e5cefeb6..79fc701bed0 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_life.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_life.dm @@ -209,7 +209,6 @@ adjustBruteLoss(-3) /mob/living/simple_animal/slime/proc/handle_nutrition() - if(docile) //God as my witness, I will never go hungry again set_nutrition(700) //fuck you for using the base nutrition var return @@ -244,9 +243,6 @@ if(prob(25-powerlevel*5)) powerlevel++ - - - /mob/living/simple_animal/slime/proc/handle_targets() if(Tempstun) if(!buckled) // not while they're eating! @@ -269,7 +265,7 @@ if(prob(10)) Discipline-- - if(!client) + if(!client && !stop_automated_movement) if(!(mobility_flags & MOBILITY_MOVE)) return diff --git a/code/modules/mob/living/simple_animal/slime/slime_mob.dm b/code/modules/mob/living/simple_animal/slime/slime_mob.dm index 20282318580..4e880cfa7f7 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_mob.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_mob.dm @@ -467,3 +467,7 @@ to_chat(src, "I can't vent crawl while feeding...") return ..() + +/mob/living/simple_animal/slime/unit_test_dummy + wander = FALSE + stop_automated_movement = TRUE diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index cee530c1850..9b68f235181 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -106,31 +106,31 @@ usr.show_message(t, EMOTE_VISIBLE) -/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 +/mob/proc/show_message(msg, type, alt, alt_type, chat_message_type) // Message, type of message (1 or 2), alternative message, alt message type (1 or 2) + if(!client) + return if(type) - if(type & EMOTE_VISIBLE && !has_vision(information_only=TRUE))//Vision related + if(type & EMOTE_VISIBLE && !has_vision(information_only = TRUE)) // Vision related if(!alt) return - else - msg = alt - type = alt_type - if(type & EMOTE_AUDIBLE && !can_hear())//Hearing related + msg = alt + type = alt_type + + if(type & EMOTE_AUDIBLE && !can_hear()) // Hearing related if(!alt) return - else - msg = alt - type = alt_type - if(type & EMOTE_VISIBLE && !has_vision(information_only=TRUE)) - return + msg = alt + type = alt_type + if(type & EMOTE_VISIBLE && !has_vision(information_only = TRUE)) + return + // Added voice muffling for Issue 41. if(stat == UNCONSCIOUS) - to_chat(src, "... You can almost hear someone talking ...") - else - to_chat(src, msg) - return + to_chat(src, "... You can almost hear someone talking ...", MESSAGE_TYPE_LOCALCHAT) + return + + to_chat(src, msg, chat_message_type) // Show a message to all mobs in sight of this one // This would be for visible actions by the src mob @@ -138,7 +138,7 @@ // 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) +/mob/visible_message(message, self_message, blind_message, chat_message_type) if(!isturf(loc)) // mobs inside objects (such as lockers) shouldn't have their actions visible to those outside the object for(var/mob/M as anything in get_mobs_in_view(3, src)) if(M.see_invisible < invisibility) @@ -150,7 +150,7 @@ if(!blind_message) // for some reason VISIBLE action has blind_message param so if we are not in the same object but next to it, lets show it continue msg = blind_message - M.show_message(msg, EMOTE_VISIBLE, blind_message, EMOTE_AUDIBLE) + M.show_message(msg, EMOTE_VISIBLE, blind_message, EMOTE_AUDIBLE, chat_message_type) return for(var/mob/M as anything in get_mobs_in_view(7, src)) if(M.see_invisible < invisibility) @@ -158,7 +158,7 @@ var/msg = message if(self_message && M == src) msg = self_message - M.show_message(msg, EMOTE_VISIBLE, blind_message, EMOTE_AUDIBLE) + M.show_message(msg, EMOTE_VISIBLE, blind_message, EMOTE_AUDIBLE, chat_message_type) // Show a message to all mobs in sight of this atom // Use for objects performing visible actions diff --git a/code/modules/mob/mob_holder.dm b/code/modules/mob/mob_holder.dm index 47366ef8b49..36ce7a9ed34 100644 --- a/code/modules/mob/mob_holder.dm +++ b/code/modules/mob/mob_holder.dm @@ -29,9 +29,9 @@ for(var/mob/M in src.contents) M.attackby(W,user, params) -/obj/item/holder/proc/show_message(message, m_type) +/obj/item/holder/proc/show_message(message, m_type, chat_message_type) for(var/mob/living/M in contents) - M.show_message(message,m_type) + M.show_message(message, m_type, chat_message_type) /obj/item/holder/emp_act(intensity) for(var/mob/living/M in contents) diff --git a/code/modules/mob/mob_update_status_base.dm b/code/modules/mob/mob_update_status_base.dm index 292849c967c..5aff72bd0be 100644 --- a/code/modules/mob/mob_update_status_base.dm +++ b/code/modules/mob/mob_update_status_base.dm @@ -60,3 +60,6 @@ /mob/proc/update_health_hud() return + +/mob/proc/update_stamina_hud() + return diff --git a/code/modules/mob/mob_vars.dm b/code/modules/mob/mob_vars.dm index aa3f1f71098..0a236789e63 100644 --- a/code/modules/mob/mob_vars.dm +++ b/code/modules/mob/mob_vars.dm @@ -18,6 +18,7 @@ var/atom/movable/screen/m_select = null var/atom/movable/screen/healths = null var/atom/movable/screen/throw_icon = null + var/atom/movable/screen/staminas = 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. diff --git a/code/modules/pda/utilities.dm b/code/modules/pda/utilities.dm index 37ac90e1159..7a4ce1993fb 100644 --- a/code/modules/pda/utilities.dm +++ b/code/modules/pda/utilities.dm @@ -126,28 +126,5 @@ base_name = "Gas Scanner" icon = "tachometer-alt" -/datum/data/pda/utility/scanmode/gas/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) - if(istype(A, /obj/item/tank)) - var/obj/item/tank/T = A - pda.atmosanalyzer_scan(T.air_contents, user, T) - else if(istype(A, /obj/machinery/atmospherics/portable)) - var/obj/machinery/atmospherics/portable/T = A - pda.atmosanalyzer_scan(T.air_contents, user, T) - else if(istype(A, /obj/machinery/atmospherics/pipe)) - var/obj/machinery/atmospherics/pipe/T = A - pda.atmosanalyzer_scan(T.parent.air, user, T) - else if(istype(A, /obj/machinery/power/rad_collector)) - var/obj/machinery/power/rad_collector/T = A - if(T.loaded_tank) - pda.atmosanalyzer_scan(T.loaded_tank.air_contents, user, T) - else if(istype(A, /obj/item/flamethrower)) - var/obj/item/flamethrower/T = A - if(T.ptank) - pda.atmosanalyzer_scan(T.ptank.air_contents, user, T) - else if(istype(A, /obj/machinery/atmospherics/portable/scrubber/huge)) - var/obj/machinery/atmospherics/portable/scrubber/huge/T = A - pda.atmosanalyzer_scan(T.air_contents, user, T) - else if(istype(A, /obj/machinery/atmospherics/unary/tank)) - var/obj/machinery/atmospherics/unary/tank/T = A - pda.atmosanalyzer_scan(T.air_contents, user, T) - +/datum/data/pda/utility/scanmode/gas/scan_atom(atom/A, mob/user) + atmos_scan(user=user, target=A, silent=FALSE, print=TRUE) diff --git a/code/modules/power/engines/singularity/collector.dm b/code/modules/power/engines/singularity/collector.dm index 5e16aa265b8..12a99fe1b3d 100644 --- a/code/modules/power/engines/singularity/collector.dm +++ b/code/modules/power/engines/singularity/collector.dm @@ -49,9 +49,7 @@ /obj/machinery/power/rad_collector/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/analyzer) && loaded_tank) - atmosanalyzer_scan(loaded_tank.air_contents, user) - else if(istype(I, /obj/item/tank/internals/plasma)) + if(istype(I, /obj/item/tank/internals/plasma)) if(!anchored) to_chat(user, "[src] needs to be secured to the floor first.") return TRUE @@ -96,6 +94,11 @@ else return ..() +/obj/machinery/power/rad_collector/return_analyzable_air() + if(loaded_tank) + return loaded_tank.return_analyzable_air() + return null + /obj/machinery/power/rad_collector/examine(mob/user) . = ..() if(active) diff --git a/code/modules/power/lights.dm b/code/modules/power/lights.dm index 238d7b7fc33..9a2df3bddbf 100644 --- a/code/modules/power/lights.dm +++ b/code/modules/power/lights.dm @@ -292,7 +292,7 @@ /obj/machinery/light/proc/on_security_level_update(datum/source, previous_level_number, new_level_number) SIGNAL_HANDLER - if(status != LIGHT_OK) + if(status != LIGHT_OK || !has_power()) return if(new_level_number >= SEC_LEVEL_EPSILON) diff --git a/code/modules/projectiles/ammunition/energy_lens.dm b/code/modules/projectiles/ammunition/energy_lens.dm index 17964d6c365..f1b453ec833 100644 --- a/code/modules/projectiles/ammunition/energy_lens.dm +++ b/code/modules/projectiles/ammunition/energy_lens.dm @@ -42,6 +42,11 @@ select_name = "anti-vehicle" fire_sound = 'sound/weapons/lasercannonfire.ogg' +/obj/item/ammo_casing/energy/laser/sparker + projectile_type = /obj/item/projectile/beam/laser/sparker + select_name = "spark" + e_cost = (100 / 3) * 2 // 15 * 12.5 damage = 187.5 damage. Almost as much as a base laser gun, but takes longer to get all the shots out. + /obj/item/ammo_casing/energy/laser/pulse projectile_type = /obj/item/projectile/beam/pulse/hitscan muzzle_flash_color = LIGHT_COLOR_DARKBLUE diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b5365256fe8..b195704ce15 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -195,19 +195,26 @@ //DUAL WIELDING var/bonus_spread = 0 - var/loop_counter = 0 - if(ishuman(user) && user.a_intent == INTENT_HARM) - var/mob/living/carbon/human/H = user - for(var/obj/item/gun/G in get_both_hands(H)) - if(G == src || G.weapon_weight >= WEAPON_MEDIUM) - continue - else if(G.can_trigger_gun(user)) - if(!HAS_TRAIT(user, TRAIT_BADASS)) - bonus_spread += dual_wield_spread * G.weapon_weight - loop_counter++ - addtimer(CALLBACK(G, PROC_REF(process_fire), target, user, 1, params, null, bonus_spread), loop_counter) + if(!(ishuman(user) && user.a_intent == INTENT_HARM)) + process_fire(target, user, TRUE, params, null, bonus_spread) + return + var/mob/living/carbon/human/H = user + var/obj/item/gun/GUN_1 = H.get_active_hand() + if(istype(H.get_inactive_hand(), /obj/item/gun)) //We do not need to check gun one, as it is controlled by the afterattack + var/obj/item/gun/GUN_2 = H.get_inactive_hand() - process_fire(target,user,1,params, null, bonus_spread) + if(GUN_2.weapon_weight >= WEAPON_MEDIUM) + process_fire(target, user, TRUE, params, null, bonus_spread) + return + if(GUN_2.can_trigger_gun(user)) + if(!HAS_TRAIT(user, TRAIT_BADASS)) + var/temporary_weapon_weight = GUN_2.weapon_weight + if(GUN_1.type != GUN_2.type) + temporary_weapon_weight = max(temporary_weapon_weight, WEAPON_LIGHT) //Can't hold the sparker in the off hand to make both guns perfectly accurate, must be 2 sparkers + bonus_spread += dual_wield_spread * temporary_weapon_weight + addtimer(CALLBACK(GUN_2, PROC_REF(process_fire), target, user, TRUE, params, null, bonus_spread), 1) + + process_fire(target, user, TRUE, params, null, bonus_spread) /obj/item/gun/proc/can_trigger_gun(mob/living/user) if(!user.can_use_guns(src)) diff --git a/code/modules/projectiles/guns/energy/special_eguns.dm b/code/modules/projectiles/guns/energy/special_eguns.dm index ef229890645..46cf2b9ea53 100644 --- a/code/modules/projectiles/guns/energy/special_eguns.dm +++ b/code/modules/projectiles/guns/energy/special_eguns.dm @@ -980,3 +980,25 @@ transform = M animate(src, transform = M * 10, time = 0.3 SECONDS, alpha = 0) QDEL_IN(src, 0.3 SECONDS) + +/obj/item/gun/energy/sparker + name = "\improper SPRK-12" + desc = "A small, pistol-sized laser gun designed to regain charges from EMPs. Energy efficient, though its beams are weaker. Good at dual wielding, however." + icon_state = "dueling_pistol" + item_state = "dueling_pistol" + w_class = WEIGHT_CLASS_SMALL + can_holster = TRUE + execution_speed = 4 SECONDS + weapon_weight = WEAPON_DUAL_WIELD + shaded_charge = TRUE + ammo_type = list(/obj/item/ammo_casing/energy/laser/sparker) + /// The cooldown tracking when we were last EMP'd + COOLDOWN_DECLARE(emp_cooldown) + +/obj/item/gun/energy/sparker/emp_act(severity) + if(!COOLDOWN_FINISHED(src, emp_cooldown)) + return + cell.charge = cell.maxcharge + COOLDOWN_START(src, emp_cooldown, 1 MINUTES) + atom_say("Energy coils recharged!") + update_icon(UPDATE_ICON_STATE | UPDATE_OVERLAYS) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index d934d34dbe9..214698db282 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -336,3 +336,14 @@ eyeblur = 0 impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser light_color = LIGHT_COLOR_CYAN + +/obj/item/projectile/beam/laser/sparker + name = "sparker beam" + icon_state = "scatterlaser" + damage = 12.5 + range = 12 + +/obj/item/projectile/beam/laser/sparker/on_range() + new /obj/effect/particle_effect/sparks(get_turf(src)) + return ..() + diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index f2a1442f275..31d215c6a4a 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -883,7 +883,7 @@ game_plane_master_controller.add_filter(MEPHEDRONE_SCREEN_BLUR, 1, list("type" = "radial_blur", "size" = 0.02)) - if(!ischangeling(L) || HAS_TRAIT(L, TRAIT_MEPHEDRONE_ADAPTED)) + if(!IS_CHANGELING(L) || HAS_TRAIT(L, TRAIT_MEPHEDRONE_ADAPTED)) return var/datum/antagonist/changeling/cling = L.mind.has_antag_datum(/datum/antagonist/changeling) cling.chem_recharge_slowdown += 1 @@ -901,7 +901,7 @@ if(overdosed) UnregisterSignal(L, COMSIG_ATOM_PREHIT) - if(ischangeling(L)) + if(IS_CHANGELING(L)) var/datum/antagonist/changeling/cling = L.mind.has_antag_datum(/datum/antagonist/changeling) cling.chem_recharge_slowdown -= changeling_chemical_tracker changeling_chemical_tracker = 0 @@ -1014,7 +1014,7 @@ RegisterSignal(L, COMSIG_ATOM_PREHIT, PROC_REF(dodge_bullets)) L.next_move_modifier -= 0.2 // Overdosing makes you a liiitle faster but you know has some really bad consequences - if(ischangeling(L)) + if(IS_CHANGELING(L)) var/datum/antagonist/changeling/cling = L.mind.has_antag_datum(/datum/antagonist/changeling) cling.chem_recharge_slowdown += 1 changeling_chemical_tracker += 1 @@ -1036,7 +1036,7 @@ L.next_move_modifier += 0.2 - if(ischangeling(L)) + if(IS_CHANGELING(L)) var/datum/antagonist/changeling/cling = L.mind.has_antag_datum(/datum/antagonist/changeling) if(changeling_chemical_tracker > 0) //Just in case this gets called somehow after on_remove is done cling.chem_recharge_slowdown -= 1 diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index fbda929a599..9ed4d2a450c 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -905,7 +905,7 @@ if(method == REAGENT_INGEST || (method == REAGENT_TOUCH && prob(25))) if(M.stat == DEAD) if(M.getBruteLoss() + M.getFireLoss() + M.getCloneLoss() >= 150) - if(ischangeling(M)) + if(IS_CHANGELING(M)) return M.delayed_gib(TRUE) return diff --git a/code/modules/reagents/chemistry/reagents_holder.dm b/code/modules/reagents/chemistry/reagents_holder.dm index 4d68ff36daa..413b54262be 100644 --- a/code/modules/reagents/chemistry/reagents_holder.dm +++ b/code/modules/reagents/chemistry/reagents_holder.dm @@ -390,7 +390,7 @@ M.update_stat("reagent metabolism") if(update_flags & STATUS_UPDATE_STAMINA) M.update_stamina() - M.update_health_hud() + M.update_stamina_hud() if(update_flags & STATUS_UPDATE_BLIND) M.update_blind_effects() if(update_flags & STATUS_UPDATE_NEARSIGHTED) diff --git a/code/modules/reagents/reagent_containers/chemical_bottle.dm b/code/modules/reagents/reagent_containers/chemical_bottle.dm index 66c0b505d78..d9b3f6ab99e 100644 --- a/code/modules/reagents/reagent_containers/chemical_bottle.dm +++ b/code/modules/reagents/reagent_containers/chemical_bottle.dm @@ -168,6 +168,12 @@ icon_state = "round_bottle" list_reagents = list("sulfonal" = 30) +/obj/item/reagent_containers/glass/bottle/love + name = "love bottle" + desc = "A small bottle of love." + icon_state = "round_bottle" + list_reagents = list("love" = 50) + //Reagent bottles /obj/item/reagent_containers/glass/bottle/reagent diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index c01c219ac55..5e08df463b2 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -145,6 +145,16 @@ build_path = /obj/item/weaponcrafting/gunkit/plasma category = list("Weapons") +/datum/design/sparker + name = "SPRK-12 Pistol Parts Kit" + desc = "A small, pistol-sized laser gun designed to regain charges from EMPs. Energy efficient, though it's beams are weaker. Good at dual wielding, however." + id = "sparker" + req_tech = list("combat" = 5, "magnets" = 5, "powerstorage" = 5, "plasmatech" = 5) + build_type = PROTOLATHE + materials = list(MAT_METAL = 2500, MAT_GLASS = 1000, MAT_SILVER = 1500) + build_path = /obj/item/weaponcrafting/gunkit/sparker + category = list("Weapons") + //WT550 Mags /datum/design/mag_oldsmg name = "WT-550 PDW Magazine (4.6x30mm)" diff --git a/code/modules/supply/supply_packs/pack_shuttle.dm b/code/modules/supply/supply_packs/pack_shuttle.dm index 6afc8e46aff..4a5ba2d7703 100644 --- a/code/modules/supply/supply_packs/pack_shuttle.dm +++ b/code/modules/supply/supply_packs/pack_shuttle.dm @@ -93,6 +93,11 @@ cost = 4500 //I do wonder about shuttle prices, especially considering how many guns you could get for this price. Perhaps a lowering in the future. template = /datum/map_template/shuttle/emergency/raven +/datum/supply_packs/abstract/shuttle/shadow + cost = 3250 + template = /datum/map_template/shuttle/emergency/shadow + speed_factor = 2 //Fast enough that it probably won't burn down entirely after the crew looses the plasma + // these, otoh, have some pretty silly features, and are hidden behind emag /datum/supply_packs/abstract/shuttle/clown diff --git a/code/modules/surgery/bio_chip_removal.dm b/code/modules/surgery/bio_chip_removal.dm index 039e1c81c76..e0099c14c38 100644 --- a/code/modules/surgery/bio_chip_removal.dm +++ b/code/modules/surgery/bio_chip_removal.dm @@ -41,14 +41,16 @@ if(times_repeated >= max_times_to_check) user.visible_message( "[user] seems to have had enough and stops checking inside [target].", - "There doesn't seem to be anything inside, you've checked enough times." + "There doesn't seem to be anything inside, you've checked enough times.", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_BEGINSTEP_SKIP I = locate(/obj/item/bio_chip) in target 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]." + "You start poking around inside [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("The pain in your [affected.name] is living hell!") return ..() @@ -59,7 +61,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] grips onto [target]'s [affected.name] by mistake, tearing it!", - "You think you've found something, but you've grabbed onto [target]'s [affected.name] instead, damaging it!" + "You think you've found something, but you've grabbed onto [target]'s [affected.name] instead, damaging it!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(10) return SURGERY_STEP_RETRY @@ -70,7 +73,8 @@ if(I && prob(80)) //implant removal only works on the chest. user.visible_message( "[user] takes something out of [target]'s [affected.name] with \the [tool].", - "You take \an [I] out of [target]'s [affected.name]s with \the [tool]." + "You take \an [I] out of [target]'s [affected.name]s with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) I.removed(target) @@ -94,7 +98,8 @@ 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]." + "You could not find anything inside [target]'s [affected.name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index ddbfd0c74ff..f9c096ab3c1 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -60,7 +60,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].", - "You start applying medication to the damaged bones in [target]'s [affected.name] with \the [tool]." + "You start applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Something in your [affected.name] is causing you a lot of pain!") return ..() @@ -69,7 +70,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user] applies some [tool] to [target]'s bone in [affected.name].", - " You apply some [tool] to [target]'s bone in [affected.name] with \the [tool]." + " You apply some [tool] to [target]'s bone in [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE @@ -78,7 +80,8 @@ 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]!" + " Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_RETRY @@ -96,7 +99,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] is beginning to set the bone in [target]'s [affected.name] in place with \the [tool].", - "You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool]." + "You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("The pain in your [affected.name] is going to make you pass out!") return ..() @@ -105,7 +109,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user] sets the bone in [target]'s [affected.name] in place with \the [tool].", - " You set the bone in [target]'s [affected.name] in place with \the [tool]." + " You set the bone in [target]'s [affected.name] in place with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE @@ -113,7 +118,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!", - " Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!" + " Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(5) return SURGERY_STEP_RETRY @@ -124,7 +130,8 @@ /datum/surgery_step/set_bone/mend_skull/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message( "[user] is beginning piece together [target]'s skull with \the [tool].", - "You are beginning piece together [target]'s skull with \the [tool]." + "You are beginning piece together [target]'s skull with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -132,7 +139,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user] sets [target]'s [affected.encased] with \the [tool].", - " You set [target]'s [affected.encased] with \the [tool]." + " You set [target]'s [affected.encased] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE @@ -141,7 +149,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user]'s hand slips, damaging [target]'s face with \the [tool]!", - "Your hand slips, damaging [target]'s face with \the [tool]!" + "Your hand slips, damaging [target]'s face with \the [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) var/obj/item/organ/external/head/H = affected H.receive_damage(10) @@ -164,7 +173,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] starts to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].", - "You start to finish mending the damaged bones in [target]'s [affected.name] with \the [tool]." + "You start to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -172,7 +182,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user] has mended the damaged bones in [target]'s [affected.name] with \the [tool].", - " You have mended the damaged bones in [target]'s [affected.name] with \the [tool]." + " You have mended the damaged bones in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.mend_fracture() return SURGERY_STEP_CONTINUE @@ -181,6 +192,7 @@ 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]!" + " Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_RETRY diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index e15fa61ca7e..22936b1b981 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -136,7 +136,8 @@ 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]!" + " Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(20) return SURGERY_STEP_RETRY @@ -156,7 +157,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] starts making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", - "You start making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." + "You start making some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("The pain in your chest is living hell!") return ..() @@ -165,7 +167,8 @@ var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) user.visible_message( " [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", - " You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." + " You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE @@ -186,7 +189,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] starts mending [target]'s [get_cavity(affected)] cavity wall with \the [tool].", - "You start mending [target]'s [get_cavity(affected)] cavity wall with \the [tool]." + "You start mending [target]'s [get_cavity(affected)] cavity wall with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("The pain in your chest is living hell!") return ..() @@ -195,7 +199,8 @@ var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) user.visible_message( " [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", - " You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." + " You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE @@ -218,7 +223,8 @@ // Check even if there isn't anything inside user.visible_message( "[user] checks for items in [target]'s [target_zone].", - "You check for items in [target]'s [target_zone]..." + "You check for items in [target]'s [target_zone]...", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -239,7 +245,8 @@ return SURGERY_STEP_CONTINUE user.visible_message( "[user] pulls [extracting] out of [target]'s [target_zone]!", - "You pull [extracting] out of [target]'s [target_zone]." + "You pull [extracting] out of [target]'s [target_zone].", + chat_message_type = MESSAGE_TYPE_COMBAT ) user.put_in_hands(extracting) affected.hidden = null @@ -249,7 +256,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] grabs onto something else by mistake, damaging it!.", - "You grab onto something else inside [target]'s [get_cavity(affected)] cavity by mistake, damaging it!" + "You grab onto something else inside [target]'s [get_cavity(affected)] cavity by mistake, damaging it!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.damage += rand(3, 5) @@ -298,7 +306,8 @@ user.visible_message( "[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", - "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." + "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("The pain in your [target_zone] is living hell!") return ..() @@ -311,13 +320,14 @@ user.visible_message( "[user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", - "You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." + "You put \the [tool] inside [target]'s [get_cavity(affected)] cavity.", + chat_message_type = MESSAGE_TYPE_COMBAT ) if((tool.w_class > get_max_wclass(affected) / 2 && prob(50) && !affected.is_robotic())) user.visible_message( "[user] tears some blood vessels trying to fit the object in the cavity!", "You tear some blood vessels trying to fit the object into the cavity!", - "You hear some gentle tearing.") + "You hear some gentle tearing.", MESSAGE_TYPE_COMBAT) affected.cause_internal_bleeding() user.drop_item() affected.hidden = tool diff --git a/code/modules/surgery/core_removal.dm b/code/modules/surgery/core_removal.dm index a31217a5586..e89d1491243 100644 --- a/code/modules/surgery/core_removal.dm +++ b/code/modules/surgery/core_removal.dm @@ -22,17 +22,17 @@ time = 1.6 SECONDS /datum/surgery_step/slime/cut_flesh/begin_step(mob/user, mob/living/simple_animal/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].") + user.visible_message("[user] starts cutting through [target]'s flesh with \the [tool].", "You start cutting through [target]'s flesh with \the [tool].", chat_message_type = MESSAGE_TYPE_COMBAT) return ..() /datum/surgery_step/slime/cut_flesh/end_step(mob/living/user, mob/living/simple_animal/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.") + " You cut through [target]'s flesh with \the [tool], revealing its silky innards.", chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_CONTINUE /datum/surgery_step/slime/cut_flesh/fail_step(mob/living/user, mob/living/simple_animal/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]!") + " Your hand slips, tearing [target]'s flesh with \the [tool]!", chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_RETRY /datum/surgery_step/slime/extract_core @@ -43,7 +43,8 @@ /datum/surgery_step/slime/extract_core/begin_step(mob/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool) user.visible_message( "[user] begins to extract a core from [target].", - "You begin to extract a core from [target]..." + "You begin to extract a core from [target]...", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -52,7 +53,7 @@ if(slime.cores > 0) slime.cores-- user.visible_message("[user] successfully extracts a core from [slime]!", - "You successfully extract a core from [slime]. [slime.cores] core\s remaining.") + "You successfully extract a core from [slime]. [slime.cores] core\s remaining.", chat_message_type = MESSAGE_TYPE_COMBAT) new slime.coretype(slime.loc) @@ -67,5 +68,5 @@ /datum/surgery_step/slime/extract_core/fail_step(mob/living/user, mob/living/simple_animal/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]!") + " Your hand slips, tearing [target]'s flesh with \the [tool]!", chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_RETRY diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm index 8a1bed115b7..841b13d39c7 100644 --- a/code/modules/surgery/dental_implant.dm +++ b/code/modules/surgery/dental_implant.dm @@ -18,7 +18,8 @@ /datum/surgery_step/insert_pill/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message( "[user] begins to wedge \the [tool] in [target]'s [parse_zone(target_zone)].", - "You begin to wedge [tool] in [target]'s [parse_zone(target_zone)]..." + "You begin to wedge [tool] in [target]'s [parse_zone(target_zone)]...", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -30,7 +31,7 @@ for(var/obj/item/reagent_containers/pill in target.contents) // Can't give them more than 4 dental implants. dental_implants++ if(dental_implants >= 4) - user.visible_message("[user] pulls \the [tool] back out of [target]'s [parse_zone(target_zone)]!", "You pull \the [tool] back out of [target]'s [parse_zone(target_zone)], there wans't enough room...") + user.visible_message("[user] pulls \the [tool] back out of [target]'s [parse_zone(target_zone)]!", "You pull \the [tool] back out of [target]'s [parse_zone(target_zone)], there wans't enough room...", chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_INCOMPLETE user.drop_item() @@ -40,7 +41,7 @@ P.name = "Activate Pill ([tool.name])" P.Grant(target) - user.visible_message("[user] wedges \the [tool] into [target]'s [parse_zone(target_zone)]!", "You wedge [tool] into [target]'s [parse_zone(target_zone)].") + user.visible_message("[user] wedges \the [tool] into [target]'s [parse_zone(target_zone)]!", "You wedge [tool] into [target]'s [parse_zone(target_zone)].", chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_CONTINUE /datum/action/item_action/hands_free/activate_pill diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 86388407fbf..acf72adcf95 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -10,7 +10,8 @@ name = "saw bone" allowed_tools = list( TOOL_SAW = 100, - /obj/item/hatchet = 90 + /obj/item/hatchet = 90, + /obj/item/wirecutters = 35 // silly goose ) time = 5.4 SECONDS @@ -20,7 +21,8 @@ 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]." + "You begin to cut through [target]'s [affected.encased] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Something hurts horribly in your [affected.name]!") return ..() @@ -30,7 +32,8 @@ 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]." + " You have cut [target]'s [affected.encased] open with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.open = ORGAN_ORGANIC_ENCASED_OPEN affected.fracture(silent = TRUE) @@ -41,7 +44,8 @@ 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]!" + " Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(20) @@ -65,7 +69,8 @@ user.visible_message( "[user] starts to force open the [affected.encased] in [target]'s [affected.name] with \the [tool].", - "You start to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]." + "You start to force open the [affected.encased] in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Something hurts horribly in your [affected.name]!") return ..() @@ -76,7 +81,8 @@ user.visible_message( " [user] forces open [target]'s [affected.encased] with \the [tool].", - " You force open [target]'s [affected.encased] with \the [tool]." + " You force open [target]'s [affected.encased] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.open = ORGAN_ORGANIC_ENCASED_OPEN @@ -88,7 +94,8 @@ user.visible_message( " [user]'s hand slips, cracking [target]'s [affected.encased]!", - " Your hand slips, cracking [target]'s [affected.encased]!" + " Your hand slips, cracking [target]'s [affected.encased]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(20) @@ -111,7 +118,8 @@ user.visible_message( "[user] starts bending [target]'s [affected.encased] back into place with \the [tool].", - "You start bending [target]'s [affected.encased] back into place with \the [tool]." + "You start bending [target]'s [affected.encased] back into place with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Something hurts horribly in your [affected.name]!") return ..() @@ -121,7 +129,8 @@ user.visible_message( "[user] bends [target]'s [affected.encased] back into place with \the [tool].", - "You bend [target]'s [affected.encased] back into place with \the [tool]." + "You bend [target]'s [affected.encased] back into place with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE @@ -131,7 +140,8 @@ user.visible_message( "[user]'s hand slips, bending [target]'s [affected.encased] the wrong way!", - "Your hand slips, bending [target]'s [affected.encased] the wrong way!" + "Your hand slips, bending [target]'s [affected.encased] the wrong way!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(20) @@ -153,7 +163,8 @@ user.visible_message( "[user] starts applying \the [tool] to [target]'s [affected.encased].", - "You start applying \the [tool] to [target]'s [affected.encased]." + "You start applying \the [tool] to [target]'s [affected.encased].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Something hurts horribly in your [affected.name]!") return ..() @@ -163,7 +174,8 @@ user.visible_message( " [user] applied \the [tool] to [target]'s [affected.encased].", - " You applied \the [tool] to [target]'s [affected.encased]." + " You applied \the [tool] to [target]'s [affected.encased].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.open = ORGAN_ORGANIC_OPEN diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 8c8a2906680..244eed75241 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -27,7 +27,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] starts the incision on [target]'s [affected.name] with \the [tool].", - "You start the incision on [target]'s [affected.name] with \the [tool]." + "You start the incision on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("You feel a horrible pain as if from a sharp knife in your [affected.name]!") return ..() @@ -36,7 +37,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user] has made an incision on [target]'s [affected.name] with \the [tool].", - " You have made an incision on [target]'s [affected.name] with \the [tool]." + " You have made an incision on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.open = ORGAN_ORGANIC_OPEN target.resume_bleeding() @@ -46,7 +48,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user]'s hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!", - " Your hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!" + " Your hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(10) return SURGERY_STEP_RETRY @@ -58,6 +61,7 @@ TOOL_HEMOSTAT = 100, /obj/item/scalpel/laser = 100, /obj/item/stack/cable_coil = 90, + /obj/item/stack/sheet/sinew = 90, /obj/item/assembly/mousetrap = 25 ) @@ -68,7 +72,8 @@ 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]." + "You start clamping bleeders in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("The pain in your [affected.name] is maddening!") return ..() @@ -77,7 +82,8 @@ 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]." + " You clamp bleeders in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) spread_germs_to_organ(affected, user, tool) return SURGERY_STEP_CONTINUE @@ -86,7 +92,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user]'s hand slips, tearing blood vessels 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]!" + " Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(10) return SURGERY_STEP_RETRY @@ -114,7 +121,7 @@ if(target_zone == BODY_ZONE_PRECISE_GROIN) msg = "[user] starts to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]." self_msg = "You start to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]." - user.visible_message(msg, self_msg) + user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT) affected.custom_pain("It feels like the skin on your [affected.name] is on fire!") return ..() @@ -128,7 +135,7 @@ if(target_zone == BODY_ZONE_PRECISE_GROIN) msg = " [user] keeps the incision open on [target]'s lower abdomen with \the [tool]." self_msg = " You keep the incision open on [target]'s lower abdomen with \the [tool]." - user.visible_message(msg, self_msg) + user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT) affected.open = ORGAN_ORGANIC_ENCASED_OPEN return SURGERY_STEP_CONTINUE @@ -142,7 +149,7 @@ if(target_zone == BODY_ZONE_PRECISE_GROIN) msg = "[user]'s hand slips, damaging several organs [target]'s lower abdomen with \the [tool]" self_msg = " Your hand slips, damaging several organs [target]'s lower abdomen with \the [tool]!" - user.visible_message(msg, self_msg) + user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT) target.apply_damage(12, BRUTE, affected, sharp = TRUE) return SURGERY_STEP_RETRY @@ -164,7 +171,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] is beginning to cauterize the incision on [target]'s [affected.name] with \the [tool].", - "You are beginning to cauterize the incision on [target]'s [affected.name] with \the [tool]." + "You are beginning to cauterize the incision on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Your [affected.name] is being burned!") return ..() @@ -173,7 +181,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] cauterizes the incision on [target]'s [affected.name] with \the [tool].", - "You cauterize the incision on [target]'s [affected.name] with \the [tool]." + "You cauterize the incision on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.open = ORGAN_CLOSED affected.germ_level = 0 @@ -183,7 +192,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user]'s hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!", - "Your hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!" + "Your hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) target.apply_damage(3, BURN, affected) return SURGERY_STEP_RETRY @@ -196,7 +206,8 @@ user.visible_message( "[user] is beginning to cauterize the incision on [target]'s [affected.name] with \the [tool].", // give a little heads up to the surgeon that they're stopping the surgery prematurely in case that wasn't the intention. - "You are interrupting the current surgery, beginning to cauterize the incision on [target]'s [affected.name] with \the [tool]." + "You are interrupting the current surgery, beginning to cauterize the incision on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Your [affected.name] is being burned!") return ..() @@ -217,7 +228,8 @@ /datum/surgery_step/generic/drill/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message( "[user] begins to drill into the bone in [target]'s [parse_zone(target_zone)].", - "You begin to drill into the bone in [target]'s [parse_zone(target_zone)]..." + "You begin to drill into the bone in [target]'s [parse_zone(target_zone)]...", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -229,7 +241,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user]'s [tool] doesn't get a firm grip and tears at the bone in [target]'s [parse_zone(target_zone)]!", - "Your [tool] doesn't get a firm grip and tears at the bone in [target]'s [parse_zone(target_zone)]!" + "Your [tool] doesn't get a firm grip and tears at the bone in [target]'s [parse_zone(target_zone)]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(15) @@ -251,7 +264,8 @@ 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]." + "You are beginning to cut through [target]'s [affected.amputation_point] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Your [affected.amputation_point] is being ripped apart!") return ..() @@ -260,7 +274,8 @@ 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]." + " You amputate [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) add_attack_logs(user, target, "Surgically removed [affected.name]. INTENT: [uppertext(user.a_intent)]")//log it @@ -279,7 +294,8 @@ 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, sawing through the bone in [target]'s [affected.name] with \the [tool]!" + " Your hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(30) affected.fracture() diff --git a/code/modules/surgery/limb_augmentation.dm b/code/modules/surgery/limb_augmentation.dm index c3086fb4fb5..b8331903d58 100644 --- a/code/modules/surgery/limb_augmentation.dm +++ b/code/modules/surgery/limb_augmentation.dm @@ -32,7 +32,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] starts augmenting [affected] with [tool].", - "You start augmenting [affected] with [tool]." + "You start augmenting [affected] with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() to_chat(user, "[tool] cannot be used to augment this limb!") @@ -45,7 +46,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] has finished augmenting [affected] with [tool].", - "You augment [affected] with [tool]." + "You augment [affected] with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) if(L.part) diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 43d2d314cc8..f1557b69be0 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -117,7 +117,8 @@ 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]." + "You start attaching [E.name] to [target]'s [E.amputation_point].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -125,7 +126,8 @@ 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]." + "You have attached [target]'s [E.name] to the [E.amputation_point].", + chat_message_type = MESSAGE_TYPE_COMBAT ) attach_limb(user, target, E) return SURGERY_STEP_CONTINUE @@ -134,7 +136,8 @@ 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]!" + "Your hand slips, damaging [target]'s [E.amputation_point]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) target.apply_damage(10, BRUTE, null, sharp = TRUE) return SURGERY_STEP_RETRY @@ -194,7 +197,8 @@ 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]." + "You start connecting tendons and muscle in [target]'s [E.amputation_point].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -202,7 +206,8 @@ 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]." + "You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) E.properly_attached = TRUE target.update_body() @@ -214,7 +219,8 @@ 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]!" + "Your hand slips, damaging [target]'s [E.amputation_point]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) target.apply_damage(10, BRUTE, null, sharp = TRUE) return SURGERY_STEP_RETRY @@ -235,7 +241,8 @@ user.visible_message( "[user] starts attaching \the [tool] to [target].", - "You start attaching \the [tool] to [target]." + "You start attaching \the [tool] to [target].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -243,7 +250,8 @@ var/obj/item/robot_parts/L = tool user.visible_message( "[user] has attached \the [tool] to [target].", - "You have attached \the [tool] to [target]." + "You have attached \the [tool] to [target].", + chat_message_type = MESSAGE_TYPE_COMBAT ) if(L.part) @@ -273,7 +281,8 @@ /datum/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!" + "Your hand slips, damaging [target]'s flesh!", + chat_message_type = MESSAGE_TYPE_COMBAT ) target.apply_damage(10, BRUTE, null, sharp = TRUE) return SURGERY_STEP_RETRY diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index b366926e503..97ea59781f4 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -739,12 +739,12 @@ if(crit_fail) return if(owner.maxHealth == owner.health) - owner.adjust_nutrition(-0.5) + owner.adjust_nutrition(-0.25) return //Passive damage scanning owner.adjustBruteLoss(-0.5, robotic = TRUE) owner.adjustFireLoss(-0.5, robotic = TRUE) - owner.adjust_nutrition(-4) //Very power inefficent. Hope you got an APC nearby. + owner.adjust_nutrition(-2) //Very power inefficent. Hope you got an APC nearby. /obj/item/organ/internal/cyberimp/chest/ipc_repair/emp_act(severity) if(!owner || emp_proof || crit_fail) diff --git a/code/modules/surgery/organs/brain.dm b/code/modules/surgery/organs/brain.dm index 833ee9ceca5..d6efa77a414 100644 --- a/code/modules/surgery/organs/brain.dm +++ b/code/modules/surgery/organs/brain.dm @@ -101,7 +101,7 @@ var/mob/living/carbon/human/H = target H.update_hair() - if(ischangeling(target)) + if(IS_CHANGELING(target)) decoy_brain = TRUE if(!brain_already_exists) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 6921c16efce..aa542a8e91a 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -244,13 +244,15 @@ if(!I.is_robotic() && !istype(tool, /obj/item/stack/nanopaste)) 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]." + " You treat damage to [target]'s [I.name] with [tool_name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) I.damage = 0 else if(I.is_robotic() && istype (tool, /obj/item/stack/nanopaste)) 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]." + " You treat damage to [target]'s [I.name] with [tool_name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) I.damage = 0 return SURGERY_STEP_CONTINUE @@ -263,7 +265,8 @@ user.visible_message( " [user]'s hand slips, getting messy and tearing the inside of [target]'s [parse_zone(target_zone)] with [tool]!", - " Your hand slips, getting messy and tearing the inside of [target]'s [parse_zone(target_zone)] with [tool]!" + " Your hand slips, getting messy and tearing the inside of [target]'s [parse_zone(target_zone)] with [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) var/dam_amt = 2 @@ -289,6 +292,8 @@ name = "extract organ" allowed_tools = list( TOOL_HEMOSTAT = 100, + /obj/item/stack/sheet/sinew = 70, + /obj/item/stack/cable_coil = 70, /obj/item/kitchen/utensil/fork = 70 ) @@ -314,7 +319,8 @@ return SURGERY_BEGINSTEP_SKIP user.visible_message( "[user] starts to separate [target]'s [I] with [tool].", - "You start to separate [target]'s [I] with [tool] for removal." + "You start to separate [target]'s [I] with [tool] for removal.", + chat_message_type = MESSAGE_TYPE_COMBAT ) var/mob/living/carbon/human/H = target var/obj/item/organ/affected = H.get_organ(user.zone_selected) @@ -329,13 +335,15 @@ if(!extracting || extracting.owner != target) user.visible_message( "[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", - "You can't extract anything from [target]'s [parse_zone(target_zone)]!" + "You can't extract anything from [target]'s [parse_zone(target_zone)]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE user.visible_message( " [user] has separated and extracts [target]'s [extracting] with [tool].", - " You have separated and extracted [target]'s [extracting] with [tool]." + " You have separated and extracted [target]'s [extracting] with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) add_attack_logs(user, target, "Surgically removed [extracting.name]. INTENT: [uppertext(user.a_intent)]") @@ -357,19 +365,22 @@ if(affected) user.visible_message( " [user]'s hand slips, damaging [target]'s [affected.name] with [tool]!", - " Your hand slips, damaging [target]'s [affected.name] with [tool]!" + " Your hand slips, damaging [target]'s [affected.name] with [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(20) else user.visible_message( " [user]'s hand slips, damaging [target]'s [parse_zone(target_zone)] with [tool]!", - " Your hand slips, damaging [target]'s [parse_zone(target_zone)] with [tool]!" + " Your hand slips, damaging [target]'s [parse_zone(target_zone)] with [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_RETRY else user.visible_message( "[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", - "You can't extract anything from [target]'s [parse_zone(target_zone)]!" + "You can't extract anything from [target]'s [parse_zone(target_zone)]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE @@ -415,13 +426,15 @@ if(affected) user.visible_message( "[user] starts transplanting [tool] into [target]'s [affected.name].", - "You start transplanting [tool] into [target]'s [affected.name]." + "You start transplanting [tool] into [target]'s [affected.name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Someone's rooting around in your [affected.name]!") else user.visible_message( "[user] starts transplanting [tool] into [target]'s [parse_zone(target_zone)].", - "You start transplanting [tool] into [target]'s [parse_zone(target_zone)]." + "You start transplanting [tool] into [target]'s [parse_zone(target_zone)].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -444,17 +457,20 @@ if(affected) user.visible_message(" [user] has transplanted [tool] into [target]'s [affected.name].", - " You have transplanted [tool] into [target]'s [affected.name].") + " You have transplanted [tool] into [target]'s [affected.name].", + chat_message_type = MESSAGE_TYPE_COMBAT) else user.visible_message(" [user] has transplanted [tool] into [target]'s [parse_zone(target_zone)].", - " You have transplanted [tool] into [target]'s [parse_zone(target_zone)].") + " You have transplanted [tool] into [target]'s [parse_zone(target_zone)].", + chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_CONTINUE /datum/surgery_step/internal/manipulate_organs/implant/fail_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message( "[user]'s hand slips, damaging [tool]!", - "Your hand slips, damaging [tool]!" + "Your hand slips, damaging [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) var/obj/item/organ/internal/I = tool if(istype(I) && !I.tough) @@ -565,12 +581,14 @@ if(istype(C, /obj/item/reagent_containers/syringe)) user.visible_message( " [user] has injected [tool] into [target]'s [I.name].", - " You have injected [tool] into [target]'s [I.name]." + " You have injected [tool] into [target]'s [I.name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) else user.visible_message( " [user] has poured some of [tool] over [target]'s [I.name].", - " You have poured some of [tool] over [target]'s [I.name]." + " You have poured some of [tool] over [target]'s [I.name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) R.reaction(target, REAGENT_INGEST, R.total_volume / C.amount_per_transfer_from_this) @@ -611,7 +629,8 @@ user.visible_message( " [user]'s hand slips, splashing the contents of [tool] all over [target][affected ? "'s [affected.name]" : ""] incision!", - " Your hand slips, splashing the contents of [tool] all over [target][affected ? "'s [affected.name]" : ""] incision!" + " Your hand slips, splashing the contents of [tool] all over [target][affected ? "'s [affected.name]" : ""] incision!", + chat_message_type = MESSAGE_TYPE_COMBAT ) // continue here since we want to keep moving in the surgery return SURGERY_STEP_CONTINUE @@ -628,14 +647,15 @@ /datum/surgery_step/internal/manipulate_organs/finish/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/msg + var/self_msg if(affected && affected.encased) - var/msg = "[user] starts bending [target]'s [affected.encased] back into place with [tool]." - var/self_msg = "You start bending [target]'s [affected.encased] back into place with [tool]." - user.visible_message(msg, self_msg) + msg = "[user] starts bending [target]'s [affected.encased] back into place with [tool]." + self_msg = "You start bending [target]'s [affected.encased] back into place with [tool]." else - var/msg = "[user] starts pulling [target]'s skin back into place with [tool]." - var/self_msg = "You start pulling [target]'s skin back into place with [tool]." - user.visible_message(msg, self_msg) + msg = "[user] starts pulling [target]'s skin back into place with [tool]." + self_msg = "You start pulling [target]'s skin back into place with [tool]." + user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT) if(H && affected) affected.custom_pain("Something hurts horribly in your [affected.name]!") @@ -654,7 +674,7 @@ msg = "[user] pulls [target]'s flesh back into place with [tool]." self_msg = "You pull [target]'s flesh back into place with [tool]." - user.visible_message(msg, self_msg) + user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_CONTINUE /datum/surgery_step/internal/manipulate_organs/finish/fail_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -670,7 +690,7 @@ self_msg = " Your hand slips, tearing skin!" if(affected) affected.receive_damage(20) - user.visible_message(msg, self_msg) + user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_RETRY ////////////////////////////////////////////////////////////////// @@ -730,14 +750,16 @@ /datum/surgery_step/cut_carapace/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message("[user] starts the incision on [target]'s [target_zone] with [tool].", \ - "You start the incision on [target]'s [target_zone] with [tool].") + "You start the incision on [target]'s [target_zone] with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT) return ..() /datum/surgery_step/cut_carapace/end_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message( " [user] has made an incision on [target]'s [target_zone] with [tool].", - " You have made an incision on [target]'s [target_zone] with [tool]." + " You have made an incision on [target]'s [target_zone] with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE @@ -745,7 +767,8 @@ user.visible_message( "[user]'s hand slips, slicing open [target]'s [target_zone] in a wrong spot with [tool]!", - "Your hand slips, slicing open [target]'s [target_zone] in a wrong spot with [tool]!" + "Your hand slips, slicing open [target]'s [target_zone] in a wrong spot with [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_RETRY @@ -770,7 +793,7 @@ if(target_zone == BODY_ZONE_PRECISE_GROIN) msg = "[user] starts to pry open the incision and rearrange the organs in [target]'s lower abdomen with [tool]." self_msg = "You start to pry open the incision and rearrange the organs in [target]'s lower abdomen with [tool]." - user.visible_message(msg, self_msg) + user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT) return ..() /datum/surgery_step/retract_carapace/end_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -782,7 +805,7 @@ if(target_zone == BODY_ZONE_PRECISE_GROIN) msg = " [user] keeps the incision open on [target]'s lower abdomen with [tool]." self_msg = " You keep the incision open on [target]'s lower abdomen with [tool]." - user.visible_message(msg, self_msg) + user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_CONTINUE /datum/surgery_step/generic/retract_carapace/fail_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -794,7 +817,7 @@ if(target_zone == BODY_ZONE_PRECISE_GROIN) msg = " [user]'s hand slips, damaging several organs in [target]'s lower abdomen with [tool]" self_msg = " Your hand slips, damaging several organs in [target]'s lower abdomen with [tool]!" - user.visible_message(msg, self_msg) + user.visible_message(msg, self_msg, chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_RETRY // redefine cauterize for every step because of course it relies on get_organ() @@ -825,7 +848,8 @@ var/zone = zone_name(target_zone) user.visible_message( "[user] is beginning to cauterize the incision on [target]'s [zone] with \the [tool].", - "You are beginning to cauterize the incision on [target]'s [zone] with \the [tool]." + "You are beginning to cauterize the incision on [target]'s [zone] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) to_chat(user, "Your [zone] is being burned!") // No custom pain because xenos are special return ..() @@ -834,7 +858,8 @@ var/zone = zone_name(target_zone) user.visible_message( "[user] cauterizes the incision on [target]'s [zone] with \the [tool].", - "You cauterize the incision on [target]'s [zone] with \the [tool]." + "You cauterize the incision on [target]'s [zone] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE @@ -842,7 +867,8 @@ var/zone = zone_name(target_zone) user.visible_message( "[user]'s hand slips, leaving a small burn on [target]'s [zone] with \the [tool]!", - "Your hand slips, leaving a small burn on [target]'s [zone] with \the [tool]!" + "Your hand slips, leaving a small burn on [target]'s [zone] with \the [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) target.apply_damage(3, BURN, target_zone) return SURGERY_STEP_RETRY diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index cc4f1ccea02..6743fce0a65 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -75,7 +75,8 @@ name = "mend internal bleeding" allowed_tools = list( TOOL_FIXOVEIN = 100, - /obj/item/stack/cable_coil = 90 + /obj/item/stack/cable_coil = 90, + /obj/item/stack/sheet/sinew = 90 ) can_infect = TRUE blood_level = SURGERY_BLOODSPREAD_HANDS @@ -90,7 +91,8 @@ user.visible_message( "[user] starts patching the damaged vein in [target]'s [affected.name] with \the [tool].", - "You start patching the damaged vein in [target]'s [affected.name] with \the [tool]." + "You start patching the damaged vein in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("The pain in your [affected.name] is unbearable!") return ..() @@ -100,7 +102,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user] has patched the damaged vein in [target]'s [affected.name] with \the [tool].", - " You have patched the damaged vein in [target]'s [affected.name] with \the [tool]." + " You have patched the damaged vein in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.fix_internal_bleeding() @@ -114,7 +117,8 @@ 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]!" + "Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(5, 0) @@ -139,7 +143,8 @@ user.visible_message( "[user] starts to treat the scorched tissue in [target]'s [affected.name] with [tool].", - "You start to treat the scorched tissue in [target]'s [affected.name] with [tool]." + "You start to treat the scorched tissue in [target]'s [affected.name] with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Your [affected.name] flares with agony as its burn is touched!") @@ -156,7 +161,8 @@ user.visible_message( "[user] finishes treating affected tissue in [target]'s [affected.name].", - "You finish treating affected tissue in [target]'s [affected.name] with [tool]." + "You finish treating affected tissue in [target]'s [affected.name] with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE @@ -169,7 +175,8 @@ user.visible_message( "[user]'s hand slips, applying [tool] in the wrong place on [target]'s [affected.name]!", - "Your hand slips, applying [tool] in the wrong place on [target]'s [affected.name]!" + "Your hand slips, applying [tool] in the wrong place on [target]'s [affected.name]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_RETRY @@ -191,7 +198,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] starts cutting away necrotic tissue in [target]'s [affected.name] with \the [tool].", - "You start cutting away necrotic tissue in [target]'s [affected.name] with \the [tool]." + "You start cutting away necrotic tissue in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("The pain in [affected.name] is unbearable!") return ..() @@ -200,7 +208,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user] has cut away necrotic tissue in [target]'s [affected.name] with \the [tool].", - " You have cut away necrotic tissue in [target]'s [affected.name] with \the [tool]." + " You have cut away necrotic tissue in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.open = ORGAN_ORGANIC_OPEN @@ -210,7 +219,8 @@ 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 [tool]!", - "Your hand slips, slicing an artery inside [target]'s [affected.name] with [tool]!" + "Your hand slips, slicing an artery inside [target]'s [affected.name] with [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.receive_damage(20) @@ -240,7 +250,9 @@ if(!container.reagents.has_reagent("mitocholide")) user.visible_message( "[user] looks at \the [tool] and ponders.", - "You are not sure if \the [tool] contains the mitocholide necessary to treat the necrosis.") + "You are not sure if \the [tool] contains the mitocholide necessary to treat the necrosis.", + chat_message_type = MESSAGE_TYPE_COMBAT + ) return FALSE /datum/surgery_step/treat_necrosis/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -253,7 +265,8 @@ user.visible_message( "[user] starts applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].", - "You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool]." + "You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Something in your [affected.name] is causing you a lot of pain!") return ..() @@ -279,7 +292,8 @@ user.visible_message( " [user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name]", - " You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool]." + " You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE @@ -297,7 +311,8 @@ 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]!" + "Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) //no damage or anything, just wastes medicine diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index 1aaa027b022..43fa6078ed6 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -16,7 +16,11 @@ time = 6.4 SECONDS /datum/surgery_step/reshape_face/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to alter [target]'s appearance.", "You begin to alter [target]'s appearance...") + user.visible_message( + "[user] begins to alter [target]'s appearance.", + "You begin to alter [target]'s appearance...", + chat_message_type = MESSAGE_TYPE_COMBAT + ) return ..() /datum/surgery_step/reshape_face/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -24,7 +28,11 @@ var/species_names = target.dna.species.name if(head.status & ORGAN_DISFIGURED) head.status &= ~ORGAN_DISFIGURED - user.visible_message("[user] successfully restores [target]'s appearance!", "You successfully restore [target]'s appearance.") + user.visible_message( + "[user] successfully restores [target]'s appearance!", + "You successfully restore [target]'s appearance.", + chat_message_type = MESSAGE_TYPE_COMBAT + ) else var/list/names = list() var/list_size = 10 @@ -74,7 +82,11 @@ var/oldname = target.real_name target.real_name = chosen_name var/newname = target.real_name //something about how the code handles names required that I use this instead of target.real_name - user.visible_message("[user] alters [oldname]'s appearance completely, [target.p_they()] [target.p_are()] now [newname]!", "You alter [oldname]'s appearance completely, [target.p_they()] [target.p_are()] now [newname].") + user.visible_message( + "[user] alters [oldname]'s appearance completely, [target.p_they()] [target.p_are()] now [newname]!", + "You alter [oldname]'s appearance completely, [target.p_they()] [target.p_are()] now [newname].", + chat_message_type = MESSAGE_TYPE_COMBAT + ) target.sec_hud_set_ID() return SURGERY_STEP_CONTINUE @@ -83,7 +95,8 @@ var/obj/item/organ/external/head/head = target.get_organ(target_zone) user.visible_message( " [user]'s hand slips, tearing skin on [target]'s face with [tool]!", - " Your hand slips, tearing skin on [target]'s face with [tool]!" + " Your hand slips, tearing skin on [target]'s face with [tool]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) target.apply_damage(10, BRUTE, head, sharp = TRUE) return SURGERY_STEP_RETRY diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm index 513fcd1f022..2770e260f72 100644 --- a/code/modules/surgery/remove_embedded_object.dm +++ b/code/modules/surgery/remove_embedded_object.dm @@ -69,7 +69,11 @@ H.clear_alert("embeddedobject") if(objects > 0) - user.visible_message("[user] successfully removes [objects] object\s from [H]'s [parse_zone(user.zone_selected)]!", "You successfully remove [objects] object\s from [H]'s [L.name].") + user.visible_message( + "[user] successfully removes [objects] object\s from [H]'s [parse_zone(user.zone_selected)]!", + "You successfully remove [objects] object\s from [H]'s [L.name].", + chat_message_type = MESSAGE_TYPE_COMBAT + ) else to_chat(user, "You find no objects embedded in [H]'s [parse_zone(user.zone_selected)]!") diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index bbd8a70b96d..4818d47873e 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -122,7 +122,8 @@ 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]." + "You start to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -130,7 +131,8 @@ 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]." + " You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.open = ORGAN_SYNTHETIC_LOOSENED return SURGERY_STEP_CONTINUE @@ -139,7 +141,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user]'s [tool.name] slips, failing to unscrew [target]'s [affected.name].", - " Your [tool] slips, failing to unscrew [target]'s [affected.name]." + " Your [tool] slips, failing to unscrew [target]'s [affected.name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_RETRY @@ -157,7 +160,8 @@ 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]." + "You start to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -165,7 +169,8 @@ 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]." + " You open the maintenance hatch on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.open = ORGAN_SYNTHETIC_OPEN return SURGERY_STEP_CONTINUE @@ -174,7 +179,8 @@ 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]." + " Your [tool] slips, failing to open the hatch on [target]'s [affected.name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_RETRY @@ -192,7 +198,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] begins to close and secure the hatch on [target]'s [affected.name] with \the [tool].", - "You begin to close and secure the hatch on [target]'s [affected.name] with \the [tool]." + "You begin to close and secure the hatch on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -200,7 +207,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", - " You close and secure the hatch on [target]'s [affected.name] with \the [tool]." + " You close and secure the hatch on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) tool.play_tool_sound(target) affected.open = ORGAN_CLOSED @@ -208,8 +216,10 @@ /datum/surgery_step/robotics/external/close_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) 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].") + 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].", + chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_RETRY /datum/surgery_step/robotics/external/close_hatch/premature @@ -219,7 +229,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] begins to close and secure the hatch on [target]'s [affected.name] with \the [tool].", - "You are interrupting the current surgery, beginning to close and secure the hatch on [target]'s [affected.name] with \the [tool]." + "You are interrupting the current surgery, beginning to close and secure the hatch on [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -248,7 +259,8 @@ C.use(3) 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]." + "You begin to splice new cabling into [target]'s [affected.name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -258,7 +270,8 @@ 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]." + " You finishes splicing new cable into [target]'s [affected.name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.heal_damage(0, rand(30, 50), 1, 1) if(affected.burn_dam) @@ -270,7 +283,8 @@ 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]!" + " You cause a short circuit in [target]'s [affected.name]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) target.apply_damage(rand(5, 10), BURN, affected) return SURGERY_STEP_RETRY @@ -292,7 +306,8 @@ return SURGERY_BEGINSTEP_SKIP 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]." + "You begin to patch damage to [target]'s [affected.name]'s support structure with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -301,7 +316,8 @@ 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]." + " You finish patching damage to [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.heal_damage(rand(30, 50), 0, 1, 1) affected.status &= ~ORGAN_DISFIGURED @@ -315,7 +331,8 @@ 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]." + "Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) target.apply_damage(rand(5, 10), BURN, affected) return SURGERY_STEP_RETRY @@ -355,7 +372,8 @@ if(I && I.damage && I.is_robotic()) 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." + "You start mending the damage to [target]'s [I.name]'s mechanisms.", + chat_message_type = MESSAGE_TYPE_COMBAT ) found_damaged_organ = TRUE @@ -376,7 +394,8 @@ if(I.is_robotic()) user.visible_message( " [user] repairs [target]'s [I.name] with [tool].", - " You repair [target]'s [I.name] with [tool]." + " You repair [target]'s [I.name] with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) I.damage = 0 I.surgeryize() @@ -385,8 +404,10 @@ /datum/surgery_step/robotics/manipulate_robotic_organs/mend/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) 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]!") + 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]!", + chat_message_type = MESSAGE_TYPE_COMBAT) target.adjustToxLoss(5) affected.receive_damage(5) @@ -441,14 +462,16 @@ I.insert(target) user.visible_message( " [user] has reattached [target]'s [I].", - " You have reattached [target]'s [I]." + " You have reattached [target]'s [I].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() /datum/surgery_step/robotics/manipulate_robotic_organs/implant/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message( " [user]'s hand slips, disconnecting \the [tool].", - " Your hand slips, disconnecting \the [tool]." + " Your hand slips, disconnecting \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_RETRY @@ -479,7 +502,8 @@ return SURGERY_BEGINSTEP_SKIP user.visible_message( "[user] starts to decouple [target]'s [I] with \the [tool].", - "You start to decouple [target]'s [I] with \the [tool]." + "You start to decouple [target]'s [I] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("The pain in your [affected.name] is living hell!") @@ -492,13 +516,15 @@ if(!I || I.owner != target) user.visible_message( "[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!", - "You can't extract anything from [target]'s [parse_zone(target_zone)]!" + "You can't extract anything from [target]'s [parse_zone(target_zone)]!", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE user.visible_message( " [user] has decoupled [target]'s [I] with \the [tool].", - " You have decoupled [target]'s [I] with \the [tool]." + " You have decoupled [target]'s [I] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) add_attack_logs(user, target, "Surgically removed [I.name]. INTENT: [uppertext(user.a_intent)]") @@ -515,7 +541,8 @@ /datum/surgery_step/robotics/manipulate_robotic_organs/extract/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message( " [user]'s hand slips, disconnecting \the [tool].", - " Your hand slips, disconnecting \the [tool]." + " Your hand slips, disconnecting \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_RETRY @@ -571,7 +598,8 @@ 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]." + " You have installed \the [tool] into [target]'s [affected.name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) var/obj/item/mmi/M = tool @@ -583,7 +611,8 @@ /datum/surgery_step/robotics/manipulate_robotic_organs/install_mmi/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message( " [user]'s hand slips!", - " Your hand slips!" + " Your hand slips!", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_RETRY @@ -600,7 +629,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] starts to decouple [target]'s [affected.name] with \the [tool].", - "You start to decouple [target]'s [affected.name] with \the [tool]." + "You start to decouple [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.custom_pain("Your [affected.amputation_point] is being ripped apart!") @@ -610,7 +640,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( " [user] has decoupled [target]'s [affected.name] with \the [tool].", - " You have decoupled [target]'s [affected.name] with \the [tool]." + " You have decoupled [target]'s [affected.name] with \the [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) @@ -626,7 +657,8 @@ user.visible_message( " [user]'s hand slips!", - " Your hand slips!" + " Your hand slips!", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_RETRY @@ -639,7 +671,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message( "[user] begins to reprogram the appearance of [target]'s [affected.name] with [tool].", - "You begin to reprogram the appearance of [target]'s [affected.name] with [tool]." + "You begin to reprogram the appearance of [target]'s [affected.name] with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -658,15 +691,18 @@ target.UpdateDamageIcon() user.visible_message( " [user] reprograms the appearance of [target]'s [affected.name] with [tool].", - " You reprogram the appearance of [target]'s [affected.name] with [tool]." + " You reprogram the appearance of [target]'s [affected.name] with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) affected.open = ORGAN_CLOSED return SURGERY_STEP_CONTINUE /datum/surgery_step/robotics/external/customize_appearance/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message(" [user]'s [tool.name] slips, failing to reprogram [target]'s [affected.name].", - " Your [tool.name] slips, failing to reprogram [target]'s [affected.name].") + user.visible_message( + " [user]'s [tool.name] slips, failing to reprogram [target]'s [affected.name].", + " Your [tool.name] slips, failing to reprogram [target]'s [affected.name].", + chat_message_type = MESSAGE_TYPE_COMBAT) return SURGERY_STEP_RETRY /datum/surgery/robotics/reconfigure_id @@ -687,7 +723,8 @@ /datum/surgery_step/robotics/edit_serial/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message( "[user] begins to edit [target]'s identity parameters with [tool].", - "You begin to alter [target]'s identity parameters with [tool]." + "You begin to alter [target]'s identity parameters with [tool].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return ..() @@ -714,6 +751,7 @@ target.gender = new_gender user.visible_message( "[user] edits [old_name]'s identity parameters with [tool]; [target.p_they()] [target.p_are()] now known as [new_name].", - "You alter [old_name]'s identity parameters with [tool]; [target.p_they()] [target.p_are()] now known as [new_name]." + "You alter [old_name]'s identity parameters with [tool]; [target.p_they()] [target.p_are()] now known as [new_name].", + chat_message_type = MESSAGE_TYPE_COMBAT ) return SURGERY_STEP_CONTINUE diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 76f2504ef03..f1e1b6c8300 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -2,6 +2,7 @@ //Keep this sorted alphabetically #ifdef UNIT_TESTS +#include "atmos\test_ventcrawl.dm" #include "games\test_cards.dm" #include "jobs\test_job_globals.dm" #include "aicard_icons.dm" diff --git a/code/modules/unit_tests/atmos/test_ventcrawl.dm b/code/modules/unit_tests/atmos/test_ventcrawl.dm new file mode 100644 index 00000000000..7df0fd482e3 --- /dev/null +++ b/code/modules/unit_tests/atmos/test_ventcrawl.dm @@ -0,0 +1,42 @@ +/datum/unit_test/ventcrawl + var/mob/living/simple_animal/slime = null + var/obj/machinery/vent = null + var/obj/structure/table/table = null + +/datum/unit_test/ventcrawl/proc/setup_test_area() + var/datum/map_template/template = GLOB.map_templates["test_ventcrawl.dmm"] + if(!template.load(run_loc_bottom_left)) + Fail("Failed to load 'test_ventcrawl.dmm'") + + slime = new /mob/living/simple_animal/slime/unit_test_dummy(run_loc_bottom_left) + vent = find_spawned_test_object(run_loc_bottom_left, /obj/machinery/atmospherics/unary/vent_pump) + table = find_spawned_test_object(get_step(run_loc_bottom_left, EAST), /obj/structure/table) + +/datum/unit_test/ventcrawl/proc/find_spawned_test_object(turf/location as turf, test_object_type) + for(var/content in location.contents) + if(istype(content, test_object_type)) + return content + Fail("Couldn't find spawned test object of type: [test_object_type].") + +/datum/unit_test/ventcrawl/Run() + setup_test_area() + + // Enter vent + vent.AltClick(slime) + if(slime.loc != vent) + Fail("Failed to crawl into vent.") + + // Movement + slime.loc.relaymove(slime, EAST) + if(slime.loc == vent) + Fail("Failed to step EAST while wentcrawling.") + + // Try to flip table on top of pipe, while inside pipe (shouldn't work) + table.AltShiftClick(slime) + if(table.flipped) + Fail("Shouldn't be possible to flip structures while inside vent.") + + // Exit vent + slime.loc.relaymove(slime, EAST) + if(!isturf(slime.loc)) + Fail("Wasn't able to ventcrawl out of vent.") diff --git a/code/modules/unit_tests/atmos/test_ventcrawl.dmm b/code/modules/unit_tests/atmos/test_ventcrawl.dmm new file mode 100644 index 00000000000..9b9a7be6af9 --- /dev/null +++ b/code/modules/unit_tests/atmos/test_ventcrawl.dmm @@ -0,0 +1,7 @@ +"a" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/space) +"d" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/space) +"X" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/table,/turf/simulated/floor,/area/space) + +(1,1,1) = {" +aXd +"} diff --git a/code/modules/vote/vote_datum.dm b/code/modules/vote/vote_datum.dm index a951bf74abb..0da5ab18580 100644 --- a/code/modules/vote/vote_datum.dm +++ b/code/modules/vote/vote_datum.dm @@ -119,7 +119,7 @@ to_chat(world, chat_box_purple( "[start_text]

\ Click here or type Vote to place your vote.
\ - You have [GLOB.configuration.vote.vote_time / 10] seconds to vote.
")) + You have [GLOB.configuration.vote.vote_time / 10] seconds to vote."), MESSAGE_TYPE_OOC) SEND_SOUND(world, sound('sound/ambience/alarm4.ogg')) diff --git a/code/modules/world_topic/adminmsg.dm b/code/modules/world_topic/adminmsg.dm index 95de4ef356f..fdbfba8a4d3 100644 --- a/code/modules/world_topic/adminmsg.dm +++ b/code/modules/world_topic/adminmsg.dm @@ -28,12 +28,12 @@ C.last_discord_pm_time = 0 SEND_SOUND(C, sound('sound/effects/adminhelp.ogg')) - to_chat(C, message) + to_chat(C, message, , MESSAGE_TYPE_ADMINPM) for(var/client/A in GLOB.admins) // GLOB.admins includes anyone with a holder datum (mentors too). This makes sure only admins see ahelps if(check_rights(R_ADMIN, FALSE, A.mob)) if(A != C) - to_chat(A, amessage) + to_chat(A, amessage, , MESSAGE_TYPE_ADMINPM) return json_encode(list("success" = "Message Successful")) diff --git a/icons/_nanomaps/Cyberiad_nanomap_z1.png b/icons/_nanomaps/Cyberiad_nanomap_z1.png index 3e843a7d3a1..621fa17f543 100644 Binary files a/icons/_nanomaps/Cyberiad_nanomap_z1.png and b/icons/_nanomaps/Cyberiad_nanomap_z1.png differ diff --git a/icons/_nanomaps/Delta_nanomap_z1.png b/icons/_nanomaps/Delta_nanomap_z1.png index ee38cd41a77..dc2d2d09aa3 100644 Binary files a/icons/_nanomaps/Delta_nanomap_z1.png and b/icons/_nanomaps/Delta_nanomap_z1.png differ diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index c8c13afe615..1698773b6e1 100644 Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ diff --git a/icons/mob/clothing/head/bio.dmi b/icons/mob/clothing/head/bio.dmi new file mode 100644 index 00000000000..bdd8e128fa5 Binary files /dev/null and b/icons/mob/clothing/head/bio.dmi differ diff --git a/icons/mob/clothing/species/drask/head/bio.dmi b/icons/mob/clothing/species/drask/head/bio.dmi new file mode 100644 index 00000000000..efb4d2dba9f Binary files /dev/null and b/icons/mob/clothing/species/drask/head/bio.dmi differ diff --git a/icons/mob/clothing/species/drask/suits/bio.dmi b/icons/mob/clothing/species/drask/suits/bio.dmi new file mode 100644 index 00000000000..31ffe68c205 Binary files /dev/null and b/icons/mob/clothing/species/drask/suits/bio.dmi differ diff --git a/icons/mob/clothing/species/grey/head/bio.dmi b/icons/mob/clothing/species/grey/head/bio.dmi new file mode 100644 index 00000000000..ee388a72f26 Binary files /dev/null and b/icons/mob/clothing/species/grey/head/bio.dmi differ diff --git a/icons/mob/clothing/species/grey/suits/bio.dmi b/icons/mob/clothing/species/grey/suits/bio.dmi new file mode 100644 index 00000000000..caa5c4645f8 Binary files /dev/null and b/icons/mob/clothing/species/grey/suits/bio.dmi differ diff --git a/icons/mob/clothing/species/kidan/head/bio.dmi b/icons/mob/clothing/species/kidan/head/bio.dmi new file mode 100644 index 00000000000..97a8a78a0e7 Binary files /dev/null and b/icons/mob/clothing/species/kidan/head/bio.dmi differ diff --git a/icons/mob/clothing/species/kidan/suits/bio.dmi b/icons/mob/clothing/species/kidan/suits/bio.dmi new file mode 100644 index 00000000000..fa1f3e1da0f Binary files /dev/null and b/icons/mob/clothing/species/kidan/suits/bio.dmi differ diff --git a/icons/mob/clothing/species/tajaran/head.dmi b/icons/mob/clothing/species/tajaran/head.dmi index 7837a3009f9..74eed5427c6 100644 Binary files a/icons/mob/clothing/species/tajaran/head.dmi and b/icons/mob/clothing/species/tajaran/head.dmi differ diff --git a/icons/mob/clothing/species/tajaran/head/bio.dmi b/icons/mob/clothing/species/tajaran/head/bio.dmi new file mode 100644 index 00000000000..da25ce6beba Binary files /dev/null and b/icons/mob/clothing/species/tajaran/head/bio.dmi differ diff --git a/icons/mob/clothing/species/tajaran/suit.dmi b/icons/mob/clothing/species/tajaran/suit.dmi index d9a9352d29c..fbf27e8b0b4 100644 Binary files a/icons/mob/clothing/species/tajaran/suit.dmi and b/icons/mob/clothing/species/tajaran/suit.dmi differ diff --git a/icons/mob/clothing/species/tajaran/suits/bio.dmi b/icons/mob/clothing/species/tajaran/suits/bio.dmi new file mode 100644 index 00000000000..2353d2364e8 Binary files /dev/null and b/icons/mob/clothing/species/tajaran/suits/bio.dmi differ diff --git a/icons/mob/clothing/species/unathi/head.dmi b/icons/mob/clothing/species/unathi/head.dmi index 0c5e1884f10..0d3f32d007f 100644 Binary files a/icons/mob/clothing/species/unathi/head.dmi and b/icons/mob/clothing/species/unathi/head.dmi differ diff --git a/icons/mob/clothing/species/unathi/head/bio.dmi b/icons/mob/clothing/species/unathi/head/bio.dmi new file mode 100644 index 00000000000..28ea5c7c9c2 Binary files /dev/null and b/icons/mob/clothing/species/unathi/head/bio.dmi differ diff --git a/icons/mob/clothing/species/unathi/suit.dmi b/icons/mob/clothing/species/unathi/suit.dmi index 59c8faa766a..3e29ac07b8f 100644 Binary files a/icons/mob/clothing/species/unathi/suit.dmi and b/icons/mob/clothing/species/unathi/suit.dmi differ diff --git a/icons/mob/clothing/species/unathi/suits/bio.dmi b/icons/mob/clothing/species/unathi/suits/bio.dmi new file mode 100644 index 00000000000..0cf598d206b Binary files /dev/null and b/icons/mob/clothing/species/unathi/suits/bio.dmi differ diff --git a/icons/mob/clothing/species/vox/head/bio.dmi b/icons/mob/clothing/species/vox/head/bio.dmi new file mode 100644 index 00000000000..df00de1e367 Binary files /dev/null and b/icons/mob/clothing/species/vox/head/bio.dmi differ diff --git a/icons/mob/clothing/species/vox/helmet.dmi b/icons/mob/clothing/species/vox/helmet.dmi index 47e6adb7b52..0455dc22667 100644 Binary files a/icons/mob/clothing/species/vox/helmet.dmi and b/icons/mob/clothing/species/vox/helmet.dmi differ diff --git a/icons/mob/clothing/species/vox/suit.dmi b/icons/mob/clothing/species/vox/suit.dmi index e3a62a2c190..70f6748d3f0 100644 Binary files a/icons/mob/clothing/species/vox/suit.dmi and b/icons/mob/clothing/species/vox/suit.dmi differ diff --git a/icons/mob/clothing/species/vox/suits/bio.dmi b/icons/mob/clothing/species/vox/suits/bio.dmi new file mode 100644 index 00000000000..35d9c400a8d Binary files /dev/null and b/icons/mob/clothing/species/vox/suits/bio.dmi differ diff --git a/icons/mob/clothing/species/vulpkanin/head.dmi b/icons/mob/clothing/species/vulpkanin/head.dmi index 140ef199b34..6bbea18640c 100644 Binary files a/icons/mob/clothing/species/vulpkanin/head.dmi and b/icons/mob/clothing/species/vulpkanin/head.dmi differ diff --git a/icons/mob/clothing/species/vulpkanin/head/bio.dmi b/icons/mob/clothing/species/vulpkanin/head/bio.dmi new file mode 100644 index 00000000000..86e4127039d Binary files /dev/null and b/icons/mob/clothing/species/vulpkanin/head/bio.dmi differ diff --git a/icons/mob/clothing/species/vulpkanin/suit.dmi b/icons/mob/clothing/species/vulpkanin/suit.dmi index f03f0627393..89304b769e5 100644 Binary files a/icons/mob/clothing/species/vulpkanin/suit.dmi and b/icons/mob/clothing/species/vulpkanin/suit.dmi differ diff --git a/icons/mob/clothing/species/vulpkanin/suits/bio.dmi b/icons/mob/clothing/species/vulpkanin/suits/bio.dmi new file mode 100644 index 00000000000..f1b1903cbbb Binary files /dev/null and b/icons/mob/clothing/species/vulpkanin/suits/bio.dmi differ diff --git a/icons/mob/clothing/suit.dmi b/icons/mob/clothing/suit.dmi index a0c8e148e31..2d4bec4c9c6 100644 Binary files a/icons/mob/clothing/suit.dmi and b/icons/mob/clothing/suit.dmi differ diff --git a/icons/mob/clothing/suits/bio.dmi b/icons/mob/clothing/suits/bio.dmi new file mode 100644 index 00000000000..c72eec1c792 Binary files /dev/null and b/icons/mob/clothing/suits/bio.dmi differ diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi index 53d11a4380b..6ba217d1d51 100644 Binary files a/icons/mob/inhands/guns_lefthand.dmi and b/icons/mob/inhands/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi index 6993a2881f0..1aee6bb9652 100644 Binary files a/icons/mob/inhands/guns_righthand.dmi and b/icons/mob/inhands/guns_righthand.dmi differ diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi index 59266fafc99..91516af7599 100644 Binary files a/icons/mob/screen_gen.dmi and b/icons/mob/screen_gen.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 2a3aa32d723..0a63130372e 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/head/bio.dmi b/icons/obj/clothing/head/bio.dmi new file mode 100644 index 00000000000..21855d49be1 Binary files /dev/null and b/icons/obj/clothing/head/bio.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 71c13db926a..e229ed6a2ff 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/suits/bio.dmi b/icons/obj/clothing/suits/bio.dmi new file mode 100644 index 00000000000..a1ea57e56c8 Binary files /dev/null and b/icons/obj/clothing/suits/bio.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index 1add4cb71ec..f40e9ec0aea 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/paradise.dme b/paradise.dme index 8daac3cf887..5769581d103 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1585,6 +1585,7 @@ #include "code\modules\awaymissions\maploader\writer.dm" #include "code\modules\awaymissions\mission_code\beach.dm" #include "code\modules\awaymissions\mission_code\challenge.dm" +#include "code\modules\awaymissions\mission_code\shuttle_shadow.dm" #include "code\modules\awaymissions\mission_code\ghost_role_spawners\golems.dm" #include "code\modules\awaymissions\mission_code\ghost_role_spawners\oldstation_spawns.dm" #include "code\modules\awaymissions\mission_code\ruins\derelict5.dm" diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index 1e72f6edd8f..5b5195b8e91 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -1062,3 +1062,29 @@ span.body .coderesponses { .boxed_message.thick_border { border-width: thick; } + +/* GASES */ + +.oxygen { + color: #449dff; +} + +.nitrogen { + color: #f94541; +} + +.carbon_dioxide { + color: #cccccc; +} + +.plasma { + color: #eb6b00; +} + +.sleeping_agent { + color: #f28b89; +} + +.agent_b { + color: teal; +} diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index 42970e8f119..a2e3e90eaee 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -1080,3 +1080,29 @@ span.body .coderesponses { .boxed_message.thick_border { border-width: thick; } + +/* GASES */ + +.oxygen { + color: #006adb; +} + +.nitrogen { + color: #d00a06; +} + +.carbon_dioxide { + color: #1f1f1f; +} + +.plasma { + color: #853c00; +} + +.sleeping_agent { + color: #e82f2c; +} + +.agent_b { + color: #004d4d; +} diff --git a/tgui/public/tgui-panel.bundle.css b/tgui/public/tgui-panel.bundle.css index bf0f9cd9dc0..74ff50e3403 100644 --- a/tgui/public/tgui-panel.bundle.css +++ b/tgui/public/tgui-panel.bundle.css @@ -1 +1 @@ -html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.color-black{color:#1a1a1a!important}.color-white{color:#fff!important}.color-red{color:#df3e3e!important}.color-orange{color:#f37f33!important}.color-yellow{color:#fbda21!important}.color-olive{color:#cbe41c!important}.color-green{color:#25ca4c!important}.color-teal{color:#00d6cc!important}.color-blue{color:#2e93de!important}.color-violet{color:#7349cf!important}.color-purple{color:#ad45d0!important}.color-pink{color:#e34da1!important}.color-brown{color:#b97447!important}.color-grey{color:#848484!important}.color-good{color:#68c22d!important}.color-average{color:#f29a29!important}.color-bad{color:#df3e3e!important}.color-label{color:#8b9bb0!important}.color-gold{color:#f3b22f!important}.color-bg-black{background-color:#000!important}.color-bg-white{background-color:#d9d9d9!important}.color-bg-red{background-color:#bd2020!important}.color-bg-orange{background-color:#d95e0c!important}.color-bg-yellow{background-color:#d9b804!important}.color-bg-olive{background-color:#9aad14!important}.color-bg-green{background-color:#1b9638!important}.color-bg-teal{background-color:#009a93!important}.color-bg-blue{background-color:#1c71b1!important}.color-bg-violet{background-color:#552dab!important}.color-bg-purple{background-color:#8b2baa!important}.color-bg-pink{background-color:#cf2082!important}.color-bg-brown{background-color:#8c5836!important}.color-bg-grey{background-color:#646464!important}.color-bg-good{background-color:#4d9121!important}.color-bg-average{background-color:#cd7a0d!important}.color-bg-bad{background-color:#bd2020!important}.color-bg-label{background-color:#657a94!important}.color-bg-gold{background-color:#d6920c!important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9)!important;background:rgba(0,0,0,0)!important;outline:1px solid rgba(255,255,255,.5)!important;box-shadow:none!important;filter:none!important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8)!important}.outline-dotted{outline-style:dotted!important}.outline-dashed{outline-style:dashed!important}.outline-solid{outline-style:solid!important}.outline-double{outline-style:double!important}.outline-groove{outline-style:groove!important}.outline-ridge{outline-style:ridge!important}.outline-inset{outline-style:inset!important}.outline-outset{outline-style:outset!important}.outline-color-black{outline:.167rem solid #1a1a1a!important}.outline-color-white{outline:.167rem solid #fff!important}.outline-color-red{outline:.167rem solid #df3e3e!important}.outline-color-orange{outline:.167rem solid #f37f33!important}.outline-color-yellow{outline:.167rem solid #fbda21!important}.outline-color-olive{outline:.167rem solid #cbe41c!important}.outline-color-green{outline:.167rem solid #25ca4c!important}.outline-color-teal{outline:.167rem solid #00d6cc!important}.outline-color-blue{outline:.167rem solid #2e93de!important}.outline-color-violet{outline:.167rem solid #7349cf!important}.outline-color-purple{outline:.167rem solid #ad45d0!important}.outline-color-pink{outline:.167rem solid #e34da1!important}.outline-color-brown{outline:.167rem solid #b97447!important}.outline-color-grey{outline:.167rem solid #848484!important}.outline-color-good{outline:.167rem solid #68c22d!important}.outline-color-average{outline:.167rem solid #f29a29!important}.outline-color-bad{outline:.167rem solid #df3e3e!important}.outline-color-label{outline:.167rem solid #8b9bb0!important}.outline-color-gold{outline:.167rem solid #f3b22f!important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:700}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fas,.Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fas,.Button--hasContent .far{margin-right:.25em}.Button--hasContent.Button--iconRight .fa,.Button--hasContent.Button--iconRight .fas,.Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--multiLine{white-space:normal;word-wrap:break-word}.Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.Button--color--black:focus{transition:color .25s,background-color .25s}.Button--color--black:hover{background-color:#101010;color:#fff}.Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.Button--color--white:focus{transition:color .25s,background-color .25s}.Button--color--white:hover{background-color:#f8f8f8;color:#000}.Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--red:focus{transition:color .25s,background-color .25s}.Button--color--red:hover{background-color:#d93f3f;color:#fff}.Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.Button--color--orange:focus{transition:color .25s,background-color .25s}.Button--color--orange:hover{background-color:#ef7e33;color:#fff}.Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.Button--color--yellow:focus{transition:color .25s,background-color .25s}.Button--color--yellow:hover{background-color:#f5d523;color:#000}.Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.Button--color--olive:focus{transition:color .25s,background-color .25s}.Button--color--olive:hover{background-color:#bdd327;color:#fff}.Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.Button--color--green:focus{transition:color .25s,background-color .25s}.Button--color--green:hover{background-color:#2fb94f;color:#fff}.Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.Button--color--teal:focus{transition:color .25s,background-color .25s}.Button--color--teal:hover{background-color:#10bdb6;color:#fff}.Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.Button--color--blue:focus{transition:color .25s,background-color .25s}.Button--color--blue:hover{background-color:#308fd6;color:#fff}.Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.Button--color--violet:focus{transition:color .25s,background-color .25s}.Button--color--violet:hover{background-color:#7249ca;color:#fff}.Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.Button--color--purple:focus{transition:color .25s,background-color .25s}.Button--color--purple:hover{background-color:#aa46ca;color:#fff}.Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.Button--color--pink:focus{transition:color .25s,background-color .25s}.Button--color--pink:hover{background-color:#e04ca0;color:#fff}.Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.Button--color--brown:focus{transition:color .25s,background-color .25s}.Button--color--brown:hover{background-color:#ae724c;color:#fff}.Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.Button--color--grey:focus{transition:color .25s,background-color .25s}.Button--color--grey:hover{background-color:#818181;color:#fff}.Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.Button--color--good:focus{transition:color .25s,background-color .25s}.Button--color--good:hover{background-color:#67b335;color:#fff}.Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.Button--color--average:focus{transition:color .25s,background-color .25s}.Button--color--average:hover{background-color:#eb972b;color:#fff}.Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--bad:focus{transition:color .25s,background-color .25s}.Button--color--bad:hover{background-color:#d93f3f;color:#fff}.Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.Button--color--label:focus{transition:color .25s,background-color .25s}.Button--color--label:hover{background-color:#8a9aae;color:#fff}.Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.Button--color--gold:focus{transition:color .25s,background-color .25s}.Button--color--gold:hover{background-color:#eeaf30;color:#fff}.Button--color--default{transition:color .1s,background-color .1s;background-color:#3e6189;color:#fff}.Button--color--default:focus{transition:color .25s,background-color .25s}.Button--color--default:hover{background-color:#567daa;color:#fff}.Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.Button--color--caution:focus{transition:color .25s,background-color .25s}.Button--color--caution:hover{background-color:#f5d523;color:#000}.Button--color--danger{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--danger:focus{transition:color .25s,background-color .25s}.Button--color--danger:hover{background-color:#d93f3f;color:#fff}.Button--color--transparent{transition:color .1s,background-color .1s;background-color:#202020;color:#fff;background-color:rgba(32,32,32,0);color:rgba(255,255,255,.5)}.Button--color--transparent:focus{transition:color .25s,background-color .25s}.Button--color--transparent:hover{background-color:#343434;color:#fff}.Button--color--translucent{transition:color .1s,background-color .1s;background-color:#202020;color:#fff;background-color:rgba(32,32,32,.6);color:rgba(255,255,255,.5)}.Button--color--translucent:focus{transition:color .25s,background-color .25s}.Button--color--translucent:hover{background-color:#343434;color:#fff}.Button--disabled{background-color:#999!important}.Button--selected{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.Button--selected:focus{transition:color .25s,background-color .25s}.Button--selected:hover{background-color:#2fb94f;color:#fff}.Button--modal{float:right;z-index:1;margin-top:-.5rem}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Dropdown{position:relative;align-items:center}.Dropdown__control{display:inline-block;align-items:center;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.3333333333em;-ms-user-select:none;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{overflow-y:auto;align-items:center;z-index:5;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-scroll{overflow-y:scroll}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color .1s ease-out}.Dropdown__menuentry.selected{background-color:rgba(255,255,255,.5)!important;transition:background-color 0ms}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em);text-align:left;padding-top:2.5px}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline,.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue,.Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Knob__popupValue--right{top:.25rem;right:-50%}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotate(135deg)}.Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotate(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-.25em -.5em 0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left;vertical-align:baseline}.LabeledList__label{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.LabeledList__breakContents{word-break:break-all;word-wrap:break-word}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem;scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) .8333333333em,rgba(0,0,0,.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--color--gold{color:#fff;background-color:#825d13}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.ProgressBar__fill--animated{transition:background-color .5s,width .5s}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--disabled{border:1px solid #999}.ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.ProgressBar--color--black{border:.0833333333em solid #000!important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border:.0833333333em solid #646464!important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border:.0833333333em solid #657a94!important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.Section{position:relative;margin-bottom:.5em;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.Section .Section:first-child{margin-top:-.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.Slider:not(.Slider__disabled){cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--zebra>.Stack__item:nth-child(2n){background-color:#131313}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:700;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#131313}.Tabs--fill{height:100%}.Section .Tabs{background-color:rgba(0,0,0,0)}.Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.Tabs--vertical{flex-direction:column;padding:.25em .25em .25em 0}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075);transition:background-color 0}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-right-radius:.25em;border-bottom-right-radius:.25em}.Tabs--vertical .Tab--selected{border-left:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-left-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-left-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-left-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-left-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-left-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-left-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-left-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-left-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-left-color:#2e93de}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-left-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-left-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-left-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-left-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-left-color:#848484}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-left-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-left-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-left-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-left-color:#8b9bb0}.Tab--selected.Tab--color--gold{color:#f6c563}.Tabs--horizontal .Tab--selected.Tab--color--gold{border-bottom-color:#f3b22f}.Tabs--vertical .Tab--selected.Tab--color--gold{border-left-color:#f3b22f}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.Input--disabled{color:#777;border-color:#848484;border-color:rgba(132,132,132,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:Consolas,monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity .15s ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid rgba(140,140,140,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;top:1em;left:.75em;right:2em}.Notification{color:#fff;background-color:#dc143c;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout::-webkit-scrollbar,.Layout *::-webkit-scrollbar{width:12px}.Layout::-webkit-scrollbar-track,.Layout *::-webkit-scrollbar-track{background:#181818}.Layout::-webkit-scrollbar-thumb,.Layout *::-webkit-scrollbar-thumb{background:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.Layout__content--flexRow{display:flex;flex-flow:row}.Layout__content--flexColumn{display:flex;flex-flow:column}.Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.Layout__content--noMargin{margin:0}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(to bottom,#202020,#202020)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.emoji16x16{vertical-align:middle}a{color:#397ea5}a.popt{text-decoration:none}.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:.9em;font-weight:700;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:.9em;font-weight:700}.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:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.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}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:link,.motd a:active,.motd a:hover{color:#a4bad6}.italic,.italics,.emote{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}em{font-style:normal;font-weight:700}.darkmblue{color:#6685f5}.prefix,.ooc{font-weight:700}.looc{color:#69c;font-weight:700}.adminobserverooc{color:#09c;font-weight:700}.adminooc{color:#b82e00;font-weight:700}.adminobserver{color:#960;font-weight:700}.admin{color:#386aff;font-weight:700}.adminsay{color:#9611d4;font-weight:700}.mentorhelp{color:#07b;font-weight:700}.adminhelp{color:#a00;font-weight:700}.playerreply{color:#80b;font-weight:700}.pmsend{color:#6685f5}.debug{color:#6d2f83}.name,.yell{font-weight:700}.siliconsay{font-family:Courier New,Courier,monospace}.deadsay{color:#e2c1ff}.radio{color:#20b142}.deptradio{color:#939}.comradio{color:#5f5cff}.syndradio{color:#8f4a4b}.dsquadradio{color:#998599}.resteamradio{color:#18bc46}.airadio{color:#ff5ed7}.centradio{color:#2681a5}.secradio{color:#dd3535}.engradio{color:#feac20}.medradio{color:#00b5ad}.sciradio{color:#c68cfa}.supradio{color:#b88646}.srvradio{color:#bbd164}.proradio{color:#b84f92}.admin_channel{color:#03fc9d;font-weight:700}.all_admin_ping{color:#12a5f4;font-weight:700;font-size:120%;text-align:center}.mentor_channel{color:#775bff;font-weight:700}.mentor_channel_admin{color:#a35cff;font-weight:700}.djradio{color:#960}.binaryradio{color:#1b00fb;font-family:Courier New,Courier,monospace}.mommiradio{color:#6685f5}.alert{color:#d82020}h1.alert,h2.alert{color:#a4bad6}.ghostalert{color:#cc00c6;font-style:italic;font-weight:700}.emote{font-style:italic}.selecteddna{color:#a4bad6;background-color:#001b1b}.attack{color:red}.moderate{color:#c00}.disarm{color:#900}.passive{color:#600}.warning{color:#c51e1e;font-style:italic}.boldwarning{color:#c51e1e;font-style:italic;font-weight:700}.danger{color:#c51e1e;font-weight:700}.userdanger{color:#c51e1e;font-weight:700;font-size:120%}.biggerdanger{color:red;font-weight:700;font-size:150%}.info{color:#9ab0ff}.notice{color:#6685f5}.boldnotice{color:#6685f5;font-weight:700}.suicide{color:#ff5050;font-style:italic}.green{color:#03bb39}.pr_announce,.boldannounceic,.boldannounceooc{color:#c51e1e;font-weight:700}.greenannounce{color:#059223;font-weight:700}.alien{color:#c433c4}.noticealien{color:#00c000}.alertalien{color:#00c000;font-weight:700}.terrorspider{color:#cf52fa}.dantalion{color:#8b2c5e}.chaosverygood{color:#19e0c0;font-weight:700;font-size:120%}.chaosgood{color:#19e0c0;font-weight:700}.chaosneutral{color:#479ac0;font-weight:700}.chaosbad{color:#9047c0;font-weight:700}.chaosverybad{color:#9047c0;font-weight:700;font-size:120%}.sinister{color:purple;font-weight:700;font-style:italic}.medal{font-weight:700}.blob{color:#006221;font-weight:700;font-style:italic}.confirm{color:#00af3b}.rose{color:#ff5050}.sans{font-family:Comic Sans MS,cursive,sans-serif}.wingdings{font-family:Wingdings,Webdings}.robot{font-family:OCR-A,monospace;font-size:1.15em;font-weight:700}.ancient{color:#008b8b;font-style:italic}.newscaster{color:#c00}.mod{color:#735638;font-weight:700}.modooc{color:#184880;font-weight:700}.adminmod{color:#f0aa14;font-weight:700}.tajaran{color:#803b56}.skrell{color:#00ced1}.solcom{color:#8282fb}.com_srus{color:#7c4848}.zombie{color:red}.soghun{color:#228b22}.changeling{color:#00b4de}.vox{color:#a0a}.diona{color:#804000;font-weight:700}.trinary{color:#727272}.kidan{color:#c64c05}.slime{color:#07a}.drask{color:#a3d4eb;font-family:Arial Black}.moth{color:#869b29;font-family:Copperplate}.clown{color:red}.vulpkanin{color:#b97a57}.abductor{color:purple;font-style:italic}.mind_control{color:#a00d6f;font-size:3;font-weight:700;font-style:italic}.rough{font-family:Trebuchet MS,cursive,sans-serif}.say_quote{font-family:Georgia,Verdana,sans-serif}.cult{color:purple;font-weight:700;font-style:italic}.cultspeech{color:#af0000;font-style:italic}.cultitalic{color:#a60000;font-style:italic}.cultlarge{color:#a60000;font-weight:700;font-size:120%}.narsie{color:#a60000;font-weight:700;font-size:300%}.narsiesmall{color:#a60000;font-weight:700;font-size:200%}.interface{color:#9031c4}.big{font-size:150%}.reallybig{font-size:175%}.greentext{color:#0f0;font-size:150%}.redtext{color:red;font-size:150%}.bold{font-weight:700}.his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.center{text-align:center}.red{color:red}.purple{color:#9031c4}.skeleton{color:#c8c8c8;font-weight:700;font-style:italic}.gutter{color:#7092be;font-family:Trebuchet MS,cursive,sans-serif}.orange{color:orange}.orangei{color:orange;font-style:italic}.orangeb{color:orange;font-weight:700}.resonate{color:#298f85}.healthscan_oxy{color:#5cc9ff}.revennotice{color:#6685f5}.revenboldnotice{color:#6685f5;font-weight:700}.revenbignotice{color:#6685f5;font-weight:700;font-size:120%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:700;font-size:120%}.specialnotice{color:#4a6f82;font-weight:700;font-size:120%}.good{color:green}.average{color:#ff8000}.bad{color:red}.italics,.talkinto{font-style:italic}.whisper{font-style:italic;color:#ccc}.recruit{color:#5c00e6;font-weight:700;font-style:italic}.memo{color:#638500;text-align:center}.memoedit{text-align:center;font-size:75%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#6685f5;font-weight:700}.rebooting{background:#2979af;color:#fff;padding:5px}.rebooting a{color:#fff!important;text-decoration-color:#fff!important}.text-normal{font-weight:400;font-style:normal}.hidden{display:none;visibility:hidden}.colossus{color:#7f282a;font-size:175%}.hierophant{color:#609;font-weight:700;font-style:italic}.hierophant_warning{color:#609;font-style:italic}.emoji{max-height:16px;max-width:16px}.adminticket{color:#3daf21;font-weight:700}.adminticketalt{color:#ccb847;font-weight:700}span.body .codephrases{color:#55f}span.body .coderesponses{color:#f33}.announcement h1,.announcement h2{color:#a4bad6;margin:8pt 0;line-height:1.2}.announcement p{color:#d82020;line-height:1.3}.announcement.minor h1{font-size:180%}.announcement.minor h2{font-size:170%}.announcement.sec h1{color:red;font-size:180%;font-family:Verdana,sans-serif}.bolditalics{font-style:italic;font-weight:700}.boxed_message{background:#1b1c1e;border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.boxed_message.left_align_text{text-align:left}.boxed_message.red_border{background:#1e1b1b;border-color:#a00}.boxed_message.green_border{background:#1b1e1c;border-color:#0f0}.boxed_message.purple_border{background:#1d1c1f;border-color:#8000ff}.boxed_message.notice_border{background:#1b1c1e;border-color:#6685f5}.boxed_message.thick_border{border-width:thick}.theme-light .color-black{color:#000!important}.theme-light .color-white{color:#e6e6e6!important}.theme-light .color-red{color:#c82121!important}.theme-light .color-orange{color:#e6630d!important}.theme-light .color-yellow{color:#e5c304!important}.theme-light .color-olive{color:#a3b816!important}.theme-light .color-green{color:#1d9f3b!important}.theme-light .color-teal{color:#00a39c!important}.theme-light .color-blue{color:#1e78bb!important}.theme-light .color-violet{color:#5a30b5!important}.theme-light .color-purple{color:#932eb4!important}.theme-light .color-pink{color:#db228a!important}.theme-light .color-brown{color:#955d39!important}.theme-light .color-grey{color:#e6e6e6!important}.theme-light .color-good{color:#529923!important}.theme-light .color-average{color:#da810e!important}.theme-light .color-bad{color:#c82121!important}.theme-light .color-label{color:#353535!important}.theme-light .color-gold{color:#e39b0d!important}.theme-light .color-bg-black{background-color:#000!important}.theme-light .color-bg-white{background-color:#bfbfbf!important}.theme-light .color-bg-red{background-color:#a61c1c!important}.theme-light .color-bg-orange{background-color:#c0530b!important}.theme-light .color-bg-yellow{background-color:#bfa303!important}.theme-light .color-bg-olive{background-color:#889912!important}.theme-light .color-bg-green{background-color:#188532!important}.theme-light .color-bg-teal{background-color:#008882!important}.theme-light .color-bg-blue{background-color:#19649c!important}.theme-light .color-bg-violet{background-color:#4b2897!important}.theme-light .color-bg-purple{background-color:#7a2696!important}.theme-light .color-bg-pink{background-color:#b61d73!important}.theme-light .color-bg-brown{background-color:#7c4d2f!important}.theme-light .color-bg-grey{background-color:#bfbfbf!important}.theme-light .color-bg-good{background-color:#44801d!important}.theme-light .color-bg-average{background-color:#b56b0b!important}.theme-light .color-bg-bad{background-color:#a61c1c!important}.theme-light .color-bg-label{background-color:#2c2c2c!important}.theme-light .color-bg-gold{background-color:#bd810b!important}.theme-light .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#fff}.theme-light .Tabs--fill{height:100%}.theme-light .Section .Tabs{background-color:rgba(0,0,0,0)}.theme-light .Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.theme-light .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.theme-light .Tabs--vertical{flex-direction:column;padding:.25em .25em .25em 0}.theme-light .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.theme-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-light .Tabs__Tab{flex-grow:0}.theme-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-light .Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.theme-light .Tab:not(.Tab--selected):hover{background-color:rgba(0,0,0,.075);transition:background-color 0}.theme-light .Tab--selected{background-color:rgba(0,0,0,.125);color:#404040}.theme-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-light .Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-right-radius:.25em;border-bottom-right-radius:.25em}.theme-light .Tabs--vertical .Tab--selected{border-left:.1666666667em solid #000}.theme-light .Tab--selected.Tab--color--black{color:#404040}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-light .Tabs--vertical .Tab--selected.Tab--color--black{border-left-color:#000}.theme-light .Tab--selected.Tab--color--white{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--white{border-left-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--red{border-left-color:#c82121}.theme-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-left-color:#e6630d}.theme-light .Tab--selected.Tab--color--yellow{color:#fcdd33}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#e5c304}.theme-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-left-color:#e5c304}.theme-light .Tab--selected.Tab--color--olive{color:#d0e732}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#a3b816}.theme-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-left-color:#a3b816}.theme-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-light .Tabs--vertical .Tab--selected.Tab--color--green{border-left-color:#1d9f3b}.theme-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-left-color:#00a39c}.theme-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-left-color:#1e78bb}.theme-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-left-color:#5a30b5}.theme-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-left-color:#932eb4}.theme-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-left-color:#db228a}.theme-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-left-color:#955d39}.theme-light .Tab--selected.Tab--color--grey{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-left-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--good{color:#77d23b}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#529923}.theme-light .Tabs--vertical .Tab--selected.Tab--color--good{border-left-color:#529923}.theme-light .Tab--selected.Tab--color--average{color:#f3a23a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#da810e}.theme-light .Tabs--vertical .Tab--selected.Tab--color--average{border-left-color:#da810e}.theme-light .Tab--selected.Tab--color--bad{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-left-color:#c82121}.theme-light .Tab--selected.Tab--color--label{color:#686868}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#353535}.theme-light .Tabs--vertical .Tab--selected.Tab--color--label{border-left-color:#353535}.theme-light .Tab--selected.Tab--color--gold{color:#f4b73f}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--gold{border-bottom-color:#e39b0d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--gold{border-left-color:#e39b0d}.theme-light .Section{position:relative;margin-bottom:.5em;background-color:#fff;box-sizing:border-box}.theme-light .Section:last-child{margin-bottom:0}.theme-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fff}.theme-light .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#000}.theme-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-light .Section__rest{position:relative}.theme-light .Section__content{padding:.66em .5em}.theme-light .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill>.Section__rest{flex-grow:1}.theme-light .Section--fill>.Section__rest>.Section__content{height:100%}.theme-light .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-light .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-light .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-light .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-light .Section .Section:first-child{margin-top:-.5em}.theme-light .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-light .Section .Section .Section .Section__titleText{font-size:1em}.theme-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-light .Button .fa,.theme-light .Button .fas,.theme-light .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .fas,.theme-light .Button--hasContent .far{margin-right:.25em}.theme-light .Button--hasContent.Button--iconRight .fa,.theme-light .Button--hasContent.Button--iconRight .fas,.theme-light .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-light .Button--circular{border-radius:50%}.theme-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-light .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-light .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-light .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--black:hover{background-color:#101010;color:#fff}.theme-light .Button--color--white{transition:color .1s,background-color .1s;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--white:hover{background-color:#e7e7e7;color:#000}.theme-light .Button--color--red{transition:color .1s,background-color .1s;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--red:hover{background-color:#cb3030;color:#fff}.theme-light .Button--color--orange{transition:color .1s,background-color .1s;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--orange:hover{background-color:#e76d1d;color:#fff}.theme-light .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--yellow:hover{background-color:#e7c714;color:#fff}.theme-light .Button--color--olive{transition:color .1s,background-color .1s;background-color:#889912;color:#fff}.theme-light .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--olive:hover{background-color:#a9bc25;color:#fff}.theme-light .Button--color--green{transition:color .1s,background-color .1s;background-color:#188532;color:#fff}.theme-light .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--green:hover{background-color:#2ba648;color:#fff}.theme-light .Button--color--teal{transition:color .1s,background-color .1s;background-color:#008882;color:#fff}.theme-light .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--teal:hover{background-color:#10a9a2;color:#fff}.theme-light .Button--color--blue{transition:color .1s,background-color .1s;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--blue:hover{background-color:#2c81c0;color:#fff}.theme-light .Button--color--violet{transition:color .1s,background-color .1s;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--violet:hover{background-color:#653db9;color:#fff}.theme-light .Button--color--purple{transition:color .1s,background-color .1s;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--purple:hover{background-color:#9a3bb9;color:#fff}.theme-light .Button--color--pink{transition:color .1s,background-color .1s;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--pink:hover{background-color:#d93591;color:#fff}.theme-light .Button--color--brown{transition:color .1s,background-color .1s;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--brown:hover{background-color:#9c6745;color:#fff}.theme-light .Button--color--grey{transition:color .1s,background-color .1s;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--grey:hover{background-color:#e7e7e7;color:#000}.theme-light .Button--color--good{transition:color .1s,background-color .1s;background-color:#44801d;color:#fff}.theme-light .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--good:hover{background-color:#5d9f31;color:#fff}.theme-light .Button--color--average{transition:color .1s,background-color .1s;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--average:hover{background-color:#dc891d;color:#fff}.theme-light .Button--color--bad{transition:color .1s,background-color .1s;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--bad:hover{background-color:#cb3030;color:#fff}.theme-light .Button--color--label{transition:color .1s,background-color .1s;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--label:hover{background-color:#424242;color:#fff}.theme-light .Button--color--gold{transition:color .1s,background-color .1s;background-color:#bd810b;color:#fff}.theme-light .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--gold:hover{background-color:#e5a11c;color:#fff}.theme-light .Button--color--default{transition:color .1s,background-color .1s;background-color:#bbb;color:#000}.theme-light .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--default:hover{background-color:#e3e3e3;color:#000}.theme-light .Button--color--caution{transition:color .1s,background-color .1s;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--caution:hover{background-color:#e67f1a;color:#fff}.theme-light .Button--color--danger{transition:color .1s,background-color .1s;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--danger:hover{background-color:#bec110;color:#fff}.theme-light .Button--color--transparent{transition:color .1s,background-color .1s;background-color:#eee;color:#000;background-color:rgba(238,238,238,0);color:rgba(0,0,0,.5)}.theme-light .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--transparent:hover{background-color:#fcfcfc;color:#000}.theme-light .Button--color--translucent{transition:color .1s,background-color .1s;background-color:#eee;color:#000;background-color:rgba(238,238,238,.6);color:rgba(0,0,0,.5)}.theme-light .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--translucent:hover{background-color:#fcfcfc;color:#000}.theme-light .Button--disabled{background-color:#363636!important}.theme-light .Button--selected{transition:color .1s,background-color .1s;background-color:#0668b8;color:#fff}.theme-light .Button--selected:focus{transition:color .25s,background-color .25s}.theme-light .Button--selected:hover{background-color:#1785df;color:#fff}.theme-light .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#353535;background-color:#e6e6e6;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-light .NumberInput--fluid{display:block}.theme-light .NumberInput__content{margin-left:.5em}.theme-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #353535;background-color:#353535}.theme-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#e6e6e6;color:#000;text-align:right}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#e6e6e6;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-light .Input--disabled{color:#777;border-color:#000;border-color:rgba(0,0,0,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#000;color:inherit}.theme-light .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-light .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;background-color:#e6e6e6;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-light .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-light .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-light .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-light .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-light .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-light .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-light .Knob__popupValue,.theme-light .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .Knob__popupValue--right{top:.25rem;right:-50%}.theme-light .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-light .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-light .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-light .Knob__ringFillPivot{transform:rotate(135deg)}.theme-light .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-light .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-light .Knob--color--black .Knob__ringFill{stroke:#000}.theme-light .Knob--color--white .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--red .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--orange .Knob__ringFill{stroke:#e6630d}.theme-light .Knob--color--yellow .Knob__ringFill{stroke:#e5c304}.theme-light .Knob--color--olive .Knob__ringFill{stroke:#a3b816}.theme-light .Knob--color--green .Knob__ringFill{stroke:#1d9f3b}.theme-light .Knob--color--teal .Knob__ringFill{stroke:#00a39c}.theme-light .Knob--color--blue .Knob__ringFill{stroke:#1e78bb}.theme-light .Knob--color--violet .Knob__ringFill{stroke:#5a30b5}.theme-light .Knob--color--purple .Knob__ringFill{stroke:#932eb4}.theme-light .Knob--color--pink .Knob__ringFill{stroke:#db228a}.theme-light .Knob--color--brown .Knob__ringFill{stroke:#955d39}.theme-light .Knob--color--grey .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--good .Knob__ringFill{stroke:#529923}.theme-light .Knob--color--average .Knob__ringFill{stroke:#da810e}.theme-light .Knob--color--bad .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--label .Knob__ringFill{stroke:#353535}.theme-light .Knob--color--gold .Knob__ringFill{stroke:#e39b0d}.theme-light .Slider:not(.Slider__disabled){cursor:e-resize}.theme-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #000}.theme-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-light .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-light .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-light .ProgressBar--color--default{border:.0833333333em solid #bfbfbf}.theme-light .ProgressBar--color--default .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--disabled{border:1px solid #999}.theme-light .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-light .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-light .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-light .ProgressBar--color--white{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--white .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--red{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--red .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--orange{border:.0833333333em solid #c0530b!important}.theme-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#c0530b}.theme-light .ProgressBar--color--yellow{border:.0833333333em solid #bfa303!important}.theme-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#bfa303}.theme-light .ProgressBar--color--olive{border:.0833333333em solid #889912!important}.theme-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#889912}.theme-light .ProgressBar--color--green{border:.0833333333em solid #188532!important}.theme-light .ProgressBar--color--green .ProgressBar__fill{background-color:#188532}.theme-light .ProgressBar--color--teal{border:.0833333333em solid #008882!important}.theme-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#008882}.theme-light .ProgressBar--color--blue{border:.0833333333em solid #19649c!important}.theme-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#19649c}.theme-light .ProgressBar--color--violet{border:.0833333333em solid #4b2897!important}.theme-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#4b2897}.theme-light .ProgressBar--color--purple{border:.0833333333em solid #7a2696!important}.theme-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#7a2696}.theme-light .ProgressBar--color--pink{border:.0833333333em solid #b61d73!important}.theme-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#b61d73}.theme-light .ProgressBar--color--brown{border:.0833333333em solid #7c4d2f!important}.theme-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#7c4d2f}.theme-light .ProgressBar--color--grey{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--good{border:.0833333333em solid #44801d!important}.theme-light .ProgressBar--color--good .ProgressBar__fill{background-color:#44801d}.theme-light .ProgressBar--color--average{border:.0833333333em solid #b56b0b!important}.theme-light .ProgressBar--color--average .ProgressBar__fill{background-color:#b56b0b}.theme-light .ProgressBar--color--bad{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--label{border:.0833333333em solid #2c2c2c!important}.theme-light .ProgressBar--color--label .ProgressBar__fill{background-color:#2c2c2c}.theme-light .ProgressBar--color--gold{border:.0833333333em solid #bd810b!important}.theme-light .ProgressBar--color--gold .ProgressBar__fill{background-color:#bd810b}.theme-light .Chat{color:#000}.theme-light .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-light .Chat__badge:before{content:"x"}.theme-light .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-light .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-light .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-light .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#fff}.theme-light .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-light .Chat__highlight{color:#000}.theme-light .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-light .ChatMessage{word-wrap:break-word}.theme-light .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-light .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-light .Layout,.theme-light .Layout *{scrollbar-base-color:#f2f2f2;scrollbar-face-color:#d6d6d6;scrollbar-3dlight-color:#eee;scrollbar-highlight-color:#eee;scrollbar-track-color:#f2f2f2;scrollbar-arrow-color:#777;scrollbar-shadow-color:#d6d6d6}.theme-light .Layout::-webkit-scrollbar,.theme-light .Layout *::-webkit-scrollbar{width:12px}.theme-light .Layout::-webkit-scrollbar-track,.theme-light .Layout *::-webkit-scrollbar-track{background:#f2f2f2}.theme-light .Layout::-webkit-scrollbar-thumb,.theme-light .Layout *::-webkit-scrollbar-thumb{background:#d6d6d6}.theme-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-light .Layout__content--flexRow{display:flex;flex-flow:row}.theme-light .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-light .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-light .Layout__content--noMargin{margin:0}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(to bottom,#eee,#eee)}.theme-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-light .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-light .Window__contentPadding:after{height:0}.theme-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(252,252,252,.25);pointer-events:none}.theme-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-light .TitleBar{background-color:#eee;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#eee;transition:color .25s,background-color .25s}.theme-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-light .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light html,.theme-light body{padding:0;margin:0;height:100%;color:#000}.theme-light 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}.theme-light img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-light img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-light a{color:#00f}.theme-light a.popt{text-decoration:none}.theme-light .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-light .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}.theme-light .popup .close:hover{background:#999}.theme-light .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.theme-light .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-light .popup input[type=text]:hover,.theme-light .popup input[type=text]:active,.theme-light .popup input[type=text]:focus{border-color:green}.theme-light .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.theme-light .popup input[type=submit]:hover,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:active{background:#aaa;cursor:pointer}.theme-light .changeFont{padding:10px}.theme-light .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-light .changeFont a:hover{background:#ccc}.theme-light .highlightPopup{padding:10px;text-align:center}.theme-light .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-light .highlightPopup input.highlightColor{background-color:#ff0}.theme-light .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-light .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-light .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-light .contextMenu a:hover{background-color:#ccc}.theme-light .filterMessages{padding:5px}.theme-light .filterMessages div{padding:2px 0}.theme-light .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-light .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-light .motd h1,.theme-light .motd h2,.theme-light .motd h3,.theme-light .motd h4,.theme-light .motd h5,.theme-light .motd h6{color:#638500;text-decoration:underline}.theme-light .motd a,.theme-light .motd a:link,.theme-light .motd a:active,.theme-light .motd a:hover{color:#638500}.theme-light .italic,.theme-light .italics,.theme-light .emote{font-style:italic}.theme-light .highlight{background:#ff0}.theme-light h1,.theme-light h2,.theme-light h3,.theme-light h4,.theme-light h5,.theme-light h6{color:#00f;font-family:Georgia,Verdana,sans-serif}.theme-light em{font-style:normal;font-weight:700}.theme-light .darkmblue{color:#00f}.theme-light .prefix,.theme-light .ooc{font-weight:700}.theme-light .looc{color:#69c;font-weight:700}.theme-light .adminobserverooc{color:#09c;font-weight:700}.theme-light .adminooc{color:#b82e00;font-weight:700}.theme-light .adminobserver{color:#960;font-weight:700}.theme-light .admin{color:#386aff;font-weight:700}.theme-light .adminsay{color:#9611d4;font-weight:700}.theme-light .mentorhelp{color:#07b;font-weight:700}.theme-light .adminhelp{color:#a00;font-weight:700}.theme-light .playerreply{color:#80b;font-weight:700}.theme-light .pmsend{color:#00f}.theme-light .debug{color:#6d2f83}.theme-light .name,.theme-light .yell{font-weight:700}.theme-light .siliconsay{font-family:Courier New,Courier,monospace}.theme-light .deadsay{color:#5c00e6}.theme-light .radio{color:#408010}.theme-light .deptradio{color:#939}.theme-light .comradio{color:#204090}.theme-light .syndradio{color:#6d3f40}.theme-light .dsquadradio{color:#686868}.theme-light .resteamradio{color:#18bc46}.theme-light .airadio{color:#f0f}.theme-light .centradio{color:#5c5c7c}.theme-light .secradio{color:#a30000}.theme-light .engradio{color:#a66300}.theme-light .medradio{color:#009190}.theme-light .sciradio{color:#939}.theme-light .supradio{color:#7f6539}.theme-light .srvradio{color:#80a000}.theme-light .proradio{color:#e3027a}.theme-light .admin_channel{color:#9a04d1;font-weight:700}.theme-light .all_admin_ping{color:#12a5f4;font-weight:700;font-size:120%;text-align:center}.theme-light .mentor_channel{color:#775bff;font-weight:700}.theme-light .mentor_channel_admin{color:#a35cff;font-weight:700}.theme-light .djradio{color:#630}.theme-light .binaryradio{color:#0b0050;font-family:Courier New,Courier,monospace}.theme-light .mommiradio{color:navy}.theme-light .alert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:700}.theme-light .emote{font-style:italic}.theme-light .selecteddna{color:#fff;background-color:#001b1b}.theme-light .attack{color:red}.theme-light .moderate{color:#c00}.theme-light .disarm{color:#900}.theme-light .passive{color:#600}.theme-light .warning{color:red;font-style:italic}.theme-light .boldwarning{color:red;font-style:italic;font-weight:700}.theme-light .danger{color:red;font-weight:700}.theme-light .userdanger{color:red;font-weight:700;font-size:120%}.theme-light .biggerdanger{color:red;font-weight:700;font-size:150%}.theme-light .info{color:#00c}.theme-light .notice{color:#009}.theme-light .boldnotice{color:#009;font-weight:700}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03bb39}.theme-light .pr_announce{color:#228b22;font-weight:700}.theme-light .boldannounceic,.theme-light .boldannounceooc{color:red;font-weight:700}.theme-light .greenannounce{color:#0f0;font-weight:700}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:700}.theme-light .terrorspider{color:#320e32}.theme-light .dantalion{color:#6a2148}.theme-light .chaosverygood{color:#19e0c0;font-weight:700;font-size:120%}.theme-light .chaosgood{color:#19e0c0;font-weight:700}.theme-light .chaosneutral{color:#479ac0;font-weight:700}.theme-light .chaosbad{color:#9047c0;font-weight:700}.theme-light .chaosverybad{color:#9047c0;font-weight:700;font-size:120%}.theme-light .sinister{color:purple;font-weight:700;font-style:italic}.theme-light .blob{color:#006221;font-weight:700;font-style:italic}.theme-light .confirm{color:#00af3b}.theme-light .rose{color:#ff5050}.theme-light .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-light .wingdings{font-family:Wingdings,Webdings}.theme-light .robot{font-family:OCR-A,monospace;font-size:1.15em;font-weight:700}.theme-light .ancient{color:#008b8b;font-style:italic}.theme-light .newscaster{color:maroon}.theme-light .mod{color:#735638;font-weight:700}.theme-light .modooc{color:#184880;font-weight:700}.theme-light .adminmod{color:#402a14;font-weight:700}.theme-light .tajaran{color:#803b56}.theme-light .skrell{color:#00ced1}.theme-light .solcom{color:#22228b}.theme-light .com_srus{color:#7c4848}.theme-light .zombie{color:red}.theme-light .soghun{color:#228b22}.theme-light .changeling{color:purple}.theme-light .vox{color:#a0a}.theme-light .diona{color:#804000;font-weight:700}.theme-light .trinary{color:#727272}.theme-light .kidan{color:#664205}.theme-light .slime{color:#07a}.theme-light .drask{color:#a3d4eb;font-family:Arial Black}.theme-light .moth{color:#869b29;font-family:Copperplate}.theme-light .clown{color:red}.theme-light .vulpkanin{color:#b97a57}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:3;font-weight:700;font-style:italic}.theme-light .rough{font-family:Trebuchet MS,cursive,sans-serif}.theme-light .say_quote{font-family:Georgia,Verdana,sans-serif}.theme-light .cult{color:purple;font-weight:700;font-style:italic}.theme-light .cultspeech{color:#7f0000;font-style:italic}.theme-light .cultitalic{color:#960000;font-style:italic}.theme-light .cultlarge{color:#960000;font-weight:700;font-size:120%}.theme-light .narsie{color:#960000;font-weight:700;font-size:300%}.theme-light .narsiesmall{color:#960000;font-weight:700;font-size:200%}.theme-light .interface{color:#303}.theme-light .big{font-size:150%}.theme-light .reallybig{font-size:175%}.theme-light .greentext{color:#0f0;font-size:150%}.theme-light .redtext{color:red;font-size:150%}.theme-light .bold{font-weight:700}.theme-light .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-light .center{text-align:center}.theme-light .red{color:red}.theme-light .purple{color:#5e2d79}.theme-light .skeleton{color:#585858;font-weight:700;font-style:italic}.theme-light .gutter{color:#7092be;font-family:Trebuchet MS,cursive,sans-serif}.theme-light .orange{color:orange}.theme-light .orangei{color:orange;font-style:italic}.theme-light .orangeb{color:orange;font-weight:700}.theme-light .resonate{color:#298f85}.theme-light .healthscan_oxy{color:#0074bd}.theme-light .revennotice{color:#1d2953}.theme-light .revenboldnotice{color:#1d2953;font-weight:700}.theme-light .revenbignotice{color:#1d2953;font-weight:700;font-size:120%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:700;font-size:120%}.theme-light .specialnoticebold{color:#36525e;font-weight:700;font-size:120%}.theme-light .specialnotice{color:#36525e;font-size:120%}.theme-light .medal{font-weight:700}.theme-light .good{color:green}.theme-light .average{color:#ff8000}.theme-light .bad{color:red}.theme-light .italics,.theme-light .talkinto{font-style:italic}.theme-light .whisper{font-style:italic;color:#333}.theme-light .recruit{color:#5c00e6;font-weight:700;font-style:italic}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:75%}.theme-light .connectionClosed,.theme-light .fatalError{background:red;color:#fff;padding:5px}.theme-light .connectionClosed.restored{background:green}.theme-light .internal.boldnshit{color:#00f;font-weight:700}.theme-light .rebooting{background:#2979af;color:#fff;padding:5px}.theme-light .rebooting a{color:#fff!important;text-decoration-color:#fff!important}.theme-light .text-normal{font-weight:400;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .colossus{color:#7f282a;font-size:175%}.theme-light .hierophant{color:#609;font-weight:700;font-style:italic}.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .emoji{max-height:16px;max-width:16px}.theme-light .adminticket{color:#3e7336;font-weight:700}.theme-light .adminticketalt{color:#014c8a;font-weight:700}.theme-light span.body .codephrases{color:#00f}.theme-light span.body .coderesponses{color:red}.theme-light .announcement h1,.theme-light .announcement h2{color:#000;margin:8pt 0;line-height:1.2}.theme-light .announcement p{color:#d82020;line-height:1.3}.theme-light .announcement.minor h1{font-size:180%}.theme-light .announcement.minor h2{font-size:170%}.theme-light .announcement.sec h1{color:red;font-size:180%;font-family:Verdana,sans-serif}.theme-light .bolditalics{font-style:italic;font-weight:700}.theme-light .boxed_message{background:#f7fcff;border:1px solid #111a26;margin:.5em;padding:.5em .75em;text-align:center}.theme-light .boxed_message.left_align_text{text-align:left}.theme-light .boxed_message.red_border{background:#fff7f7;border-color:#a00}.theme-light .boxed_message.green_border{background:#f7fff7;border-color:#0f0}.theme-light .boxed_message.purple_border{background:#fdf7ff;border-color:#a0f}.theme-light .boxed_message.notice_border{background:#f7fdff;border-color:#0000bf}.theme-light .boxed_message.thick_border{border-width:thick}.theme-ntos .color-black{color:#1a1a1a!important}.theme-ntos .color-white{color:#fff!important}.theme-ntos .color-red{color:#df3e3e!important}.theme-ntos .color-orange{color:#f37f33!important}.theme-ntos .color-yellow{color:#fbda21!important}.theme-ntos .color-olive{color:#cbe41c!important}.theme-ntos .color-green{color:#25ca4c!important}.theme-ntos .color-teal{color:#00d6cc!important}.theme-ntos .color-blue{color:#2e93de!important}.theme-ntos .color-violet{color:#7349cf!important}.theme-ntos .color-purple{color:#ad45d0!important}.theme-ntos .color-pink{color:#e34da1!important}.theme-ntos .color-brown{color:#b97447!important}.theme-ntos .color-grey{color:#848484!important}.theme-ntos .color-good{color:#68c22d!important}.theme-ntos .color-average{color:#f29a29!important}.theme-ntos .color-bad{color:#df3e3e!important}.theme-ntos .color-label{color:#8b9bb0!important}.theme-ntos .color-gold{color:#f3b22f!important}.theme-ntos .color-bg-black{background-color:#000!important}.theme-ntos .color-bg-white{background-color:#d9d9d9!important}.theme-ntos .color-bg-red{background-color:#bd2020!important}.theme-ntos .color-bg-orange{background-color:#d95e0c!important}.theme-ntos .color-bg-yellow{background-color:#d9b804!important}.theme-ntos .color-bg-olive{background-color:#9aad14!important}.theme-ntos .color-bg-green{background-color:#1b9638!important}.theme-ntos .color-bg-teal{background-color:#009a93!important}.theme-ntos .color-bg-blue{background-color:#1c71b1!important}.theme-ntos .color-bg-violet{background-color:#552dab!important}.theme-ntos .color-bg-purple{background-color:#8b2baa!important}.theme-ntos .color-bg-pink{background-color:#cf2082!important}.theme-ntos .color-bg-brown{background-color:#8c5836!important}.theme-ntos .color-bg-grey{background-color:#646464!important}.theme-ntos .color-bg-good{background-color:#4d9121!important}.theme-ntos .color-bg-average{background-color:#cd7a0d!important}.theme-ntos .color-bg-bad{background-color:#bd2020!important}.theme-ntos .color-bg-label{background-color:#657a94!important}.theme-ntos .color-bg-gold{background-color:#d6920c!important}.theme-ntos .Section{position:relative;margin-bottom:.5em;background-color:#121922;box-sizing:border-box}.theme-ntos .Section:last-child{margin-bottom:0}.theme-ntos .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.theme-ntos .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-ntos .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-ntos .Section__rest{position:relative}.theme-ntos .Section__content{padding:.66em .5em}.theme-ntos .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-ntos .Section--fill{display:flex;flex-direction:column;height:100%}.theme-ntos .Section--fill>.Section__rest{flex-grow:1}.theme-ntos .Section--fill>.Section__rest>.Section__content{height:100%}.theme-ntos .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-ntos .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-ntos .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-ntos .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-ntos .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-ntos .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-ntos .Section .Section:first-child{margin-top:-.5em}.theme-ntos .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-ntos .Section .Section .Section .Section__titleText{font-size:1em}.theme-ntos .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-ntos .Button:last-child{margin-right:0;margin-bottom:0}.theme-ntos .Button .fa,.theme-ntos .Button .fas,.theme-ntos .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-ntos .Button--hasContent .fa,.theme-ntos .Button--hasContent .fas,.theme-ntos .Button--hasContent .far{margin-right:.25em}.theme-ntos .Button--hasContent.Button--iconRight .fa,.theme-ntos .Button--hasContent.Button--iconRight .fas,.theme-ntos .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-ntos .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-ntos .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-ntos .Button--circular{border-radius:50%}.theme-ntos .Button--compact{padding:0 .25em;line-height:1.333em}.theme-ntos .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-ntos .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-ntos .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--black:hover{background-color:#101010;color:#fff}.theme-ntos .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-ntos .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-ntos .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-ntos .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-ntos .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-ntos .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-ntos .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-ntos .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-ntos .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-ntos .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-ntos .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-ntos .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-ntos .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-ntos .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-ntos .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-ntos .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-ntos .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-ntos .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-ntos .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-ntos .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-ntos .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-ntos .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-ntos .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-ntos .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-ntos .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-ntos .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-ntos .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-ntos .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-ntos .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.theme-ntos .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--label:hover{background-color:#8a9aae;color:#fff}.theme-ntos .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-ntos .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-ntos .Button--color--default{transition:color .1s,background-color .1s;background-color:#384e68;color:#fff}.theme-ntos .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--default:hover{background-color:#4f6885;color:#fff}.theme-ntos .Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-ntos .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--caution:hover{background-color:#f5d523;color:#000}.theme-ntos .Button--color--danger{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--danger:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--transparent{transition:color .1s,background-color .1s;background-color:#1b2633;color:#fff;background-color:rgba(27,38,51,0);color:rgba(255,255,255,.5)}.theme-ntos .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--transparent:hover{background-color:#2f3b4a;color:#fff}.theme-ntos .Button--color--translucent{transition:color .1s,background-color .1s;background-color:#1b2633;color:#fff;background-color:rgba(27,38,51,.6);color:rgba(255,255,255,.5)}.theme-ntos .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--translucent:hover{background-color:#2f3b4a;color:#fff}.theme-ntos .Button--disabled{background-color:#999!important}.theme-ntos .Button--selected{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-ntos .Button--selected:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--selected:hover{background-color:#2fb94f;color:#fff}.theme-ntos .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-ntos .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-ntos .NumberInput--fluid{display:block}.theme-ntos .NumberInput__content{margin-left:.5em}.theme-ntos .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-ntos .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.theme-ntos .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-ntos .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-ntos .Input--disabled{color:#777;border-color:#848484;border-color:rgba(132,132,132,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-ntos .Input--fluid{display:block;width:auto}.theme-ntos .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-ntos .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-ntos .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-ntos .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-ntos .TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-ntos .TextArea--fluid{display:block;width:auto;height:auto}.theme-ntos .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-ntos .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-ntos .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-ntos .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-ntos .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-ntos .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-ntos .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-ntos .Knob__popupValue,.theme-ntos .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-ntos .Knob__popupValue--right{top:.25rem;right:-50%}.theme-ntos .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-ntos .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-ntos .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-ntos .Knob__ringFillPivot{transform:rotate(135deg)}.theme-ntos .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-ntos .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-ntos .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-ntos .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-ntos .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-ntos .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-ntos .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-ntos .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-ntos .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-ntos .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-ntos .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-ntos .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-ntos .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-ntos .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-ntos .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-ntos .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-ntos .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-ntos .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-ntos .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-ntos .Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.theme-ntos .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-ntos .Slider:not(.Slider__disabled){cursor:e-resize}.theme-ntos .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-ntos .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-ntos .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-ntos .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-ntos .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-ntos .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-ntos .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-ntos .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-ntos .ProgressBar--color--default{border:.0833333333em solid #3e6189}.theme-ntos .ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.theme-ntos .ProgressBar--color--disabled{border:1px solid #999}.theme-ntos .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-ntos .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-ntos .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-ntos .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-ntos .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-ntos .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-ntos .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-ntos .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-ntos .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-ntos .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-ntos .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-ntos .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-ntos .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-ntos .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-ntos .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-ntos .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-ntos .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-ntos .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-ntos .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-ntos .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-ntos .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-ntos .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-ntos .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-ntos .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-ntos .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-ntos .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-ntos .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-ntos .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-ntos .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-ntos .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-ntos .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-ntos .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-ntos .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-ntos .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-ntos .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-ntos .ProgressBar--color--label{border:.0833333333em solid #657a94!important}.theme-ntos .ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.theme-ntos .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-ntos .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-ntos .Chat{color:#abc6ec}.theme-ntos .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-ntos .Chat__badge:before{content:"x"}.theme-ntos .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-ntos .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-ntos .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-ntos .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#121922}.theme-ntos .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-ntos .Chat__highlight{color:#000}.theme-ntos .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-ntos .ChatMessage{word-wrap:break-word}.theme-ntos .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-ntos .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-ntos .Layout,.theme-ntos .Layout *{scrollbar-base-color:#141d26;scrollbar-face-color:#2a3b4f;scrollbar-3dlight-color:#1b2633;scrollbar-highlight-color:#1b2633;scrollbar-track-color:#141d26;scrollbar-arrow-color:#7290b4;scrollbar-shadow-color:#2a3b4f}.theme-ntos .Layout::-webkit-scrollbar,.theme-ntos .Layout *::-webkit-scrollbar{width:12px}.theme-ntos .Layout::-webkit-scrollbar-track,.theme-ntos .Layout *::-webkit-scrollbar-track{background:#141d26}.theme-ntos .Layout::-webkit-scrollbar-thumb,.theme-ntos .Layout *::-webkit-scrollbar-thumb{background:#2a3b4f}.theme-ntos .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-ntos .Layout__content--flexRow{display:flex;flex-flow:row}.theme-ntos .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-ntos .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-ntos .Layout__content--noMargin{margin:0}.theme-ntos .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#1b2633;background-image:linear-gradient(to bottom,#1b2633,#1b2633)}.theme-ntos .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-ntos .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-ntos .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-ntos .Window__contentPadding:after{height:0}.theme-ntos .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-ntos .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(50,63,78,.25);pointer-events:none}.theme-ntos .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-ntos .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-ntos .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-ntos .TitleBar{background-color:#1b2633;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-ntos .TitleBar__clickable{color:rgba(255,0,0,.5);background-color:#1b2633;transition:color .25s,background-color .25s}.theme-ntos .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-ntos .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-ntos .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-ntos .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-ntos .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-ntos .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-ntos .boxed_message{background:#1c242e;border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-ntos .boxed_message.left_align_text{text-align:left}.theme-ntos .boxed_message.red_border{background:#2e1c1c;border-color:#a00}.theme-ntos .boxed_message.green_border{background:#1c2e22;border-color:#0f0}.theme-ntos .boxed_message.purple_border{background:#221c2e;border-color:#8000ff}.theme-ntos .boxed_message.notice_border{background:#1f2633;border-color:#6685f5}.theme-ntos .boxed_message.thick_border{border-width:thick}.theme-syndicate .color-black{color:#1a1a1a!important}.theme-syndicate .color-white{color:#fff!important}.theme-syndicate .color-red{color:#df3e3e!important}.theme-syndicate .color-orange{color:#f37f33!important}.theme-syndicate .color-yellow{color:#fbda21!important}.theme-syndicate .color-olive{color:#cbe41c!important}.theme-syndicate .color-green{color:#25ca4c!important}.theme-syndicate .color-teal{color:#00d6cc!important}.theme-syndicate .color-blue{color:#2e93de!important}.theme-syndicate .color-violet{color:#7349cf!important}.theme-syndicate .color-purple{color:#ad45d0!important}.theme-syndicate .color-pink{color:#e34da1!important}.theme-syndicate .color-brown{color:#b97447!important}.theme-syndicate .color-grey{color:#848484!important}.theme-syndicate .color-good{color:#68c22d!important}.theme-syndicate .color-average{color:#f29a29!important}.theme-syndicate .color-bad{color:#df3e3e!important}.theme-syndicate .color-label{color:#8b9bb0!important}.theme-syndicate .color-gold{color:#f3b22f!important}.theme-syndicate .color-bg-black{background-color:#000!important}.theme-syndicate .color-bg-white{background-color:#d9d9d9!important}.theme-syndicate .color-bg-red{background-color:#bd2020!important}.theme-syndicate .color-bg-orange{background-color:#d95e0c!important}.theme-syndicate .color-bg-yellow{background-color:#d9b804!important}.theme-syndicate .color-bg-olive{background-color:#9aad14!important}.theme-syndicate .color-bg-green{background-color:#1b9638!important}.theme-syndicate .color-bg-teal{background-color:#009a93!important}.theme-syndicate .color-bg-blue{background-color:#1c71b1!important}.theme-syndicate .color-bg-violet{background-color:#552dab!important}.theme-syndicate .color-bg-purple{background-color:#8b2baa!important}.theme-syndicate .color-bg-pink{background-color:#cf2082!important}.theme-syndicate .color-bg-brown{background-color:#8c5836!important}.theme-syndicate .color-bg-grey{background-color:#646464!important}.theme-syndicate .color-bg-good{background-color:#4d9121!important}.theme-syndicate .color-bg-average{background-color:#cd7a0d!important}.theme-syndicate .color-bg-bad{background-color:#bd2020!important}.theme-syndicate .color-bg-label{background-color:#657a94!important}.theme-syndicate .color-bg-gold{background-color:#d6920c!important}.theme-syndicate .Section{position:relative;margin-bottom:.5em;background-color:#2b0101;box-sizing:border-box}.theme-syndicate .Section:last-child{margin-bottom:0}.theme-syndicate .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #397439}.theme-syndicate .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-syndicate .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-syndicate .Section__rest{position:relative}.theme-syndicate .Section__content{padding:.66em .5em}.theme-syndicate .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-syndicate .Section--fill{display:flex;flex-direction:column;height:100%}.theme-syndicate .Section--fill>.Section__rest{flex-grow:1}.theme-syndicate .Section--fill>.Section__rest>.Section__content{height:100%}.theme-syndicate .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-syndicate .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-syndicate .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-syndicate .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-syndicate .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-syndicate .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-syndicate .Section .Section:first-child{margin-top:-.5em}.theme-syndicate .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-syndicate .Section .Section .Section .Section__titleText{font-size:1em}.theme-syndicate .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-syndicate .Button:last-child{margin-right:0;margin-bottom:0}.theme-syndicate .Button .fa,.theme-syndicate .Button .fas,.theme-syndicate .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-syndicate .Button--hasContent .fa,.theme-syndicate .Button--hasContent .fas,.theme-syndicate .Button--hasContent .far{margin-right:.25em}.theme-syndicate .Button--hasContent.Button--iconRight .fa,.theme-syndicate .Button--hasContent.Button--iconRight .fas,.theme-syndicate .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-syndicate .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-syndicate .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-syndicate .Button--circular{border-radius:50%}.theme-syndicate .Button--compact{padding:0 .25em;line-height:1.333em}.theme-syndicate .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-syndicate .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-syndicate .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--black:hover{background-color:#101010;color:#fff}.theme-syndicate .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-syndicate .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-syndicate .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-syndicate .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-syndicate .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-syndicate .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-syndicate .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-syndicate .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-syndicate .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-syndicate .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-syndicate .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-syndicate .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-syndicate .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-syndicate .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-syndicate .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-syndicate .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-syndicate .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-syndicate .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-syndicate .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-syndicate .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-syndicate .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-syndicate .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-syndicate .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-syndicate .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-syndicate .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-syndicate .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-syndicate .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-syndicate .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-syndicate .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-syndicate .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-syndicate .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-syndicate .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-syndicate .Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.theme-syndicate .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--label:hover{background-color:#8a9aae;color:#fff}.theme-syndicate .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-syndicate .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-syndicate .Button--color--default{transition:color .1s,background-color .1s;background-color:#397439;color:#fff}.theme-syndicate .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--default:hover{background-color:#509350;color:#fff}.theme-syndicate .Button--color--caution{transition:color .1s,background-color .1s;background-color:#be6209;color:#fff}.theme-syndicate .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--caution:hover{background-color:#e67f1a;color:#fff}.theme-syndicate .Button--color--danger{transition:color .1s,background-color .1s;background-color:#9a9d00;color:#fff}.theme-syndicate .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--danger:hover{background-color:#bec110;color:#fff}.theme-syndicate .Button--color--transparent{transition:color .1s,background-color .1s;background-color:#4d0202;color:#fff;background-color:rgba(77,2,2,0);color:rgba(255,255,255,.5)}.theme-syndicate .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--transparent:hover{background-color:#671313;color:#fff}.theme-syndicate .Button--color--translucent{transition:color .1s,background-color .1s;background-color:#4d0202;color:#fff;background-color:rgba(77,2,2,.6);color:rgba(255,255,255,.5)}.theme-syndicate .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--translucent:hover{background-color:#671313;color:#fff}.theme-syndicate .Button--disabled{background-color:#363636!important}.theme-syndicate .Button--selected{transition:color .1s,background-color .1s;background-color:#9d0808;color:#fff}.theme-syndicate .Button--selected:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--selected:hover{background-color:#c11919;color:#fff}.theme-syndicate .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-syndicate .NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#fff;background-color:#910101;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) .8333333333em,rgba(0,0,0,.1) 1.6666666667em)}.theme-syndicate .NoticeBox--color--black{color:#fff;background-color:#000}.theme-syndicate .NoticeBox--color--white{color:#000;background-color:#b3b3b3}.theme-syndicate .NoticeBox--color--red{color:#fff;background-color:#701f1f}.theme-syndicate .NoticeBox--color--orange{color:#fff;background-color:#854114}.theme-syndicate .NoticeBox--color--yellow{color:#000;background-color:#83710d}.theme-syndicate .NoticeBox--color--olive{color:#000;background-color:#576015}.theme-syndicate .NoticeBox--color--green{color:#fff;background-color:#174e24}.theme-syndicate .NoticeBox--color--teal{color:#fff;background-color:#064845}.theme-syndicate .NoticeBox--color--blue{color:#fff;background-color:#1b4565}.theme-syndicate .NoticeBox--color--violet{color:#fff;background-color:#3b2864}.theme-syndicate .NoticeBox--color--purple{color:#fff;background-color:#542663}.theme-syndicate .NoticeBox--color--pink{color:#fff;background-color:#802257}.theme-syndicate .NoticeBox--color--brown{color:#fff;background-color:#4c3729}.theme-syndicate .NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.theme-syndicate .NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.theme-syndicate .NoticeBox--color--average{color:#fff;background-color:#7b4e13}.theme-syndicate .NoticeBox--color--bad{color:#fff;background-color:#701f1f}.theme-syndicate .NoticeBox--color--label{color:#fff;background-color:#53565a}.theme-syndicate .NoticeBox--color--gold{color:#fff;background-color:#825d13}.theme-syndicate .NoticeBox--type--info{color:#fff;background-color:#235982}.theme-syndicate .NoticeBox--type--success{color:#fff;background-color:#1e662f}.theme-syndicate .NoticeBox--type--warning{color:#fff;background-color:#a95219}.theme-syndicate .NoticeBox--type--danger{color:#fff;background-color:#8f2828}.theme-syndicate .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;color:#87ce87;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-syndicate .NumberInput--fluid{display:block}.theme-syndicate .NumberInput__content{margin-left:.5em}.theme-syndicate .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-syndicate .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #87ce87;background-color:#87ce87}.theme-syndicate .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-syndicate .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-syndicate .Input--disabled{color:#777;border-color:#6b6b6b;border-color:rgba(107,107,107,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-syndicate .Input--fluid{display:block;width:auto}.theme-syndicate .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-syndicate .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-syndicate .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-syndicate .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-syndicate .TextArea{position:relative;display:inline-block;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-syndicate .TextArea--fluid{display:block;width:auto;height:auto}.theme-syndicate .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-syndicate .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-syndicate .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-syndicate .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-syndicate .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-syndicate .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-syndicate .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-syndicate .Knob__popupValue,.theme-syndicate .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-syndicate .Knob__popupValue--right{top:.25rem;right:-50%}.theme-syndicate .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-syndicate .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-syndicate .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-syndicate .Knob__ringFillPivot{transform:rotate(135deg)}.theme-syndicate .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-syndicate .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-syndicate .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-syndicate .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-syndicate .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-syndicate .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-syndicate .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-syndicate .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-syndicate .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-syndicate .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-syndicate .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-syndicate .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-syndicate .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-syndicate .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-syndicate .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-syndicate .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-syndicate .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-syndicate .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-syndicate .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-syndicate .Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.theme-syndicate .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-syndicate .Slider:not(.Slider__disabled){cursor:e-resize}.theme-syndicate .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-syndicate .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-syndicate .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-syndicate .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-syndicate .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color .5s}.theme-syndicate .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-syndicate .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-syndicate .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-syndicate .ProgressBar--color--default{border:.0833333333em solid #306330}.theme-syndicate .ProgressBar--color--default .ProgressBar__fill{background-color:#306330}.theme-syndicate .ProgressBar--color--disabled{border:1px solid #999}.theme-syndicate .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-syndicate .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-syndicate .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-syndicate .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-syndicate .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-syndicate .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-syndicate .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-syndicate .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-syndicate .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-syndicate .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-syndicate .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-syndicate .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-syndicate .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-syndicate .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-syndicate .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-syndicate .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-syndicate .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-syndicate .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-syndicate .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-syndicate .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-syndicate .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-syndicate .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-syndicate .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-syndicate .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-syndicate .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-syndicate .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-syndicate .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-syndicate .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-syndicate .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-syndicate .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-syndicate .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-syndicate .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-syndicate .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-syndicate .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-syndicate .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-syndicate .ProgressBar--color--label{border:.0833333333em solid #657a94!important}.theme-syndicate .ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.theme-syndicate .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-syndicate .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-syndicate .Chat{color:#abc6ec}.theme-syndicate .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-syndicate .Chat__badge:before{content:"x"}.theme-syndicate .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-syndicate .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-syndicate .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-syndicate .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#2b0101}.theme-syndicate .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-syndicate .Chat__highlight{color:#000}.theme-syndicate .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-syndicate .ChatMessage{word-wrap:break-word}.theme-syndicate .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-syndicate .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-syndicate .Layout,.theme-syndicate .Layout *{scrollbar-base-color:#3a0202;scrollbar-face-color:#770303;scrollbar-3dlight-color:#4d0202;scrollbar-highlight-color:#4d0202;scrollbar-track-color:#3a0202;scrollbar-arrow-color:#fa2d2d;scrollbar-shadow-color:#770303}.theme-syndicate .Layout::-webkit-scrollbar,.theme-syndicate .Layout *::-webkit-scrollbar{width:12px}.theme-syndicate .Layout::-webkit-scrollbar-track,.theme-syndicate .Layout *::-webkit-scrollbar-track{background:#3a0202}.theme-syndicate .Layout::-webkit-scrollbar-thumb,.theme-syndicate .Layout *::-webkit-scrollbar-thumb{background:#770303}.theme-syndicate .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-syndicate .Layout__content--flexRow{display:flex;flex-flow:row}.theme-syndicate .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-syndicate .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-syndicate .Layout__content--noMargin{margin:0}.theme-syndicate .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#4d0202;background-image:linear-gradient(to bottom,#4d0202,#4d0202)}.theme-syndicate .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-syndicate .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-syndicate .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-syndicate .Window__contentPadding:after{height:0}.theme-syndicate .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-syndicate .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(108,22,22,.25);pointer-events:none}.theme-syndicate .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-syndicate .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-syndicate .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-syndicate .TitleBar{background-color:#910101;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-syndicate .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#910101;transition:color .25s,background-color .25s}.theme-syndicate .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-syndicate .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-syndicate .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-syndicate .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-syndicate .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-syndicate .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-syndicate .adminooc{color:#29ccbe}.theme-syndicate .debug{color:#8f39e6}.theme-syndicate .boxed_message{background:rgba(20,20,35,.25);border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-syndicate .boxed_message.left_align_text{text-align:left}.theme-syndicate .boxed_message.red_border{background:rgba(0,0,0,.2);border-color:red}.theme-syndicate .boxed_message.green_border{background:rgba(0,75,0,.25);border-color:#0f0}.theme-syndicate .boxed_message.purple_border{background:rgba(25,0,50,.25);border-color:#8000ff}.theme-syndicate .boxed_message.notice_border{background:rgba(0,0,75,.25);border-color:#6685f5}.theme-syndicate .boxed_message.thick_border{border-width:thick}.theme-paradise .color-black{color:#1a1a1a!important}.theme-paradise .color-white{color:#fff!important}.theme-paradise .color-red{color:#df3e3e!important}.theme-paradise .color-orange{color:#f37f33!important}.theme-paradise .color-yellow{color:#fbda21!important}.theme-paradise .color-olive{color:#cbe41c!important}.theme-paradise .color-green{color:#25ca4c!important}.theme-paradise .color-teal{color:#00d6cc!important}.theme-paradise .color-blue{color:#2e93de!important}.theme-paradise .color-violet{color:#7349cf!important}.theme-paradise .color-purple{color:#ad45d0!important}.theme-paradise .color-pink{color:#e34da1!important}.theme-paradise .color-brown{color:#b97447!important}.theme-paradise .color-grey{color:#848484!important}.theme-paradise .color-good{color:#68c22d!important}.theme-paradise .color-average{color:#f29a29!important}.theme-paradise .color-bad{color:#df3e3e!important}.theme-paradise .color-label{color:#955d4b!important}.theme-paradise .color-gold{color:#f3b22f!important}.theme-paradise .color-bg-black{background-color:#000!important}.theme-paradise .color-bg-white{background-color:#d9d9d9!important}.theme-paradise .color-bg-red{background-color:#bd2020!important}.theme-paradise .color-bg-orange{background-color:#d95e0c!important}.theme-paradise .color-bg-yellow{background-color:#d9b804!important}.theme-paradise .color-bg-olive{background-color:#9aad14!important}.theme-paradise .color-bg-green{background-color:#1b9638!important}.theme-paradise .color-bg-teal{background-color:#009a93!important}.theme-paradise .color-bg-blue{background-color:#1c71b1!important}.theme-paradise .color-bg-violet{background-color:#552dab!important}.theme-paradise .color-bg-purple{background-color:#8b2baa!important}.theme-paradise .color-bg-pink{background-color:#cf2082!important}.theme-paradise .color-bg-brown{background-color:#8c5836!important}.theme-paradise .color-bg-grey{background-color:#646464!important}.theme-paradise .color-bg-good{background-color:#4d9121!important}.theme-paradise .color-bg-average{background-color:#cd7a0d!important}.theme-paradise .color-bg-bad{background-color:#bd2020!important}.theme-paradise .color-bg-label{background-color:#6d4436!important}.theme-paradise .color-bg-gold{background-color:#d6920c!important}.theme-paradise .Section{position:relative;margin-bottom:.5em;background-color:#40071a;background-color:rgba(0,0,0,.5);box-sizing:border-box}.theme-paradise .Section:last-child{margin-bottom:0}.theme-paradise .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #208080}.theme-paradise .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-paradise .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-paradise .Section__rest{position:relative}.theme-paradise .Section__content{padding:.66em .5em}.theme-paradise .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-paradise .Section--fill{display:flex;flex-direction:column;height:100%}.theme-paradise .Section--fill>.Section__rest{flex-grow:1}.theme-paradise .Section--fill>.Section__rest>.Section__content{height:100%}.theme-paradise .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-paradise .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-paradise .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-paradise .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-paradise .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-paradise .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-paradise .Section .Section:first-child{margin-top:-.5em}.theme-paradise .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-paradise .Section .Section .Section .Section__titleText{font-size:1em}.theme-paradise .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-paradise .Button:last-child{margin-right:0;margin-bottom:0}.theme-paradise .Button .fa,.theme-paradise .Button .fas,.theme-paradise .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-paradise .Button--hasContent .fa,.theme-paradise .Button--hasContent .fas,.theme-paradise .Button--hasContent .far{margin-right:.25em}.theme-paradise .Button--hasContent.Button--iconRight .fa,.theme-paradise .Button--hasContent.Button--iconRight .fas,.theme-paradise .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-paradise .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-paradise .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-paradise .Button--circular{border-radius:50%}.theme-paradise .Button--compact{padding:0 .25em;line-height:1.333em}.theme-paradise .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-paradise .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-paradise .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--black:hover{background-color:#101010;color:#fff}.theme-paradise .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-paradise .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-paradise .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-paradise .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-paradise .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-paradise .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-paradise .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-paradise .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-paradise .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-paradise .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-paradise .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-paradise .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-paradise .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-paradise .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-paradise .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-paradise .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-paradise .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-paradise .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-paradise .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-paradise .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-paradise .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-paradise .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-paradise .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-paradise .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-paradise .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-paradise .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-paradise .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-paradise .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-paradise .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-paradise .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-paradise .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-paradise .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-paradise .Button--color--label{transition:color .1s,background-color .1s;background-color:#6d4436;color:#fff}.theme-paradise .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--label:hover{background-color:#8b5d4d;color:#fff}.theme-paradise .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-paradise .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-paradise .Button--color--default{transition:color .1s,background-color .1s;background-color:#208080;color:#fff}.theme-paradise .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--default:hover{background-color:#34a0a0;color:#fff}.theme-paradise .Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-paradise .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--caution:hover{background-color:#f5d523;color:#000}.theme-paradise .Button--color--danger{transition:color .1s,background-color .1s;background-color:#8c1eff;color:#fff}.theme-paradise .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--danger:hover{background-color:#ae61ff;color:#fff}.theme-paradise .Button--color--transparent{transition:color .1s,background-color .1s;background-color:#800d33;color:#fff;background-color:rgba(128,13,51,0);color:rgba(255,255,255,.5)}.theme-paradise .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--transparent:hover{background-color:#a01f4a;color:#fff}.theme-paradise .Button--color--translucent{transition:color .1s,background-color .1s;background-color:#800d33;color:#fff;background-color:rgba(128,13,51,.6);color:rgba(255,255,255,.5)}.theme-paradise .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--translucent:hover{background-color:#a01f4a;color:#fff}.theme-paradise .Button--disabled{background-color:#999!important}.theme-paradise .Button--selected{transition:color .1s,background-color .1s;background-color:#bf6030;color:#fff}.theme-paradise .Button--selected:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--selected:hover{background-color:#d4835a;color:#fff}.theme-paradise .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-paradise .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;color:#e65c2e;background-color:rgba(0,0,0,.25);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-paradise .NumberInput--fluid{display:block}.theme-paradise .NumberInput__content{margin-left:.5em}.theme-paradise .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-paradise .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #e65c2e;background-color:#e65c2e}.theme-paradise .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,.25);color:#fff;text-align:right}.theme-paradise .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;background-color:rgba(0,0,0,.25);color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-paradise .Input--disabled{color:#777;border-color:#4a4a4a;border-color:rgba(74,74,74,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-paradise .Input--fluid{display:block;width:auto}.theme-paradise .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-paradise .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-paradise .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-paradise .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-paradise .TextArea{position:relative;display:inline-block;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;background-color:rgba(0,0,0,.25);margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-paradise .TextArea--fluid{display:block;width:auto;height:auto}.theme-paradise .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-paradise .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-paradise .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-paradise .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-paradise .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-paradise .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-paradise .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-paradise .Knob__popupValue,.theme-paradise .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-paradise .Knob__popupValue--right{top:.25rem;right:-50%}.theme-paradise .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-paradise .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-paradise .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-paradise .Knob__ringFillPivot{transform:rotate(135deg)}.theme-paradise .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-paradise .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-paradise .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-paradise .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-paradise .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-paradise .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-paradise .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-paradise .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-paradise .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-paradise .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-paradise .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-paradise .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-paradise .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-paradise .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-paradise .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-paradise .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-paradise .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-paradise .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-paradise .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-paradise .Knob--color--label .Knob__ringFill{stroke:#955d4b}.theme-paradise .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-paradise .Slider:not(.Slider__disabled){cursor:e-resize}.theme-paradise .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-paradise .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-paradise .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-paradise .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-paradise .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-paradise .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-paradise .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-paradise .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-paradise .ProgressBar--color--default{border:.0833333333em solid #1b6d6d}.theme-paradise .ProgressBar--color--default .ProgressBar__fill{background-color:#1b6d6d}.theme-paradise .ProgressBar--color--disabled{border:1px solid #999}.theme-paradise .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-paradise .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-paradise .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-paradise .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-paradise .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-paradise .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-paradise .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-paradise .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-paradise .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-paradise .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-paradise .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-paradise .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-paradise .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-paradise .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-paradise .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-paradise .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-paradise .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-paradise .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-paradise .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-paradise .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-paradise .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-paradise .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-paradise .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-paradise .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-paradise .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-paradise .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-paradise .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-paradise .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-paradise .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-paradise .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-paradise .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-paradise .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-paradise .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-paradise .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-paradise .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-paradise .ProgressBar--color--label{border:.0833333333em solid #6d4436!important}.theme-paradise .ProgressBar--color--label .ProgressBar__fill{background-color:#6d4436}.theme-paradise .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-paradise .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-paradise .Chat{color:#abc6ec}.theme-paradise .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-paradise .Chat__badge:before{content:"x"}.theme-paradise .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-paradise .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-paradise .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-paradise .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#fff;background-color:#db2828}.theme-paradise .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-paradise .Chat__highlight{color:#000}.theme-paradise .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-paradise .ChatMessage{word-wrap:break-word}.theme-paradise .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-paradise .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-paradise .Layout,.theme-paradise .Layout *{scrollbar-base-color:#680b29;scrollbar-face-color:#99103d;scrollbar-3dlight-color:#800d33;scrollbar-highlight-color:#800d33;scrollbar-track-color:#680b29;scrollbar-arrow-color:#ea2e6c;scrollbar-shadow-color:#99103d}.theme-paradise .Layout::-webkit-scrollbar,.theme-paradise .Layout *::-webkit-scrollbar{width:12px}.theme-paradise .Layout::-webkit-scrollbar-track,.theme-paradise .Layout *::-webkit-scrollbar-track{background:#680b29}.theme-paradise .Layout::-webkit-scrollbar-thumb,.theme-paradise .Layout *::-webkit-scrollbar-thumb{background:#99103d}.theme-paradise .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-paradise .Layout__content--flexRow{display:flex;flex-flow:row}.theme-paradise .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-paradise .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-paradise .Layout__content--noMargin{margin:0}.theme-paradise .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#800d33;background-image:linear-gradient(to bottom,#80014b,#80460d)}.theme-paradise .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-paradise .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-paradise .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-paradise .Window__contentPadding:after{height:0}.theme-paradise .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-paradise .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(166,34,78,.25);pointer-events:none}.theme-paradise .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-paradise .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-paradise .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-paradise .TitleBar{background-color:#800d33;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-paradise .TitleBar__clickable{color:rgba(255,0,0,.5);background-color:#800d33;transition:color .25s,background-color .25s}.theme-paradise .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-paradise .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-paradise .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-paradise .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-paradise .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-paradise .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-paradise .adminooc{color:#29ccbe}.theme-paradise .debug{color:#8f39e6}.theme-paradise .boxed_message{background:rgba(0,0,0,.25);border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-paradise .boxed_message.left_align_text{text-align:left}.theme-paradise .boxed_message.red_border{background:rgba(0,0,0,.25);border-color:#a00}.theme-paradise .boxed_message.green_border{background:rgba(0,0,0,.25);border-color:#0f0}.theme-paradise .boxed_message.purple_border{background:rgba(0,0,0,.25);border-color:#8000ff}.theme-paradise .boxed_message.notice_border{background:rgba(0,0,0,.25);border-color:#6685f5}.theme-paradise .boxed_message.thick_border{border-width:thick} +html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.color-black{color:#1a1a1a!important}.color-white{color:#fff!important}.color-red{color:#df3e3e!important}.color-orange{color:#f37f33!important}.color-yellow{color:#fbda21!important}.color-olive{color:#cbe41c!important}.color-green{color:#25ca4c!important}.color-teal{color:#00d6cc!important}.color-blue{color:#2e93de!important}.color-violet{color:#7349cf!important}.color-purple{color:#ad45d0!important}.color-pink{color:#e34da1!important}.color-brown{color:#b97447!important}.color-grey{color:#848484!important}.color-good{color:#68c22d!important}.color-average{color:#f29a29!important}.color-bad{color:#df3e3e!important}.color-label{color:#8b9bb0!important}.color-gold{color:#f3b22f!important}.color-bg-black{background-color:#000!important}.color-bg-white{background-color:#d9d9d9!important}.color-bg-red{background-color:#bd2020!important}.color-bg-orange{background-color:#d95e0c!important}.color-bg-yellow{background-color:#d9b804!important}.color-bg-olive{background-color:#9aad14!important}.color-bg-green{background-color:#1b9638!important}.color-bg-teal{background-color:#009a93!important}.color-bg-blue{background-color:#1c71b1!important}.color-bg-violet{background-color:#552dab!important}.color-bg-purple{background-color:#8b2baa!important}.color-bg-pink{background-color:#cf2082!important}.color-bg-brown{background-color:#8c5836!important}.color-bg-grey{background-color:#646464!important}.color-bg-good{background-color:#4d9121!important}.color-bg-average{background-color:#cd7a0d!important}.color-bg-bad{background-color:#bd2020!important}.color-bg-label{background-color:#657a94!important}.color-bg-gold{background-color:#d6920c!important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9)!important;background:rgba(0,0,0,0)!important;outline:1px solid rgba(255,255,255,.5)!important;box-shadow:none!important;filter:none!important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8)!important}.outline-dotted{outline-style:dotted!important}.outline-dashed{outline-style:dashed!important}.outline-solid{outline-style:solid!important}.outline-double{outline-style:double!important}.outline-groove{outline-style:groove!important}.outline-ridge{outline-style:ridge!important}.outline-inset{outline-style:inset!important}.outline-outset{outline-style:outset!important}.outline-color-black{outline:.167rem solid #1a1a1a!important}.outline-color-white{outline:.167rem solid #fff!important}.outline-color-red{outline:.167rem solid #df3e3e!important}.outline-color-orange{outline:.167rem solid #f37f33!important}.outline-color-yellow{outline:.167rem solid #fbda21!important}.outline-color-olive{outline:.167rem solid #cbe41c!important}.outline-color-green{outline:.167rem solid #25ca4c!important}.outline-color-teal{outline:.167rem solid #00d6cc!important}.outline-color-blue{outline:.167rem solid #2e93de!important}.outline-color-violet{outline:.167rem solid #7349cf!important}.outline-color-purple{outline:.167rem solid #ad45d0!important}.outline-color-pink{outline:.167rem solid #e34da1!important}.outline-color-brown{outline:.167rem solid #b97447!important}.outline-color-grey{outline:.167rem solid #848484!important}.outline-color-good{outline:.167rem solid #68c22d!important}.outline-color-average{outline:.167rem solid #f29a29!important}.outline-color-bad{outline:.167rem solid #df3e3e!important}.outline-color-label{outline:.167rem solid #8b9bb0!important}.outline-color-gold{outline:.167rem solid #f3b22f!important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:700}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fas,.Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fas,.Button--hasContent .far{margin-right:.25em}.Button--hasContent.Button--iconRight .fa,.Button--hasContent.Button--iconRight .fas,.Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--multiLine{white-space:normal;word-wrap:break-word}.Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.Button--color--black:focus{transition:color .25s,background-color .25s}.Button--color--black:hover{background-color:#101010;color:#fff}.Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.Button--color--white:focus{transition:color .25s,background-color .25s}.Button--color--white:hover{background-color:#f8f8f8;color:#000}.Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--red:focus{transition:color .25s,background-color .25s}.Button--color--red:hover{background-color:#d93f3f;color:#fff}.Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.Button--color--orange:focus{transition:color .25s,background-color .25s}.Button--color--orange:hover{background-color:#ef7e33;color:#fff}.Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.Button--color--yellow:focus{transition:color .25s,background-color .25s}.Button--color--yellow:hover{background-color:#f5d523;color:#000}.Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.Button--color--olive:focus{transition:color .25s,background-color .25s}.Button--color--olive:hover{background-color:#bdd327;color:#fff}.Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.Button--color--green:focus{transition:color .25s,background-color .25s}.Button--color--green:hover{background-color:#2fb94f;color:#fff}.Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.Button--color--teal:focus{transition:color .25s,background-color .25s}.Button--color--teal:hover{background-color:#10bdb6;color:#fff}.Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.Button--color--blue:focus{transition:color .25s,background-color .25s}.Button--color--blue:hover{background-color:#308fd6;color:#fff}.Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.Button--color--violet:focus{transition:color .25s,background-color .25s}.Button--color--violet:hover{background-color:#7249ca;color:#fff}.Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.Button--color--purple:focus{transition:color .25s,background-color .25s}.Button--color--purple:hover{background-color:#aa46ca;color:#fff}.Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.Button--color--pink:focus{transition:color .25s,background-color .25s}.Button--color--pink:hover{background-color:#e04ca0;color:#fff}.Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.Button--color--brown:focus{transition:color .25s,background-color .25s}.Button--color--brown:hover{background-color:#ae724c;color:#fff}.Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.Button--color--grey:focus{transition:color .25s,background-color .25s}.Button--color--grey:hover{background-color:#818181;color:#fff}.Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.Button--color--good:focus{transition:color .25s,background-color .25s}.Button--color--good:hover{background-color:#67b335;color:#fff}.Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.Button--color--average:focus{transition:color .25s,background-color .25s}.Button--color--average:hover{background-color:#eb972b;color:#fff}.Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--bad:focus{transition:color .25s,background-color .25s}.Button--color--bad:hover{background-color:#d93f3f;color:#fff}.Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.Button--color--label:focus{transition:color .25s,background-color .25s}.Button--color--label:hover{background-color:#8a9aae;color:#fff}.Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.Button--color--gold:focus{transition:color .25s,background-color .25s}.Button--color--gold:hover{background-color:#eeaf30;color:#fff}.Button--color--default{transition:color .1s,background-color .1s;background-color:#3e6189;color:#fff}.Button--color--default:focus{transition:color .25s,background-color .25s}.Button--color--default:hover{background-color:#567daa;color:#fff}.Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.Button--color--caution:focus{transition:color .25s,background-color .25s}.Button--color--caution:hover{background-color:#f5d523;color:#000}.Button--color--danger{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.Button--color--danger:focus{transition:color .25s,background-color .25s}.Button--color--danger:hover{background-color:#d93f3f;color:#fff}.Button--color--transparent{transition:color .1s,background-color .1s;background-color:#202020;color:#fff;background-color:rgba(32,32,32,0);color:rgba(255,255,255,.5)}.Button--color--transparent:focus{transition:color .25s,background-color .25s}.Button--color--transparent:hover{background-color:#343434;color:#fff}.Button--color--translucent{transition:color .1s,background-color .1s;background-color:#202020;color:#fff;background-color:rgba(32,32,32,.6);color:rgba(255,255,255,.5)}.Button--color--translucent:focus{transition:color .25s,background-color .25s}.Button--color--translucent:hover{background-color:#343434;color:#fff}.Button--disabled{background-color:#999!important}.Button--selected{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.Button--selected:focus{transition:color .25s,background-color .25s}.Button--selected:hover{background-color:#2fb94f;color:#fff}.Button--modal{float:right;z-index:1;margin-top:-.5rem}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Dropdown{position:relative;align-items:center}.Dropdown__control{display:inline-block;align-items:center;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.3333333333em;-ms-user-select:none;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{overflow-y:auto;align-items:center;z-index:5;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-scroll{overflow-y:scroll}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color .1s ease-out}.Dropdown__menuentry.selected{background-color:rgba(255,255,255,.5)!important;transition:background-color 0ms}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em);text-align:left;padding-top:2.5px}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline,.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue,.Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Knob__popupValue--right{top:.25rem;right:-50%}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotate(135deg)}.Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotate(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-.25em -.5em 0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left;vertical-align:baseline}.LabeledList__label{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.LabeledList__breakContents{word-break:break-all;word-wrap:break-word}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem;scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) .8333333333em,rgba(0,0,0,.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--color--gold{color:#fff;background-color:#825d13}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.ProgressBar__fill--animated{transition:background-color .5s,width .5s}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--disabled{border:1px solid #999}.ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.ProgressBar--color--black{border:.0833333333em solid #000!important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border:.0833333333em solid #646464!important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border:.0833333333em solid #657a94!important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.Section{position:relative;margin-bottom:.5em;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.Section .Section:first-child{margin-top:-.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.Slider:not(.Slider__disabled){cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--zebra>.Stack__item:nth-child(2n){background-color:#131313}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:700;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#131313}.Tabs--fill{height:100%}.Section .Tabs{background-color:rgba(0,0,0,0)}.Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.Tabs--vertical{flex-direction:column;padding:.25em .25em .25em 0}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075);transition:background-color 0}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-right-radius:.25em;border-bottom-right-radius:.25em}.Tabs--vertical .Tab--selected{border-left:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-left-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-left-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-left-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-left-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-left-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-left-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-left-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-left-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-left-color:#2e93de}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-left-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-left-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-left-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-left-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-left-color:#848484}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-left-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-left-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-left-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-left-color:#8b9bb0}.Tab--selected.Tab--color--gold{color:#f6c563}.Tabs--horizontal .Tab--selected.Tab--color--gold{border-bottom-color:#f3b22f}.Tabs--vertical .Tab--selected.Tab--color--gold{border-left-color:#f3b22f}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.Input--disabled{color:#777;border-color:#848484;border-color:rgba(132,132,132,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:Consolas,monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity .15s ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid rgba(140,140,140,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;top:1em;left:.75em;right:2em}.Notification{color:#fff;background-color:#dc143c;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout::-webkit-scrollbar,.Layout *::-webkit-scrollbar{width:12px}.Layout::-webkit-scrollbar-track,.Layout *::-webkit-scrollbar-track{background:#181818}.Layout::-webkit-scrollbar-thumb,.Layout *::-webkit-scrollbar-thumb{background:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.Layout__content--flexRow{display:flex;flex-flow:row}.Layout__content--flexColumn{display:flex;flex-flow:column}.Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.Layout__content--noMargin{margin:0}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(to bottom,#202020,#202020)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.emoji16x16{vertical-align:middle}a{color:#397ea5}a.popt{text-decoration:none}.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:.9em;font-weight:700;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:.9em;font-weight:700}.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:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.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}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:link,.motd a:active,.motd a:hover{color:#a4bad6}.italic,.italics,.emote{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}em{font-style:normal;font-weight:700}.darkmblue{color:#6685f5}.prefix,.ooc{font-weight:700}.looc{color:#69c;font-weight:700}.adminobserverooc{color:#09c;font-weight:700}.adminooc{color:#b82e00;font-weight:700}.adminobserver{color:#960;font-weight:700}.admin{color:#386aff;font-weight:700}.adminsay{color:#9611d4;font-weight:700}.mentorhelp{color:#07b;font-weight:700}.adminhelp{color:#a00;font-weight:700}.playerreply{color:#80b;font-weight:700}.pmsend{color:#6685f5}.debug{color:#6d2f83}.name,.yell{font-weight:700}.siliconsay{font-family:Courier New,Courier,monospace}.deadsay{color:#e2c1ff}.radio{color:#20b142}.deptradio{color:#939}.comradio{color:#5f5cff}.syndradio{color:#8f4a4b}.dsquadradio{color:#998599}.resteamradio{color:#18bc46}.airadio{color:#ff5ed7}.centradio{color:#2681a5}.secradio{color:#dd3535}.engradio{color:#feac20}.medradio{color:#00b5ad}.sciradio{color:#c68cfa}.supradio{color:#b88646}.srvradio{color:#bbd164}.proradio{color:#b84f92}.admin_channel{color:#03fc9d;font-weight:700}.all_admin_ping{color:#12a5f4;font-weight:700;font-size:120%;text-align:center}.mentor_channel{color:#775bff;font-weight:700}.mentor_channel_admin{color:#a35cff;font-weight:700}.djradio{color:#960}.binaryradio{color:#1b00fb;font-family:Courier New,Courier,monospace}.mommiradio{color:#6685f5}.alert{color:#d82020}h1.alert,h2.alert{color:#a4bad6}.ghostalert{color:#cc00c6;font-style:italic;font-weight:700}.emote{font-style:italic}.selecteddna{color:#a4bad6;background-color:#001b1b}.attack{color:red}.moderate{color:#c00}.disarm{color:#900}.passive{color:#600}.warning{color:#c51e1e;font-style:italic}.boldwarning{color:#c51e1e;font-style:italic;font-weight:700}.danger{color:#c51e1e;font-weight:700}.userdanger{color:#c51e1e;font-weight:700;font-size:120%}.biggerdanger{color:red;font-weight:700;font-size:150%}.info{color:#9ab0ff}.notice{color:#6685f5}.boldnotice{color:#6685f5;font-weight:700}.suicide{color:#ff5050;font-style:italic}.green{color:#03bb39}.pr_announce,.boldannounceic,.boldannounceooc{color:#c51e1e;font-weight:700}.greenannounce{color:#059223;font-weight:700}.alien{color:#c433c4}.noticealien{color:#00c000}.alertalien{color:#00c000;font-weight:700}.terrorspider{color:#cf52fa}.dantalion{color:#8b2c5e}.chaosverygood{color:#19e0c0;font-weight:700;font-size:120%}.chaosgood{color:#19e0c0;font-weight:700}.chaosneutral{color:#479ac0;font-weight:700}.chaosbad{color:#9047c0;font-weight:700}.chaosverybad{color:#9047c0;font-weight:700;font-size:120%}.sinister{color:purple;font-weight:700;font-style:italic}.medal{font-weight:700}.blob{color:#006221;font-weight:700;font-style:italic}.confirm{color:#00af3b}.rose{color:#ff5050}.sans{font-family:Comic Sans MS,cursive,sans-serif}.wingdings{font-family:Wingdings,Webdings}.robot{font-family:OCR-A,monospace;font-size:1.15em;font-weight:700}.ancient{color:#008b8b;font-style:italic}.newscaster{color:#c00}.mod{color:#735638;font-weight:700}.modooc{color:#184880;font-weight:700}.adminmod{color:#f0aa14;font-weight:700}.tajaran{color:#803b56}.skrell{color:#00ced1}.solcom{color:#8282fb}.com_srus{color:#7c4848}.zombie{color:red}.soghun{color:#228b22}.changeling{color:#00b4de}.vox{color:#a0a}.diona{color:#804000;font-weight:700}.trinary{color:#727272}.kidan{color:#c64c05}.slime{color:#07a}.drask{color:#a3d4eb;font-family:Arial Black}.moth{color:#869b29;font-family:Copperplate}.clown{color:red}.vulpkanin{color:#b97a57}.abductor{color:purple;font-style:italic}.mind_control{color:#a00d6f;font-size:3;font-weight:700;font-style:italic}.rough{font-family:Trebuchet MS,cursive,sans-serif}.say_quote{font-family:Georgia,Verdana,sans-serif}.cult{color:purple;font-weight:700;font-style:italic}.cultspeech{color:#af0000;font-style:italic}.cultitalic{color:#a60000;font-style:italic}.cultlarge{color:#a60000;font-weight:700;font-size:120%}.narsie{color:#a60000;font-weight:700;font-size:300%}.narsiesmall{color:#a60000;font-weight:700;font-size:200%}.interface{color:#9031c4}.big{font-size:150%}.reallybig{font-size:175%}.greentext{color:#0f0;font-size:150%}.redtext{color:red;font-size:150%}.bold{font-weight:700}.his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.center{text-align:center}.red{color:red}.purple{color:#9031c4}.skeleton{color:#c8c8c8;font-weight:700;font-style:italic}.gutter{color:#7092be;font-family:Trebuchet MS,cursive,sans-serif}.orange{color:orange}.orangei{color:orange;font-style:italic}.orangeb{color:orange;font-weight:700}.resonate{color:#298f85}.healthscan_oxy{color:#5cc9ff}.revennotice{color:#6685f5}.revenboldnotice{color:#6685f5;font-weight:700}.revenbignotice{color:#6685f5;font-weight:700;font-size:120%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:700;font-size:120%}.specialnotice{color:#4a6f82;font-weight:700;font-size:120%}.good{color:green}.average{color:#ff8000}.bad{color:red}.italics,.talkinto{font-style:italic}.whisper{font-style:italic;color:#ccc}.recruit{color:#5c00e6;font-weight:700;font-style:italic}.memo{color:#638500;text-align:center}.memoedit{text-align:center;font-size:75%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#6685f5;font-weight:700}.rebooting{background:#2979af;color:#fff;padding:5px}.rebooting a{color:#fff!important;text-decoration-color:#fff!important}.text-normal{font-weight:400;font-style:normal}.hidden{display:none;visibility:hidden}.colossus{color:#7f282a;font-size:175%}.hierophant{color:#609;font-weight:700;font-style:italic}.hierophant_warning{color:#609;font-style:italic}.emoji{max-height:16px;max-width:16px}.adminticket{color:#3daf21;font-weight:700}.adminticketalt{color:#ccb847;font-weight:700}span.body .codephrases{color:#55f}span.body .coderesponses{color:#f33}.announcement h1,.announcement h2{color:#a4bad6;margin:8pt 0;line-height:1.2}.announcement p{color:#d82020;line-height:1.3}.announcement.minor h1{font-size:180%}.announcement.minor h2{font-size:170%}.announcement.sec h1{color:red;font-size:180%;font-family:Verdana,sans-serif}.bolditalics{font-style:italic;font-weight:700}.boxed_message{background:#1b1c1e;border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.boxed_message.left_align_text{text-align:left}.boxed_message.red_border{background:#1e1b1b;border-color:#a00}.boxed_message.green_border{background:#1b1e1c;border-color:#0f0}.boxed_message.purple_border{background:#1d1c1f;border-color:#8000ff}.boxed_message.notice_border{background:#1b1c1e;border-color:#6685f5}.boxed_message.thick_border{border-width:thick}.oxygen{color:#449dff}.nitrogen{color:#f94541}.carbon_dioxide{color:#ccc}.plasma{color:#eb6b00}.sleeping_agent{color:#f28b89}.agent_b{color:teal}.theme-light .color-black{color:#000!important}.theme-light .color-white{color:#e6e6e6!important}.theme-light .color-red{color:#c82121!important}.theme-light .color-orange{color:#e6630d!important}.theme-light .color-yellow{color:#e5c304!important}.theme-light .color-olive{color:#a3b816!important}.theme-light .color-green{color:#1d9f3b!important}.theme-light .color-teal{color:#00a39c!important}.theme-light .color-blue{color:#1e78bb!important}.theme-light .color-violet{color:#5a30b5!important}.theme-light .color-purple{color:#932eb4!important}.theme-light .color-pink{color:#db228a!important}.theme-light .color-brown{color:#955d39!important}.theme-light .color-grey{color:#e6e6e6!important}.theme-light .color-good{color:#529923!important}.theme-light .color-average{color:#da810e!important}.theme-light .color-bad{color:#c82121!important}.theme-light .color-label{color:#353535!important}.theme-light .color-gold{color:#e39b0d!important}.theme-light .color-bg-black{background-color:#000!important}.theme-light .color-bg-white{background-color:#bfbfbf!important}.theme-light .color-bg-red{background-color:#a61c1c!important}.theme-light .color-bg-orange{background-color:#c0530b!important}.theme-light .color-bg-yellow{background-color:#bfa303!important}.theme-light .color-bg-olive{background-color:#889912!important}.theme-light .color-bg-green{background-color:#188532!important}.theme-light .color-bg-teal{background-color:#008882!important}.theme-light .color-bg-blue{background-color:#19649c!important}.theme-light .color-bg-violet{background-color:#4b2897!important}.theme-light .color-bg-purple{background-color:#7a2696!important}.theme-light .color-bg-pink{background-color:#b61d73!important}.theme-light .color-bg-brown{background-color:#7c4d2f!important}.theme-light .color-bg-grey{background-color:#bfbfbf!important}.theme-light .color-bg-good{background-color:#44801d!important}.theme-light .color-bg-average{background-color:#b56b0b!important}.theme-light .color-bg-bad{background-color:#a61c1c!important}.theme-light .color-bg-label{background-color:#2c2c2c!important}.theme-light .color-bg-gold{background-color:#bd810b!important}.theme-light .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#fff}.theme-light .Tabs--fill{height:100%}.theme-light .Section .Tabs{background-color:rgba(0,0,0,0)}.theme-light .Section:not(.Section--fitted) .Tabs{margin:0 -.5em .5em}.theme-light .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-.5em}.theme-light .Tabs--vertical{flex-direction:column;padding:.25em .25em .25em 0}.theme-light .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0}.theme-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-light .Tabs__Tab{flex-grow:0}.theme-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-light .Tab{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,0);color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em;transition:background-color 50ms ease-out}.theme-light .Tab:not(.Tab--selected):hover{background-color:rgba(0,0,0,.075);transition:background-color 0}.theme-light .Tab--selected{background-color:rgba(0,0,0,.125);color:#404040}.theme-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-light .Tabs--horizontal .Tab{border-top:.1666666667em solid rgba(0,0,0,0);border-bottom:.1666666667em solid rgba(0,0,0,0);border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid rgba(0,0,0,0);border-right:.1666666667em solid rgba(0,0,0,0);border-top-right-radius:.25em;border-bottom-right-radius:.25em}.theme-light .Tabs--vertical .Tab--selected{border-left:.1666666667em solid #000}.theme-light .Tab--selected.Tab--color--black{color:#404040}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-light .Tabs--vertical .Tab--selected.Tab--color--black{border-left-color:#000}.theme-light .Tab--selected.Tab--color--white{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--white{border-left-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--red{border-left-color:#c82121}.theme-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-left-color:#e6630d}.theme-light .Tab--selected.Tab--color--yellow{color:#fcdd33}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#e5c304}.theme-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-left-color:#e5c304}.theme-light .Tab--selected.Tab--color--olive{color:#d0e732}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#a3b816}.theme-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-left-color:#a3b816}.theme-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-light .Tabs--vertical .Tab--selected.Tab--color--green{border-left-color:#1d9f3b}.theme-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-left-color:#00a39c}.theme-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-left-color:#1e78bb}.theme-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-left-color:#5a30b5}.theme-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-left-color:#932eb4}.theme-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-left-color:#db228a}.theme-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-left-color:#955d39}.theme-light .Tab--selected.Tab--color--grey{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-left-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--good{color:#77d23b}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#529923}.theme-light .Tabs--vertical .Tab--selected.Tab--color--good{border-left-color:#529923}.theme-light .Tab--selected.Tab--color--average{color:#f3a23a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#da810e}.theme-light .Tabs--vertical .Tab--selected.Tab--color--average{border-left-color:#da810e}.theme-light .Tab--selected.Tab--color--bad{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-left-color:#c82121}.theme-light .Tab--selected.Tab--color--label{color:#686868}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#353535}.theme-light .Tabs--vertical .Tab--selected.Tab--color--label{border-left-color:#353535}.theme-light .Tab--selected.Tab--color--gold{color:#f4b73f}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--gold{border-bottom-color:#e39b0d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--gold{border-left-color:#e39b0d}.theme-light .Section{position:relative;margin-bottom:.5em;background-color:#fff;box-sizing:border-box}.theme-light .Section:last-child{margin-bottom:0}.theme-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fff}.theme-light .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#000}.theme-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-light .Section__rest{position:relative}.theme-light .Section__content{padding:.66em .5em}.theme-light .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill>.Section__rest{flex-grow:1}.theme-light .Section--fill>.Section__rest>.Section__content{height:100%}.theme-light .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-light .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-light .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-light .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-light .Section .Section:first-child{margin-top:-.5em}.theme-light .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-light .Section .Section .Section .Section__titleText{font-size:1em}.theme-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-light .Button .fa,.theme-light .Button .fas,.theme-light .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .fas,.theme-light .Button--hasContent .far{margin-right:.25em}.theme-light .Button--hasContent.Button--iconRight .fa,.theme-light .Button--hasContent.Button--iconRight .fas,.theme-light .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-light .Button--circular{border-radius:50%}.theme-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-light .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-light .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-light .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--black:hover{background-color:#101010;color:#fff}.theme-light .Button--color--white{transition:color .1s,background-color .1s;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--white:hover{background-color:#e7e7e7;color:#000}.theme-light .Button--color--red{transition:color .1s,background-color .1s;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--red:hover{background-color:#cb3030;color:#fff}.theme-light .Button--color--orange{transition:color .1s,background-color .1s;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--orange:hover{background-color:#e76d1d;color:#fff}.theme-light .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--yellow:hover{background-color:#e7c714;color:#fff}.theme-light .Button--color--olive{transition:color .1s,background-color .1s;background-color:#889912;color:#fff}.theme-light .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--olive:hover{background-color:#a9bc25;color:#fff}.theme-light .Button--color--green{transition:color .1s,background-color .1s;background-color:#188532;color:#fff}.theme-light .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--green:hover{background-color:#2ba648;color:#fff}.theme-light .Button--color--teal{transition:color .1s,background-color .1s;background-color:#008882;color:#fff}.theme-light .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--teal:hover{background-color:#10a9a2;color:#fff}.theme-light .Button--color--blue{transition:color .1s,background-color .1s;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--blue:hover{background-color:#2c81c0;color:#fff}.theme-light .Button--color--violet{transition:color .1s,background-color .1s;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--violet:hover{background-color:#653db9;color:#fff}.theme-light .Button--color--purple{transition:color .1s,background-color .1s;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--purple:hover{background-color:#9a3bb9;color:#fff}.theme-light .Button--color--pink{transition:color .1s,background-color .1s;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--pink:hover{background-color:#d93591;color:#fff}.theme-light .Button--color--brown{transition:color .1s,background-color .1s;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--brown:hover{background-color:#9c6745;color:#fff}.theme-light .Button--color--grey{transition:color .1s,background-color .1s;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--grey:hover{background-color:#e7e7e7;color:#000}.theme-light .Button--color--good{transition:color .1s,background-color .1s;background-color:#44801d;color:#fff}.theme-light .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--good:hover{background-color:#5d9f31;color:#fff}.theme-light .Button--color--average{transition:color .1s,background-color .1s;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--average:hover{background-color:#dc891d;color:#fff}.theme-light .Button--color--bad{transition:color .1s,background-color .1s;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--bad:hover{background-color:#cb3030;color:#fff}.theme-light .Button--color--label{transition:color .1s,background-color .1s;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--label:hover{background-color:#424242;color:#fff}.theme-light .Button--color--gold{transition:color .1s,background-color .1s;background-color:#bd810b;color:#fff}.theme-light .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--gold:hover{background-color:#e5a11c;color:#fff}.theme-light .Button--color--default{transition:color .1s,background-color .1s;background-color:#bbb;color:#000}.theme-light .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--default:hover{background-color:#e3e3e3;color:#000}.theme-light .Button--color--caution{transition:color .1s,background-color .1s;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--caution:hover{background-color:#e67f1a;color:#fff}.theme-light .Button--color--danger{transition:color .1s,background-color .1s;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--danger:hover{background-color:#bec110;color:#fff}.theme-light .Button--color--transparent{transition:color .1s,background-color .1s;background-color:#eee;color:#000;background-color:rgba(238,238,238,0);color:rgba(0,0,0,.5)}.theme-light .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--transparent:hover{background-color:#fcfcfc;color:#000}.theme-light .Button--color--translucent{transition:color .1s,background-color .1s;background-color:#eee;color:#000;background-color:rgba(238,238,238,.6);color:rgba(0,0,0,.5)}.theme-light .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-light .Button--color--translucent:hover{background-color:#fcfcfc;color:#000}.theme-light .Button--disabled{background-color:#363636!important}.theme-light .Button--selected{transition:color .1s,background-color .1s;background-color:#0668b8;color:#fff}.theme-light .Button--selected:focus{transition:color .25s,background-color .25s}.theme-light .Button--selected:hover{background-color:#1785df;color:#fff}.theme-light .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#353535;background-color:#e6e6e6;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-light .NumberInput--fluid{display:block}.theme-light .NumberInput__content{margin-left:.5em}.theme-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #353535;background-color:#353535}.theme-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#e6e6e6;color:#000;text-align:right}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#e6e6e6;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-light .Input--disabled{color:#777;border-color:#000;border-color:rgba(0,0,0,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#000;color:inherit}.theme-light .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-light .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;background-color:#e6e6e6;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-light .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-light .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-light .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-light .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-light .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-light .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-light .Knob__popupValue,.theme-light .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .Knob__popupValue--right{top:.25rem;right:-50%}.theme-light .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-light .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-light .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-light .Knob__ringFillPivot{transform:rotate(135deg)}.theme-light .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-light .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-light .Knob--color--black .Knob__ringFill{stroke:#000}.theme-light .Knob--color--white .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--red .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--orange .Knob__ringFill{stroke:#e6630d}.theme-light .Knob--color--yellow .Knob__ringFill{stroke:#e5c304}.theme-light .Knob--color--olive .Knob__ringFill{stroke:#a3b816}.theme-light .Knob--color--green .Knob__ringFill{stroke:#1d9f3b}.theme-light .Knob--color--teal .Knob__ringFill{stroke:#00a39c}.theme-light .Knob--color--blue .Knob__ringFill{stroke:#1e78bb}.theme-light .Knob--color--violet .Knob__ringFill{stroke:#5a30b5}.theme-light .Knob--color--purple .Knob__ringFill{stroke:#932eb4}.theme-light .Knob--color--pink .Knob__ringFill{stroke:#db228a}.theme-light .Knob--color--brown .Knob__ringFill{stroke:#955d39}.theme-light .Knob--color--grey .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--good .Knob__ringFill{stroke:#529923}.theme-light .Knob--color--average .Knob__ringFill{stroke:#da810e}.theme-light .Knob--color--bad .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--label .Knob__ringFill{stroke:#353535}.theme-light .Knob--color--gold .Knob__ringFill{stroke:#e39b0d}.theme-light .Slider:not(.Slider__disabled){cursor:e-resize}.theme-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #000}.theme-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-light .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-light .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-light .ProgressBar--color--default{border:.0833333333em solid #bfbfbf}.theme-light .ProgressBar--color--default .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--disabled{border:1px solid #999}.theme-light .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-light .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-light .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-light .ProgressBar--color--white{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--white .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--red{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--red .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--orange{border:.0833333333em solid #c0530b!important}.theme-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#c0530b}.theme-light .ProgressBar--color--yellow{border:.0833333333em solid #bfa303!important}.theme-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#bfa303}.theme-light .ProgressBar--color--olive{border:.0833333333em solid #889912!important}.theme-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#889912}.theme-light .ProgressBar--color--green{border:.0833333333em solid #188532!important}.theme-light .ProgressBar--color--green .ProgressBar__fill{background-color:#188532}.theme-light .ProgressBar--color--teal{border:.0833333333em solid #008882!important}.theme-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#008882}.theme-light .ProgressBar--color--blue{border:.0833333333em solid #19649c!important}.theme-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#19649c}.theme-light .ProgressBar--color--violet{border:.0833333333em solid #4b2897!important}.theme-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#4b2897}.theme-light .ProgressBar--color--purple{border:.0833333333em solid #7a2696!important}.theme-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#7a2696}.theme-light .ProgressBar--color--pink{border:.0833333333em solid #b61d73!important}.theme-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#b61d73}.theme-light .ProgressBar--color--brown{border:.0833333333em solid #7c4d2f!important}.theme-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#7c4d2f}.theme-light .ProgressBar--color--grey{border:.0833333333em solid #bfbfbf!important}.theme-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--good{border:.0833333333em solid #44801d!important}.theme-light .ProgressBar--color--good .ProgressBar__fill{background-color:#44801d}.theme-light .ProgressBar--color--average{border:.0833333333em solid #b56b0b!important}.theme-light .ProgressBar--color--average .ProgressBar__fill{background-color:#b56b0b}.theme-light .ProgressBar--color--bad{border:.0833333333em solid #a61c1c!important}.theme-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--label{border:.0833333333em solid #2c2c2c!important}.theme-light .ProgressBar--color--label .ProgressBar__fill{background-color:#2c2c2c}.theme-light .ProgressBar--color--gold{border:.0833333333em solid #bd810b!important}.theme-light .ProgressBar--color--gold .ProgressBar__fill{background-color:#bd810b}.theme-light .Chat{color:#000}.theme-light .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-light .Chat__badge:before{content:"x"}.theme-light .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-light .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-light .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-light .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#fff}.theme-light .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-light .Chat__highlight{color:#000}.theme-light .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-light .ChatMessage{word-wrap:break-word}.theme-light .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-light .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-light .Layout,.theme-light .Layout *{scrollbar-base-color:#f2f2f2;scrollbar-face-color:#d6d6d6;scrollbar-3dlight-color:#eee;scrollbar-highlight-color:#eee;scrollbar-track-color:#f2f2f2;scrollbar-arrow-color:#777;scrollbar-shadow-color:#d6d6d6}.theme-light .Layout::-webkit-scrollbar,.theme-light .Layout *::-webkit-scrollbar{width:12px}.theme-light .Layout::-webkit-scrollbar-track,.theme-light .Layout *::-webkit-scrollbar-track{background:#f2f2f2}.theme-light .Layout::-webkit-scrollbar-thumb,.theme-light .Layout *::-webkit-scrollbar-thumb{background:#d6d6d6}.theme-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-light .Layout__content--flexRow{display:flex;flex-flow:row}.theme-light .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-light .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-light .Layout__content--noMargin{margin:0}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(to bottom,#eee,#eee)}.theme-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-light .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-light .Window__contentPadding:after{height:0}.theme-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(252,252,252,.25);pointer-events:none}.theme-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-light .TitleBar{background-color:#eee;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#eee;transition:color .25s,background-color .25s}.theme-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-light .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light html,.theme-light body{padding:0;margin:0;height:100%;color:#000}.theme-light 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}.theme-light img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-light img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-light a{color:#00f}.theme-light a.popt{text-decoration:none}.theme-light .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-light .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}.theme-light .popup .close:hover{background:#999}.theme-light .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:700;border-bottom:2px solid green}.theme-light .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-light .popup input[type=text]:hover,.theme-light .popup input[type=text]:active,.theme-light .popup input[type=text]:focus{border-color:green}.theme-light .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:700}.theme-light .popup input[type=submit]:hover,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:active{background:#aaa;cursor:pointer}.theme-light .changeFont{padding:10px}.theme-light .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-light .changeFont a:hover{background:#ccc}.theme-light .highlightPopup{padding:10px;text-align:center}.theme-light .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-light .highlightPopup input.highlightColor{background-color:#ff0}.theme-light .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-light .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-light .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-light .contextMenu a:hover{background-color:#ccc}.theme-light .filterMessages{padding:5px}.theme-light .filterMessages div{padding:2px 0}.theme-light .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-light .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-light .motd h1,.theme-light .motd h2,.theme-light .motd h3,.theme-light .motd h4,.theme-light .motd h5,.theme-light .motd h6{color:#638500;text-decoration:underline}.theme-light .motd a,.theme-light .motd a:link,.theme-light .motd a:active,.theme-light .motd a:hover{color:#638500}.theme-light .italic,.theme-light .italics,.theme-light .emote{font-style:italic}.theme-light .highlight{background:#ff0}.theme-light h1,.theme-light h2,.theme-light h3,.theme-light h4,.theme-light h5,.theme-light h6{color:#00f;font-family:Georgia,Verdana,sans-serif}.theme-light em{font-style:normal;font-weight:700}.theme-light .darkmblue{color:#00f}.theme-light .prefix,.theme-light .ooc{font-weight:700}.theme-light .looc{color:#69c;font-weight:700}.theme-light .adminobserverooc{color:#09c;font-weight:700}.theme-light .adminooc{color:#b82e00;font-weight:700}.theme-light .adminobserver{color:#960;font-weight:700}.theme-light .admin{color:#386aff;font-weight:700}.theme-light .adminsay{color:#9611d4;font-weight:700}.theme-light .mentorhelp{color:#07b;font-weight:700}.theme-light .adminhelp{color:#a00;font-weight:700}.theme-light .playerreply{color:#80b;font-weight:700}.theme-light .pmsend{color:#00f}.theme-light .debug{color:#6d2f83}.theme-light .name,.theme-light .yell{font-weight:700}.theme-light .siliconsay{font-family:Courier New,Courier,monospace}.theme-light .deadsay{color:#5c00e6}.theme-light .radio{color:#408010}.theme-light .deptradio{color:#939}.theme-light .comradio{color:#204090}.theme-light .syndradio{color:#6d3f40}.theme-light .dsquadradio{color:#686868}.theme-light .resteamradio{color:#18bc46}.theme-light .airadio{color:#f0f}.theme-light .centradio{color:#5c5c7c}.theme-light .secradio{color:#a30000}.theme-light .engradio{color:#a66300}.theme-light .medradio{color:#009190}.theme-light .sciradio{color:#939}.theme-light .supradio{color:#7f6539}.theme-light .srvradio{color:#80a000}.theme-light .proradio{color:#e3027a}.theme-light .admin_channel{color:#9a04d1;font-weight:700}.theme-light .all_admin_ping{color:#12a5f4;font-weight:700;font-size:120%;text-align:center}.theme-light .mentor_channel{color:#775bff;font-weight:700}.theme-light .mentor_channel_admin{color:#a35cff;font-weight:700}.theme-light .djradio{color:#630}.theme-light .binaryradio{color:#0b0050;font-family:Courier New,Courier,monospace}.theme-light .mommiradio{color:navy}.theme-light .alert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:700}.theme-light .emote{font-style:italic}.theme-light .selecteddna{color:#fff;background-color:#001b1b}.theme-light .attack{color:red}.theme-light .moderate{color:#c00}.theme-light .disarm{color:#900}.theme-light .passive{color:#600}.theme-light .warning{color:red;font-style:italic}.theme-light .boldwarning{color:red;font-style:italic;font-weight:700}.theme-light .danger{color:red;font-weight:700}.theme-light .userdanger{color:red;font-weight:700;font-size:120%}.theme-light .biggerdanger{color:red;font-weight:700;font-size:150%}.theme-light .info{color:#00c}.theme-light .notice{color:#009}.theme-light .boldnotice{color:#009;font-weight:700}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03bb39}.theme-light .pr_announce{color:#228b22;font-weight:700}.theme-light .boldannounceic,.theme-light .boldannounceooc{color:red;font-weight:700}.theme-light .greenannounce{color:#0f0;font-weight:700}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:700}.theme-light .terrorspider{color:#320e32}.theme-light .dantalion{color:#6a2148}.theme-light .chaosverygood{color:#19e0c0;font-weight:700;font-size:120%}.theme-light .chaosgood{color:#19e0c0;font-weight:700}.theme-light .chaosneutral{color:#479ac0;font-weight:700}.theme-light .chaosbad{color:#9047c0;font-weight:700}.theme-light .chaosverybad{color:#9047c0;font-weight:700;font-size:120%}.theme-light .sinister{color:purple;font-weight:700;font-style:italic}.theme-light .blob{color:#006221;font-weight:700;font-style:italic}.theme-light .confirm{color:#00af3b}.theme-light .rose{color:#ff5050}.theme-light .sans{font-family:Comic Sans MS,cursive,sans-serif}.theme-light .wingdings{font-family:Wingdings,Webdings}.theme-light .robot{font-family:OCR-A,monospace;font-size:1.15em;font-weight:700}.theme-light .ancient{color:#008b8b;font-style:italic}.theme-light .newscaster{color:maroon}.theme-light .mod{color:#735638;font-weight:700}.theme-light .modooc{color:#184880;font-weight:700}.theme-light .adminmod{color:#402a14;font-weight:700}.theme-light .tajaran{color:#803b56}.theme-light .skrell{color:#00ced1}.theme-light .solcom{color:#22228b}.theme-light .com_srus{color:#7c4848}.theme-light .zombie{color:red}.theme-light .soghun{color:#228b22}.theme-light .changeling{color:purple}.theme-light .vox{color:#a0a}.theme-light .diona{color:#804000;font-weight:700}.theme-light .trinary{color:#727272}.theme-light .kidan{color:#664205}.theme-light .slime{color:#07a}.theme-light .drask{color:#a3d4eb;font-family:Arial Black}.theme-light .moth{color:#869b29;font-family:Copperplate}.theme-light .clown{color:red}.theme-light .vulpkanin{color:#b97a57}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:3;font-weight:700;font-style:italic}.theme-light .rough{font-family:Trebuchet MS,cursive,sans-serif}.theme-light .say_quote{font-family:Georgia,Verdana,sans-serif}.theme-light .cult{color:purple;font-weight:700;font-style:italic}.theme-light .cultspeech{color:#7f0000;font-style:italic}.theme-light .cultitalic{color:#960000;font-style:italic}.theme-light .cultlarge{color:#960000;font-weight:700;font-size:120%}.theme-light .narsie{color:#960000;font-weight:700;font-size:300%}.theme-light .narsiesmall{color:#960000;font-weight:700;font-size:200%}.theme-light .interface{color:#303}.theme-light .big{font-size:150%}.theme-light .reallybig{font-size:175%}.theme-light .greentext{color:#0f0;font-size:150%}.theme-light .redtext{color:red;font-size:150%}.theme-light .bold{font-weight:700}.theme-light .his_grace{color:#15d512;font-family:Courier New,cursive,sans-serif;font-style:italic}.theme-light .center{text-align:center}.theme-light .red{color:red}.theme-light .purple{color:#5e2d79}.theme-light .skeleton{color:#585858;font-weight:700;font-style:italic}.theme-light .gutter{color:#7092be;font-family:Trebuchet MS,cursive,sans-serif}.theme-light .orange{color:orange}.theme-light .orangei{color:orange;font-style:italic}.theme-light .orangeb{color:orange;font-weight:700}.theme-light .resonate{color:#298f85}.theme-light .healthscan_oxy{color:#0074bd}.theme-light .revennotice{color:#1d2953}.theme-light .revenboldnotice{color:#1d2953;font-weight:700}.theme-light .revenbignotice{color:#1d2953;font-weight:700;font-size:120%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:700;font-size:120%}.theme-light .specialnoticebold{color:#36525e;font-weight:700;font-size:120%}.theme-light .specialnotice{color:#36525e;font-size:120%}.theme-light .medal{font-weight:700}.theme-light .good{color:green}.theme-light .average{color:#ff8000}.theme-light .bad{color:red}.theme-light .italics,.theme-light .talkinto{font-style:italic}.theme-light .whisper{font-style:italic;color:#333}.theme-light .recruit{color:#5c00e6;font-weight:700;font-style:italic}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:75%}.theme-light .connectionClosed,.theme-light .fatalError{background:red;color:#fff;padding:5px}.theme-light .connectionClosed.restored{background:green}.theme-light .internal.boldnshit{color:#00f;font-weight:700}.theme-light .rebooting{background:#2979af;color:#fff;padding:5px}.theme-light .rebooting a{color:#fff!important;text-decoration-color:#fff!important}.theme-light .text-normal{font-weight:400;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .colossus{color:#7f282a;font-size:175%}.theme-light .hierophant{color:#609;font-weight:700;font-style:italic}.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .emoji{max-height:16px;max-width:16px}.theme-light .adminticket{color:#3e7336;font-weight:700}.theme-light .adminticketalt{color:#014c8a;font-weight:700}.theme-light span.body .codephrases{color:#00f}.theme-light span.body .coderesponses{color:red}.theme-light .announcement h1,.theme-light .announcement h2{color:#000;margin:8pt 0;line-height:1.2}.theme-light .announcement p{color:#d82020;line-height:1.3}.theme-light .announcement.minor h1{font-size:180%}.theme-light .announcement.minor h2{font-size:170%}.theme-light .announcement.sec h1{color:red;font-size:180%;font-family:Verdana,sans-serif}.theme-light .bolditalics{font-style:italic;font-weight:700}.theme-light .boxed_message{background:#f7fcff;border:1px solid #111a26;margin:.5em;padding:.5em .75em;text-align:center}.theme-light .boxed_message.left_align_text{text-align:left}.theme-light .boxed_message.red_border{background:#fff7f7;border-color:#a00}.theme-light .boxed_message.green_border{background:#f7fff7;border-color:#0f0}.theme-light .boxed_message.purple_border{background:#fdf7ff;border-color:#a0f}.theme-light .boxed_message.notice_border{background:#f7fdff;border-color:#0000bf}.theme-light .boxed_message.thick_border{border-width:thick}.theme-light .oxygen{color:#006adb}.theme-light .nitrogen{color:#d00a06}.theme-light .carbon_dioxide{color:#1f1f1f}.theme-light .plasma{color:#853c00}.theme-light .sleeping_agent{color:#e82f2c}.theme-light .agent_b{color:#004d4d}.theme-ntos .color-black{color:#1a1a1a!important}.theme-ntos .color-white{color:#fff!important}.theme-ntos .color-red{color:#df3e3e!important}.theme-ntos .color-orange{color:#f37f33!important}.theme-ntos .color-yellow{color:#fbda21!important}.theme-ntos .color-olive{color:#cbe41c!important}.theme-ntos .color-green{color:#25ca4c!important}.theme-ntos .color-teal{color:#00d6cc!important}.theme-ntos .color-blue{color:#2e93de!important}.theme-ntos .color-violet{color:#7349cf!important}.theme-ntos .color-purple{color:#ad45d0!important}.theme-ntos .color-pink{color:#e34da1!important}.theme-ntos .color-brown{color:#b97447!important}.theme-ntos .color-grey{color:#848484!important}.theme-ntos .color-good{color:#68c22d!important}.theme-ntos .color-average{color:#f29a29!important}.theme-ntos .color-bad{color:#df3e3e!important}.theme-ntos .color-label{color:#8b9bb0!important}.theme-ntos .color-gold{color:#f3b22f!important}.theme-ntos .color-bg-black{background-color:#000!important}.theme-ntos .color-bg-white{background-color:#d9d9d9!important}.theme-ntos .color-bg-red{background-color:#bd2020!important}.theme-ntos .color-bg-orange{background-color:#d95e0c!important}.theme-ntos .color-bg-yellow{background-color:#d9b804!important}.theme-ntos .color-bg-olive{background-color:#9aad14!important}.theme-ntos .color-bg-green{background-color:#1b9638!important}.theme-ntos .color-bg-teal{background-color:#009a93!important}.theme-ntos .color-bg-blue{background-color:#1c71b1!important}.theme-ntos .color-bg-violet{background-color:#552dab!important}.theme-ntos .color-bg-purple{background-color:#8b2baa!important}.theme-ntos .color-bg-pink{background-color:#cf2082!important}.theme-ntos .color-bg-brown{background-color:#8c5836!important}.theme-ntos .color-bg-grey{background-color:#646464!important}.theme-ntos .color-bg-good{background-color:#4d9121!important}.theme-ntos .color-bg-average{background-color:#cd7a0d!important}.theme-ntos .color-bg-bad{background-color:#bd2020!important}.theme-ntos .color-bg-label{background-color:#657a94!important}.theme-ntos .color-bg-gold{background-color:#d6920c!important}.theme-ntos .Section{position:relative;margin-bottom:.5em;background-color:#121922;box-sizing:border-box}.theme-ntos .Section:last-child{margin-bottom:0}.theme-ntos .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.theme-ntos .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-ntos .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-ntos .Section__rest{position:relative}.theme-ntos .Section__content{padding:.66em .5em}.theme-ntos .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-ntos .Section--fill{display:flex;flex-direction:column;height:100%}.theme-ntos .Section--fill>.Section__rest{flex-grow:1}.theme-ntos .Section--fill>.Section__rest>.Section__content{height:100%}.theme-ntos .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-ntos .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-ntos .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-ntos .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-ntos .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-ntos .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-ntos .Section .Section:first-child{margin-top:-.5em}.theme-ntos .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-ntos .Section .Section .Section .Section__titleText{font-size:1em}.theme-ntos .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-ntos .Button:last-child{margin-right:0;margin-bottom:0}.theme-ntos .Button .fa,.theme-ntos .Button .fas,.theme-ntos .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-ntos .Button--hasContent .fa,.theme-ntos .Button--hasContent .fas,.theme-ntos .Button--hasContent .far{margin-right:.25em}.theme-ntos .Button--hasContent.Button--iconRight .fa,.theme-ntos .Button--hasContent.Button--iconRight .fas,.theme-ntos .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-ntos .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-ntos .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-ntos .Button--circular{border-radius:50%}.theme-ntos .Button--compact{padding:0 .25em;line-height:1.333em}.theme-ntos .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-ntos .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-ntos .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--black:hover{background-color:#101010;color:#fff}.theme-ntos .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-ntos .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-ntos .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-ntos .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-ntos .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-ntos .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-ntos .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-ntos .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-ntos .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-ntos .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-ntos .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-ntos .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-ntos .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-ntos .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-ntos .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-ntos .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-ntos .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-ntos .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-ntos .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-ntos .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-ntos .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-ntos .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-ntos .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-ntos .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-ntos .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-ntos .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-ntos .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-ntos .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-ntos .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.theme-ntos .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--label:hover{background-color:#8a9aae;color:#fff}.theme-ntos .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-ntos .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-ntos .Button--color--default{transition:color .1s,background-color .1s;background-color:#384e68;color:#fff}.theme-ntos .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--default:hover{background-color:#4f6885;color:#fff}.theme-ntos .Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-ntos .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--caution:hover{background-color:#f5d523;color:#000}.theme-ntos .Button--color--danger{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-ntos .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--danger:hover{background-color:#d93f3f;color:#fff}.theme-ntos .Button--color--transparent{transition:color .1s,background-color .1s;background-color:#1b2633;color:#fff;background-color:rgba(27,38,51,0);color:rgba(255,255,255,.5)}.theme-ntos .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--transparent:hover{background-color:#2f3b4a;color:#fff}.theme-ntos .Button--color--translucent{transition:color .1s,background-color .1s;background-color:#1b2633;color:#fff;background-color:rgba(27,38,51,.6);color:rgba(255,255,255,.5)}.theme-ntos .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--color--translucent:hover{background-color:#2f3b4a;color:#fff}.theme-ntos .Button--disabled{background-color:#999!important}.theme-ntos .Button--selected{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-ntos .Button--selected:focus{transition:color .25s,background-color .25s}.theme-ntos .Button--selected:hover{background-color:#2fb94f;color:#fff}.theme-ntos .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-ntos .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-ntos .NumberInput--fluid{display:block}.theme-ntos .NumberInput__content{margin-left:.5em}.theme-ntos .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-ntos .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.theme-ntos .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-ntos .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-ntos .Input--disabled{color:#777;border-color:#848484;border-color:rgba(132,132,132,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-ntos .Input--fluid{display:block;width:auto}.theme-ntos .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-ntos .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-ntos .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-ntos .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-ntos .TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-ntos .TextArea--fluid{display:block;width:auto;height:auto}.theme-ntos .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-ntos .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-ntos .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-ntos .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-ntos .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-ntos .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-ntos .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-ntos .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-ntos .Knob__popupValue,.theme-ntos .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-ntos .Knob__popupValue--right{top:.25rem;right:-50%}.theme-ntos .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-ntos .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-ntos .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-ntos .Knob__ringFillPivot{transform:rotate(135deg)}.theme-ntos .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-ntos .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-ntos .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-ntos .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-ntos .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-ntos .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-ntos .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-ntos .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-ntos .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-ntos .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-ntos .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-ntos .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-ntos .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-ntos .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-ntos .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-ntos .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-ntos .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-ntos .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-ntos .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-ntos .Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.theme-ntos .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-ntos .Slider:not(.Slider__disabled){cursor:e-resize}.theme-ntos .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-ntos .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-ntos .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-ntos .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-ntos .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-ntos .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-ntos .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-ntos .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-ntos .ProgressBar--color--default{border:.0833333333em solid #3e6189}.theme-ntos .ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.theme-ntos .ProgressBar--color--disabled{border:1px solid #999}.theme-ntos .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-ntos .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-ntos .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-ntos .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-ntos .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-ntos .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-ntos .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-ntos .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-ntos .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-ntos .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-ntos .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-ntos .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-ntos .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-ntos .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-ntos .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-ntos .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-ntos .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-ntos .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-ntos .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-ntos .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-ntos .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-ntos .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-ntos .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-ntos .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-ntos .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-ntos .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-ntos .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-ntos .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-ntos .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-ntos .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-ntos .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-ntos .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-ntos .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-ntos .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-ntos .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-ntos .ProgressBar--color--label{border:.0833333333em solid #657a94!important}.theme-ntos .ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.theme-ntos .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-ntos .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-ntos .Chat{color:#abc6ec}.theme-ntos .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-ntos .Chat__badge:before{content:"x"}.theme-ntos .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-ntos .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-ntos .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-ntos .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#121922}.theme-ntos .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-ntos .Chat__highlight{color:#000}.theme-ntos .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-ntos .ChatMessage{word-wrap:break-word}.theme-ntos .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-ntos .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-ntos .Layout,.theme-ntos .Layout *{scrollbar-base-color:#141d26;scrollbar-face-color:#2a3b4f;scrollbar-3dlight-color:#1b2633;scrollbar-highlight-color:#1b2633;scrollbar-track-color:#141d26;scrollbar-arrow-color:#7290b4;scrollbar-shadow-color:#2a3b4f}.theme-ntos .Layout::-webkit-scrollbar,.theme-ntos .Layout *::-webkit-scrollbar{width:12px}.theme-ntos .Layout::-webkit-scrollbar-track,.theme-ntos .Layout *::-webkit-scrollbar-track{background:#141d26}.theme-ntos .Layout::-webkit-scrollbar-thumb,.theme-ntos .Layout *::-webkit-scrollbar-thumb{background:#2a3b4f}.theme-ntos .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-ntos .Layout__content--flexRow{display:flex;flex-flow:row}.theme-ntos .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-ntos .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-ntos .Layout__content--noMargin{margin:0}.theme-ntos .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#1b2633;background-image:linear-gradient(to bottom,#1b2633,#1b2633)}.theme-ntos .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-ntos .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-ntos .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-ntos .Window__contentPadding:after{height:0}.theme-ntos .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-ntos .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(50,63,78,.25);pointer-events:none}.theme-ntos .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-ntos .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-ntos .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-ntos .TitleBar{background-color:#1b2633;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-ntos .TitleBar__clickable{color:rgba(255,0,0,.5);background-color:#1b2633;transition:color .25s,background-color .25s}.theme-ntos .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-ntos .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-ntos .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-ntos .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-ntos .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-ntos .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-ntos .boxed_message{background:#1c242e;border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-ntos .boxed_message.left_align_text{text-align:left}.theme-ntos .boxed_message.red_border{background:#2e1c1c;border-color:#a00}.theme-ntos .boxed_message.green_border{background:#1c2e22;border-color:#0f0}.theme-ntos .boxed_message.purple_border{background:#221c2e;border-color:#8000ff}.theme-ntos .boxed_message.notice_border{background:#1f2633;border-color:#6685f5}.theme-ntos .boxed_message.thick_border{border-width:thick}.theme-syndicate .color-black{color:#1a1a1a!important}.theme-syndicate .color-white{color:#fff!important}.theme-syndicate .color-red{color:#df3e3e!important}.theme-syndicate .color-orange{color:#f37f33!important}.theme-syndicate .color-yellow{color:#fbda21!important}.theme-syndicate .color-olive{color:#cbe41c!important}.theme-syndicate .color-green{color:#25ca4c!important}.theme-syndicate .color-teal{color:#00d6cc!important}.theme-syndicate .color-blue{color:#2e93de!important}.theme-syndicate .color-violet{color:#7349cf!important}.theme-syndicate .color-purple{color:#ad45d0!important}.theme-syndicate .color-pink{color:#e34da1!important}.theme-syndicate .color-brown{color:#b97447!important}.theme-syndicate .color-grey{color:#848484!important}.theme-syndicate .color-good{color:#68c22d!important}.theme-syndicate .color-average{color:#f29a29!important}.theme-syndicate .color-bad{color:#df3e3e!important}.theme-syndicate .color-label{color:#8b9bb0!important}.theme-syndicate .color-gold{color:#f3b22f!important}.theme-syndicate .color-bg-black{background-color:#000!important}.theme-syndicate .color-bg-white{background-color:#d9d9d9!important}.theme-syndicate .color-bg-red{background-color:#bd2020!important}.theme-syndicate .color-bg-orange{background-color:#d95e0c!important}.theme-syndicate .color-bg-yellow{background-color:#d9b804!important}.theme-syndicate .color-bg-olive{background-color:#9aad14!important}.theme-syndicate .color-bg-green{background-color:#1b9638!important}.theme-syndicate .color-bg-teal{background-color:#009a93!important}.theme-syndicate .color-bg-blue{background-color:#1c71b1!important}.theme-syndicate .color-bg-violet{background-color:#552dab!important}.theme-syndicate .color-bg-purple{background-color:#8b2baa!important}.theme-syndicate .color-bg-pink{background-color:#cf2082!important}.theme-syndicate .color-bg-brown{background-color:#8c5836!important}.theme-syndicate .color-bg-grey{background-color:#646464!important}.theme-syndicate .color-bg-good{background-color:#4d9121!important}.theme-syndicate .color-bg-average{background-color:#cd7a0d!important}.theme-syndicate .color-bg-bad{background-color:#bd2020!important}.theme-syndicate .color-bg-label{background-color:#657a94!important}.theme-syndicate .color-bg-gold{background-color:#d6920c!important}.theme-syndicate .Section{position:relative;margin-bottom:.5em;background-color:#2b0101;box-sizing:border-box}.theme-syndicate .Section:last-child{margin-bottom:0}.theme-syndicate .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #397439}.theme-syndicate .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-syndicate .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-syndicate .Section__rest{position:relative}.theme-syndicate .Section__content{padding:.66em .5em}.theme-syndicate .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-syndicate .Section--fill{display:flex;flex-direction:column;height:100%}.theme-syndicate .Section--fill>.Section__rest{flex-grow:1}.theme-syndicate .Section--fill>.Section__rest>.Section__content{height:100%}.theme-syndicate .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-syndicate .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-syndicate .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-syndicate .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-syndicate .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-syndicate .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-syndicate .Section .Section:first-child{margin-top:-.5em}.theme-syndicate .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-syndicate .Section .Section .Section .Section__titleText{font-size:1em}.theme-syndicate .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-syndicate .Button:last-child{margin-right:0;margin-bottom:0}.theme-syndicate .Button .fa,.theme-syndicate .Button .fas,.theme-syndicate .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-syndicate .Button--hasContent .fa,.theme-syndicate .Button--hasContent .fas,.theme-syndicate .Button--hasContent .far{margin-right:.25em}.theme-syndicate .Button--hasContent.Button--iconRight .fa,.theme-syndicate .Button--hasContent.Button--iconRight .fas,.theme-syndicate .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-syndicate .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-syndicate .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-syndicate .Button--circular{border-radius:50%}.theme-syndicate .Button--compact{padding:0 .25em;line-height:1.333em}.theme-syndicate .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-syndicate .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-syndicate .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--black:hover{background-color:#101010;color:#fff}.theme-syndicate .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-syndicate .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-syndicate .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-syndicate .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-syndicate .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-syndicate .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-syndicate .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-syndicate .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-syndicate .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-syndicate .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-syndicate .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-syndicate .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-syndicate .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-syndicate .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-syndicate .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-syndicate .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-syndicate .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-syndicate .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-syndicate .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-syndicate .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-syndicate .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-syndicate .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-syndicate .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-syndicate .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-syndicate .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-syndicate .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-syndicate .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-syndicate .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-syndicate .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-syndicate .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-syndicate .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-syndicate .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-syndicate .Button--color--label{transition:color .1s,background-color .1s;background-color:#657a94;color:#fff}.theme-syndicate .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--label:hover{background-color:#8a9aae;color:#fff}.theme-syndicate .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-syndicate .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-syndicate .Button--color--default{transition:color .1s,background-color .1s;background-color:#397439;color:#fff}.theme-syndicate .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--default:hover{background-color:#509350;color:#fff}.theme-syndicate .Button--color--caution{transition:color .1s,background-color .1s;background-color:#be6209;color:#fff}.theme-syndicate .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--caution:hover{background-color:#e67f1a;color:#fff}.theme-syndicate .Button--color--danger{transition:color .1s,background-color .1s;background-color:#9a9d00;color:#fff}.theme-syndicate .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--danger:hover{background-color:#bec110;color:#fff}.theme-syndicate .Button--color--transparent{transition:color .1s,background-color .1s;background-color:#4d0202;color:#fff;background-color:rgba(77,2,2,0);color:rgba(255,255,255,.5)}.theme-syndicate .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--transparent:hover{background-color:#671313;color:#fff}.theme-syndicate .Button--color--translucent{transition:color .1s,background-color .1s;background-color:#4d0202;color:#fff;background-color:rgba(77,2,2,.6);color:rgba(255,255,255,.5)}.theme-syndicate .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--color--translucent:hover{background-color:#671313;color:#fff}.theme-syndicate .Button--disabled{background-color:#363636!important}.theme-syndicate .Button--selected{transition:color .1s,background-color .1s;background-color:#9d0808;color:#fff}.theme-syndicate .Button--selected:focus{transition:color .25s,background-color .25s}.theme-syndicate .Button--selected:hover{background-color:#c11919;color:#fff}.theme-syndicate .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-syndicate .NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:700;font-style:italic;color:#fff;background-color:#910101;background-image:repeating-linear-gradient(-45deg,transparent,transparent .8333333333em,rgba(0,0,0,.1) .8333333333em,rgba(0,0,0,.1) 1.6666666667em)}.theme-syndicate .NoticeBox--color--black{color:#fff;background-color:#000}.theme-syndicate .NoticeBox--color--white{color:#000;background-color:#b3b3b3}.theme-syndicate .NoticeBox--color--red{color:#fff;background-color:#701f1f}.theme-syndicate .NoticeBox--color--orange{color:#fff;background-color:#854114}.theme-syndicate .NoticeBox--color--yellow{color:#000;background-color:#83710d}.theme-syndicate .NoticeBox--color--olive{color:#000;background-color:#576015}.theme-syndicate .NoticeBox--color--green{color:#fff;background-color:#174e24}.theme-syndicate .NoticeBox--color--teal{color:#fff;background-color:#064845}.theme-syndicate .NoticeBox--color--blue{color:#fff;background-color:#1b4565}.theme-syndicate .NoticeBox--color--violet{color:#fff;background-color:#3b2864}.theme-syndicate .NoticeBox--color--purple{color:#fff;background-color:#542663}.theme-syndicate .NoticeBox--color--pink{color:#fff;background-color:#802257}.theme-syndicate .NoticeBox--color--brown{color:#fff;background-color:#4c3729}.theme-syndicate .NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.theme-syndicate .NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.theme-syndicate .NoticeBox--color--average{color:#fff;background-color:#7b4e13}.theme-syndicate .NoticeBox--color--bad{color:#fff;background-color:#701f1f}.theme-syndicate .NoticeBox--color--label{color:#fff;background-color:#53565a}.theme-syndicate .NoticeBox--color--gold{color:#fff;background-color:#825d13}.theme-syndicate .NoticeBox--type--info{color:#fff;background-color:#235982}.theme-syndicate .NoticeBox--type--success{color:#fff;background-color:#1e662f}.theme-syndicate .NoticeBox--type--warning{color:#fff;background-color:#a95219}.theme-syndicate .NoticeBox--type--danger{color:#fff;background-color:#8f2828}.theme-syndicate .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;color:#87ce87;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-syndicate .NumberInput--fluid{display:block}.theme-syndicate .NumberInput__content{margin-left:.5em}.theme-syndicate .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-syndicate .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #87ce87;background-color:#87ce87}.theme-syndicate .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.theme-syndicate .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;background-color:#0a0a0a;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-syndicate .Input--disabled{color:#777;border-color:#6b6b6b;border-color:rgba(107,107,107,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-syndicate .Input--fluid{display:block;width:auto}.theme-syndicate .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-syndicate .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-syndicate .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-syndicate .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-syndicate .TextArea{position:relative;display:inline-block;border:.0833333333em solid #87ce87;border:.0833333333em solid rgba(135,206,135,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-syndicate .TextArea--fluid{display:block;width:auto;height:auto}.theme-syndicate .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-syndicate .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-syndicate .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-syndicate .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-syndicate .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-syndicate .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-syndicate .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-syndicate .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-syndicate .Knob__popupValue,.theme-syndicate .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-syndicate .Knob__popupValue--right{top:.25rem;right:-50%}.theme-syndicate .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-syndicate .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-syndicate .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-syndicate .Knob__ringFillPivot{transform:rotate(135deg)}.theme-syndicate .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-syndicate .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-syndicate .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-syndicate .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-syndicate .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-syndicate .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-syndicate .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-syndicate .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-syndicate .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-syndicate .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-syndicate .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-syndicate .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-syndicate .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-syndicate .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-syndicate .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-syndicate .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-syndicate .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-syndicate .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-syndicate .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-syndicate .Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.theme-syndicate .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-syndicate .Slider:not(.Slider__disabled){cursor:e-resize}.theme-syndicate .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-syndicate .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-syndicate .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-syndicate .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-syndicate .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,.5);transition:border-color .5s}.theme-syndicate .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-syndicate .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-syndicate .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-syndicate .ProgressBar--color--default{border:.0833333333em solid #306330}.theme-syndicate .ProgressBar--color--default .ProgressBar__fill{background-color:#306330}.theme-syndicate .ProgressBar--color--disabled{border:1px solid #999}.theme-syndicate .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-syndicate .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-syndicate .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-syndicate .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-syndicate .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-syndicate .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-syndicate .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-syndicate .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-syndicate .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-syndicate .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-syndicate .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-syndicate .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-syndicate .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-syndicate .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-syndicate .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-syndicate .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-syndicate .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-syndicate .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-syndicate .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-syndicate .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-syndicate .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-syndicate .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-syndicate .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-syndicate .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-syndicate .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-syndicate .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-syndicate .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-syndicate .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-syndicate .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-syndicate .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-syndicate .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-syndicate .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-syndicate .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-syndicate .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-syndicate .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-syndicate .ProgressBar--color--label{border:.0833333333em solid #657a94!important}.theme-syndicate .ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.theme-syndicate .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-syndicate .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-syndicate .Chat{color:#abc6ec}.theme-syndicate .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-syndicate .Chat__badge:before{content:"x"}.theme-syndicate .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-syndicate .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-syndicate .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-syndicate .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#2b0101}.theme-syndicate .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-syndicate .Chat__highlight{color:#000}.theme-syndicate .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-syndicate .ChatMessage{word-wrap:break-word}.theme-syndicate .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-syndicate .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-syndicate .Layout,.theme-syndicate .Layout *{scrollbar-base-color:#3a0202;scrollbar-face-color:#770303;scrollbar-3dlight-color:#4d0202;scrollbar-highlight-color:#4d0202;scrollbar-track-color:#3a0202;scrollbar-arrow-color:#fa2d2d;scrollbar-shadow-color:#770303}.theme-syndicate .Layout::-webkit-scrollbar,.theme-syndicate .Layout *::-webkit-scrollbar{width:12px}.theme-syndicate .Layout::-webkit-scrollbar-track,.theme-syndicate .Layout *::-webkit-scrollbar-track{background:#3a0202}.theme-syndicate .Layout::-webkit-scrollbar-thumb,.theme-syndicate .Layout *::-webkit-scrollbar-thumb{background:#770303}.theme-syndicate .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-syndicate .Layout__content--flexRow{display:flex;flex-flow:row}.theme-syndicate .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-syndicate .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-syndicate .Layout__content--noMargin{margin:0}.theme-syndicate .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#4d0202;background-image:linear-gradient(to bottom,#4d0202,#4d0202)}.theme-syndicate .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-syndicate .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-syndicate .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-syndicate .Window__contentPadding:after{height:0}.theme-syndicate .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-syndicate .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(108,22,22,.25);pointer-events:none}.theme-syndicate .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-syndicate .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-syndicate .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-syndicate .TitleBar{background-color:#910101;border-bottom:1px solid #161616;box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-syndicate .TitleBar__clickable{color:rgba(255,255,255,.5);background-color:#910101;transition:color .25s,background-color .25s}.theme-syndicate .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-syndicate .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,255,255,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-syndicate .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-syndicate .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-syndicate .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-syndicate .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-syndicate .adminooc{color:#29ccbe}.theme-syndicate .debug{color:#8f39e6}.theme-syndicate .boxed_message{background:rgba(20,20,35,.25);border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-syndicate .boxed_message.left_align_text{text-align:left}.theme-syndicate .boxed_message.red_border{background:rgba(0,0,0,.2);border-color:red}.theme-syndicate .boxed_message.green_border{background:rgba(0,75,0,.25);border-color:#0f0}.theme-syndicate .boxed_message.purple_border{background:rgba(25,0,50,.25);border-color:#8000ff}.theme-syndicate .boxed_message.notice_border{background:rgba(0,0,75,.25);border-color:#6685f5}.theme-syndicate .boxed_message.thick_border{border-width:thick}.theme-paradise .color-black{color:#1a1a1a!important}.theme-paradise .color-white{color:#fff!important}.theme-paradise .color-red{color:#df3e3e!important}.theme-paradise .color-orange{color:#f37f33!important}.theme-paradise .color-yellow{color:#fbda21!important}.theme-paradise .color-olive{color:#cbe41c!important}.theme-paradise .color-green{color:#25ca4c!important}.theme-paradise .color-teal{color:#00d6cc!important}.theme-paradise .color-blue{color:#2e93de!important}.theme-paradise .color-violet{color:#7349cf!important}.theme-paradise .color-purple{color:#ad45d0!important}.theme-paradise .color-pink{color:#e34da1!important}.theme-paradise .color-brown{color:#b97447!important}.theme-paradise .color-grey{color:#848484!important}.theme-paradise .color-good{color:#68c22d!important}.theme-paradise .color-average{color:#f29a29!important}.theme-paradise .color-bad{color:#df3e3e!important}.theme-paradise .color-label{color:#955d4b!important}.theme-paradise .color-gold{color:#f3b22f!important}.theme-paradise .color-bg-black{background-color:#000!important}.theme-paradise .color-bg-white{background-color:#d9d9d9!important}.theme-paradise .color-bg-red{background-color:#bd2020!important}.theme-paradise .color-bg-orange{background-color:#d95e0c!important}.theme-paradise .color-bg-yellow{background-color:#d9b804!important}.theme-paradise .color-bg-olive{background-color:#9aad14!important}.theme-paradise .color-bg-green{background-color:#1b9638!important}.theme-paradise .color-bg-teal{background-color:#009a93!important}.theme-paradise .color-bg-blue{background-color:#1c71b1!important}.theme-paradise .color-bg-violet{background-color:#552dab!important}.theme-paradise .color-bg-purple{background-color:#8b2baa!important}.theme-paradise .color-bg-pink{background-color:#cf2082!important}.theme-paradise .color-bg-brown{background-color:#8c5836!important}.theme-paradise .color-bg-grey{background-color:#646464!important}.theme-paradise .color-bg-good{background-color:#4d9121!important}.theme-paradise .color-bg-average{background-color:#cd7a0d!important}.theme-paradise .color-bg-bad{background-color:#bd2020!important}.theme-paradise .color-bg-label{background-color:#6d4436!important}.theme-paradise .color-bg-gold{background-color:#d6920c!important}.theme-paradise .Section{position:relative;margin-bottom:.5em;background-color:#40071a;background-color:rgba(0,0,0,.5);box-sizing:border-box}.theme-paradise .Section:last-child{margin-bottom:0}.theme-paradise .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #208080}.theme-paradise .Section__titleText{font-size:1.1666666667em;font-weight:700;color:#fff}.theme-paradise .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-paradise .Section__rest{position:relative}.theme-paradise .Section__content{padding:.66em .5em}.theme-paradise .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-paradise .Section--fill{display:flex;flex-direction:column;height:100%}.theme-paradise .Section--fill>.Section__rest{flex-grow:1}.theme-paradise .Section--fill>.Section__rest>.Section__content{height:100%}.theme-paradise .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-paradise .Section--fill.Section--iefix{display:table!important;width:100%!important;height:100%!important;border-collapse:collapse;border-spacing:0}.theme-paradise .Section--fill.Section--iefix>.Section__rest{display:table-row!important;height:100%!important}.theme-paradise .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-paradise .Section--scrollable>.Section__rest>.Section__content{overflow-y:auto;overflow-x:hidden}.theme-paradise .Section .Section{background-color:rgba(0,0,0,0);margin-left:-.5em;margin-right:-.5em}.theme-paradise .Section .Section:first-child{margin-top:-.5em}.theme-paradise .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-paradise .Section .Section .Section .Section__titleText{font-size:1em}.theme-paradise .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-paradise .Button:last-child{margin-right:0;margin-bottom:0}.theme-paradise .Button .fa,.theme-paradise .Button .fas,.theme-paradise .Button .far{margin-left:-.25em;margin-right:-.25em;min-width:1.333em;text-align:center}.theme-paradise .Button--hasContent .fa,.theme-paradise .Button--hasContent .fas,.theme-paradise .Button--hasContent .far{margin-right:.25em}.theme-paradise .Button--hasContent.Button--iconRight .fa,.theme-paradise .Button--hasContent.Button--iconRight .fas,.theme-paradise .Button--hasContent.Button--iconRight .far{margin-right:0;margin-left:.25em}.theme-paradise .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-paradise .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-paradise .Button--circular{border-radius:50%}.theme-paradise .Button--compact{padding:0 .25em;line-height:1.333em}.theme-paradise .Button--multiLine{white-space:normal;word-wrap:break-word}.theme-paradise .Button--color--black{transition:color .1s,background-color .1s;background-color:#000;color:#fff}.theme-paradise .Button--color--black:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--black:hover{background-color:#101010;color:#fff}.theme-paradise .Button--color--white{transition:color .1s,background-color .1s;background-color:#d9d9d9;color:#000}.theme-paradise .Button--color--white:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--white:hover{background-color:#f8f8f8;color:#000}.theme-paradise .Button--color--red{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-paradise .Button--color--red:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--red:hover{background-color:#d93f3f;color:#fff}.theme-paradise .Button--color--orange{transition:color .1s,background-color .1s;background-color:#d95e0c;color:#fff}.theme-paradise .Button--color--orange:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--orange:hover{background-color:#ef7e33;color:#fff}.theme-paradise .Button--color--yellow{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-paradise .Button--color--yellow:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--yellow:hover{background-color:#f5d523;color:#000}.theme-paradise .Button--color--olive{transition:color .1s,background-color .1s;background-color:#9aad14;color:#fff}.theme-paradise .Button--color--olive:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--olive:hover{background-color:#bdd327;color:#fff}.theme-paradise .Button--color--green{transition:color .1s,background-color .1s;background-color:#1b9638;color:#fff}.theme-paradise .Button--color--green:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--green:hover{background-color:#2fb94f;color:#fff}.theme-paradise .Button--color--teal{transition:color .1s,background-color .1s;background-color:#009a93;color:#fff}.theme-paradise .Button--color--teal:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--teal:hover{background-color:#10bdb6;color:#fff}.theme-paradise .Button--color--blue{transition:color .1s,background-color .1s;background-color:#1c71b1;color:#fff}.theme-paradise .Button--color--blue:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--blue:hover{background-color:#308fd6;color:#fff}.theme-paradise .Button--color--violet{transition:color .1s,background-color .1s;background-color:#552dab;color:#fff}.theme-paradise .Button--color--violet:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--violet:hover{background-color:#7249ca;color:#fff}.theme-paradise .Button--color--purple{transition:color .1s,background-color .1s;background-color:#8b2baa;color:#fff}.theme-paradise .Button--color--purple:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--purple:hover{background-color:#aa46ca;color:#fff}.theme-paradise .Button--color--pink{transition:color .1s,background-color .1s;background-color:#cf2082;color:#fff}.theme-paradise .Button--color--pink:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--pink:hover{background-color:#e04ca0;color:#fff}.theme-paradise .Button--color--brown{transition:color .1s,background-color .1s;background-color:#8c5836;color:#fff}.theme-paradise .Button--color--brown:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--brown:hover{background-color:#ae724c;color:#fff}.theme-paradise .Button--color--grey{transition:color .1s,background-color .1s;background-color:#646464;color:#fff}.theme-paradise .Button--color--grey:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--grey:hover{background-color:#818181;color:#fff}.theme-paradise .Button--color--good{transition:color .1s,background-color .1s;background-color:#4d9121;color:#fff}.theme-paradise .Button--color--good:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--good:hover{background-color:#67b335;color:#fff}.theme-paradise .Button--color--average{transition:color .1s,background-color .1s;background-color:#cd7a0d;color:#fff}.theme-paradise .Button--color--average:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--average:hover{background-color:#eb972b;color:#fff}.theme-paradise .Button--color--bad{transition:color .1s,background-color .1s;background-color:#bd2020;color:#fff}.theme-paradise .Button--color--bad:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--bad:hover{background-color:#d93f3f;color:#fff}.theme-paradise .Button--color--label{transition:color .1s,background-color .1s;background-color:#6d4436;color:#fff}.theme-paradise .Button--color--label:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--label:hover{background-color:#8b5d4d;color:#fff}.theme-paradise .Button--color--gold{transition:color .1s,background-color .1s;background-color:#d6920c;color:#fff}.theme-paradise .Button--color--gold:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--gold:hover{background-color:#eeaf30;color:#fff}.theme-paradise .Button--color--default{transition:color .1s,background-color .1s;background-color:#208080;color:#fff}.theme-paradise .Button--color--default:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--default:hover{background-color:#34a0a0;color:#fff}.theme-paradise .Button--color--caution{transition:color .1s,background-color .1s;background-color:#d9b804;color:#000}.theme-paradise .Button--color--caution:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--caution:hover{background-color:#f5d523;color:#000}.theme-paradise .Button--color--danger{transition:color .1s,background-color .1s;background-color:#8c1eff;color:#fff}.theme-paradise .Button--color--danger:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--danger:hover{background-color:#ae61ff;color:#fff}.theme-paradise .Button--color--transparent{transition:color .1s,background-color .1s;background-color:#800d33;color:#fff;background-color:rgba(128,13,51,0);color:rgba(255,255,255,.5)}.theme-paradise .Button--color--transparent:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--transparent:hover{background-color:#a01f4a;color:#fff}.theme-paradise .Button--color--translucent{transition:color .1s,background-color .1s;background-color:#800d33;color:#fff;background-color:rgba(128,13,51,.6);color:rgba(255,255,255,.5)}.theme-paradise .Button--color--translucent:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--color--translucent:hover{background-color:#a01f4a;color:#fff}.theme-paradise .Button--disabled{background-color:#999!important}.theme-paradise .Button--selected{transition:color .1s,background-color .1s;background-color:#bf6030;color:#fff}.theme-paradise .Button--selected:focus{transition:color .25s,background-color .25s}.theme-paradise .Button--selected:hover{background-color:#d4835a;color:#fff}.theme-paradise .Button--modal{float:right;z-index:1;margin-top:-.5rem}.theme-paradise .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;color:#e65c2e;background-color:rgba(0,0,0,.25);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-paradise .NumberInput--fluid{display:block}.theme-paradise .NumberInput__content{margin-left:.5em}.theme-paradise .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-paradise .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #e65c2e;background-color:#e65c2e}.theme-paradise .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,.25);color:#fff;text-align:right}.theme-paradise .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;background-color:rgba(0,0,0,.25);color:#fff;background-color:#000;background-color:rgba(0,0,0,.75);padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible;white-space:nowrap}.theme-paradise .Input--disabled{color:#777;border-color:#4a4a4a;border-color:rgba(74,74,74,.75);background-color:#333;background-color:rgba(0,0,0,.25)}.theme-paradise .Input--fluid{display:block;width:auto}.theme-paradise .Input__baseline{display:inline-block;color:rgba(0,0,0,0)}.theme-paradise .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit}.theme-paradise .Input__input::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__textarea{border:0;width:calc(100% + 4px);font-size:1em;line-height:1.4166666667em;margin-left:-.3333333333em;font-family:Verdana,sans-serif;background-color:rgba(0,0,0,0);color:#fff;color:inherit;resize:both;overflow:auto;white-space:pre-wrap}.theme-paradise .Input__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .Input--monospace .Input__input{font-family:Consolas,monospace}.theme-paradise .TextArea{position:relative;display:inline-block;border:.0833333333em solid #e65c2e;border:.0833333333em solid rgba(230,92,46,.75);border-radius:.16em;background-color:rgba(0,0,0,.25);margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-paradise .TextArea--fluid{display:block;width:auto;height:auto}.theme-paradise .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:rgba(0,0,0,0);color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-paradise .TextArea__textarea::placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-paradise .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:rgba(125,125,125,.75)}.theme-paradise .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto -.2em;cursor:n-resize}.theme-paradise .Knob:after{content:".";color:rgba(0,0,0,0);line-height:2.5em}.theme-paradise .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom,rgba(255,255,255,.15),rgba(255,255,255,0));border-radius:50%;box-shadow:0 .05em .5em rgba(0,0,0,.5)}.theme-paradise .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-paradise .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-paradise .Knob__popupValue,.theme-paradise .Knob__popupValue--right{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-paradise .Knob__popupValue--right{top:.25rem;right:-50%}.theme-paradise .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-paradise .Knob__ringTrackPivot{transform:rotate(135deg)}.theme-paradise .Knob__ringTrack{fill:rgba(0,0,0,0);stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-paradise .Knob__ringFillPivot{transform:rotate(135deg)}.theme-paradise .Knob--bipolar .Knob__ringFillPivot{transform:rotate(270deg)}.theme-paradise .Knob__ringFill{fill:rgba(0,0,0,0);stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms}.theme-paradise .Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.theme-paradise .Knob--color--white .Knob__ringFill{stroke:#fff}.theme-paradise .Knob--color--red .Knob__ringFill{stroke:#df3e3e}.theme-paradise .Knob--color--orange .Knob__ringFill{stroke:#f37f33}.theme-paradise .Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.theme-paradise .Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.theme-paradise .Knob--color--green .Knob__ringFill{stroke:#25ca4c}.theme-paradise .Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.theme-paradise .Knob--color--blue .Knob__ringFill{stroke:#2e93de}.theme-paradise .Knob--color--violet .Knob__ringFill{stroke:#7349cf}.theme-paradise .Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.theme-paradise .Knob--color--pink .Knob__ringFill{stroke:#e34da1}.theme-paradise .Knob--color--brown .Knob__ringFill{stroke:#b97447}.theme-paradise .Knob--color--grey .Knob__ringFill{stroke:#848484}.theme-paradise .Knob--color--good .Knob__ringFill{stroke:#68c22d}.theme-paradise .Knob--color--average .Knob__ringFill{stroke:#f29a29}.theme-paradise .Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.theme-paradise .Knob--color--label .Knob__ringFill{stroke:#955d4b}.theme-paradise .Knob--color--gold .Knob__ringFill{stroke:#f3b22f}.theme-paradise .Slider:not(.Slider__disabled){cursor:e-resize}.theme-paradise .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none!important}.theme-paradise .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.theme-paradise .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid rgba(0,0,0,0);border-right:.4166666667em solid rgba(0,0,0,0);border-bottom:.4166666667em solid #fff}.theme-paradise .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translate(50%);white-space:nowrap}.theme-paradise .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color .5s}.theme-paradise .ProgressBar__fill{position:absolute;top:-.5px;left:0;bottom:-.5px}.theme-paradise .ProgressBar__fill--animated{transition:background-color .5s,width .5s}.theme-paradise .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-paradise .ProgressBar--color--default{border:.0833333333em solid #1b6d6d}.theme-paradise .ProgressBar--color--default .ProgressBar__fill{background-color:#1b6d6d}.theme-paradise .ProgressBar--color--disabled{border:1px solid #999}.theme-paradise .ProgressBar--color--disabled .ProgressBar__fill{background-color:#999}.theme-paradise .ProgressBar--color--black{border:.0833333333em solid #000!important}.theme-paradise .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-paradise .ProgressBar--color--white{border:.0833333333em solid #d9d9d9!important}.theme-paradise .ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.theme-paradise .ProgressBar--color--red{border:.0833333333em solid #bd2020!important}.theme-paradise .ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.theme-paradise .ProgressBar--color--orange{border:.0833333333em solid #d95e0c!important}.theme-paradise .ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.theme-paradise .ProgressBar--color--yellow{border:.0833333333em solid #d9b804!important}.theme-paradise .ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.theme-paradise .ProgressBar--color--olive{border:.0833333333em solid #9aad14!important}.theme-paradise .ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.theme-paradise .ProgressBar--color--green{border:.0833333333em solid #1b9638!important}.theme-paradise .ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.theme-paradise .ProgressBar--color--teal{border:.0833333333em solid #009a93!important}.theme-paradise .ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.theme-paradise .ProgressBar--color--blue{border:.0833333333em solid #1c71b1!important}.theme-paradise .ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.theme-paradise .ProgressBar--color--violet{border:.0833333333em solid #552dab!important}.theme-paradise .ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.theme-paradise .ProgressBar--color--purple{border:.0833333333em solid #8b2baa!important}.theme-paradise .ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.theme-paradise .ProgressBar--color--pink{border:.0833333333em solid #cf2082!important}.theme-paradise .ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.theme-paradise .ProgressBar--color--brown{border:.0833333333em solid #8c5836!important}.theme-paradise .ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.theme-paradise .ProgressBar--color--grey{border:.0833333333em solid #646464!important}.theme-paradise .ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.theme-paradise .ProgressBar--color--good{border:.0833333333em solid #4d9121!important}.theme-paradise .ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.theme-paradise .ProgressBar--color--average{border:.0833333333em solid #cd7a0d!important}.theme-paradise .ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.theme-paradise .ProgressBar--color--bad{border:.0833333333em solid #bd2020!important}.theme-paradise .ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.theme-paradise .ProgressBar--color--label{border:.0833333333em solid #6d4436!important}.theme-paradise .ProgressBar--color--label .ProgressBar__fill{background-color:#6d4436}.theme-paradise .ProgressBar--color--gold{border:.0833333333em solid #d6920c!important}.theme-paradise .ProgressBar--color--gold .ProgressBar__fill{background-color:#d6920c}.theme-paradise .Chat{color:#abc6ec}.theme-paradise .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#dc143c;border-radius:10px;transition:font-size .2s}.theme-paradise .Chat__badge:before{content:"x"}.theme-paradise .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-paradise .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-paradise .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-paradise .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#fff;background-color:#db2828}.theme-paradise .Chat__reconnected:after{content:"";display:block;margin-top:-.75em;border-bottom:.1666666667em solid #db2828}.theme-paradise .Chat__highlight{color:#000}.theme-paradise .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:700}.theme-paradise .ChatMessage{word-wrap:break-word}.theme-paradise .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-paradise .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-paradise .Layout,.theme-paradise .Layout *{scrollbar-base-color:#680b29;scrollbar-face-color:#99103d;scrollbar-3dlight-color:#800d33;scrollbar-highlight-color:#800d33;scrollbar-track-color:#680b29;scrollbar-arrow-color:#ea2e6c;scrollbar-shadow-color:#99103d}.theme-paradise .Layout::-webkit-scrollbar,.theme-paradise .Layout *::-webkit-scrollbar{width:12px}.theme-paradise .Layout::-webkit-scrollbar-track,.theme-paradise .Layout *::-webkit-scrollbar-track{background:#680b29}.theme-paradise .Layout::-webkit-scrollbar-thumb,.theme-paradise .Layout *::-webkit-scrollbar-thumb{background:#99103d}.theme-paradise .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden}.theme-paradise .Layout__content--flexRow{display:flex;flex-flow:row}.theme-paradise .Layout__content--flexColumn{display:flex;flex-flow:column}.theme-paradise .Layout__content--scrollable{overflow-y:auto;margin-bottom:0}.theme-paradise .Layout__content--noMargin{margin:0}.theme-paradise .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#800d33;background-image:linear-gradient(to bottom,#80014b,#80460d)}.theme-paradise .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-paradise .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-paradise .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-paradise .Window__contentPadding:after{height:0}.theme-paradise .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-paradise .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(166,34,78,.25);pointer-events:none}.theme-paradise .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-paradise .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-paradise .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-paradise .TitleBar{background-color:#800d33;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-paradise .TitleBar__clickable{color:rgba(255,0,0,.5);background-color:#800d33;transition:color .25s,background-color .25s}.theme-paradise .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-paradise .TitleBar__title{position:absolute;top:0;left:46px;left:3.8333333333rem;color:rgba(255,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap}.theme-paradise .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-paradise .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px!important;line-height:2.6666666667rem!important}.theme-paradise .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-paradise .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-paradise .adminooc{color:#29ccbe}.theme-paradise .debug{color:#8f39e6}.theme-paradise .boxed_message{background:rgba(0,0,0,.25);border:1px solid #a3b9d9;margin:.5em;padding:.5em .75em;text-align:center}.theme-paradise .boxed_message.left_align_text{text-align:left}.theme-paradise .boxed_message.red_border{background:rgba(0,0,0,.25);border-color:#a00}.theme-paradise .boxed_message.green_border{background:rgba(0,0,0,.25);border-color:#0f0}.theme-paradise .boxed_message.purple_border{background:rgba(0,0,0,.25);border-color:#8000ff}.theme-paradise .boxed_message.notice_border{background:rgba(0,0,0,.25);border-color:#6685f5}.theme-paradise .boxed_message.thick_border{border-width:thick} diff --git a/tools/maplint/lints/grille_window_stacking.yml b/tools/maplint/lints/grille_window_stacking.yml index 3db422380ea..3dcd24fe636 100644 --- a/tools/maplint/lints/grille_window_stacking.yml +++ b/tools/maplint/lints/grille_window_stacking.yml @@ -1,4 +1,8 @@ help: "Replace the grille and window with the proper spawner." +exclude_files: + # atmos can tick before the windows from the spawner spawn, leading to gas leakage + # on this shuttle + - _maps/map_files/shuttles/emergency_shadow.dmm /obj/structure/grille: banned_neighbors: - /obj/structure/window/full diff --git a/tools/maplint/source/__main__.py b/tools/maplint/source/__main__.py index dcb575e99bd..03b72869351 100644 --- a/tools/maplint/source/__main__.py +++ b/tools/maplint/source/__main__.py @@ -24,8 +24,11 @@ def process_dmm(map_filename, lints: dict[str, lint.Lint]) -> list[MaplintError] # No structured data to lint. return problems + map_path = pathlib.Path(map_filename) for lint_name, lint in lints.items(): try: + if map_path in lint.exclude_files: + continue problems.extend(lint.run(map_data)) except KeyboardInterrupt: raise diff --git a/tools/maplint/source/lint.py b/tools/maplint/source/lint.py index ee86d29be52..c35c359ac12 100644 --- a/tools/maplint/source/lint.py +++ b/tools/maplint/source/lint.py @@ -1,4 +1,5 @@ import re +import pathlib from typing import Optional from .common import Constant, Typepath @@ -219,6 +220,7 @@ class Rules: class Lint: help: Optional[str] = None rules: dict[TypepathExtra, Rules] + exclude_files: list[str] = list() def __init__(self, data): expect(isinstance(data, dict), "Lint must be a dictionary.") @@ -226,6 +228,9 @@ class Lint: if "help" in data: self.help = data.pop("help") + if "exclude_files" in data: + self.exclude_files = [pathlib.Path(x) for x in data.pop("exclude_files")] + expect(isinstance(self.help, str) or self.help is None, "Lint help must be a string.") self.rules = {}