mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 06:29:23 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into SubSystems
Conflicts: code/game/gamemodes/setupgame.dm code/modules/mob/living/carbon/human/life.dm code/modules/reagents/Chemistry-Machinery.dm
This commit is contained in:
@@ -7,6 +7,7 @@ env:
|
||||
- BYOND_MINOR="1247"
|
||||
matrix:
|
||||
- DM_MAPFILE="tgstation2"
|
||||
- DM_MAPFILE="Asteroidstation"
|
||||
- DM_MAPFILE="ministation"
|
||||
|
||||
before_install:
|
||||
|
||||
+661
@@ -0,0 +1,661 @@
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
@@ -1,3 +1,5 @@
|
||||
# **Licensing has recently changed from GPLv3 to AGPLv3. See [#6689](https://github.com/tgstation/-tg-station/pull/6689) for more info.**
|
||||
|
||||
##/tg/station v1.0.1
|
||||
|
||||
[](https://travis-ci.org/tgstation/-tg-station)
|
||||
@@ -123,7 +125,7 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md)
|
||||
|
||||
##LICENSE
|
||||
|
||||
All code is under a GNU GPL v3 license (http://www.gnu.org/licenses/gpl.html),
|
||||
including tools unless their readme specifies otherwise.
|
||||
All code is under a GNU AGPL v3 license (http://www.gnu.org/licenses/agpl-3.0.html),
|
||||
including tools unless their readme specifies otherwise. See LICENSE.txt for more details.
|
||||
All content including icons and sound is under a Creative Commons 3.0 BY-SA
|
||||
license (http://creativecommons.org/licenses/by-sa/3.0/).
|
||||
|
||||
@@ -18,7 +18,7 @@ Then tick this file, the maps and all additional files will be automatically def
|
||||
#include "map_files\Asteroidstation\z7.dmm"
|
||||
|
||||
#define MAP_FILE "Asteroidstation.dmm"
|
||||
#define MAP_NAME "AsteroidStationv8"
|
||||
#define MAP_NAME "AsteroidStation"
|
||||
|
||||
#if !defined(MAP_OVERRIDE_FILES)
|
||||
#define MAP_OVERRIDE_FILES
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -93,3 +93,27 @@
|
||||
|
||||
/area/maintenance/asteroidstation/transit/aft_starboard
|
||||
name = "Aft Starboard Transit Station"
|
||||
|
||||
//Head Quarters
|
||||
/area/crew_quarters/asteroidstation/
|
||||
icon = '_maps/map_files/Asteroidstation/areas.dmi'
|
||||
|
||||
/area/crew_quarters/asteroidstation/cmo
|
||||
name = "Chief Medical Officer's Quarters"
|
||||
icon_state = "cmo"
|
||||
|
||||
/area/crew_quarters/asteroidstation/ce
|
||||
name = "Chief Engineer's Quarters"
|
||||
icon_state = "ce"
|
||||
|
||||
/area/crew_quarters/asteroidstation/rd
|
||||
name = "Research Director's Quarters"
|
||||
icon_state = "rd"
|
||||
|
||||
/area/crew_quarters/asteroidstation/hos
|
||||
name = "Head of Security's Quarters"
|
||||
icon_state = "hos"
|
||||
|
||||
/area/crew_quarters/asteroidstation/hop
|
||||
name = "Head of Personnel's Quarters"
|
||||
icon_state = "hop"
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.5 KiB |
@@ -8,7 +8,7 @@
|
||||
"ah" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating/airless,/area/AIsattele)
|
||||
"ai" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/AIsattele)
|
||||
"aj" = (/turf/simulated/floor/plating/airless,/area/AIsattele)
|
||||
"ak" = (/obj/structure/rack,/obj/item/clothing/gloves/yellow,/turf/simulated/floor/plating/airless,/area/AIsattele)
|
||||
"ak" = (/obj/structure/rack,/obj/item/clothing/gloves/color/yellow,/turf/simulated/floor/plating/airless,/area/AIsattele)
|
||||
"al" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/AIsattele)
|
||||
"am" = (/obj/item/weapon/stock_parts/cell{step_x = 0},/turf/simulated/floor/plating/airless,/area/AIsattele)
|
||||
"an" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating/airless,/area/AIsattele)
|
||||
@@ -27,7 +27,7 @@
|
||||
"aA" = (/obj/structure/lattice,/turf/space,/area/AIsattele)
|
||||
"aB" = (/obj/structure/girder,/turf/simulated/floor/plating/airless,/area/AIsattele)
|
||||
"aC" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/space)
|
||||
"aD" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars)
|
||||
"aD" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/djstation/solars)
|
||||
"aE" = (/turf/simulated/floor/plating/airless,/area/djstation/solars)
|
||||
"aF" = (/turf/simulated/wall,/area/djstation)
|
||||
"aG" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/djstation)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"aa" = (/turf/space,/area/space)
|
||||
"ab" = (/obj/structure/lattice,/turf/space,/area/space)
|
||||
"ac" = (/turf/simulated/floor/plating/airless,/area/space)
|
||||
"ad" = (/turf/simulated/floor/airless,/area/space)
|
||||
"ad" = (/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"ae" = (/turf/simulated/wall/r_wall,/area/space)
|
||||
"af" = (/obj/structure/girder/reinforced,/turf/simulated/floor/plating/airless,/area/space)
|
||||
"ag" = (/turf/simulated/wall/r_wall,/area/derelict/solar_control)
|
||||
@@ -16,9 +16,9 @@
|
||||
"ap" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/space)
|
||||
"aq" = (/turf/simulated/wall,/area/space)
|
||||
"ar" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/solar_control)
|
||||
"as" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/airless,/area/solar/derelict_starboard)
|
||||
"as" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/plasteel/airless,/area/solar/derelict_starboard)
|
||||
"at" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/solar/derelict_starboard)
|
||||
"au" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/airless,/area/solar/derelict_starboard)
|
||||
"au" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/plasteel/airless,/area/solar/derelict_starboard)
|
||||
"av" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Starboard Solar APC"; pixel_y = 24},/turf/simulated/floor/plasteel,/area/derelict/solar_control)
|
||||
"aw" = (/obj/machinery/power/smes,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel,/area/derelict/solar_control)
|
||||
"ax" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar_control{id = "derelictsolar"; name = "Primary Solar Control"; track = 0},/turf/simulated/floor/plasteel,/area/derelict/solar_control)
|
||||
@@ -63,7 +63,7 @@
|
||||
"bk" = (/obj/machinery/door/airlock/command{name = "E.V.A."; req_access = null; req_access_txt = "18"},/turf/simulated/floor/plasteel,/area/derelict/bridge/access)
|
||||
"bl" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plasteel,/area/derelict/bridge/access)
|
||||
"bm" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plating/airless,/area/space)
|
||||
"bn" = (/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space)
|
||||
"bn" = (/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/space)
|
||||
"bo" = (/obj/item/stack/cable_coil/cut,/turf/space,/area/space)
|
||||
"bp" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/derelict/bridge/access)
|
||||
"bq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/derelict/bridge/access)
|
||||
@@ -77,7 +77,7 @@
|
||||
"by" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/derelict/singularity_engine)
|
||||
"bz" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/derelict/singularity_engine)
|
||||
"bA" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"bB" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
|
||||
"bB" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
|
||||
"bC" = (/obj/structure/sign/securearea{name = "ENGINEERING ACCESS"},/turf/simulated/wall/r_wall,/area/derelict/singularity_engine)
|
||||
"bD" = (/obj/structure/computerframe,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"bE" = (/obj/structure/computerframe,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
@@ -87,47 +87,47 @@
|
||||
"bI" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"bJ" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"bK" = (/obj/item/weapon/grenade/empgrenade,/obj/structure/table,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"bL" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"bM" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/singularity_engine)
|
||||
"bN" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
|
||||
"bO" = (/obj/item/stack/cable_coil/cut,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"bL" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"bM" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine)
|
||||
"bN" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
|
||||
"bO" = (/obj/item/stack/cable_coil/cut,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"bP" = (/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"bQ" = (/turf/simulated/wall,/area/derelict/singularity_engine)
|
||||
"bR" = (/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"bS" = (/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"bT" = (/turf/simulated/floor/plating,/area/derelict/bridge)
|
||||
"bU" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"bV" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"bW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"bV" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"bW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"bX" = (/obj/machinery/power/emitter{dir = 1; icon_state = "emitter"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"bY" = (/obj/machinery/field/generator,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"bZ" = (/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/space)
|
||||
"ca" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"cb" = (/obj/structure/noticeboard,/turf/simulated/wall,/area/derelict/singularity_engine)
|
||||
"cc" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"cc" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"cd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/derelict/bridge/access)
|
||||
"ce" = (/obj/machinery/door/window/eastleft{name = "Heads of Staff"; req_access_txt = "19"},/turf/simulated/floor/plasteel,/area/derelict/bridge/access)
|
||||
"cf" = (/obj/structure/table,/obj/item/device/paicard,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"cg" = (/obj/structure/stool,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"ch" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"ci" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"cj" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/singularity_engine)
|
||||
"ci" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"cj" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine)
|
||||
"ck" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel,/area/derelict/bridge/access)
|
||||
"cl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel,/area/derelict/bridge/access)
|
||||
"cm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/derelict/bridge/access)
|
||||
"cn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"co" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"cp" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"cq" = (/obj/item/weapon/paper{info = "<b>Objective #1</b>: Destroy the station with a nuclear device."; name = "Objectives of a Nuclear Operative"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"cq" = (/obj/item/weapon/paper{info = "<b>Objective #1</b>: Destroy the station with a nuclear device."; name = "Objectives of a Nuclear Operative"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"cr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"cs" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"ct" = (/obj/structure/table,/obj/item/weapon/screwdriver,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"cu" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"cv" = (/obj/item/stack/rods,/turf/space,/area/space)
|
||||
"cw" = (/obj/item/weapon/shard,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"cw" = (/obj/item/weapon/shard,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"cx" = (/obj/item/clothing/suit/space/syndicate/black/engie,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"cy" = (/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"cz" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
|
||||
"cz" = (/obj/item/weapon/shard,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
|
||||
"cA" = (/obj/structure/table,/obj/item/weapon/rack_parts,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"cB" = (/obj/structure/table,/obj/structure/window,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
"cC" = (/obj/structure/window,/turf/simulated/floor/plasteel,/area/derelict/bridge)
|
||||
@@ -139,68 +139,68 @@
|
||||
"cI" = (/turf/simulated/wall/r_wall,/area/derelict/bridge)
|
||||
"cJ" = (/obj/machinery/door/window{dir = 2; name = "Captain's Quarters"; req_access_txt = "20"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/derelict/bridge)
|
||||
"cK" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"cL" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
|
||||
"cM" = (/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"cN" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"cO" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"cP" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"cQ" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"cR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"cL" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
|
||||
"cM" = (/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"cN" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"cO" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"cP" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"cQ" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"cR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"cS" = (/obj/structure/girder,/turf/simulated/floor/plating/airless,/area/space)
|
||||
"cT" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"cU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"cT" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"cU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"cV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating/airless,/area/derelict/bridge/access)
|
||||
"cW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"cX" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"cY" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"cZ" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"da" = (/obj/structure/grille,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"db" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"cW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"cX" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"cY" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"cZ" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"da" = (/obj/structure/grille,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"db" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"dc" = (/turf/simulated/floor/plating/airless,/area/derelict/bridge/access)
|
||||
"dd" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"dd" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"de" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"df" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
|
||||
"dg" = (/obj/structure/grille,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"dh" = (/obj/machinery/door/airlock/maintenance{name = "Tech Storage"; req_access_txt = "23"},/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"df" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
|
||||
"dg" = (/obj/structure/grille,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"dh" = (/obj/machinery/door/airlock/maintenance{name = "Tech Storage"; req_access_txt = "23"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"di" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/derelict/bridge/access)
|
||||
"dj" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/airless,/area/derelict/bridge/access)
|
||||
"dj" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/access)
|
||||
"dk" = (/obj/item/weapon/screwdriver,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"dl" = (/obj/item/stack/rods,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"dl" = (/obj/item/stack/rods,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"dm" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"dn" = (/obj/structure/table,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"dn" = (/obj/structure/table,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"do" = (/turf/simulated/wall,/area/derelict/hallway/primary)
|
||||
"dp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/hallway/primary)
|
||||
"dq" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/hallway/primary)
|
||||
"dr" = (/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"dp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary)
|
||||
"dq" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary)
|
||||
"dr" = (/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"ds" = (/obj/item/weapon/ore/slag,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"dt" = (/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"du" = (/turf/simulated/wall/r_wall,/area/derelict/hallway/primary)
|
||||
"dv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"dw" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/hallway/primary)
|
||||
"dx" = (/obj/structure/window{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"dw" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary)
|
||||
"dx" = (/obj/structure/window{dir = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"dy" = (/obj/structure/grille,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"dz" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"dA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"dB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/hallway/primary)
|
||||
"dC" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/derelict/hallway/primary)
|
||||
"dD" = (/obj/machinery/light/small,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"dB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary)
|
||||
"dC" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/derelict/hallway/primary)
|
||||
"dD" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"dE" = (/obj/structure/grille,/obj/structure/window{dir = 8},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"dF" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/space)
|
||||
"dG" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/space)
|
||||
"dF" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/space)
|
||||
"dG" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/space)
|
||||
"dH" = (/obj/machinery/door/window,/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"dI" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/space)
|
||||
"dJ" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"dI" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/space)
|
||||
"dJ" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"dK" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"dL" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"dL" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine)
|
||||
"dM" = (/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"dN" = (/obj/item/weapon/crowbar,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"dO" = (/obj/structure/grille,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"dP" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/space)
|
||||
"dN" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"dO" = (/obj/structure/grille,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"dP" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/space)
|
||||
"dQ" = (/obj/item/weapon/shard{icon_state = "small"},/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"dR" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"dS" = (/turf/simulated/wall/r_wall,/area/derelict/arrival)
|
||||
"dT" = (/turf/simulated/wall,/area/derelict/arrival)
|
||||
"dU" = (/obj/machinery/light/small,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/hallway/primary)
|
||||
"dU" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary)
|
||||
"dV" = (/obj/structure/window{dir = 5},/turf/space,/area/space)
|
||||
"dW" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"dX" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
@@ -211,11 +211,11 @@
|
||||
"ec" = (/turf/simulated/wall,/area/derelict/medical/chapel)
|
||||
"ed" = (/obj/item/weapon/shard,/turf/space,/area/space)
|
||||
"ee" = (/obj/structure/grille,/turf/space,/area/derelict/singularity_engine)
|
||||
"ef" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"ef" = (/obj/item/weapon/shard,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine)
|
||||
"eg" = (/obj/structure/lattice,/obj/structure/window,/turf/space,/area/space)
|
||||
"eh" = (/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/derelict/arrival)
|
||||
"eh" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched2"},/area/derelict/arrival)
|
||||
"ei" = (/turf/simulated/floor/plating/airless,/area/derelict/arrival)
|
||||
"ej" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/arrival)
|
||||
"ej" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/arrival)
|
||||
"ek" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel)
|
||||
"el" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel)
|
||||
"em" = (/obj/structure/closet/coffin,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel)
|
||||
@@ -226,106 +226,106 @@
|
||||
"er" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/derelict/medical)
|
||||
"es" = (/obj/machinery/door/airlock/external{name = "External Engineering"},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"et" = (/obj/structure/grille,/turf/space,/area/space)
|
||||
"eu" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/hallway/primary)
|
||||
"eu" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/hallway/primary)
|
||||
"ev" = (/obj/machinery/door/window{dir = 8},/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"ew" = (/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"ex" = (/obj/item/weapon/firstaid_arm_assembly,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"ey" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/medical)
|
||||
"ez" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/medical)
|
||||
"ew" = (/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"ex" = (/obj/item/weapon/firstaid_arm_assembly,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"ey" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical)
|
||||
"ez" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical)
|
||||
"eA" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless,/area/derelict/medical)
|
||||
"eB" = (/obj/machinery/light/small,/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/singularity_engine)
|
||||
"eB" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine)
|
||||
"eC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"eD" = (/obj/structure/window{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"eE" = (/obj/structure/lattice,/obj/structure/window{dir = 1},/turf/space,/area/space)
|
||||
"eF" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/window{dir = 1},/turf/space,/area/space)
|
||||
"eG" = (/turf/simulated/floor/plating,/area/derelict/arrival)
|
||||
"eH" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel)
|
||||
"eI" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"eJ" = (/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"eK" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/space)
|
||||
"eI" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"eJ" = (/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"eK" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/space)
|
||||
"eL" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"eM" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel)
|
||||
"eN" = (/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine)
|
||||
"eO" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/space)
|
||||
"eO" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/space)
|
||||
"eP" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"eQ" = (/obj/machinery/door/morgue{name = "coffin storage"; req_access_txt = "22"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel)
|
||||
"eR" = (/obj/structure/bodycontainer/morgue,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel)
|
||||
"eS" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"eT" = (/turf/simulated/floor/airless{icon_state = "white"},/area/space)
|
||||
"eU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/hallway/primary)
|
||||
"eS" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"eT" = (/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/space)
|
||||
"eU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary)
|
||||
"eV" = (/obj/structure/table,/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel)
|
||||
"eW" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel)
|
||||
"eX" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel)
|
||||
"eY" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"eZ" = (/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/medical)
|
||||
"fa" = (/obj/item/stack/medical/ointment,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/medical)
|
||||
"eY" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"eZ" = (/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical)
|
||||
"fa" = (/obj/item/stack/medical/ointment,/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical)
|
||||
"fb" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/medical)
|
||||
"fc" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space)
|
||||
"fd" = (/obj/structure/table,/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/derelict/medical/chapel)
|
||||
"fe" = (/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel)
|
||||
"ff" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "chapel"},/area/derelict/medical/chapel)
|
||||
"fg" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fg" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fh" = (/obj/machinery/door/airlock/glass{name = "Med-Sci"; req_access_txt = "9"},/turf/simulated/floor/plating/airless,/area/derelict/medical)
|
||||
"fi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"fi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"fj" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"fk" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/wall,/area/derelict/medical/chapel)
|
||||
"fl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall,/area/derelict/medical/chapel)
|
||||
"fm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fp" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fq" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/medical)
|
||||
"fr" = (/obj/structure/closet/wardrobe/genetics_white,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fp" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fq" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical)
|
||||
"fr" = (/obj/structure/closet/wardrobe/genetics_white,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fs" = (/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/space)
|
||||
"ft" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"fu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"fv" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"fu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"fv" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"fw" = (/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"fx" = (/obj/machinery/door/poddoor{id = "derelict_gun"; name = "Derelict Mass Driver"},/turf/simulated/floor/plating,/area/derelict/medical/chapel)
|
||||
"fy" = (/turf/simulated/floor/plating,/area/derelict/medical/chapel)
|
||||
"fz" = (/obj/machinery/mass_driver{dir = 8; icon_state = "mass_driver"; id = "derelict_gun"},/obj/machinery/door/window{dir = 4; req_access_txt = "25"},/obj/structure/closet/coffin,/turf/simulated/floor/plating,/area/derelict/medical/chapel)
|
||||
"fA" = (/obj/machinery/door/window{dir = 8},/turf/simulated/floor/airless,/area/derelict/medical/chapel)
|
||||
"fB" = (/turf/simulated/floor/airless,/area/derelict/medical/chapel)
|
||||
"fC" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/derelict/medical/chapel)
|
||||
"fD" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/airless,/area/derelict/medical/chapel)
|
||||
"fE" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fF" = (/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fG" = (/obj/item/stack/medical/ointment,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fI" = (/obj/structure/closet/l3closet/general,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fA" = (/obj/machinery/door/window{dir = 8},/turf/simulated/floor/plasteel/airless,/area/derelict/medical/chapel)
|
||||
"fB" = (/turf/simulated/floor/plasteel/airless,/area/derelict/medical/chapel)
|
||||
"fC" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/derelict/medical/chapel)
|
||||
"fD" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor/plasteel/airless,/area/derelict/medical/chapel)
|
||||
"fE" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fF" = (/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fG" = (/obj/item/stack/medical/ointment,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fI" = (/obj/structure/closet/l3closet/general,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fJ" = (/obj/structure/window,/turf/space,/area/space)
|
||||
"fK" = (/obj/structure/window{dir = 8},/turf/space,/area/space)
|
||||
"fL" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"fM" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"fN" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/derelict/arrival)
|
||||
"fO" = (/obj/machinery/door/window,/turf/simulated/floor/airless,/area/derelict/medical/chapel)
|
||||
"fP" = (/obj/machinery/door/window/southleft,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fQ" = (/obj/machinery/door/window/southright,/turf/simulated/floor/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"fS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"fT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/hallway/primary)
|
||||
"fU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"fO" = (/obj/machinery/door/window,/turf/simulated/floor/plasteel/airless,/area/derelict/medical/chapel)
|
||||
"fP" = (/obj/machinery/door/window/southleft,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fQ" = (/obj/machinery/door/window/southright,/turf/simulated/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical)
|
||||
"fR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"fS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"fT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary)
|
||||
"fU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"fV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"fW" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"fX" = (/obj/structure/window{dir = 8},/obj/structure/window,/turf/space,/area/space)
|
||||
"fY" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
|
||||
"fZ" = (/obj/machinery/door/airlock/external{name = "Arrivals Docking Bay 1"},/turf/simulated/floor/plating,/area/derelict/arrival)
|
||||
"ga" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/space)
|
||||
"gc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/space)
|
||||
"gd" = (/obj/structure/window{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/space)
|
||||
"ga" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"gc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"gd" = (/obj/structure/window{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"ge" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"gf" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/space)
|
||||
"gf" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"gg" = (/obj/structure/window,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"gh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor/airless,/area/derelict/arrival)
|
||||
"gh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor/plasteel/airless,/area/derelict/arrival)
|
||||
"gi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"gj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/derelict/arrival)
|
||||
"gk" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"gl" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel)
|
||||
"gm" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gn" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"go" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gp" = (/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gm" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gn" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"go" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gp" = (/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gq" = (/obj/structure/window{dir = 1},/turf/space,/area/space)
|
||||
"gr" = (/obj/structure/window{dir = 5},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"gs" = (/obj/structure/grille,/obj/structure/window{dir = 1},/turf/space,/area/space)
|
||||
@@ -333,45 +333,45 @@
|
||||
"gu" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"gv" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"gw" = (/obj/structure/table,/obj/machinery/computer/pod/old{name = "ProComp IIe"; pixel_y = 7; id = "derelict_gun"},/turf/simulated/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel)
|
||||
"gx" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gy" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gz" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gA" = (/obj/structure/girder,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gx" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gy" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gz" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gA" = (/obj/structure/girder,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gB" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"gC" = (/obj/machinery/door/window,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gD" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gE" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gF" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gC" = (/obj/machinery/door/window,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gD" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gE" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gF" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/derelict/hallway/primary)
|
||||
"gH" = (/obj/machinery/door/airlock/security{name = "Gas Storage"; req_access = null; req_access_txt = "3"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"gI" = (/obj/structure/lattice,/obj/structure/window{dir = 4},/turf/space,/area/space)
|
||||
"gJ" = (/obj/structure/girder,/obj/structure/window,/turf/simulated/floor/plating/airless,/area/derelict/arrival)
|
||||
"gK" = (/obj/structure/stool/bed,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gK" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gL" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"gM" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = null; req_access_txt = "1"},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gM" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = null; req_access_txt = "1"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gN" = (/obj/item/weapon/cigbutt,/turf/space,/area/space)
|
||||
"gO" = (/obj/structure/window{dir = 1},/turf/simulated/floor/plating,/area/derelict/arrival)
|
||||
"gP" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"gQ" = (/obj/structure/table,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gR" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gS" = (/obj/machinery/vending/sovietsoda,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gT" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gU" = (/obj/structure/table,/turf/simulated/floor/airless,/area/space)
|
||||
"gV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/space)
|
||||
"gQ" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gR" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gS" = (/obj/machinery/vending/sovietsoda,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gT" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gU" = (/obj/structure/table,/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"gV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"gW" = (/obj/structure/lattice,/obj/item/stack/cable_coil/cut,/turf/space,/area/space)
|
||||
"gX" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/derelict/arrival)
|
||||
"gY" = (/obj/structure/stool,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"gY" = (/obj/structure/stool,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"gZ" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Access"; req_access_txt = "24"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"ha" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor/airless,/area/space)
|
||||
"ha" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"hb" = (/obj/structure/window{dir = 4},/turf/space,/area/space)
|
||||
"hc" = (/obj/structure/closet/wardrobe,/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"hd" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary)
|
||||
"hd" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary)
|
||||
"he" = (/obj/structure/grille,/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/space)
|
||||
"hf" = (/obj/structure/stool/bed,/turf/simulated/floor/airless,/area/space)
|
||||
"hf" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"hg" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"hh" = (/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/derelict/hallway/primary)
|
||||
"hi" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/derelict/hallway/primary)
|
||||
"hj" = (/obj/structure/table,/obj/item/device/healthanalyzer,/turf/simulated/floor/airless,/area/derelict/hallway/primary)
|
||||
"hh" = (/turf/simulated/floor/plasteel/airless{icon_state = "floorgrime"},/area/derelict/hallway/primary)
|
||||
"hi" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/hallway/primary)
|
||||
"hj" = (/obj/structure/table,/obj/item/device/healthanalyzer,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/primary)
|
||||
"hk" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/floor/plasteel,/area/derelict/arrival)
|
||||
"hl" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating,/area/derelict/arrival)
|
||||
"hm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/space)
|
||||
@@ -384,71 +384,71 @@
|
||||
"ht" = (/obj/structure/window{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"hu" = (/obj/structure/grille,/obj/item/weapon/shard,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"hv" = (/obj/structure/girder,/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"hw" = (/obj/item/stack/rods,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
|
||||
"hw" = (/obj/item/stack/rods,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary)
|
||||
"hx" = (/obj/item/weapon/shard{icon_state = "small"},/turf/space,/area/space)
|
||||
"hy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/wirecutters,/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
|
||||
"hy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/wirecutters,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary)
|
||||
"hz" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"hA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
|
||||
"hA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary)
|
||||
"hB" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plating/airless,/area/derelict/hallway/primary)
|
||||
"hC" = (/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
|
||||
"hD" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
|
||||
"hC" = (/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary)
|
||||
"hD" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary)
|
||||
"hE" = (/obj/machinery/door/airlock/maintenance{name = "Aux Storage"; req_access_txt = "23"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"hF" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/apc{dir = 8; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
|
||||
"hF" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/apc{dir = 8; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary)
|
||||
"hG" = (/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"hH" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
|
||||
"hI" = (/turf/simulated/floor/airless{icon_state = "derelict9"},/area/derelict/hallway/secondary)
|
||||
"hJ" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "derelict10"},/area/derelict/hallway/secondary)
|
||||
"hK" = (/turf/simulated/floor/airless{icon_state = "derelict11"},/area/derelict/hallway/secondary)
|
||||
"hL" = (/turf/simulated/floor/airless{icon_state = "derelict12"},/area/derelict/hallway/secondary)
|
||||
"hM" = (/turf/simulated/floor/airless{icon_state = "derelict13"},/area/derelict/hallway/secondary)
|
||||
"hN" = (/turf/simulated/floor/airless{icon_state = "derelict14"},/area/derelict/hallway/secondary)
|
||||
"hO" = (/turf/simulated/floor/airless{icon_state = "derelict15"},/area/derelict/hallway/secondary)
|
||||
"hP" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "derelict16"},/area/derelict/hallway/secondary)
|
||||
"hQ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
|
||||
"hR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
|
||||
"hS" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
|
||||
"hT" = (/turf/simulated/floor/airless{icon_state = "derelict1"},/area/derelict/hallway/secondary)
|
||||
"hU" = (/turf/simulated/floor/airless{icon_state = "derelict2"},/area/derelict/hallway/secondary)
|
||||
"hV" = (/turf/simulated/floor/airless{icon_state = "derelict3"},/area/derelict/hallway/secondary)
|
||||
"hW" = (/turf/simulated/floor/airless{icon_state = "derelict4"},/area/derelict/hallway/secondary)
|
||||
"hX" = (/turf/simulated/floor/airless{icon_state = "derelict5"},/area/derelict/hallway/secondary)
|
||||
"hY" = (/turf/simulated/floor/airless{icon_state = "derelict6"},/area/derelict/hallway/secondary)
|
||||
"hZ" = (/turf/simulated/floor/airless{icon_state = "derelict7"},/area/derelict/hallway/secondary)
|
||||
"ia" = (/turf/simulated/floor/airless{icon_state = "derelict8"},/area/derelict/hallway/secondary)
|
||||
"hH" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary)
|
||||
"hI" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict9"},/area/derelict/hallway/secondary)
|
||||
"hJ" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "derelict10"},/area/derelict/hallway/secondary)
|
||||
"hK" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict11"},/area/derelict/hallway/secondary)
|
||||
"hL" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict12"},/area/derelict/hallway/secondary)
|
||||
"hM" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict13"},/area/derelict/hallway/secondary)
|
||||
"hN" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict14"},/area/derelict/hallway/secondary)
|
||||
"hO" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict15"},/area/derelict/hallway/secondary)
|
||||
"hP" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "derelict16"},/area/derelict/hallway/secondary)
|
||||
"hQ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary)
|
||||
"hR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary)
|
||||
"hS" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary)
|
||||
"hT" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict1"},/area/derelict/hallway/secondary)
|
||||
"hU" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict2"},/area/derelict/hallway/secondary)
|
||||
"hV" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict3"},/area/derelict/hallway/secondary)
|
||||
"hW" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict4"},/area/derelict/hallway/secondary)
|
||||
"hX" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict5"},/area/derelict/hallway/secondary)
|
||||
"hY" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict6"},/area/derelict/hallway/secondary)
|
||||
"hZ" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict7"},/area/derelict/hallway/secondary)
|
||||
"ia" = (/turf/simulated/floor/plasteel/airless{icon_state = "derelict8"},/area/derelict/hallway/secondary)
|
||||
"ib" = (/obj/structure/lattice,/turf/space,/area/derelict/hallway/secondary)
|
||||
"ic" = (/turf/simulated/wall/r_wall,/area/derelict/bridge/ai_upload)
|
||||
"id" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"id" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"ie" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"if" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"ig" = (/obj/structure/window{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"ih" = (/obj/structure/window{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"ii" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"ij" = (/obj/structure/closet/emcloset,/turf/simulated/floor/airless,/area/derelict/hallway/secondary)
|
||||
"ii" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"ij" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel/airless,/area/derelict/hallway/secondary)
|
||||
"ik" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/wall/r_wall,/area/derelict/bridge/ai_upload)
|
||||
"il" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/derelict/bridge/ai_upload)
|
||||
"im" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"im" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"in" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/derelict/bridge/ai_upload)
|
||||
"io" = (/obj/machinery/power/smes,/obj/structure/cable,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"ip" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"iq" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/bridge/ai_upload)
|
||||
"ir" = (/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"is" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"io" = (/obj/machinery/power/smes,/obj/structure/cable,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"ip" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"iq" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/bridge/ai_upload)
|
||||
"ir" = (/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"is" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"it" = (/turf/simulated/floor/plating/airless,/area/derelict/bridge/ai_upload)
|
||||
"iu" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"iv" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/solar_control{id = "derelictsolar"; name = "Primary Solar Control"; track = 0},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"iu" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"iv" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/solar_control{id = "derelictsolar"; name = "Primary Solar Control"; track = 0},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"iw" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 8; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/derelict/bridge/ai_upload)
|
||||
"ix" = (/obj/item/weapon/paper{desc = ""; info = "The Syndicate have cunningly disguised a Syndicate Uplink as your PDA. Simply enter the code \"678 Bravo\" into the ringtone select to unlock its hidden features. <br><br><b>Objective #1</b>. Kill the God damn AI in a fire blast that it rocks the station. <b>Success!</b> <br><b>Objective #2</b>. Escape alive. <b>Failed.</b>"; name = "Mission Objectives"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload)
|
||||
"iy" = (/obj/machinery/light/small{dir = 4},/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"ix" = (/obj/item/weapon/paper{desc = ""; info = "The Syndicate have cunningly disguised a Syndicate Uplink as your PDA. Simply enter the code \"678 Bravo\" into the ringtone select to unlock its hidden features. <br><br><b>Objective #1</b>. Kill the God damn AI in a fire blast that it rocks the station. <b>Success!</b> <br><b>Objective #2</b>. Escape alive. <b>Failed.</b>"; name = "Mission Objectives"},/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload)
|
||||
"iy" = (/obj/machinery/light/small{dir = 4},/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"iz" = (/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/derelict/hallway/secondary)
|
||||
"iA" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/floor/airless,/area/space)
|
||||
"iB" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"iC" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"iD" = (/obj/item/clothing/suit/space/syndicate/black/red,/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"iE" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/simulated/floor/airless,/area/derelict/bridge/ai_upload)
|
||||
"iA" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/floor/plasteel/airless,/area/space)
|
||||
"iB" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"iC" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"iD" = (/obj/item/clothing/suit/space/syndicate/black/red,/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"iE" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/simulated/floor/plasteel/airless,/area/derelict/bridge/ai_upload)
|
||||
"iF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/derelict/bridge/ai_upload)
|
||||
"iG" = (/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/solar/derelict_aft)
|
||||
"iH" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft)
|
||||
"iI" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/airless,/area/solar/derelict_aft)
|
||||
"iI" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/plasteel/airless,/area/solar/derelict_aft)
|
||||
"iJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft)
|
||||
"iK" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft)
|
||||
"iL" = (/turf/simulated/floor/plating/airless,/area/solar/derelict_aft)
|
||||
@@ -456,21 +456,21 @@
|
||||
"iN" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft)
|
||||
"iO" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft)
|
||||
"iP" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/solar/derelict_aft)
|
||||
"iQ" = (/obj/structure/cable,/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/airless,/area/solar/derelict_aft)
|
||||
"iQ" = (/obj/structure/cable,/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/simulated/floor/plasteel/airless,/area/solar/derelict_aft)
|
||||
"iR" = (/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft)
|
||||
"iS" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/derelict_aft)
|
||||
"iT" = (/turf/simulated/wall/r_wall,/area/derelict/teleporter)
|
||||
"iU" = (/turf/simulated/floor/plating/airless,/area/derelict/teleporter)
|
||||
"iV" = (/turf/simulated/floor/airless,/area/derelict/teleporter)
|
||||
"iW" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/teleporter)
|
||||
"iX" = (/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/teleporter)
|
||||
"iY" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/airless,/area/derelict/teleporter)
|
||||
"iZ" = (/obj/machinery/teleport/station,/turf/simulated/floor/airless,/area/derelict/teleporter)
|
||||
"ja" = (/obj/machinery/teleport/hub,/turf/simulated/floor/airless,/area/derelict/teleporter)
|
||||
"iV" = (/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter)
|
||||
"iW" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/teleporter)
|
||||
"iX" = (/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/teleporter)
|
||||
"iY" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter)
|
||||
"iZ" = (/obj/machinery/teleport/station,/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter)
|
||||
"ja" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter)
|
||||
"jb" = (/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/plating/airless,/area/derelict/teleporter)
|
||||
"jc" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/airless,/area/derelict/teleporter)
|
||||
"jd" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/derelict/teleporter)
|
||||
"je" = (/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/airless,/area/derelict/teleporter)
|
||||
"jc" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter)
|
||||
"jd" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/teleporter)
|
||||
"je" = (/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/simulated/floor/plasteel/airless,/area/derelict/teleporter)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -26,9 +26,14 @@ Pipelines + Other Objects -> Pipe network
|
||||
|
||||
/obj/machinery/atmospherics/New()
|
||||
..()
|
||||
|
||||
SetInitDirections()
|
||||
if(can_unwrench)
|
||||
stored = new(src, make_from=src)
|
||||
|
||||
/obj/machinery/atmospherics/proc/SetInitDirections()
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/proc/safe_input(var/title, var/text, var/default_set)
|
||||
var/new_value = input(usr,"Enter new output pressure (0-4500kPa)","Pressure control",default_set) as num
|
||||
if(usr.canUseTopic(src))
|
||||
@@ -124,9 +129,15 @@ Pipelines + Other Objects -> Pipe network
|
||||
|
||||
return img
|
||||
|
||||
/obj/machinery/atmospherics/construction(D, P)
|
||||
/obj/machinery/atmospherics/construction(D, P, var/pipe_type, var/obj_color)
|
||||
dir = D
|
||||
initialize_directions = P
|
||||
if(can_unwrench)
|
||||
color = obj_color
|
||||
pipe_color = obj_color
|
||||
stored.dir = D //need to define them here, because the obj directions...
|
||||
stored.pipe_type = pipe_type //... were not set at the time the stored pipe was created
|
||||
stored.color = obj_color
|
||||
var/turf/T = loc
|
||||
level = T.intact ? 2 : 1
|
||||
initialize()
|
||||
|
||||
@@ -17,6 +17,14 @@
|
||||
|
||||
/obj/machinery/atmospherics/binary/New()
|
||||
..()
|
||||
|
||||
air1 = new
|
||||
air2 = new
|
||||
|
||||
air1.volume = 200
|
||||
air2.volume = 200
|
||||
|
||||
/obj/machinery/atmospherics/binary/SetInitDirections()
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
initialize_directions = NORTH|SOUTH
|
||||
@@ -26,11 +34,6 @@
|
||||
initialize_directions = EAST|WEST
|
||||
if(WEST)
|
||||
initialize_directions = EAST|WEST
|
||||
air1 = new
|
||||
air2 = new
|
||||
|
||||
air1.volume = 200
|
||||
air2.volume = 200
|
||||
|
||||
//Separate this because we don't need to update pipe icons if we just are going to change the state
|
||||
/obj/machinery/atmospherics/binary/proc/update_icon_nopipes()
|
||||
|
||||
@@ -44,7 +44,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
/obj/machinery/atmospherics/binary/pump/process()
|
||||
// ..()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
return 0
|
||||
if(!on)
|
||||
return 0
|
||||
|
||||
@@ -70,8 +70,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
|
||||
return 1
|
||||
|
||||
//Radio remote control
|
||||
|
||||
//Radio remote control
|
||||
/obj/machinery/atmospherics/binary/pump/proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
|
||||
@@ -20,6 +20,16 @@
|
||||
|
||||
/obj/machinery/atmospherics/trinary/New()
|
||||
..()
|
||||
|
||||
air1 = new
|
||||
air2 = new
|
||||
air3 = new
|
||||
|
||||
air1.volume = 200
|
||||
air2.volume = 200
|
||||
air3.volume = 200
|
||||
|
||||
/obj/machinery/atmospherics/trinary/SetInitDirections()
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
initialize_directions = EAST|NORTH|SOUTH
|
||||
@@ -29,14 +39,6 @@
|
||||
initialize_directions = EAST|WEST|SOUTH
|
||||
if(WEST)
|
||||
initialize_directions = WEST|NORTH|EAST
|
||||
air1 = new
|
||||
air2 = new
|
||||
air3 = new
|
||||
|
||||
air1.volume = 200
|
||||
air2.volume = 200
|
||||
air3.volume = 200
|
||||
|
||||
/*
|
||||
Iconnery
|
||||
*/
|
||||
|
||||
@@ -10,10 +10,12 @@
|
||||
|
||||
/obj/machinery/atmospherics/unary/New()
|
||||
..()
|
||||
initialize_directions = dir
|
||||
air_contents = new
|
||||
air_contents.volume = 200
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/unary/SetInitDirections()
|
||||
initialize_directions = dir
|
||||
/*
|
||||
Iconnery
|
||||
*/
|
||||
|
||||
@@ -46,9 +46,9 @@
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/binary/valve/proc/normalize_dir()
|
||||
if(dir==3)
|
||||
if(dir==2)
|
||||
dir = 1
|
||||
else if(dir==12)
|
||||
else if(dir==8)
|
||||
dir = 4
|
||||
|
||||
/obj/machinery/atmospherics/binary/valve/attack_ai(mob/user)
|
||||
@@ -69,7 +69,7 @@
|
||||
desc = "A digitally controlled valve."
|
||||
icon_state = "dvalve_map"
|
||||
|
||||
/obj/machinery/atmospherics/valve/digital/attack_ai(mob/user)
|
||||
/obj/machinery/atmospherics/binary/valve/digital/attack_ai(mob/user)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/atmospherics/binary/valve/digital/update_icon_nopipes(animation)
|
||||
|
||||
@@ -50,6 +50,8 @@
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/New()
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/SetInitDirections()
|
||||
switch(dir)
|
||||
if(SOUTH)
|
||||
initialize_directions = NORTH
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/SetInitDirections()
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
initialize_directions = EAST|SOUTH|WEST
|
||||
|
||||
@@ -25,6 +25,9 @@
|
||||
color = pipe_color
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/SetInitDirections()
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/initialize()
|
||||
for(var/D in cardinal)
|
||||
for(var/obj/machinery/atmospherics/target in get_step(src, D))
|
||||
|
||||
@@ -33,10 +33,16 @@ The regular pipe you see everywhere, including bent ones.
|
||||
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/SetInitDirections()
|
||||
switch(dir)
|
||||
if(SOUTH || NORTH)
|
||||
if(NORTH)
|
||||
initialize_directions = SOUTH|NORTH
|
||||
if(EAST || WEST)
|
||||
if(SOUTH)
|
||||
initialize_directions = SOUTH|NORTH
|
||||
if(EAST)
|
||||
initialize_directions = EAST|WEST
|
||||
if(WEST)
|
||||
initialize_directions = EAST|WEST
|
||||
if(NORTHEAST)
|
||||
initialize_directions = NORTH|EAST
|
||||
@@ -110,9 +116,9 @@ The regular pipe you see everywhere, including bent ones.
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/proc/normalize_dir()
|
||||
if(dir==3)
|
||||
if(dir==2)
|
||||
dir = 1
|
||||
else if(dir==12)
|
||||
else if(dir==8)
|
||||
dir = 4
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/update_icon()
|
||||
|
||||
+23
-35
@@ -1,31 +1,31 @@
|
||||
|
||||
//bitflags for mutations
|
||||
// Extra powers:
|
||||
#define SHADOW (1<<10) // shadow teleportation (create in/out portals anywhere) (25%)
|
||||
#define SCREAM (1<<11) // supersonic screaming (25%)
|
||||
#define EXPLOSIVE (1<<12) // exploding on-demand (15%)
|
||||
#define REGENERATION (1<<13) // superhuman regeneration (30%)
|
||||
#define REPROCESSOR (1<<14) // eat anything (50%)
|
||||
#define SHAPESHIFTING (1<<15) // take on the appearance of anything (40%)
|
||||
#define PHASING (1<<16) // ability to phase through walls (40%)
|
||||
#define SHIELD (1<<17) // shielding from all projectile attacks (30%)
|
||||
#define SHOCKWAVE (1<<18) // attack a nearby tile and cause a massive shockwave, knocking most people on their asses (25%)
|
||||
#define ELECTRICITY (1<<19) // ability to shoot electric attacks (15%)
|
||||
//Defines copying names of mutations in all cases, make sure to change this if you change mutation's name
|
||||
#define HULK "Hulk"
|
||||
#define XRAY "X Ray Vision"
|
||||
#define COLDRES "Cold Resistance"
|
||||
#define TK "Telekinesis"
|
||||
#define NERVOUS "Nervousness"
|
||||
#define EPILEPSY "Epilepsy"
|
||||
#define MUTATE "Unstable DNA"
|
||||
#define COUGH "Cough"
|
||||
#define CLOWNMUT "Clumsiness"
|
||||
#define TOURETTES "Tourettes Syndrome"
|
||||
#define DEAFMUT "Deafness"
|
||||
#define BLINDMUT "Blindness"
|
||||
#define RACEMUT "Monkified"
|
||||
#define BADSIGHT "Near Sightness"
|
||||
#define LASEREYES "Laser Eyes"
|
||||
|
||||
|
||||
// String identifiers for associative list lookup
|
||||
// mob/var/list/mutations
|
||||
|
||||
// Generic mutations:
|
||||
#define TK 1
|
||||
#define COLD_RESISTANCE 2
|
||||
#define XRAY 3
|
||||
#define HULK 4
|
||||
#define CLUMSY 5
|
||||
#define FAT 6
|
||||
#define HUSK 7
|
||||
#define NOCLONE 8
|
||||
//Types of usual mutations
|
||||
#define POSITIVE 1
|
||||
#define NEGATIVE 2
|
||||
#define MINOR_NEGATIVE 3
|
||||
|
||||
//Mutations that cant be taken from genetics and are not in SE
|
||||
#define NON_SCANNABLE -1
|
||||
|
||||
// Extra powers:
|
||||
#define LASER 9 // harm intent - click anywhere to shoot lasers from eyes
|
||||
@@ -41,18 +41,6 @@
|
||||
#define SHOCKWAVE 19 // attack a nearby tile and cause a massive shockwave, knocking most people on their asses (25%)
|
||||
#define ELECTRICITY 20 // ability to shoot electric attacks (15%)
|
||||
|
||||
//disabilities
|
||||
#define NEARSIGHTED 1
|
||||
#define EPILEPSY 2
|
||||
#define COUGHING 4
|
||||
#define TOURETTES 8
|
||||
#define NERVOUS 16
|
||||
|
||||
//sdisabilities
|
||||
#define BLIND 1
|
||||
#define MUTE 2
|
||||
#define DEAF 4
|
||||
|
||||
//DNA - Because fuck you and your magic numbers being all over the codebase.
|
||||
#define DNA_BLOCK_SIZE 3
|
||||
|
||||
@@ -88,4 +76,4 @@
|
||||
#define NUTRITION_LEVEL_WELL_FED 450
|
||||
#define NUTRITION_LEVEL_FED 350
|
||||
#define NUTRITION_LEVEL_HUNGRY 250
|
||||
#define NUTRITION_LEVEL_STARVING 150
|
||||
#define NUTRITION_LEVEL_STARVING 150
|
||||
|
||||
+28
-1
@@ -1,5 +1,32 @@
|
||||
#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day
|
||||
|
||||
|
||||
//Human Overlays Indexes/////////
|
||||
#define SPECIES_LAYER 23 // mutantrace colors... these are on a seperate layer in order to prvent
|
||||
#define BODY_LAYER 22 //underwear, undershirts, eyes, lips(makeup)
|
||||
#define MUTATIONS_LAYER 21 //Tk headglows etc.
|
||||
#define AUGMENTS_LAYER 20
|
||||
#define DAMAGE_LAYER 19 //damage indicators (cuts and burns)
|
||||
#define UNIFORM_LAYER 18
|
||||
#define ID_LAYER 17
|
||||
#define SHOES_LAYER 16
|
||||
#define GLOVES_LAYER 15
|
||||
#define EARS_LAYER 14
|
||||
#define SUIT_LAYER 13
|
||||
#define GLASSES_LAYER 12
|
||||
#define BELT_LAYER 11 //Possible make this an overlay of somethign required to wear a belt?
|
||||
#define SUIT_STORE_LAYER 10
|
||||
#define BACK_LAYER 9
|
||||
#define HAIR_LAYER 8 //TODO: make part of head layer?
|
||||
#define FACEMASK_LAYER 7
|
||||
#define HEAD_LAYER 6
|
||||
#define HANDCUFF_LAYER 5
|
||||
#define LEGCUFF_LAYER 4
|
||||
#define L_HAND_LAYER 3
|
||||
#define R_HAND_LAYER 2 //Having the two hands seperate seems rather silly, merge them together? It'll allow for code to be reused on mobs with arbitarily many hands
|
||||
#define FIRE_LAYER 1 //If you're on fire
|
||||
#define TOTAL_LAYERS 23 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
|
||||
|
||||
//Security levels
|
||||
#define SEC_LEVEL_GREEN 0
|
||||
#define SEC_LEVEL_BLUE 1
|
||||
@@ -67,4 +94,4 @@
|
||||
//SOUND:
|
||||
#define SOUND_MINIMUM_PRESSURE 10
|
||||
#define FALLOFF_SOUNDS 1
|
||||
#define SURROUND_CAP 7
|
||||
#define SURROUND_CAP 7
|
||||
|
||||
+12
-1
@@ -7,6 +7,17 @@
|
||||
#define UNCONSCIOUS 1
|
||||
#define DEAD 2
|
||||
|
||||
//mob disabilities stat
|
||||
|
||||
#define BLIND 1
|
||||
#define MUTE 2
|
||||
#define DEAF 4
|
||||
#define NEARSIGHT 8
|
||||
#define FAT 32
|
||||
#define HUSK 64
|
||||
#define NOCLONE 128
|
||||
#define CLUMSY 256
|
||||
|
||||
// bitflags for machine stat variable
|
||||
#define BROKEN 1
|
||||
#define NOPOWER 2
|
||||
@@ -20,4 +31,4 @@
|
||||
#define SHUTTLE_CALL 2
|
||||
#define SHUTTLE_DOCKED 3
|
||||
#define SHUTTLE_ESCAPE 4
|
||||
#define SHUTTLE_ENDGAME 5
|
||||
#define SHUTTLE_ENDGAME 5
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, underwear_list, underwear_m, underwear_f)
|
||||
//undershirt
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, undershirt_list, undershirt_m, undershirt_f)
|
||||
//socks
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list, socks_m, socks_f)
|
||||
|
||||
//Species
|
||||
for(var/spath in typesof(/datum/species))
|
||||
|
||||
@@ -28,6 +28,14 @@
|
||||
if(FEMALE) return pick(undershirt_f)
|
||||
else return pick(undershirt_list)
|
||||
|
||||
/proc/random_socks(gender)
|
||||
if(!socks_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list, socks_m, socks_f)
|
||||
switch(gender)
|
||||
if(MALE) return pick(socks_m)
|
||||
if(FEMALE) return pick(socks_f)
|
||||
else return pick(socks_list)
|
||||
|
||||
/proc/random_hair_style(gender)
|
||||
switch(gender)
|
||||
if(MALE) return pick(hair_styles_male_list)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//////////////
|
||||
var/NEARSIGHTEDBLOCK = 0
|
||||
var/NEARSIGHTBLOCK = 0
|
||||
var/EPILEPSYBLOCK = 0
|
||||
var/COUGHBLOCK = 0
|
||||
var/TOURETTESBLOCK = 0
|
||||
@@ -23,3 +23,6 @@ var/NULLED_UI
|
||||
|
||||
var/list/global_mutations = list() // list of hidden mutation things
|
||||
|
||||
var/list/bad_mutations = list()
|
||||
var/list/good_mutations = list()
|
||||
var/list/not_good_mutations = list()
|
||||
@@ -14,6 +14,10 @@ var/global/list/underwear_f = list() //stores only underwear name
|
||||
var/global/list/undershirt_list = list() //stores /datum/sprite_accessory/undershirt indexed by name
|
||||
var/global/list/undershirt_m = list() //stores only undershirt name
|
||||
var/global/list/undershirt_f = list() //stores only undershirt name
|
||||
//Socks
|
||||
var/global/list/socks_list = list() //stores /datum/sprite_accessory/socks indexed by name
|
||||
var/global/list/socks_m = list() //stores only socks name
|
||||
var/global/list/socks_f = list() //stores only socks name
|
||||
//Backpacks
|
||||
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel")
|
||||
//Female Uniforms
|
||||
|
||||
@@ -161,12 +161,6 @@
|
||||
animals lunging, etc.
|
||||
*/
|
||||
/mob/proc/RangedAttack(var/atom/A, var/params)
|
||||
if(!mutations.len) return
|
||||
if((LASER in mutations) && a_intent == "harm")
|
||||
LaserEyes(A) // moved into a proc below
|
||||
else
|
||||
if(TK in mutations)
|
||||
A.attack_tk(src)
|
||||
/*
|
||||
Restrained ClickOn
|
||||
|
||||
|
||||
+19
-10
@@ -13,7 +13,15 @@
|
||||
if(proximity && istype(G) && G.Touch(A,1))
|
||||
return
|
||||
|
||||
var/override = 0
|
||||
|
||||
for(var/datum/mutation/human/HM in dna.mutations)
|
||||
override += HM.on_attack_hand(src, A)
|
||||
|
||||
if(override) return
|
||||
|
||||
A.attack_hand(src)
|
||||
|
||||
/atom/proc/attack_hand(mob/user as mob)
|
||||
return
|
||||
|
||||
@@ -26,28 +34,29 @@
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/RangedAttack(var/atom/A)
|
||||
if(!gloves && !mutations.len) return
|
||||
var/obj/item/clothing/gloves/G = gloves
|
||||
if((LASER in mutations) && a_intent == "harm")
|
||||
LaserEyes(A) // moved into a proc below
|
||||
if(gloves)
|
||||
var/obj/item/clothing/gloves/G = gloves
|
||||
if(istype(G) && G.Touch(A,0)) // for magic gloves
|
||||
return
|
||||
|
||||
else if(istype(G) && G.Touch(A,0)) // for magic gloves
|
||||
return
|
||||
|
||||
else if(TK in mutations)
|
||||
A.attack_tk(src)
|
||||
for(var/datum/mutation/human/HM in dna.mutations)
|
||||
HM.on_ranged_attack(src, A)
|
||||
|
||||
/*
|
||||
Animals & All Unspecified
|
||||
*/
|
||||
/mob/living/UnarmedAttack(var/atom/A)
|
||||
A.attack_animal(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/UnarmedAttack(var/atom/A)
|
||||
target = A
|
||||
AttackingTarget()
|
||||
|
||||
/atom/proc/attack_animal(mob/user as mob)
|
||||
return
|
||||
/mob/living/RestrainedClickOn(var/atom/A)
|
||||
return
|
||||
|
||||
|
||||
/*
|
||||
Monkeys
|
||||
*/
|
||||
|
||||
@@ -38,14 +38,11 @@ var/const/tk_maxrange = 15
|
||||
return
|
||||
|
||||
/obj/item/attack_tk(mob/user)
|
||||
if(user.stat || !isturf(loc)) return
|
||||
if((TK in user.mutations) && !user.get_active_hand()) // both should already be true to get here
|
||||
var/obj/item/tk_grab/O = new(src)
|
||||
user.put_in_active_hand(O)
|
||||
O.host = user
|
||||
O.focus_object(src)
|
||||
else
|
||||
WARNING("Strange attack_tk(): TK([TK in user.mutations]) empty hand([!user.get_active_hand()])")
|
||||
if(user.stat) return
|
||||
var/obj/item/tk_grab/O = new(src)
|
||||
user.put_in_active_hand(O)
|
||||
O.host = user
|
||||
O.focus_object(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -95,13 +92,13 @@ var/const/tk_maxrange = 15
|
||||
if(focus)
|
||||
focus.attack_self_tk(user)
|
||||
|
||||
/obj/item/tk_grab/afterattack(atom/target, mob/living/user, proximity)//TODO: go over this
|
||||
/obj/item/tk_grab/afterattack(atom/target, mob/living/carbon/user, proximity)//TODO: go over this
|
||||
if(!target || !user) return
|
||||
if(last_throw+3 > world.time) return
|
||||
if(!host || host != user)
|
||||
qdel(src)
|
||||
return
|
||||
if(!(TK in host.mutations))
|
||||
if(!(user.dna.check_mutation(TK)))
|
||||
qdel(src)
|
||||
return
|
||||
if(isobj(target) && !isturf(target.loc))
|
||||
|
||||
@@ -33,10 +33,10 @@ Bonus
|
||||
if(3, 4)
|
||||
M << "<span class='notice'>[pick("You hear a ringing in your ear.", "Your ears pop.")]</span>"
|
||||
if(5)
|
||||
if(!(M.sdisabilities & DEAF))
|
||||
if(!(M.ear_deaf))
|
||||
M << "<span class='danger'>Your ears pop and begin ringing loudly!</span>"
|
||||
M.sdisabilities |= DEAF
|
||||
M.ear_deaf = INFINITY //Shall be enough
|
||||
spawn(200)
|
||||
if(M)
|
||||
M.sdisabilities &= ~DEAF
|
||||
M.ear_deaf = 0
|
||||
return
|
||||
@@ -41,8 +41,9 @@ Bonus
|
||||
M.eye_blurry = 20
|
||||
M.eye_stat += 5
|
||||
if (M.eye_stat >= 10)
|
||||
M.disabilities |= NEARSIGHTED
|
||||
if (prob(M.eye_stat - 10 + 1) && !(M.sdisabilities & BLIND))
|
||||
M.disabilities |= NEARSIGHT
|
||||
if (prob(M.eye_stat - 10 + 1) && !(M.eye_blind))
|
||||
M << "<span class='danger'>You go blind!</span>"
|
||||
M.sdisabilities |= BLIND
|
||||
M.disabilities |= BLIND
|
||||
M.eye_blind = 1
|
||||
return
|
||||
@@ -0,0 +1,327 @@
|
||||
/var/global/list/mutations_list = list()
|
||||
|
||||
/datum/mutation/
|
||||
|
||||
var/name
|
||||
|
||||
/datum/mutation/New()
|
||||
|
||||
mutations_list[name] = src
|
||||
|
||||
/datum/mutation/human
|
||||
|
||||
var/dna_block
|
||||
var/quality
|
||||
var/get_chance = 100
|
||||
var/lowest_value = 256 * 8
|
||||
var/text_indication = ""
|
||||
var/list/visual_indicators = list()
|
||||
|
||||
/datum/mutation/human/proc/force_give(mob/living/carbon/human/owner)
|
||||
set_block(owner)
|
||||
on_acquiring(owner)
|
||||
|
||||
/datum/mutation/human/proc/set_se(se_string)
|
||||
if(!se_string || lentext(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE) return
|
||||
var/before = copytext(se_string, 1, (dna_block * DNA_BLOCK_SIZE) + 1)
|
||||
var/injection = num2hex(lowest_value + rand(1, 256 * 6))
|
||||
var/after = copytext(se_string, (dna_block * DNA_BLOCK_SIZE) + DNA_BLOCK_SIZE + 1)
|
||||
return before + injection + after
|
||||
|
||||
/datum/mutation/human/proc/set_block(mob/living/carbon/human/owner)
|
||||
owner.dna.struc_enzymes = set_se(owner.dna.struc_enzymes)
|
||||
|
||||
/datum/mutation/human/proc/check_block_string(se_string)
|
||||
if(!se_string || lentext(se_string) < DNA_STRUC_ENZYMES_BLOCKS * DNA_BLOCK_SIZE) return 0
|
||||
if(hex2num(getblock(se_string, dna_block)) >= lowest_value)
|
||||
return 1
|
||||
|
||||
/datum/mutation/human/proc/check_block(mob/living/carbon/human/owner)
|
||||
if(check_block_string(owner.dna.struc_enzymes))
|
||||
if(prob(get_chance))
|
||||
. = on_acquiring(owner)
|
||||
else
|
||||
. = on_losing(owner)
|
||||
|
||||
/datum/mutation/human/proc/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(src in owner.dna.mutations)
|
||||
return 1
|
||||
owner.dna.mutations.Add(src)
|
||||
gain_indication(owner)
|
||||
owner << text_indication
|
||||
|
||||
/datum/mutation/human/proc/gain_indication(mob/living/carbon/human/owner)
|
||||
owner.overlays.Add(visual_indicators)
|
||||
/*
|
||||
var/list/result_overlays = list()
|
||||
var/list/limbs = owner_get_limbs(NON_MECHANICAL|NON_AMPUTATED) //I dunno how its done by RR but i assume something like this, proc that returns the list of limbs based on what types of limbs to return in argument
|
||||
for(var/obj/limb/L in limbs)
|
||||
result_overlays[L.identificator] = visual_indicators[L.identificator] //visual_indicators is where overlays icons are stored, they are all created on new of each mutation, i assume you will change it to linked list for easyness, but for now its just a list
|
||||
return owner.redraw_overlays(result_overlays, MUTATION_LAYER) //Currently mutations draw the overlays themselves but i assume if dismemberment will be overriding lots of shit like maybe clothes or something else mutations will just pass the shit to redraw proc
|
||||
*/
|
||||
/datum/mutation/human/proc/lose_indication(mob/living/carbon/human/owner)
|
||||
owner.overlays.Remove(visual_indicators)
|
||||
|
||||
/datum/mutation/human/proc/on_attack_hand(mob/living/carbon/human/owner, atom/target)
|
||||
return
|
||||
|
||||
/datum/mutation/human/proc/on_ranged_attack(mob/living/carbon/human/owner, atom/target)
|
||||
return
|
||||
|
||||
/datum/mutation/human/proc/on_life(mob/living/carbon/human/owner)
|
||||
return
|
||||
|
||||
/datum/mutation/human/proc/on_losing(mob/living/carbon/human/owner)
|
||||
if(owner.dna.mutations.Remove(src))
|
||||
lose_indication(owner)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/datum/mutation/human/hulk
|
||||
|
||||
name = "Hulk"
|
||||
quality = POSITIVE
|
||||
get_chance = 5
|
||||
lowest_value = 256 * 14
|
||||
text_indication = "<span class='notice'>Your muscles hurt!</span>"
|
||||
|
||||
/datum/mutation/human/hulk/New()
|
||||
..()
|
||||
visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="hulk_f_s", "layer"=-MUTATIONS_LAYER)
|
||||
visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="hulk_m_s", "layer"=-MUTATIONS_LAYER)
|
||||
|
||||
/datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
var/status = CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH
|
||||
owner.status_flags &= ~status
|
||||
|
||||
/datum/mutation/human/hulk/on_attack_hand(mob/living/carbon/human/owner, atom/target)
|
||||
return target.attack_hulk(owner)
|
||||
|
||||
/datum/mutation/human/hulk/gain_indication(mob/living/carbon/human/owner)
|
||||
var/g = (owner.gender == FEMALE) ? 1 : 2
|
||||
owner.overlays += visual_indicators[g]
|
||||
|
||||
/datum/mutation/human/hulk/on_life(mob/living/carbon/human/owner)
|
||||
if(owner.health < 25)
|
||||
on_losing(owner)
|
||||
owner << "<span class='danger'>You suddenly feel very weak.</span>"
|
||||
owner.Weaken(3)
|
||||
owner.emote("collapse")
|
||||
|
||||
/datum/mutation/human/hulk/on_losing(mob/living/carbon/human/owner)
|
||||
..()
|
||||
owner.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH
|
||||
|
||||
/datum/mutation/human/telekinesis
|
||||
|
||||
name = "Telekinesis"
|
||||
quality = POSITIVE
|
||||
get_chance = 10
|
||||
lowest_value = 256 * 14
|
||||
text_indication = "<span class='notice'>You feel smarter!</span>"
|
||||
|
||||
/datum/mutation/human/telekinesis/New()
|
||||
..()
|
||||
visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead_s", "layer"=-MUTATIONS_LAYER)
|
||||
|
||||
/datum/mutation/human/telekinesis/on_ranged_attack(mob/living/carbon/human/owner, atom/target)
|
||||
target.attack_tk(owner)
|
||||
|
||||
/datum/mutation/human/cold_resistance
|
||||
|
||||
name = "Cold Resistance"
|
||||
quality = POSITIVE
|
||||
get_chance = 10
|
||||
lowest_value = 256 * 12
|
||||
text_indication = "<span class='notice'>Your body feels warm!</span>"
|
||||
|
||||
/datum/mutation/human/cold_resistance/New()
|
||||
..()
|
||||
visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="fire_s", "layer"=-MUTATIONS_LAYER)
|
||||
|
||||
/datum/mutation/human/cold_resistance/on_life(mob/living/carbon/human/owner)
|
||||
if(owner.getFireLoss())
|
||||
if(prob(1))
|
||||
owner.heal_organ_damage(0,1) //Is this really needed?
|
||||
|
||||
/datum/mutation/human/x_ray
|
||||
|
||||
name = "X Ray Vision"
|
||||
quality = POSITIVE
|
||||
get_chance = 10
|
||||
lowest_value = 256 * 15
|
||||
text_indication = "<span class='notice'>The walls suddenly disappear!</span>"
|
||||
|
||||
/datum/mutation/human/x_ray/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
on_life(owner)
|
||||
|
||||
/datum/mutation/human/x_ray/on_life(mob/living/carbon/human/owner)
|
||||
owner.sight |= SEE_MOBS|SEE_OBJS|SEE_TURFS
|
||||
owner.see_in_dark = 8
|
||||
owner.see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
|
||||
/datum/mutation/human/x_ray/on_losing(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
owner.see_in_dark = initial(owner.see_in_dark)
|
||||
owner.see_invisible = initial(owner.see_invisible)
|
||||
owner.sight = initial(owner.sight)
|
||||
|
||||
/datum/mutation/human/nearsight
|
||||
|
||||
name = "Near Sightness"
|
||||
quality = MINOR_NEGATIVE
|
||||
text_indication = "<span class='danger'>You can't see very well.</span>"
|
||||
|
||||
/datum/mutation/human/nearsight/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
owner.disabilities |= NEARSIGHT
|
||||
|
||||
/datum/mutation/human/nearsight/on_losing(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
owner.disabilities &= ~NEARSIGHT
|
||||
|
||||
/datum/mutation/human/epilepsy
|
||||
|
||||
name = "Epilepsy"
|
||||
quality = NEGATIVE
|
||||
text_indication = "<span class='danger'>You get a headache.</span>"
|
||||
|
||||
/datum/mutation/human/epilepsy/on_life(mob/living/carbon/human/owner)
|
||||
if ((prob(1) && owner.paralysis < 1))
|
||||
owner << "<span class='danger'>You have a seizure!</span>"
|
||||
for(var/mob/O in viewers(owner, null) - owner)
|
||||
O.show_message(text("<span class='userdanger'>[src] starts having a seizure!</span>"), 1)
|
||||
owner.Paralyse(10)
|
||||
owner.Jitter(1000)
|
||||
|
||||
/datum/mutation/human/bad_dna
|
||||
|
||||
name = "Unstable DNA"
|
||||
quality = NEGATIVE
|
||||
text_indication = "<span class='danger'>You feel strange.</span>"
|
||||
|
||||
/datum/mutation/human/bad_dna/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(prob(95))
|
||||
if(prob(50))
|
||||
randmutb(owner)
|
||||
else
|
||||
randmuti(owner)
|
||||
else
|
||||
randmutg(owner)
|
||||
on_losing(owner)
|
||||
|
||||
/datum/mutation/human/cough
|
||||
|
||||
name = "Cough"
|
||||
quality = MINOR_NEGATIVE
|
||||
text_indication = "<span class='danger'>You start coughing.</span>"
|
||||
|
||||
/datum/mutation/human/cough/on_life(mob/living/carbon/human/owner)
|
||||
if((prob(5) && owner.paralysis <= 1))
|
||||
owner.drop_item()
|
||||
owner.emote("cough")
|
||||
|
||||
/datum/mutation/human/clumsy
|
||||
|
||||
name = "Clumsiness"
|
||||
quality = MINOR_NEGATIVE
|
||||
text_indication = "<span class='danger'>You feel lightheaded.</span>"
|
||||
|
||||
/datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
owner.disabilities |= CLUMSY
|
||||
|
||||
/datum/mutation/human/clumsy/on_losing(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
owner.disabilities &= ~CLUMSY
|
||||
|
||||
/datum/mutation/human/tourettes
|
||||
|
||||
name = "Tourettes Syndrome"
|
||||
quality = NEGATIVE
|
||||
text_indication = "<span class='danger'>You twitch.</span>"
|
||||
|
||||
/datum/mutation/human/tourettes/on_life(mob/living/carbon/human/owner)
|
||||
if((prob(10) && owner.paralysis <= 1))
|
||||
owner.Stun(10)
|
||||
switch(rand(1, 3))
|
||||
if(1)
|
||||
owner.emote("twitch")
|
||||
if(2 to 3)
|
||||
owner.say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]")
|
||||
var/x_offset_old = owner.pixel_x
|
||||
var/y_offset_old = owner.pixel_y
|
||||
var/x_offset = owner.pixel_x + rand(-2,2)
|
||||
var/y_offset = owner.pixel_y + rand(-1,1)
|
||||
animate(owner, pixel_x = x_offset, pixel_y = y_offset, time = 1)
|
||||
animate(owner, pixel_x = x_offset_old, pixel_y = y_offset_old, time = 1)
|
||||
|
||||
/datum/mutation/human/nervousness
|
||||
|
||||
name = "Nervousness"
|
||||
quality = MINOR_NEGATIVE
|
||||
text_indication = "<span class='danger'>You feel nervous.</span>"
|
||||
|
||||
/datum/mutation/human/nervousness/on_life(mob/living/carbon/human/owner)
|
||||
if(prob(10))
|
||||
owner.stuttering = max(10, owner.stuttering)
|
||||
|
||||
/datum/mutation/human/deaf
|
||||
|
||||
name = "Deafness"
|
||||
quality = NEGATIVE
|
||||
text_indication = "<span class='danger'>You can't seem to hear anything.</span>"
|
||||
|
||||
/datum/mutation/human/deaf/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
owner.disabilities |= DEAF
|
||||
|
||||
/datum/mutation/human/deaf/on_losing(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
owner.disabilities &= ~DEAF
|
||||
|
||||
/datum/mutation/human/blind
|
||||
|
||||
name = "Blindness"
|
||||
quality = NEGATIVE
|
||||
text_indication = "<span class='danger'>You can't seem to see anything.</span>"
|
||||
|
||||
/datum/mutation/human/blind/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
owner.disabilities |= BLIND
|
||||
|
||||
/datum/mutation/human/blind/on_losing(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
owner.disabilities &= ~BLIND
|
||||
|
||||
/datum/mutation/human/race
|
||||
|
||||
name = "Monkified"
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/mutation/human/race/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..()) return
|
||||
. = owner.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE)
|
||||
|
||||
/datum/mutation/human/race/gain_indication(mob/living/carbon/human/owner)
|
||||
return
|
||||
|
||||
/datum/mutation/human/race/lose_indication(mob/living/carbon/monkey/owner)
|
||||
return
|
||||
|
||||
/datum/mutation/human/race/on_losing(mob/living/carbon/monkey/owner)
|
||||
if(..()) return
|
||||
. = owner.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE)
|
||||
|
||||
/datum/mutation/human/laser_eyes
|
||||
|
||||
name = "Laser Eyes"
|
||||
quality = POSITIVE
|
||||
dna_block = NON_SCANNABLE
|
||||
text_indication = "<span class='notice'>You feel pressure building up behind your eyes.</span>"
|
||||
|
||||
/datum/mutation/human/laser_eyes/on_ranged_attack(mob/living/carbon/human/owner, atom/target)
|
||||
if(owner.a_intent == "harm")
|
||||
owner.LaserEyes(target)
|
||||
@@ -17,14 +17,14 @@
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/genetic/cast(list/targets)
|
||||
|
||||
for(var/mob/living/target in targets)
|
||||
target.mutations.Add(mutations)
|
||||
for(var/mob/living/carbon/target in targets)
|
||||
for(var/A in mutations)
|
||||
target.dna.add_mutation(A)
|
||||
target.disabilities |= disabilities
|
||||
target.update_mutations() //update target's mutation overlays
|
||||
spawn(duration)
|
||||
if(target && !target.gc_destroyed)
|
||||
target.mutations.Remove(mutations)
|
||||
for(var/A in mutations)
|
||||
target.dna.remove_mutation(A)
|
||||
target.disabilities &= ~disabilities
|
||||
target.update_mutations()
|
||||
|
||||
return
|
||||
@@ -42,7 +42,7 @@
|
||||
include_user = 1
|
||||
centcom_cancast = 0
|
||||
|
||||
mutations = list(LASER, HULK)
|
||||
mutations = list(LASEREYES, HULK)
|
||||
duration = 300
|
||||
cooldown_min = 300 //25 deciseconds reduction per rank
|
||||
|
||||
|
||||
@@ -582,6 +582,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/brainrot,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/hullucigen_virion,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/anxiety,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/beesease,
|
||||
/obj/item/weapon/storage/box/syringes,
|
||||
/obj/item/weapon/storage/box/beakers,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/mutagen)
|
||||
|
||||
+8
-1
@@ -41,6 +41,13 @@
|
||||
var/mob/living/M = src
|
||||
M.take_organ_damage(20)
|
||||
|
||||
/atom/proc/attack_hulk(mob/living/carbon/human/hulk, do_attack_animation = 0)
|
||||
if(do_attack_animation)
|
||||
hulk.changeNext_move(CLICK_CD_MELEE)
|
||||
add_logs(hulk, src, "punched", "hulk powers", admin=0)
|
||||
hulk.do_attack_animation(src)
|
||||
return
|
||||
|
||||
/atom/proc/CheckParts()
|
||||
return
|
||||
|
||||
@@ -398,4 +405,4 @@ var/list/blood_splatter_icons = list()
|
||||
return
|
||||
|
||||
/atom/proc/narsie_act()
|
||||
return
|
||||
return
|
||||
|
||||
+52
-99
@@ -23,6 +23,28 @@
|
||||
var/datum/species/species = new /datum/species/human() //The type of mutant race the player is if applicable (i.e. potato-man)
|
||||
var/mutant_color = "FFF" // What color you are if you have certain speciess
|
||||
var/real_name //Stores the real name of the person who originally got this dna datum. Used primarely for changelings,
|
||||
var/list/mutations = list() //All mutations are from now on here
|
||||
var/mob/living/carbon/holder
|
||||
|
||||
/datum/dna/New(mob/living/carbon/new_holder)
|
||||
if(new_holder && istype(new_holder))
|
||||
holder = new_holder
|
||||
|
||||
/datum/dna/proc/add_mutation(mutation_name)
|
||||
var/datum/mutation/human/HM = mutations_list[mutation_name]
|
||||
HM.on_acquiring(holder)
|
||||
|
||||
/datum/dna/proc/remove_mutation(mutation_name)
|
||||
var/datum/mutation/human/HM = mutations_list[mutation_name]
|
||||
HM.on_losing(holder)
|
||||
|
||||
/datum/dna/proc/check_mutation(mutation_name)
|
||||
var/datum/mutation/human/HM = mutations_list[mutation_name]
|
||||
return mutations.Find(HM)
|
||||
|
||||
/datum/dna/proc/remove_all_mutations()
|
||||
for(var/datum/mutation/human/HM in mutations)
|
||||
HM.on_losing(holder)
|
||||
|
||||
/datum/dna/proc/generate_uni_identity(mob/living/carbon/character)
|
||||
. = ""
|
||||
@@ -51,13 +73,19 @@
|
||||
|
||||
/datum/dna/proc/generate_struc_enzymes(mob/living/carbon/character)
|
||||
var/list/L = list("0","1","2","3","4","5","6")
|
||||
. = ""
|
||||
for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++)
|
||||
if(i == RACEBLOCK)
|
||||
. += construct_block(istype(character,/mob/living/carbon/monkey)+1, 2)
|
||||
var/list/sorting = list()
|
||||
sorting.len = 14
|
||||
var/result
|
||||
for(var/datum/mutation/human/A in good_mutations + bad_mutations + not_good_mutations)
|
||||
if(A.name == RACEMUT && istype(character,/mob/living/carbon/monkey))
|
||||
sorting[A.dna_block] = num2hex(A.lowest_value + rand(0, 256 * 6), DNA_BLOCK_SIZE)
|
||||
character.dna.mutations.Add(mutations_list[RACEMUT])
|
||||
else
|
||||
. += random_string(DNA_BLOCK_SIZE, L)
|
||||
return .
|
||||
sorting[A.dna_block] = random_string(DNA_BLOCK_SIZE, L)
|
||||
|
||||
for(var/B in sorting)
|
||||
result += B
|
||||
return result
|
||||
|
||||
/datum/dna/proc/generate_unique_enzymes(mob/living/carbon/character)
|
||||
. = ""
|
||||
@@ -130,7 +158,7 @@
|
||||
return character.dna
|
||||
|
||||
/proc/create_dna(mob/living/carbon/C, datum/species/S) //don't use this unless you're about to use hardset_dna or ready_dna
|
||||
C.dna = new /datum/dna()
|
||||
C.dna = new /datum/dna(C)
|
||||
if(S) C.dna.species = new S() // do not remove; this is here to prevent runtimes
|
||||
|
||||
/////////////////////////// DNA DATUM
|
||||
@@ -171,9 +199,13 @@
|
||||
return
|
||||
|
||||
/proc/randmutb(mob/living/carbon/M)
|
||||
var/datum/mutation/human/HM = pick(bad_mutations | not_good_mutations)
|
||||
HM.on_acquiring(M)
|
||||
return randmut(M, bad_se_blocks)
|
||||
|
||||
/proc/randmutg(mob/living/carbon/M)
|
||||
var/datum/mutation/human/HM = pick(good_mutations)
|
||||
HM.on_acquiring(M)
|
||||
return randmut(M, good_se_blocks | op_se_blocks)
|
||||
|
||||
/proc/randmuti(mob/living/carbon/M)
|
||||
@@ -233,99 +265,15 @@
|
||||
if(!check_dna_integrity(M))
|
||||
return 0
|
||||
|
||||
M.disabilities = 0
|
||||
M.sdisabilities = 0
|
||||
M.mutations.Cut()
|
||||
var/mob/living/carbon/C = M
|
||||
var/mob/living/carbon/temp
|
||||
|
||||
M.see_in_dark = initial(M.see_in_dark)
|
||||
M.see_invisible = initial(M.see_invisible)
|
||||
for(var/A in mutations_list)
|
||||
var/datum/mutation/human/HM = mutations_list[A]
|
||||
temp = HM.check_block(C)
|
||||
if(ismob(temp))
|
||||
C = temp
|
||||
|
||||
var/list/blocks = new /list(DNA_STRUC_ENZYMES_BLOCKS) //on-off status for each block
|
||||
for(var/i in bad_se_blocks) //bad mutations
|
||||
blocks[i] = (deconstruct_block(getblock(M.dna.struc_enzymes, i), BAD_MUTATION_DIFFICULTY) == BAD_MUTATION_DIFFICULTY)
|
||||
blocks[RACEBLOCK] = (deconstruct_block(getblock(M.dna.struc_enzymes, RACEBLOCK), BAD_MUTATION_DIFFICULTY) == BAD_MUTATION_DIFFICULTY)
|
||||
for(var/i in good_se_blocks) //good mutations
|
||||
blocks[i] = (deconstruct_block(getblock(M.dna.struc_enzymes, i), GOOD_MUTATION_DIFFICULTY) == GOOD_MUTATION_DIFFICULTY)
|
||||
for(var/i in op_se_blocks) //Overpowered mutations...extra difficult to obtain
|
||||
blocks[i] = (deconstruct_block(getblock(M.dna.struc_enzymes, i), OP_MUTATION_DIFFICULTY) == OP_MUTATION_DIFFICULTY)
|
||||
|
||||
if(blocks[NEARSIGHTEDBLOCK])
|
||||
M.disabilities |= NEARSIGHTED
|
||||
M << "<span class='danger'>Your eyes feel strange.</span>"
|
||||
if(blocks[EPILEPSYBLOCK])
|
||||
M.disabilities |= EPILEPSY
|
||||
M << "<span class='danger'>You get a headache.</span>"
|
||||
if(blocks[STRANGEBLOCK])
|
||||
M << "<span class='danger'>You feel strange.</span>"
|
||||
if(prob(95))
|
||||
if(prob(50)) randmutb(M)
|
||||
else randmuti(M)
|
||||
else randmutg(M)
|
||||
if(blocks[COUGHBLOCK])
|
||||
M.disabilities |= COUGHING
|
||||
M << "<span class='danger'>You start coughing.</span>"
|
||||
if(blocks[CLUMSYBLOCK])
|
||||
M << "<span class='danger'>You feel lightheaded.</span>"
|
||||
M.mutations |= CLUMSY
|
||||
if(blocks[TOURETTESBLOCK])
|
||||
M.disabilities |= TOURETTES
|
||||
M << "<span class='danger'>You twitch.</span>"
|
||||
if(blocks[NERVOUSBLOCK])
|
||||
M.disabilities |= NERVOUS
|
||||
M << "<span class='danger'>You feel nervous.</span>"
|
||||
if(blocks[DEAFBLOCK])
|
||||
M.sdisabilities |= DEAF
|
||||
M.ear_deaf = 1
|
||||
M << "<span class='danger'>You can't seem to hear anything.</span>"
|
||||
if(blocks[BLINDBLOCK])
|
||||
M.sdisabilities |= BLIND
|
||||
M << "<span class='danger'>You can't seem to see anything.</span>"
|
||||
if(blocks[HULKBLOCK])
|
||||
if(inj || prob(10))
|
||||
M.mutations |= HULK
|
||||
M << "<span class='notice'>Your muscles hurt.</span>"
|
||||
if(blocks[XRAYBLOCK])
|
||||
if(inj || prob(30))
|
||||
M.mutations |= XRAY
|
||||
M << "<span class='notice'>The walls suddenly disappear.</span>"
|
||||
M.sight |= SEE_MOBS|SEE_OBJS|SEE_TURFS
|
||||
M.see_in_dark = 8
|
||||
M.see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
if(blocks[FIREBLOCK])
|
||||
if(inj || prob(30))
|
||||
M.mutations |= COLD_RESISTANCE
|
||||
M << "<span class='notice'>Your body feels warm.</span>"
|
||||
if(blocks[TELEBLOCK])
|
||||
if(inj || prob(25))
|
||||
M.mutations |= TK
|
||||
M << "<span class='notice'>You feel smarter.</span>"
|
||||
|
||||
|
||||
/* If you want the new mutations to work, UNCOMMENT THIS.
|
||||
if(istype(M, /mob/living/carbon))
|
||||
for (var/datum/mutations/mut in global_mutations)
|
||||
mut.check_mutation(M)
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////// Monkey Block
|
||||
if(blocks[RACEBLOCK])
|
||||
if(istype(M, /mob/living/carbon/human)) // human > monkey
|
||||
var/mob/living/carbon/monkey/O = M.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS)
|
||||
if(connected) //inside dna thing
|
||||
var/obj/machinery/dna_scannernew/C = connected
|
||||
O.loc = C
|
||||
C.occupant = O
|
||||
connected = null
|
||||
return 1
|
||||
else
|
||||
if(istype(M, /mob/living/carbon/monkey)) // monkey > human,
|
||||
var/mob/living/carbon/human/O = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS)
|
||||
if(O && connected) //inside dna thing
|
||||
var/obj/machinery/dna_scannernew/C = connected
|
||||
O.loc = C
|
||||
C.occupant = O
|
||||
connected = null
|
||||
return 1
|
||||
//////////////////////////////////////////////////////////// Monkey Block
|
||||
if(M)
|
||||
M.update_icon = 1 //queue a full icon update at next life() call
|
||||
@@ -865,7 +813,12 @@
|
||||
if("se")
|
||||
if(buffer_slot["SE"])
|
||||
I = new /obj/item/weapon/dnainjector(loc)
|
||||
I.fields = list("SE"=buffer_slot["SE"])
|
||||
for(var/datum/mutation/human/HM in good_mutations + bad_mutations + not_good_mutations)
|
||||
if(HM.check_block_string(buffer_slot["SE"]))
|
||||
if(prob(HM.get_chance))
|
||||
I.add_mutations.Add(HM)
|
||||
else
|
||||
I.remove_mutations.Add(HM)
|
||||
I.damage_coeff = connected.damage_coeff
|
||||
if("ui")
|
||||
if(buffer_slot["UI"])
|
||||
|
||||
@@ -157,9 +157,10 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
changeling.current << "<b>You must complete the following tasks:</b>"
|
||||
|
||||
if (changeling.current.mind)
|
||||
if (changeling.current.mind.assigned_role == "Clown")
|
||||
changeling.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself."
|
||||
changeling.current.mutations.Remove(CLUMSY)
|
||||
var/mob/living/carbon/human/H = changeling.current
|
||||
if(H.mind.assigned_role == "Clown")
|
||||
H << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself."
|
||||
H.dna.remove_mutation(CLOWNMUT)
|
||||
|
||||
var/obj_count = 1
|
||||
for(var/datum/objective/objective in changeling.objectives)
|
||||
@@ -285,7 +286,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
return
|
||||
if(!target)
|
||||
return
|
||||
if((NOCLONE in target.mutations) || (HUSK in target.mutations))
|
||||
if((target.disabilities & NOCLONE) || (target.disabilities & HUSK))
|
||||
user << "<span class='warning'>DNA of [target] is ruined beyond usability!</span>"
|
||||
return
|
||||
if(!ishuman(target))//Absorbing monkeys is entirely possible, but it can cause issues with transforming. That's what lesser form is for anyway!
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
/obj/effect/proc_holder/changeling/sting/transformation/can_sting(var/mob/user, var/mob/target)
|
||||
if(!..())
|
||||
return
|
||||
if((HUSK in target.mutations) || !check_dna_integrity(target))
|
||||
if((target.disabilities & HUSK) || !check_dna_integrity(target))
|
||||
user << "<span class='warning'>Our sting appears ineffective against its DNA.</span>"
|
||||
return 0
|
||||
return 1
|
||||
@@ -140,7 +140,7 @@ obj/effect/proc_holder/changeling/sting/blind
|
||||
/obj/effect/proc_holder/changeling/sting/blind/sting_action(var/mob/user, var/mob/target)
|
||||
add_logs(user, target, "stung", object="blind sting")
|
||||
target << "<span class='danger'>Your eyes burn horrifically!</span>"
|
||||
target.disabilities |= NEARSIGHTED
|
||||
target.disabilities |= NEARSIGHT
|
||||
target.eye_blind = 20
|
||||
target.eye_blurry = 40
|
||||
feedback_add_details("changeling_powers","BS")
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
if (mob.mind)
|
||||
if (mob.mind.assigned_role == "Clown")
|
||||
mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
|
||||
mob.mutations.Remove(CLUMSY)
|
||||
mob.dna.remove_mutation(CLOWNMUT)
|
||||
|
||||
|
||||
var/obj/item/weapon/paper/talisman/supply/T = new(mob)
|
||||
|
||||
@@ -886,8 +886,8 @@ var/list/sacrificed = list()
|
||||
C.ear_deaf += 50
|
||||
C.show_message("<span class='danger'>The world around you suddenly becomes quiet.</span>", 3)
|
||||
affected++
|
||||
if(prob(1))
|
||||
C.sdisabilities |= DEAF
|
||||
if(prob(1) && ishuman(C))
|
||||
C.dna.add_mutation(DEAFMUT)
|
||||
if(affected)
|
||||
usr.say("Sti[pick("'","`")] kaliedir!")
|
||||
usr << "<span class='danger'>The world becomes quiet as the deafening rune dissipates into fine dust.</span>"
|
||||
@@ -926,9 +926,9 @@ var/list/sacrificed = list()
|
||||
C.eye_blurry += 50
|
||||
C.eye_blind += 20
|
||||
if(prob(5))
|
||||
C.disabilities |= NEARSIGHTED
|
||||
C.disabilities |= NEARSIGHT
|
||||
if(prob(10))
|
||||
C.sdisabilities |= BLIND
|
||||
C.disabilities |= BLIND
|
||||
C.show_message("<span class='danger'>Suddenly you see red flash that blinds you.</span>", 3)
|
||||
affected++
|
||||
if(affected)
|
||||
@@ -1030,8 +1030,7 @@ var/list/sacrificed = list()
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
flick("e_flash", C.flash)
|
||||
if(C.stuttering < 1 && (!(HULK in C.mutations)))
|
||||
C.stuttering = 1
|
||||
C.stuttering = 1
|
||||
C.Weaken(1)
|
||||
C.Stun(1)
|
||||
C.show_message("<span class='danger'>The rune explodes in a bright flash.</span>", 3)
|
||||
@@ -1057,10 +1056,9 @@ var/list/sacrificed = list()
|
||||
else if(iscarbon(T))
|
||||
var/mob/living/carbon/C = T
|
||||
flick("e_flash", C.flash)
|
||||
if (!(HULK in C.mutations))
|
||||
C.silent += 15
|
||||
C.Weaken(10)
|
||||
C.Stun(10)
|
||||
C.silent += 15
|
||||
C.Weaken(10)
|
||||
C.Stun(10)
|
||||
return
|
||||
|
||||
/////////////////////////////////////////TWENTY-FIFTH RUNE
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
if (mob.mind)
|
||||
if (mob.mind.assigned_role == "Clown")
|
||||
mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
|
||||
mob.mutations.Remove(CLUMSY)
|
||||
mob.dna.remove_mutation(CLOWNMUT)
|
||||
|
||||
|
||||
var/obj/item/device/flash/T = new(mob)
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
if (mob.mind)
|
||||
if (mob.mind.assigned_role == "Clown")
|
||||
mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
|
||||
mob.mutations.Remove(CLUMSY)
|
||||
mob.dna.remove_mutation(CLOWNMUT)
|
||||
|
||||
|
||||
var/obj/item/device/flash/T = new(mob)
|
||||
|
||||
@@ -3,50 +3,16 @@
|
||||
for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++)
|
||||
avnums[i] = i
|
||||
|
||||
HULKBLOCK = pick_n_take(avnums)
|
||||
TELEBLOCK = pick_n_take(avnums)
|
||||
|
||||
FIREBLOCK = pick_n_take(avnums)
|
||||
XRAYBLOCK = pick_n_take(avnums)
|
||||
|
||||
CLUMSYBLOCK = pick_n_take(avnums)
|
||||
STRANGEBLOCK = pick_n_take(avnums)
|
||||
DEAFBLOCK = pick_n_take(avnums)
|
||||
BLINDBLOCK = pick_n_take(avnums)
|
||||
NEARSIGHTEDBLOCK = pick_n_take(avnums)
|
||||
EPILEPSYBLOCK = pick_n_take(avnums)
|
||||
COUGHBLOCK = pick_n_take(avnums)
|
||||
TOURETTESBLOCK = pick_n_take(avnums)
|
||||
NERVOUSBLOCK = pick_n_take(avnums)
|
||||
RACEBLOCK = pick_n_take(avnums)
|
||||
|
||||
bad_se_blocks = list(NEARSIGHTEDBLOCK,EPILEPSYBLOCK,STRANGEBLOCK,COUGHBLOCK,CLUMSYBLOCK,TOURETTESBLOCK,NERVOUSBLOCK,DEAFBLOCK,BLINDBLOCK)
|
||||
good_se_blocks = list(FIREBLOCK,XRAYBLOCK)
|
||||
op_se_blocks = list(HULKBLOCK,TELEBLOCK)
|
||||
|
||||
NULLED_SE = repeat_string(DNA_STRUC_ENZYMES_BLOCKS, repeat_string(DNA_BLOCK_SIZE, "_"))
|
||||
NULLED_UI = repeat_string(DNA_UNI_IDENTITY_BLOCKS, repeat_string(DNA_BLOCK_SIZE, "_"))
|
||||
// HIDDEN MUTATIONS / SUPERPOWERS INITIALIZTION
|
||||
|
||||
/*
|
||||
for(var/x in typesof(/datum/mutations) - /datum/mutations)
|
||||
var/datum/mutations/mut = new x
|
||||
|
||||
for(var/i = 1, i <= mut.required, i++)
|
||||
var/datum/mutationreq/require = new/datum/mutationreq
|
||||
require.block = rand(1, 13)
|
||||
require.subblock = rand(1, 3)
|
||||
|
||||
// Create random requirement identification
|
||||
require.reqID = pick("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", \
|
||||
"B", "C", "D", "E", "F")
|
||||
|
||||
mut.requirements += require
|
||||
|
||||
|
||||
global_mutations += mut// add to global mutations list!
|
||||
*/
|
||||
|
||||
for(var/A in typesof(/datum/mutation/human) - /datum/mutation/human)
|
||||
var/datum/mutation/human/B = new A()
|
||||
if(B.dna_block == NON_SCANNABLE) return
|
||||
B.dna_block = pick_n_take(avnums)
|
||||
if(B.quality == POSITIVE)
|
||||
good_mutations |= B
|
||||
else if(B.quality == NEGATIVE)
|
||||
bad_mutations |= B
|
||||
else if(B.quality == MINOR_NEGATIVE)
|
||||
not_good_mutations |= B
|
||||
|
||||
/datum/subsystem/ticker/proc/setupFactions()
|
||||
// Populate the factions list:
|
||||
|
||||
@@ -266,7 +266,7 @@
|
||||
if (traitor_mob.mind)
|
||||
if (traitor_mob.mind.assigned_role == "Clown")
|
||||
traitor_mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
|
||||
traitor_mob.mutations.Remove(CLUMSY)
|
||||
traitor_mob.dna.remove_mutation(CLOWNMUT)
|
||||
|
||||
// find a radio! toolbox(es), backpack, belt, headset
|
||||
var/loc = ""
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
/datum/game_mode/wizard/raginmages
|
||||
name = "ragin' mages"
|
||||
config_tag = "raginmages"
|
||||
required_players = 20
|
||||
var/max_mages = 0
|
||||
var/making_mage = 0
|
||||
var/mages_made = 1
|
||||
var/time_checked = 0
|
||||
|
||||
/datum/game_mode/wizard/announce()
|
||||
world << "<B>The current game mode is - Ragin' Mages!</B>"
|
||||
world << "<B>The <span class='warning'>Space Wizard Federation</span> is pissed, help defeat all the space wizards!</B>"
|
||||
|
||||
/datum/game_mode/wizard/raginmages/post_setup()
|
||||
var/playercount = 0
|
||||
..()
|
||||
if(!max_mages)
|
||||
for(var/mob/living/player in mob_list)
|
||||
if (player.client && player.stat != 2)
|
||||
playercount += 1
|
||||
max_mages = round(playercount / 2)
|
||||
|
||||
/datum/game_mode/wizard/raginmages/greet_wizard(var/datum/mind/wizard, var/you_are=1)
|
||||
if (you_are)
|
||||
wizard.current << "<B>You are the Space Wizard!</B>"
|
||||
wizard.current << "<B>The Space Wizards Federation has given you the following tasks:</B>"
|
||||
|
||||
var/obj_count = 1
|
||||
wizard.current << "<b>Objective Alpha</b>: Make sure the station pays for its actions against our diplomats"
|
||||
for(var/datum/objective/objective in wizard.objectives)
|
||||
wizard.current << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
return
|
||||
|
||||
/datum/game_mode/wizard/raginmages/check_finished()
|
||||
var/wizards_alive = 0
|
||||
for(var/datum/mind/wizard in wizards)
|
||||
if(!istype(wizard.current,/mob/living/carbon))
|
||||
continue
|
||||
if(istype(wizard.current,/mob/living/carbon/brain))
|
||||
continue
|
||||
if(wizard.current.stat==2)
|
||||
continue
|
||||
if(wizard.current.stat==1)
|
||||
if(wizard.current.health < 0)
|
||||
wizard.current << "<font size='4'>The Space Wizard Federation is upset with your performance and have terminated your employment.</font>"
|
||||
wizard.current.stat = 2
|
||||
continue
|
||||
wizards_alive++
|
||||
|
||||
if (wizards_alive)
|
||||
if(!time_checked) time_checked = world.time
|
||||
if(world.time > time_checked + 500 && (mages_made < max_mages))
|
||||
time_checked = world.time
|
||||
make_more_mages()
|
||||
else
|
||||
if(wizards.len >= max_mages)
|
||||
finished = 1
|
||||
return 1
|
||||
else
|
||||
make_more_mages()
|
||||
return ..()
|
||||
|
||||
/datum/game_mode/wizard/raginmages/proc/make_more_mages()
|
||||
|
||||
if(making_mage)
|
||||
return 0
|
||||
if(mages_made >= max_mages)
|
||||
return 0
|
||||
making_mage = 1
|
||||
mages_made++
|
||||
var/list/mob/dead/observer/candidates = list()
|
||||
var/mob/dead/observer/theghost = null
|
||||
spawn(rand(100, 200))
|
||||
message_admins("SWF is still pissed, sending another wizard - [max_mages - mages_made] left.")
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
if(G.client && !G.client.holder && !G.client.is_afk() && G.client.prefs.be_special & BE_WIZARD)
|
||||
if(!jobban_isbanned(G, "wizard") && !jobban_isbanned(G, "Syndicate"))
|
||||
candidates += G
|
||||
if(!candidates.len)
|
||||
message_admins("No applicable ghosts for the next ragin' mage, asking ghosts instead.")
|
||||
var/time_passed = world.time
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
if(!jobban_isbanned(G, "wizard") && !jobban_isbanned(G, "Syndicate"))
|
||||
spawn(0)
|
||||
switch(alert(G, "Do you wish to be considered for the position of Space Wizard Foundation 'diplomat'?","Please answer in 30 seconds!","Yes","No"))
|
||||
if("Yes")
|
||||
if((world.time-time_passed)>300)//If more than 30 game seconds passed.
|
||||
continue
|
||||
candidates += G
|
||||
if("No")
|
||||
continue
|
||||
|
||||
sleep(300)
|
||||
if(!candidates.len)
|
||||
message_admins("This is awkward, sleeping until another mage check...")
|
||||
making_mage = 0
|
||||
mages_made--
|
||||
return
|
||||
else
|
||||
shuffle(candidates)
|
||||
for(var/mob/i in candidates)
|
||||
if(!i || !i.client) continue //Dont bother removing them from the list since we only grab one wizard
|
||||
|
||||
theghost = i
|
||||
break
|
||||
|
||||
if(theghost)
|
||||
var/mob/living/carbon/human/new_character= makeBody(theghost)
|
||||
new_character.mind.make_Wizard()
|
||||
making_mage = 0
|
||||
return 1
|
||||
|
||||
/datum/game_mode/wizard/raginmages/declare_completion()
|
||||
if(finished)
|
||||
feedback_set_details("round_end_result","loss - wizard killed")
|
||||
world << "<FONT size=3><B>The crew has managed to hold off the wizard attack! The Space Wizards Federation has been taught a lesson they will not soon forget!</B></FONT>"
|
||||
..(1)
|
||||
|
||||
/datum/game_mode/wizard/raginmages/proc/makeBody(var/mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character
|
||||
if(!G_found || !G_found.key) return
|
||||
|
||||
//First we spawn a dude.
|
||||
var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned.
|
||||
|
||||
G_found.client.prefs.copy_to(new_character)
|
||||
ready_dna(new_character)
|
||||
new_character.key = G_found.key
|
||||
|
||||
return new_character
|
||||
@@ -114,11 +114,8 @@
|
||||
new /obj/item/clothing/head/helmet/space/hardsuit/wizard(get_turf(H))
|
||||
if("scrying")
|
||||
new /obj/item/weapon/scrying(get_turf(H))
|
||||
if (!(XRAY in H.mutations))
|
||||
H.mutations.Add(XRAY)
|
||||
H.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
|
||||
H.see_in_dark = 8
|
||||
H.see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
if (!(H.dna.check_mutation(XRAY)))
|
||||
H.dna.add_mutation(XRAY)
|
||||
H << "<span class='notice'>The walls suddenly disappear.</span>"
|
||||
|
||||
if("special")
|
||||
|
||||
@@ -38,8 +38,8 @@
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=spells'>Learn and Improve Magical Abilities</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=artifacts'>Summon Magical Tools and Weapons</A><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=challenge'>Raise The Stakes For More Power</A><BR>"
|
||||
|
||||
if(ticker.mode != "raginmages") // we totally need summon guns x 200
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=challenge'>Raise The Stakes For More Power</A><BR>"
|
||||
dat += "<HR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_choice=rememorize'>Re-memorize Spells</A><BR>"
|
||||
|
||||
@@ -362,12 +362,8 @@
|
||||
if("scrying")
|
||||
feedback_add_details("wizard_spell_learned","SO") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
|
||||
new /obj/item/weapon/scrying(get_turf(H))
|
||||
if (!(XRAY in H.mutations))
|
||||
H.mutations.Add(XRAY)
|
||||
H.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
|
||||
H.see_in_dark = 8
|
||||
H.see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
H << "<span class='notice'>The walls suddenly disappear.</span>"
|
||||
if (!(H.dna.check_mutation(XRAY)))
|
||||
H.dna.add_mutation(XRAY)
|
||||
temp = "You have purchased a scrying orb, and gained x-ray vision."
|
||||
max_uses--
|
||||
else
|
||||
@@ -563,4 +559,4 @@
|
||||
/obj/item/weapon/spellbook/oneuse/charge/recoil(mob/user as mob)
|
||||
..()
|
||||
user <<"<span class='warning'>[src] suddenly feels very warm!</span>"
|
||||
empulse(src, 1, 1)
|
||||
empulse(src, 1, 1)
|
||||
|
||||
@@ -235,7 +235,7 @@ Clown
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/toy/crayon/rainbow(H), slot_r_store)
|
||||
|
||||
H.mutations.Add(CLUMSY)
|
||||
H.dna.add_mutation(CLOWNMUT)
|
||||
H.rename_self("clown")
|
||||
|
||||
/*
|
||||
|
||||
@@ -255,8 +255,7 @@ Auto Patrol[]"},
|
||||
icon_state = "[lasercolor]ed209[on]"
|
||||
var/mob/living/carbon/M = target
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
if( M.stuttering < 5 && !(HULK in M.mutations) )
|
||||
M.stuttering = 5
|
||||
M.stuttering = 5
|
||||
M.Stun(5)
|
||||
M.Weaken(5)
|
||||
else
|
||||
|
||||
@@ -218,8 +218,7 @@ Auto Patrol: []"},
|
||||
icon_state = "secbot[on]"
|
||||
var/mob/living/carbon/M = target
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
if( M.stuttering < 5 && !(HULK in M.mutations) )
|
||||
M.stuttering = 5
|
||||
M.stuttering = 5
|
||||
M.Stun(5)
|
||||
M.Weaken(5)
|
||||
else
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
var/mapping = 0//For the overview file, interesting bit of code.
|
||||
|
||||
/obj/machinery/computer/security/check_eye(var/mob/user as mob)
|
||||
if ((get_dist(user, src) > 1 || user.blinded || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon)))
|
||||
if ((get_dist(user, src) > 1 || user.eye_blind || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon)))
|
||||
return null
|
||||
var/list/viewing = viewers(src)
|
||||
if((istype(user,/mob/living/silicon/robot)) && (!(viewing.Find(user))))
|
||||
@@ -64,7 +64,7 @@
|
||||
return 0
|
||||
|
||||
if(C)
|
||||
if ((get_dist(user, src) > 1 || user.machine != src || user.blinded || !( C.can_use() )) && (!istype(user, /mob/living/silicon/ai)))
|
||||
if ((get_dist(user, src) > 1 || user.machine != src || user.eye_blind || !( C.can_use() )) && (!istype(user, /mob/living/silicon/ai)))
|
||||
if(!C.can_use() && !isAI(user))
|
||||
src.current = null
|
||||
return 0
|
||||
|
||||
@@ -896,7 +896,8 @@ About the new airlock wires panel:
|
||||
if(do_after(user,40,5,1))
|
||||
if(density && !operating)//Door must be closed to weld.
|
||||
if( !istype(src, /obj/machinery/door/airlock) || !user || !W || !W.isOn() || !user.loc )
|
||||
return playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
return
|
||||
playsound(loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
welded = !welded
|
||||
user.visible_message("<span class='warning'>[user.name] has [welded? "welded shut":"unwelded"] [src].</span>", \
|
||||
"<span class='notice'>You've [welded ? "welded the airlock shut":"unwelded the airlock"].</span>")
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
var/normalspeed = 1
|
||||
var/heat_proof = 0 // For glass airlocks/opacity firedoors
|
||||
var/emergency = 0 // Emergency access override
|
||||
var/sub_door = 0 // 1 if it's meant to go under another door.
|
||||
|
||||
/obj/machinery/door/New()
|
||||
..()
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
glass = 1
|
||||
var/blocked = 0
|
||||
var/nextstate = null
|
||||
sub_door = 1
|
||||
|
||||
|
||||
/obj/machinery/door/firedoor/Bumped(atom/AM)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
icon_state = "closed"
|
||||
var/id = 1
|
||||
var/auto_close = 0 // Time in seconds to automatically close when opened, 0 if it doesn't.
|
||||
sub_door = 1
|
||||
|
||||
/obj/machinery/door/poddoor/preopen
|
||||
icon_state = "open"
|
||||
@@ -22,12 +23,12 @@
|
||||
/obj/machinery/door/poddoor/attackby(obj/item/I, mob/user)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(!istype(I, /obj/item/weapon/crowbar))
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/twohanded/fireaxe))
|
||||
var/obj/item/weapon/twohanded/fireaxe/F = I
|
||||
if(!F.wielded)
|
||||
return
|
||||
else if(!istype(I, /obj/item/weapon/crowbar))
|
||||
return
|
||||
|
||||
if(stat & NOPOWER)
|
||||
open(1) //ignore the usual power requirement.
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
flick("e_flash", O:flash)
|
||||
O.eye_stat += rand(1, 2)
|
||||
else
|
||||
if(!O.blinded)
|
||||
if(!O.eye_blind)
|
||||
flick("flash", O:flash)
|
||||
O.eye_stat += rand(0, 2)
|
||||
return 1
|
||||
|
||||
@@ -229,7 +229,7 @@ Class Procs:
|
||||
if(restrained() || lying || stat || stunned || weakened)
|
||||
return
|
||||
if(!in_range(M, src))
|
||||
if((be_close == 0) && (TK in mutations))
|
||||
if((be_close == 0) && (dna.check_mutation(TK)))
|
||||
if(tkMaxRangeCheck(src, M))
|
||||
return 1
|
||||
return
|
||||
|
||||
@@ -786,18 +786,6 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
|
||||
/obj/machinery/newscaster/attackby(obj/item/I as obj, mob/living/user as mob)
|
||||
|
||||
/* if (istype(I, /obj/item/weapon/card/id) || istype(I, /obj/item/device/pda) ) //Name verification for channels or messages
|
||||
if(src.screen == 4 || src.screen == 5)
|
||||
if( istype(I, /obj/item/device/pda) )
|
||||
var/obj/item/device/pda/P = I
|
||||
if(P.id)
|
||||
src.scanned_user = "[P.id.registered_name] ([P.id.assignment])"
|
||||
src.screen=2
|
||||
else
|
||||
var/obj/item/weapon/card/id/T = I
|
||||
src.scanned_user = text("[T.registered_name] ([T.assignment])")
|
||||
src.screen=2*/ //Obsolete after autorecognition
|
||||
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user << "<span class='notice'>Now [anchored ? "un" : ""]securing [name]</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
@@ -809,26 +797,24 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
|
||||
if (src.isbroken)
|
||||
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1)
|
||||
for (var/mob/O in hearers(5, src.loc))
|
||||
O.show_message("<span class='danger'>[user.name] further abuses the shattered [src.name].</span>")
|
||||
src.loc.audible_message("<span class='danger'>[user.name] further abuses the shattered [src.name].</span>", null, 5 )
|
||||
else
|
||||
if(istype(I, /obj/item/weapon) )
|
||||
user.do_attack_animation(src)
|
||||
var/obj/item/weapon/W = I
|
||||
if(W.damtype == STAMINA)
|
||||
return
|
||||
if(W.force <15)
|
||||
for (var/mob/O in hearers(5, src.loc))
|
||||
O.show_message("<span class='danger'>[user.name] hits the [src.name] with the [W.name] with no visible effect.</span>" )
|
||||
playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1)
|
||||
src.loc.audible_message("<span class='danger'>[user.name] hits the [src.name] with the [W.name] with no visible effect.</span>", null , 5 )
|
||||
playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1)
|
||||
else
|
||||
src.hitstaken++
|
||||
if(src.hitstaken==3)
|
||||
for (var/mob/O in hearers(5, src.loc))
|
||||
O.show_message("<span class='danger'>[user.name] smashes the [src.name]!</span>" )
|
||||
src.loc.audible_message("<span class='danger'>[user.name] smashes the [src.name]!</span>", null, 5 )
|
||||
src.isbroken=1
|
||||
playsound(src.loc, 'sound/effects/Glassbr3.ogg', 100, 1)
|
||||
else
|
||||
for (var/mob/O in hearers(5, src.loc))
|
||||
O.show_message("<span class='danger'>[user.name] forcefully slams the [src.name] with the [I.name]!</span>" )
|
||||
src.loc.audible_message("<span class='danger'>[user.name] forcefully slams the [src.name] with the [I.name]!</span>", null, 5 )
|
||||
playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1)
|
||||
else
|
||||
user << "<FONT COLOR='blue'>This does nothing.</FONT>"
|
||||
|
||||
@@ -51,6 +51,7 @@ Buildable meters
|
||||
if (make_from)
|
||||
src.dir = make_from.dir
|
||||
src.pipename = make_from.name
|
||||
src.color = make_from.color
|
||||
var/is_bent
|
||||
if (make_from.initialize_directions in list(NORTH|SOUTH, WEST|EAST))
|
||||
is_bent = 0
|
||||
@@ -70,7 +71,7 @@ Buildable meters
|
||||
src.pipe_type = PIPE_MANIFOLD
|
||||
else if(istype(make_from, /obj/machinery/atmospherics/unary/vent_pump))
|
||||
src.pipe_type = PIPE_UVENT
|
||||
else if(istype(make_from, /obj/machinery/atmospherics/valve/digital))
|
||||
else if(istype(make_from, /obj/machinery/atmospherics/binary/valve/digital))
|
||||
src.pipe_type = PIPE_DVALVE
|
||||
else if(istype(make_from, /obj/machinery/atmospherics/binary/valve))
|
||||
src.pipe_type = PIPE_MVALVE
|
||||
@@ -294,7 +295,7 @@ var/global/list/pipeID2State = list(
|
||||
return rotate()
|
||||
|
||||
/obj/item/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
|
||||
..()
|
||||
|
||||
//*
|
||||
if (!istype(W, /obj/item/weapon/wrench))
|
||||
return ..()
|
||||
@@ -314,51 +315,51 @@ var/global/list/pipeID2State = list(
|
||||
switch(pipe_type)
|
||||
if(PIPE_SIMPLE_STRAIGHT, PIPE_SIMPLE_BENT)
|
||||
var/obj/machinery/atmospherics/pipe/simple/P = new( src.loc )
|
||||
P.construction(dir, pipe_dir)
|
||||
P.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_HE_STRAIGHT, PIPE_HE_BENT)
|
||||
var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/P = new ( src.loc )
|
||||
P.initialize_directions_he = pipe_dir
|
||||
P.construction(dir, pipe_dir)
|
||||
P.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_CONNECTOR)
|
||||
var/obj/machinery/atmospherics/unary/portables_connector/C = new( src.loc )
|
||||
if (pipename)
|
||||
C.name = pipename
|
||||
C.construction(dir, pipe_dir)
|
||||
C.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_MANIFOLD)
|
||||
var/obj/machinery/atmospherics/pipe/manifold/M = new(loc)
|
||||
M.construction(dir, pipe_dir)
|
||||
M.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_4WAYMANIFOLD)
|
||||
var/obj/machinery/atmospherics/pipe/manifold4w/M = new( src.loc )
|
||||
M.construction(dir, pipe_dir)
|
||||
M.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_JUNCTION)
|
||||
var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/P = new ( src.loc )
|
||||
P.initialize_directions_he = src.get_hdir()
|
||||
P.construction(dir, get_pdir())
|
||||
P.construction(dir, get_pdir(), pipe_type, color)
|
||||
|
||||
if(PIPE_UVENT)
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/V = new( src.loc )
|
||||
V.construction(dir, pipe_dir)
|
||||
V.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_MVALVE)
|
||||
var/obj/machinery/atmospherics/binary/valve/V = new(src.loc)
|
||||
if (pipename)
|
||||
V.name = pipename
|
||||
V.construction(dir, get_pdir())
|
||||
V.construction(dir, get_pdir(), pipe_type, color)
|
||||
|
||||
if(PIPE_DVALVE)
|
||||
var/obj/machinery/atmospherics/valve/digital/V = new(src.loc)
|
||||
var/obj/machinery/atmospherics/binary/valve/digital/V = new(src.loc)
|
||||
if (pipename)
|
||||
V.name = pipename
|
||||
V.construction(dir, get_pdir())
|
||||
V.construction(dir, get_pdir(), pipe_type, color)
|
||||
|
||||
if(PIPE_PUMP)
|
||||
var/obj/machinery/atmospherics/binary/pump/P = new(src.loc)
|
||||
P.construction(dir, pipe_dir)
|
||||
P.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_GAS_FILTER, PIPE_GAS_MIXER)
|
||||
var/obj/machinery/atmospherics/trinary/P
|
||||
@@ -369,41 +370,42 @@ var/global/list/pipeID2State = list(
|
||||
P.flipped = flipped
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
P.construction(unflip(dir), pipe_dir)
|
||||
P.construction(unflip(dir), pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_SCRUBBER)
|
||||
var/obj/machinery/atmospherics/unary/vent_scrubber/S = new(src.loc)
|
||||
if (pipename)
|
||||
S.name = pipename
|
||||
S.construction(dir, pipe_dir)
|
||||
S.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_INSULATED_STRAIGHT, PIPE_INSULATED_BENT)
|
||||
var/obj/machinery/atmospherics/pipe/simple/insulated/P = new( src.loc )
|
||||
P.construction(dir, pipe_dir)
|
||||
P.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_PASSIVE_GATE)
|
||||
var/obj/machinery/atmospherics/binary/passive_gate/P = new(src.loc)
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
P.construction(dir, pipe_dir)
|
||||
P.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_VOLUME_PUMP)
|
||||
var/obj/machinery/atmospherics/binary/volume_pump/P = new(src.loc)
|
||||
if (pipename)
|
||||
P.name = pipename
|
||||
P.construction(dir, pipe_dir)
|
||||
P.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
if(PIPE_HEAT_EXCHANGE)
|
||||
var/obj/machinery/atmospherics/unary/heat_exchanger/C = new( src.loc )
|
||||
if (pipename)
|
||||
C.name = pipename
|
||||
C.construction(dir, pipe_dir)
|
||||
C.construction(dir, pipe_dir, pipe_type, color)
|
||||
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user.visible_message( \
|
||||
"[user] fastens \the [src].", \
|
||||
"<span class='notice'>You have fastened \the [src].</span>", \
|
||||
"You hear ratchet.")
|
||||
|
||||
qdel(src) // remove the pipe item
|
||||
|
||||
return
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
var/charges = 1
|
||||
var/insisting = 0
|
||||
|
||||
/obj/machinery/wish_granter/attack_hand(var/mob/user as mob)
|
||||
/obj/machinery/wish_granter/attack_hand(var/mob/living/carbon/user)
|
||||
if(istype(user)) return
|
||||
usr.set_machine(src)
|
||||
|
||||
if(charges <= 0)
|
||||
@@ -36,28 +37,10 @@
|
||||
charges--
|
||||
insisting = 0
|
||||
|
||||
if (!(HULK in user.mutations))
|
||||
user.mutations.Add(HULK)
|
||||
|
||||
if (!(LASER in user.mutations))
|
||||
user.mutations.Add(LASER)
|
||||
|
||||
if (!(XRAY in user.mutations))
|
||||
user.mutations.Add(XRAY)
|
||||
user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
|
||||
user.see_in_dark = 8
|
||||
user.see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
|
||||
if (!(COLD_RESISTANCE in user.mutations))
|
||||
user.mutations.Add(COLD_RESISTANCE)
|
||||
|
||||
if (!(TK in user.mutations))
|
||||
user.mutations.Add(TK)
|
||||
|
||||
if(!(HEAL in user.mutations))
|
||||
user.mutations.Add(HEAL)
|
||||
|
||||
user.update_mutations()
|
||||
user.dna.add_mutation(HULK)
|
||||
user.dna.add_mutation(XRAY)
|
||||
user.dna.add_mutation(COLDRES)
|
||||
user.dna.add_mutation(TK)
|
||||
|
||||
ticker.mode.traitors += user.mind
|
||||
user.mind.special_role = "Avatar of the Wish Granter"
|
||||
|
||||
+12
-46
@@ -490,18 +490,22 @@ obj/mecha/proc/can_use(mob/user)
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
/obj/mecha/attack_hulk(mob/living/carbon/human/user)
|
||||
if(!prob(src.deflect_chance))
|
||||
..(user, 1)
|
||||
take_damage(15)
|
||||
check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
user.visible_message("<span class='danger'>[user] hits [src.name], doing some damage.</span>", "<span class='danger'>You hit [src.name] with all your might. The metal creaks and bends.</span>")
|
||||
occupant_message("<span class='userdanger'>[user] hits [src.name], doing some damage.</span>")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/mecha/attack_hand(mob/living/user as mob)
|
||||
user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code.
|
||||
user.do_attack_animation(src)
|
||||
src.log_message("Attack by hand/paw. Attacker - [user].",1)
|
||||
|
||||
if ((HULK in user.mutations) && !prob(src.deflect_chance))
|
||||
src.take_damage(15)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
user.visible_message("<span class='danger'>[user] hits [src.name], doing some damage.</span>", "<span class='danger'>You hit [src.name] with all your might. The metal creaks and bends.</span>")
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] hits [src.name]. Nothing happens</span>","<span class='danger'>You hit [src.name] with no visible effect.</span>")
|
||||
src.log_append_to_last("Armor saved.")
|
||||
user.visible_message("<span class='danger'>[user] hits [src.name]. Nothing happens</span>","<span class='danger'>You hit [src.name] with no visible effect.</span>")
|
||||
src.log_append_to_last("Armor saved.")
|
||||
return
|
||||
|
||||
/obj/mecha/attack_paw(mob/user as mob)
|
||||
@@ -619,28 +623,6 @@ obj/mecha/proc/can_use(mob/user)
|
||||
src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1)
|
||||
return
|
||||
|
||||
/*Will fix later -Sieve
|
||||
/obj/mecha/attack_blob(mob/user as mob)
|
||||
src.log_message("Attack by blob. Attacker - [user].",1)
|
||||
if(!prob(src.deflect_chance))
|
||||
src.take_damage(6)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
playsound(src.loc, 'sound/effects/blobattack.ogg', 50, 1, -1)
|
||||
user << "\red You smash at the armored suit!"
|
||||
for (var/mob/V in viewers(src))
|
||||
if(V.client && !(V.blinded))
|
||||
V.show_message("\red The [user] smashes against [src.name]'s armor!", 1)
|
||||
else
|
||||
src.log_append_to_last("Armor saved.")
|
||||
playsound(src.loc, 'sound/effects/blobattack.ogg', 50, 1, -1)
|
||||
user << "\green Your attack had no effect!"
|
||||
src.occupant_message("\blue The [user]'s attack is stopped by the armor.")
|
||||
for (var/mob/V in viewers(src))
|
||||
if(V.client && !(V.blinded))
|
||||
V.show_message("\blue The [user] rebounds off the [src.name] armor!", 1)
|
||||
return
|
||||
*/
|
||||
|
||||
/obj/mecha/blob_act()
|
||||
take_damage(30, "brute")
|
||||
return
|
||||
@@ -794,22 +776,6 @@ obj/mecha/proc/can_use(mob/user)
|
||||
|
||||
else if(!(W.flags&NOBLUDGEON))
|
||||
call((proc_res["dynattackby"]||src), "dynattackby")(W,user)
|
||||
/*
|
||||
src.log_message("Attacked by [W]. Attacker - [user]")
|
||||
if(prob(src.deflect_chance))
|
||||
user << "\red The [W] bounces off [src.name] armor."
|
||||
src.log_append_to_last("Armor saved.")
|
||||
/*
|
||||
for (var/mob/V in viewers(src))
|
||||
if(V.client && !(V.blinded))
|
||||
V.show_message("The [W] bounces off [src.name] armor.", 1)
|
||||
*/
|
||||
else
|
||||
src.occupant_message("<font color='red'><b>[user] hits [src] with [W].</b></font>")
|
||||
user.visible_message("<font color='red'><b>[user] hits [src] with [W].</b></font>", "<font color='red'><b>You hit [src] with [W].</b></font>")
|
||||
src.take_damage(W.force,W.damtype)
|
||||
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
|
||||
*/
|
||||
return
|
||||
|
||||
/*
|
||||
|
||||
@@ -108,14 +108,12 @@
|
||||
health -= tforce
|
||||
healthcheck()
|
||||
|
||||
|
||||
/obj/structure/alien/resin/attack_hand(mob/living/user)
|
||||
if(HULK in user.mutations)
|
||||
user.do_attack_animation(src)
|
||||
user.visible_message("<span class='danger'>[user] destroys [src]!</span>")
|
||||
health = 0
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/alien/resin/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
user.do_attack_animation(src)
|
||||
user.visible_message("<span class='danger'>[user] destroys [src]!</span>")
|
||||
health = 0
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/alien/resin/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -966,16 +966,16 @@ steam.start() -- spawns the effect
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/foamedmetal/attack_hand(var/mob/user)
|
||||
if ((HULK in user.mutations) || (prob(75 - metal*25)))
|
||||
/obj/structure/foamedmetal/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
if(prob(75 - metal*25))
|
||||
user.visible_message("<span class='danger'>[user] smashes through the foamed metal.</span>", \
|
||||
"<span class='danger'>You smash through the metal foam wall.</span>")
|
||||
|
||||
qdel(src)
|
||||
else
|
||||
user << "<span class='notice'>You hit the metal foam but bounce off it.</span>"
|
||||
return
|
||||
return 1
|
||||
|
||||
/obj/structure/foamedmetal/attack_hand(var/mob/user)
|
||||
user << "<span class='notice'>You hit the metal foam but bounce off it.</span>"
|
||||
|
||||
/obj/structure/foamedmetal/attackby(var/obj/item/I, var/mob/user)
|
||||
|
||||
|
||||
@@ -313,14 +313,7 @@
|
||||
add_logs(user, M, "attacked", object="[src.name]", addition="(INTENT: [uppertext(user.a_intent)])")
|
||||
|
||||
src.add_fingerprint(user)
|
||||
//if((CLUMSY in user.mutations) && prob(50))
|
||||
// M = user
|
||||
/*
|
||||
M << "\red You stab yourself in the eye."
|
||||
M.sdisabilities |= BLIND
|
||||
M.weakened += 4
|
||||
M.adjustBruteLoss(10)
|
||||
*/
|
||||
|
||||
if(M != user)
|
||||
M.visible_message("<span class='danger'>[user] has stabbed [M] in the eye with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] stabs you in the eye with [src]!</span>")
|
||||
@@ -341,7 +334,7 @@
|
||||
M.eye_stat += rand(2,4)
|
||||
if (M.eye_stat >= 10)
|
||||
M.eye_blurry += 15+(0.1*M.eye_blurry)
|
||||
M.disabilities |= NEARSIGHTED
|
||||
M.disabilities |= NEARSIGHT
|
||||
if(M.stat != 2)
|
||||
M << "<span class='danger'>Your eyes start to bleed profusely!</span>"
|
||||
if(prob(50))
|
||||
@@ -354,7 +347,7 @@
|
||||
if (prob(M.eye_stat - 10 + 1))
|
||||
if(M.stat != 2)
|
||||
M << "<span class='danger'>You go blind!</span>"
|
||||
M.sdisabilities |= BLIND
|
||||
M.disabilities |= BLIND
|
||||
return
|
||||
|
||||
/obj/item/clean_blood()
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/camera_bug/check_eye(var/mob/user as mob)
|
||||
if (user.stat || loc != user || !user.canmove || user.blinded || !current)
|
||||
if (user.stat || loc != user || !user.canmove || user.eye_blind || !current)
|
||||
user.reset_view(null)
|
||||
user.unset_machine()
|
||||
return null
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
var/last_used = 0 //last world.time it was used.
|
||||
|
||||
|
||||
/obj/item/device/flash/proc/clown_check(mob/user)
|
||||
if(user && (CLUMSY in user.mutations) && prob(50))
|
||||
/obj/item/device/flash/proc/clown_check(mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
flash_carbon(user, user, 15, 0)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -45,11 +45,11 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
/obj/item/device/flashlight/attack(mob/living/carbon/human/M as mob, mob/living/carbon/human/user as mob)
|
||||
add_fingerprint(user)
|
||||
if(on && user.zone_sel.selecting == "eyes")
|
||||
|
||||
if(((CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
|
||||
if((user.disabilities & CLUMSY || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
|
||||
return ..() //just hit them in the head
|
||||
|
||||
if(!user.IsAdvancedToolUser())
|
||||
@@ -62,7 +62,7 @@
|
||||
return
|
||||
|
||||
if(M == user) //they're using it on themselves
|
||||
if(!M.blinded)
|
||||
if(!M.eye_blind)
|
||||
flick("flash", M.flash)
|
||||
M.visible_message("<span class='notice'>[M] directs [src] to \his eyes.</span>", \
|
||||
"<span class='notice'>You wave the light in front of your eyes! Trippy!</span>")
|
||||
@@ -75,12 +75,12 @@
|
||||
"<span class='notice'>You direct [src] to [M]'s eyes.</span>")
|
||||
|
||||
if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) //robots and aliens are unaffected
|
||||
if(M.stat == DEAD || M.sdisabilities & BLIND) //mob is dead or fully blind
|
||||
if(M.stat == DEAD || M.disabilities & BLIND) //mob is dead or fully blind
|
||||
user << "<span class='notice'>[M] pupils does not react to the light!</span>"
|
||||
else if(XRAY in M.mutations) //mob has X-RAY vision
|
||||
else if(M.dna.check_mutation(XRAY)) //mob has X-RAY vision
|
||||
user << "<span class='notice'>[M] pupils give an eerie glow!</span>"
|
||||
else //they're okay!
|
||||
if(!M.blinded)
|
||||
if(!M.eye_blind)
|
||||
flick("flash", M.flash) //flash the affected mob
|
||||
user << "<span class='notice'>[M]'s pupils narrow.</span>"
|
||||
else
|
||||
|
||||
@@ -78,12 +78,9 @@
|
||||
if (!user.IsAdvancedToolUser())
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return
|
||||
if(user.has_mutation(HULK))
|
||||
user << "<span class='warning'>Your meaty finger is too large for the button!</span>"
|
||||
return
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.dna && NOGUNS in H.dna.species.specflags)
|
||||
if(H.dna && (H.dna.check_mutation(HULK) || NOGUNS in H.dna.species.specflags))
|
||||
user << "<span class='warning'>Your fingers can't press the button!</span>"
|
||||
return
|
||||
|
||||
@@ -109,7 +106,7 @@
|
||||
//eye target check
|
||||
outmsg = "<span class='notice'>You blind [C] by shining [src] in their eyes.</span>"
|
||||
var/eye_prot = C.eyecheck()
|
||||
if(C.blinded || eye_prot >= 2)
|
||||
if(C.eye_blind || eye_prot >= 2)
|
||||
eye_prot = 4
|
||||
var/severity = 3 - eye_prot
|
||||
if(prob(33))
|
||||
|
||||
@@ -77,10 +77,10 @@ MASS SPECTROMETER
|
||||
origin_tech = "magnets=1;biotech=1"
|
||||
var/mode = 1;
|
||||
|
||||
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/carbon/human/user as mob)
|
||||
|
||||
// Clumsiness/brain damage check
|
||||
if ((CLUMSY in user.mutations || user.getBrainLoss() >= 60) && prob(50))
|
||||
if ((user.disabilities & CLUMSY || user.getBrainLoss() >= 60) && prob(50))
|
||||
user << "<span class='notice'>You stupidly try to analyze the floor's vitals!</span>"
|
||||
user.visible_message("<span class='warning'>[user] has analyzed the floor's vitals!</span>")
|
||||
user.show_message("<span class='notice'>Analyzing Results for The floor:\n\t Overall Status: Healthy", 1)
|
||||
|
||||
@@ -174,7 +174,13 @@ RCD
|
||||
if(2)
|
||||
if(istype(A, /turf/simulated/floor))
|
||||
if(checkResource(10, user))
|
||||
if(!locate(/obj/machinery/door) in A)
|
||||
var/door_check = 1
|
||||
for(var/obj/machinery/door/D in A)
|
||||
if(!D.sub_door)
|
||||
door_check = 0
|
||||
break
|
||||
|
||||
if(door_check)
|
||||
user << "Building Airlock..."
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, 50))
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
"<span class='notice'>You throw [src]. It lands on [result]. [comment]</span>", \
|
||||
"<span class='notice'>You hear [src] landing on [result]. [comment]</span>")
|
||||
else if(src.throwing == 0) //Dice was thrown and is coming to rest
|
||||
src.loc.visible_message("<span class='notice'>[src] rolls to a stop, landing on [result]. [comment]</span>")
|
||||
visible_message("<span class='notice'>[src] rolls to a stop, landing on [result]. [comment]</span>")
|
||||
|
||||
/obj/item/weapon/dice/d4/Crossed(var/mob/living/carbon/human/H)
|
||||
if(istype(H) && !H.shoes)
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
var/damage_coeff = 1
|
||||
var/list/fields
|
||||
var/list/add_mutations = list()
|
||||
var/list/remove_mutations = list()
|
||||
|
||||
/obj/item/weapon/dnainjector/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
@@ -20,8 +22,15 @@
|
||||
user << "<span class='notice'>You can't modify [M]'s DNA while \he's dead.</span>"
|
||||
return
|
||||
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
|
||||
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
|
||||
for(var/datum/mutation/human/HM in remove_mutations)
|
||||
HM.on_losing(M)
|
||||
for(var/datum/mutation/human/HM in add_mutations)
|
||||
if(HM.name == RACEMUT)
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] <span class='danger'>(MONKEY)</span>")
|
||||
log_msg += " (MONKEY)"
|
||||
HM.force_give(M)
|
||||
if(fields)
|
||||
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
|
||||
if(fields["name"] && fields["UE"] && fields["blood_type"])
|
||||
M.real_name = fields["name"]
|
||||
M.dna.unique_enzymes = fields["UE"]
|
||||
@@ -30,13 +39,7 @@
|
||||
if(fields["UI"]) //UI+UE
|
||||
M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"])
|
||||
updateappearance(M)
|
||||
if(fields["SE"])
|
||||
M.dna.struc_enzymes = merge_text(M.dna.struc_enzymes, fields["SE"])
|
||||
if(ishuman(M) && (deconstruct_block(getblock(M.dna.struc_enzymes, RACEBLOCK), BAD_MUTATION_DIFFICULTY) == BAD_MUTATION_DIFFICULTY)) //check for monkeying people.
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] <span class='danger'>(MONKEY)</span>")
|
||||
log_msg += " (MONKEY)"
|
||||
domutcheck(M, null,(type != /obj/item/weapon/dnainjector)) //admin-spawnable-injectors always work
|
||||
log_attack(log_msg)
|
||||
log_attack(log_msg)
|
||||
else
|
||||
user << "<span class='notice'>It appears that [M] does not have compatible DNA.</span>"
|
||||
return
|
||||
@@ -67,28 +70,27 @@
|
||||
desc = "Cures green skin."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, HULKBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[HULK])
|
||||
|
||||
/obj/item/weapon/dnainjector/hulkmut
|
||||
name = "\improper DNA injector (Hulk)"
|
||||
desc = "This will make you big and strong, but give you a bad skin condition."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, HULKBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
|
||||
add_mutations.Add(mutations_list[HULK])
|
||||
/obj/item/weapon/dnainjector/xraymut
|
||||
name = "\improper DNA injector (Xray)"
|
||||
desc = "Finally you can see what the Captain does."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, XRAYBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[XRAY])
|
||||
|
||||
/obj/item/weapon/dnainjector/antixray
|
||||
name = "\improper DNA injector (Anti-Xray)"
|
||||
desc = "It will make you see harder."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, XRAYBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[XRAY])
|
||||
|
||||
/////////////////////////////////////
|
||||
/obj/item/weapon/dnainjector/antiglasses
|
||||
@@ -96,128 +98,126 @@
|
||||
desc = "Toss away those glasses!"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, NEARSIGHTEDBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[BADSIGHT])
|
||||
|
||||
/obj/item/weapon/dnainjector/glassesmut
|
||||
name = "\improper DNA injector (Glasses)"
|
||||
desc = "Will make you need dorkish glasses."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, NEARSIGHTEDBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[BADSIGHT])
|
||||
|
||||
/obj/item/weapon/dnainjector/epimut
|
||||
name = "\improper DNA injector (Epi.)"
|
||||
desc = "Shake shake shake the room!"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, EPILEPSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[EPILEPSY])
|
||||
|
||||
/obj/item/weapon/dnainjector/antiepi
|
||||
name = "\improper DNA injector (Anti-Epi.)"
|
||||
desc = "Will fix you up from shaking the room."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, EPILEPSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[EPILEPSY])
|
||||
////////////////////////////////////
|
||||
/obj/item/weapon/dnainjector/anticough
|
||||
name = "\improper DNA injector (Anti-Cough)"
|
||||
desc = "Will stop that aweful noise."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, COUGHBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[COUGH])
|
||||
|
||||
/obj/item/weapon/dnainjector/coughmut
|
||||
name = "\improper DNA injector (Cough)"
|
||||
desc = "Will bring forth a sound of horror from your throat."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, COUGHBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
|
||||
add_mutations.Add(mutations_list[COUGH])
|
||||
|
||||
/obj/item/weapon/dnainjector/clumsymut
|
||||
name = "\improper DNA injector (Clumsy)"
|
||||
desc = "Makes clown minions."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, CLUMSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
|
||||
add_mutations.Add(mutations_list[CLOWNMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/anticlumsy
|
||||
name = "\improper DNA injector (Anti-Clumy)"
|
||||
desc = "Apply this for Security Clown."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, CLUMSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[CLOWNMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/antitour
|
||||
name = "\improper DNA injector (Anti-Tour.)"
|
||||
desc = "Will cure tourrets."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, TOURETTESBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[TOURETTES])
|
||||
|
||||
/obj/item/weapon/dnainjector/tourmut
|
||||
name = "\improper DNA injector (Tour.)"
|
||||
desc = "Gives you a nasty case off tourrets."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, TOURETTESBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[TOURETTES])
|
||||
|
||||
/obj/item/weapon/dnainjector/stuttmut
|
||||
name = "\improper DNA injector (Stutt.)"
|
||||
desc = "Makes you s-s-stuttterrr"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, NERVOUSBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[NERVOUS])
|
||||
|
||||
/obj/item/weapon/dnainjector/antistutt
|
||||
name = "\improper DNA injector (Anti-Stutt.)"
|
||||
desc = "Fixes that speaking impairment."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, NERVOUSBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[NERVOUS])
|
||||
|
||||
/obj/item/weapon/dnainjector/antifire
|
||||
name = "\improper DNA injector (Anti-Fire)"
|
||||
desc = "Cures fire."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, FIREBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[COLDRES])
|
||||
|
||||
/obj/item/weapon/dnainjector/firemut
|
||||
name = "\improper DNA injector (Fire)"
|
||||
desc = "Gives you fire."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, FIREBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
add_mutations.Add(mutations_list[COLDRES])
|
||||
|
||||
/obj/item/weapon/dnainjector/blindmut
|
||||
name = "\improper DNA injector (Blind)"
|
||||
desc = "Makes you not see anything."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, BLINDBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[BLINDMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/antiblind
|
||||
name = "\improper DNA injector (Anti-Blind)"
|
||||
desc = "ITS A MIRACLE!!!"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, BLINDBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[BLINDMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/antitele
|
||||
name = "\improper DNA injector (Anti-Tele.)"
|
||||
desc = "Will make you not able to control your mind."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, TELEBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[TK])
|
||||
|
||||
/obj/item/weapon/dnainjector/telemut
|
||||
name = "\improper DNA injector (Tele.)"
|
||||
desc = "Super brain man!"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, TELEBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[TK])
|
||||
|
||||
/obj/item/weapon/dnainjector/telemut/darkbundle
|
||||
name = "\improper DNA injector"
|
||||
@@ -228,25 +228,25 @@
|
||||
desc = "Sorry, what did you say?"
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, DEAFBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[DEAFMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/antideaf
|
||||
name = "\improper DNA injector (Anti-Deaf)"
|
||||
desc = "Will make you hear once more."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, DEAFBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[DEAFMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/h2m
|
||||
name = "\improper DNA injector (Human > Monkey)"
|
||||
desc = "Will make you a flea bag."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, RACEBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
|
||||
add_mutations.Add(mutations_list[RACEMUT])
|
||||
|
||||
/obj/item/weapon/dnainjector/m2h
|
||||
name = "\improper DNA injector (Monkey > Human)"
|
||||
desc = "Will make you...less hairy."
|
||||
New()
|
||||
..()
|
||||
fields = list("SE"=setblock(NULLED_SE, RACEBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
|
||||
remove_mutations.Add(mutations_list[RACEMUT])
|
||||
@@ -45,11 +45,11 @@
|
||||
M.Weaken(max(10/distance, 3))
|
||||
if (M.eye_stat >= 20 && takes_eye_damage)
|
||||
M << "<span class='warning'>Your eyes start to burn badly!</span>"
|
||||
M.disabilities |= NEARSIGHTED
|
||||
M.disabilities |= NEARSIGHT
|
||||
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
|
||||
if (prob(M.eye_stat - 20 + 1))
|
||||
M << "<span class='warning'>You can't see anything!</span>"
|
||||
M.sdisabilities |= BLIND
|
||||
M.disabilities |= BLIND
|
||||
|
||||
//Bang
|
||||
if((src.loc == M) || src.loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection
|
||||
@@ -63,9 +63,9 @@
|
||||
if (M.ear_damage >= 15)
|
||||
M << "<span class='warning'>Your ears start to ring badly!</span>"
|
||||
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
|
||||
if (prob(M.ear_damage - 10 + 5))
|
||||
if(prob(M.ear_damage - 10 + 5))
|
||||
M << "<span class='warning'>You can't hear anything!</span>"
|
||||
M.sdisabilities |= DEAF
|
||||
M.disabilities |= DEAF
|
||||
else
|
||||
if (M.ear_damage >= 5)
|
||||
M << "<span class='warning'>Your ears start to ring!</span>"
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
var/det_time = 50
|
||||
var/display_timer = 1
|
||||
|
||||
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user)
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>Huh? How does this thing work?</span>"
|
||||
active = 1
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
var/cuffsound = 'sound/weapons/handcuffs.ogg'
|
||||
var/trashtype = null //for disposable cuffs
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/attack(mob/living/carbon/C, mob/user)
|
||||
if(CLUMSY in user.mutations && prob(50))
|
||||
/obj/item/weapon/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>Uh... how do those things work?!</span>"
|
||||
apply_cuffs(user,user)
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
src.icon_state = "fork"
|
||||
return
|
||||
else
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
M = user
|
||||
return eyestab(M,user)
|
||||
|
||||
@@ -86,9 +86,9 @@
|
||||
"<span class='suicide'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>"))
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob)
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
user << "<span class='danger'> You accidentally cut yourself with \the [src].</span>"
|
||||
/obj/item/weapon/kitchen/utensil/knife/attack(target, mob/living/carbon/human/user)
|
||||
if(istype(user) && user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='danger'>You accidentally cut yourself with \the [src].</span>"
|
||||
user.take_organ_damage(20)
|
||||
return
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
||||
|
||||
@@ -60,8 +60,8 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/melee/energy/attack_self(mob/living/user)
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
/obj/item/weapon/melee/energy/attack_self(mob/living/carbon/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>"
|
||||
user.take_organ_damage(5,5)
|
||||
active = !active
|
||||
@@ -189,4 +189,4 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/melee/energy/blade/attack_self(mob/user)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
/obj/item/weapon/melee/classic_baton/attack(mob/target as mob, mob/living/user as mob)
|
||||
if(on)
|
||||
add_fingerprint(user)
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
if((CLUMSY in user.disabilities) && prob(50))
|
||||
user << "<span class ='danger'>You club yourself over the head.</span>"
|
||||
user.Weaken(3 * force)
|
||||
if(ishuman(user))
|
||||
|
||||
@@ -56,8 +56,8 @@
|
||||
/obj/item/weapon/shield/energy/IsReflect()
|
||||
return (active)
|
||||
|
||||
/obj/item/weapon/shield/energy/attack_self(mob/living/user)
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
/obj/item/weapon/shield/energy/attack_self(mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='warning'>You beat yourself in the head with [src].</span>"
|
||||
user.take_organ_damage(5)
|
||||
active = !active
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
H.update_damage_overlays(0)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/book/bible/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
/obj/item/weapon/storage/book/bible/attack(mob/living/M as mob, mob/living/carbon/human/user as mob)
|
||||
|
||||
var/chaplain = 0
|
||||
if(user.mind && (user.mind.assigned_role == "Chaplain"))
|
||||
@@ -60,7 +60,7 @@
|
||||
user.take_organ_damage(0,10)
|
||||
return
|
||||
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
if (user.disabilities & CLUMSY && prob(50))
|
||||
user << "<span class='danger'>The [src] slips out of your hand and hits your head.</span>"
|
||||
user.take_organ_damage(10)
|
||||
user.Paralyse(20)
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
/obj/item/weapon/storage/proc/can_see_contents()
|
||||
var/list/cansee = list()
|
||||
for(var/mob/M in is_seeing)
|
||||
if(M.s_active == src)
|
||||
if(M.s_active == src && M.client)
|
||||
cansee |= M
|
||||
else
|
||||
is_seeing -= M
|
||||
|
||||
@@ -100,8 +100,8 @@
|
||||
update_icon()
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/melee/baton/attack(mob/M, mob/living/user)
|
||||
if(status && (CLUMSY in user.mutations) && prob(50))
|
||||
/obj/item/weapon/melee/baton/attack(mob/M, mob/living/carbon/human/user)
|
||||
if(status && user.disabilities & CLUMSY && prob(50))
|
||||
user.visible_message("<span class='danger'>[user] accidentally hits themself with [src]!</span>", \
|
||||
"<span class='userdanger'>You accidentally hit yourself with [src]!</span>")
|
||||
user.Weaken(stunforce*3)
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
if(!istype(M)) return ..()
|
||||
if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head")
|
||||
return ..()
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
M = user
|
||||
return eyestab(M,user)
|
||||
|
||||
@@ -349,14 +349,14 @@
|
||||
user << "<span class='warning'>Your eyes are really starting to hurt. This can't be good for you!</span>"
|
||||
if (prob(user.eye_stat - 25 + 1))
|
||||
user << "<span class='warning'>You go blind!</span>"
|
||||
user.sdisabilities |= BLIND
|
||||
user.disabilities |= BLIND
|
||||
else if(prob(user.eye_stat - 15 + 1))
|
||||
user << "<span class='warning'>You go blind!</span>"
|
||||
user.eye_blind = 5
|
||||
user.eye_blurry = 5
|
||||
user.disabilities |= NEARSIGHTED
|
||||
user.disabilities |= NEARSIGHT
|
||||
spawn(100)
|
||||
user.disabilities &= ~NEARSIGHTED
|
||||
user.disabilities &= ~NEARSIGHT
|
||||
|
||||
/obj/item/weapon/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user)
|
||||
if(welding)
|
||||
|
||||
@@ -27,24 +27,46 @@
|
||||
var/wieldsound = null
|
||||
var/unwieldsound = null
|
||||
|
||||
/obj/item/weapon/twohanded/proc/unwield()
|
||||
/obj/item/weapon/twohanded/proc/unwield(mob/living/carbon/user)
|
||||
if(!wielded) return
|
||||
wielded = 0
|
||||
force = force_unwielded
|
||||
name = "[initial(name)]"
|
||||
update_icon()
|
||||
user << "<span class='notice'>You are now carrying the [name] with one hand.</span>"
|
||||
if(unwieldsound)
|
||||
playsound(loc, unwieldsound, 50, 1)
|
||||
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand()
|
||||
if(O && istype(O))
|
||||
O.unwield()
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/proc/wield()
|
||||
/obj/item/weapon/twohanded/proc/wield(mob/living/carbon/user)
|
||||
if(wielded) return
|
||||
if(istype(user,/mob/living/carbon/monkey) )
|
||||
user << "<span class='warning'>It's too heavy for you to wield fully.</span>"
|
||||
return
|
||||
if(user.get_inactive_hand())
|
||||
user << "<span class='warning'>You need your other hand to be empty</span>"
|
||||
return
|
||||
wielded = 1
|
||||
force = force_wielded
|
||||
name = "[initial(name)] (Wielded)"
|
||||
update_icon()
|
||||
user << "<span class='notice'>You grab the [initial(name)] with both hands.</span>"
|
||||
if (wieldsound)
|
||||
playsound(loc, wieldsound, 50, 1)
|
||||
var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~
|
||||
O.name = "[initial(name)] - offhand"
|
||||
O.desc = "Your second grip on the [initial(name)]"
|
||||
user.put_in_inactive_hand(O)
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/mob_can_equip(M as mob, slot)
|
||||
//Cannot equip wielded items.
|
||||
if(wielded)
|
||||
M << "<span class='warning'>Unwield the [initial(name)] first!</span>"
|
||||
return 0
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/twohanded/dropped(mob/user as mob)
|
||||
@@ -58,41 +80,12 @@
|
||||
/obj/item/weapon/twohanded/update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/pickup(mob/user)
|
||||
unwield()
|
||||
|
||||
/obj/item/weapon/twohanded/attack_self(mob/user as mob)
|
||||
if( istype(user,/mob/living/carbon/monkey) )
|
||||
user << "<span class='warning'>It's too heavy for you to wield fully.</span>"
|
||||
return
|
||||
|
||||
..()
|
||||
if(wielded) //Trying to unwield it
|
||||
unwield()
|
||||
user << "<span class='notice'>You are now carrying the [name] with one hand.</span>"
|
||||
if (src.unwieldsound)
|
||||
playsound(src.loc, unwieldsound, 50, 1)
|
||||
|
||||
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand()
|
||||
if(O && istype(O))
|
||||
O.unwield()
|
||||
return
|
||||
|
||||
unwield(user)
|
||||
else //Trying to wield it
|
||||
if(user.get_inactive_hand())
|
||||
user << "<span class='warning'>You need your other hand to be empty</span>"
|
||||
return
|
||||
wield()
|
||||
user << "<span class='notice'>You grab the [initial(name)] with both hands.</span>"
|
||||
if (src.wieldsound)
|
||||
playsound(src.loc, wieldsound, 50, 1)
|
||||
|
||||
var/obj/item/weapon/twohanded/offhand/O = new(user) ////Let's reserve his other hand~
|
||||
O.name = "[initial(name)] - offhand"
|
||||
O.desc = "Your second grip on the [initial(name)]"
|
||||
user.put_in_inactive_hand(O)
|
||||
return
|
||||
|
||||
wield(user)
|
||||
|
||||
///////////OFFHAND///////////////
|
||||
/obj/item/weapon/twohanded/offhand
|
||||
@@ -212,9 +205,9 @@ obj/item/weapon/twohanded/
|
||||
clean_blood()//blood overlays get weird otherwise, because the sprite changes.
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/user as mob)
|
||||
/obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/carbon/human/user as mob)
|
||||
..()
|
||||
if((CLUMSY in user.mutations) && (wielded) && prob(40))
|
||||
if(user.disabilities & CLUMSY && (wielded) && prob(40))
|
||||
impale(user)
|
||||
return
|
||||
if((wielded) && prob(50))
|
||||
@@ -236,14 +229,18 @@ obj/item/weapon/twohanded/
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/wield() //Specific wield () hulk checks due to reflect_chance var for balance issues and switches hitsounds.
|
||||
..()
|
||||
var/mob/living/M = loc
|
||||
if(istype(loc, /mob/living))
|
||||
if (HULK in M.mutations)
|
||||
loc << "<span class='warning'>You lack the grace to wield this to its full extent.</span>"
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
/obj/item/weapon/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user) //In case thats just so happens that it is still activated on the groud, prevents hulk from picking it up
|
||||
if(wielded)
|
||||
user << "<span class='warning'>You cant pick up such dangerous item with your meaty hands without losing fingers, better not to.</span>"
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/wield(mob/living/carbon/M) //Specific wield () hulk checks due to reflect_chance var for balance issues and switches hitsounds.
|
||||
if(istype(M))
|
||||
if(M.dna.check_mutation(HULK))
|
||||
M << "<span class='warning'>You lack the grace to wield this.</span>"
|
||||
return
|
||||
..()
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds.
|
||||
..()
|
||||
@@ -251,11 +248,7 @@ obj/item/weapon/twohanded/
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/IsReflect()
|
||||
if(wielded)
|
||||
var/mob/living/M = loc
|
||||
if(istype(loc, /mob/living))
|
||||
if (HULK in M.mutations)
|
||||
return
|
||||
return 1
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/twohanded/dualsaber/green
|
||||
New()
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
var/mob/living/carbon/human/H = usr
|
||||
if(!(usr in nearby))
|
||||
if(usr.client && usr.machine==src)
|
||||
if(TK in H.mutations)
|
||||
if(H.dna.check_mutation(TK))
|
||||
is_in_use = 1
|
||||
src.attack_hand(usr)
|
||||
in_use = is_in_use
|
||||
|
||||
@@ -69,8 +69,8 @@
|
||||
new /obj/item/clothing/suit/toggle/labcoat(src)
|
||||
new /obj/item/clothing/shoes/sneakers/white(src)
|
||||
new /obj/item/device/radio/headset/headset_med(src)
|
||||
new /obj/item/clothing/gloves/color/latex(src)
|
||||
new /obj/item/weapon/defibrillator/loaded(src)
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||
new /obj/item/weapon/storage/belt/medical(src)
|
||||
new /obj/item/clothing/glasses/hud/health(src)
|
||||
new /obj/item/clothing/suit/toggle/wintercoat/medical(src)
|
||||
@@ -101,8 +101,8 @@
|
||||
new /obj/item/clothing/shoes/sneakers/brown (src)
|
||||
new /obj/item/weapon/cartridge/cmo(src)
|
||||
new /obj/item/device/radio/headset/heads/cmo(src)
|
||||
new /obj/item/clothing/gloves/color/latex(src)
|
||||
new /obj/item/weapon/defibrillator/loaded(src)
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||
new /obj/item/weapon/storage/belt/medical(src)
|
||||
new /obj/item/device/flash/handheld(src)
|
||||
new /obj/item/clothing/suit/toggle/wintercoat/medical(src)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
src.locked = !src.locked
|
||||
add_fingerprint(user)
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
if((O.client && !( O.blinded )))
|
||||
if((O.client && !( O.eye_blind )))
|
||||
O << "<span class='notice'>[user] has [locked ? null : "un"]locked the locker.</span>"
|
||||
if(src.locked)
|
||||
src.icon_state = src.icon_locked
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
L.client.perspective = EYE_PERSPECTIVE
|
||||
L.client.eye = src
|
||||
L.loc = src
|
||||
L.sdisabilities += MUTE
|
||||
L.disabilities += MUTE
|
||||
L.faction += "mimic" //Stops mimics from instaqdeling people in statues
|
||||
|
||||
health = L.health + 100 //stoning damaged mobs will result in easier to shatter statues
|
||||
@@ -79,7 +79,7 @@
|
||||
|
||||
for(var/mob/living/M in src)
|
||||
M.loc = src.loc
|
||||
M.sdisabilities -= MUTE
|
||||
M.disabilities -= MUTE
|
||||
M.take_overall_damage((M.health - health - 100),0) //any new damage the statue incurred is transfered to the mob
|
||||
M.faction -= "mimic"
|
||||
if(M.client)
|
||||
|
||||
@@ -461,7 +461,13 @@ obj/structure/door_assembly/New()
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench) && !anchored )
|
||||
if(!locate(/obj/machinery/door) in loc)
|
||||
var/door_check = 1
|
||||
for(var/obj/machinery/door/D in loc)
|
||||
if(!D.sub_door)
|
||||
door_check = 0
|
||||
break
|
||||
|
||||
if(door_check)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] secures the airlock assembly to the floor.</span>", \
|
||||
"You start to secure the airlock assembly to the floor.", \
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
var/choice = input(user, "Underwear or Undershirt?", "Changing") as null|anything in list("Underwear","Undershirt")
|
||||
var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks")
|
||||
|
||||
if(!Adjacent(user))
|
||||
return
|
||||
@@ -26,6 +26,10 @@
|
||||
var/new_undershirt = input(user, "Select your undershirt", "Changing") as null|anything in undershirt_list
|
||||
if(new_undershirt)
|
||||
H.undershirt = new_undershirt
|
||||
if("Socks")
|
||||
var/new_socks = input(user, "Select your socks", "Changing") as null|anything in socks_list
|
||||
if(new_socks)
|
||||
H.socks= new_socks
|
||||
|
||||
add_fingerprint(H)
|
||||
H.update_body()
|
||||
@@ -29,6 +29,12 @@
|
||||
/obj/structure/grille/attack_paw(mob/user as mob)
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/grille/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
shock(user, 70)
|
||||
health -= 5
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/grille/attack_hand(mob/living/user as mob)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
@@ -39,8 +45,6 @@
|
||||
|
||||
if(shock(user, 70))
|
||||
return
|
||||
if(HULK in user.mutations)
|
||||
health -= 5
|
||||
else
|
||||
health -= rand(1,2)
|
||||
healthcheck()
|
||||
@@ -192,6 +196,8 @@
|
||||
health -= W.force * 0.1
|
||||
else if(!shock(user, 70))
|
||||
switch(W.damtype)
|
||||
if(STAMINA)
|
||||
return
|
||||
if(BURN)
|
||||
playsound(loc, 'sound/items/welder.ogg', 80, 1)
|
||||
else
|
||||
|
||||
@@ -58,6 +58,8 @@
|
||||
|
||||
/obj/structure/mirror/attackby(obj/item/I as obj, mob/living/user as mob)
|
||||
user.do_attack_animation(src)
|
||||
if(I.damtype == STAMINA)
|
||||
return
|
||||
if(shattered)
|
||||
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
|
||||
return
|
||||
|
||||
@@ -207,15 +207,16 @@
|
||||
/obj/structure/table/attack_paw(mob/user)
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/table/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 50, 1)
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
table_destroy(1)
|
||||
return 1
|
||||
|
||||
/obj/structure/table/attack_hand(mob/living/user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if(HULK in user.mutations)
|
||||
user.do_attack_animation(src)
|
||||
visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 50, 1)
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
table_destroy(1)
|
||||
return
|
||||
|
||||
/obj/structure/table/attack_tk() // no telehulk sorry
|
||||
return
|
||||
@@ -460,19 +461,17 @@
|
||||
/obj/structure/table/reinforced/attack_paw(mob/user)
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/table/reinforced/attack_hand(mob/user as mob)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if ((HULK in user.mutations))
|
||||
if (prob(75))
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
|
||||
usr << text("<span class='notice'>You kick [src] into pieces.</span>")
|
||||
usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
table_destroy(1)
|
||||
return
|
||||
else
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
usr << text("<span class='notice'>You kick [src].</span>")
|
||||
return
|
||||
/obj/structure/table/reinforced/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
if(prob(75))
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
|
||||
user << text("<span class='notice'>You kick [src] into pieces.</span>")
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
table_destroy(1)
|
||||
else
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
user << text("<span class='notice'>You kick [src].</span>")
|
||||
return 1
|
||||
|
||||
/*
|
||||
* Racks
|
||||
@@ -547,19 +546,19 @@
|
||||
/obj/structure/rack/attack_paw(mob/living/user)
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/rack/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
rack_destroy()
|
||||
return 1
|
||||
|
||||
/obj/structure/rack/attack_hand(mob/living/user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
playsound(loc, 'sound/items/dodgeball.ogg', 80, 1)
|
||||
user.visible_message("<span class='warning'>[user] kicks [src].</span>", \
|
||||
"<span class='warning'>You kick [src].</span>")
|
||||
|
||||
if(HULK in user.mutations)
|
||||
rack_destroy()
|
||||
else
|
||||
health -= rand(1,2)
|
||||
healthcheck()
|
||||
|
||||
health -= rand(1,2)
|
||||
healthcheck()
|
||||
|
||||
/obj/structure/rack/attack_alien(mob/living/user)
|
||||
user.do_attack_animation(src)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/state = 0
|
||||
var/reinf = 0
|
||||
var/disassembled = 0
|
||||
var/shuttlew = 0
|
||||
var/wtype = "glass"
|
||||
var/fulltile = 0
|
||||
var/obj/item/stack/rods/storedrods
|
||||
var/obj/item/weapon/shard/storedshard
|
||||
@@ -28,15 +28,8 @@
|
||||
storedshard = new/obj/item/weapon/shard(src)
|
||||
ini_dir = dir
|
||||
if(reinf)
|
||||
icon_state = "rwindow"
|
||||
desc = "A reinforced window."
|
||||
name = "reinforced window"
|
||||
state = 2*anchored
|
||||
if(opacity)
|
||||
icon_state = "twindow"
|
||||
storedrods = new/obj/item/stack/rods(src)
|
||||
else
|
||||
icon_state = "window"
|
||||
|
||||
air_update_turf(1)
|
||||
update_nearby_icons()
|
||||
@@ -123,22 +116,25 @@
|
||||
add_fingerprint(user)
|
||||
playsound(loc, 'sound/effects/Glassknock.ogg', 50, 1)
|
||||
|
||||
/obj/structure/window/attack_hulk(mob/living/carbon/human/user)
|
||||
if(!can_be_reached(user))
|
||||
return
|
||||
..(user, 1)
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!"))
|
||||
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
|
||||
storedshard.add_fingerprint(user)
|
||||
if(storedrods)
|
||||
storedrods.add_fingerprint(user)
|
||||
hit(50)
|
||||
return 1
|
||||
|
||||
/obj/structure/window/attack_hand(mob/user as mob)
|
||||
if(!can_be_reached(user))
|
||||
return
|
||||
if(HULK in user.mutations)
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!"))
|
||||
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
|
||||
storedshard.add_fingerprint(user)
|
||||
if(storedrods)
|
||||
storedrods.add_fingerprint(user)
|
||||
spawnfragments()
|
||||
else
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.visible_message("<span class='notice'>[user] knocks on [src].</span>")
|
||||
add_fingerprint(user)
|
||||
playsound(loc, 'sound/effects/Glassknock.ogg', 50, 1)
|
||||
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.visible_message("<span class='notice'>[user] knocks on [src].</span>")
|
||||
add_fingerprint(user)
|
||||
playsound(loc, 'sound/effects/Glassknock.ogg', 50, 1)
|
||||
|
||||
/obj/structure/window/attack_paw(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
@@ -405,17 +401,10 @@
|
||||
if(anchored)
|
||||
for(var/obj/structure/window/W in orange(src,1))
|
||||
if(W.anchored && W.density && W.fulltile) //Only counts anchored, not-destroyed fill-tile windows.
|
||||
if(abs(x-W.x)-abs(y-W.y) ) //doesn't count windows, placed diagonally to src
|
||||
junction |= get_dir(src,W)
|
||||
if(opacity)
|
||||
icon_state = "twindow[junction]"
|
||||
else
|
||||
if(shuttlew)
|
||||
icon_state = "swindow[junction]"
|
||||
else if(reinf)
|
||||
icon_state = "rwindow[junction]"
|
||||
else
|
||||
icon_state = "window[junction]"
|
||||
if(src.wtype == W.wtype)
|
||||
if(abs(x-W.x)-abs(y-W.y) ) //doesn't count windows, placed diagonally to src
|
||||
junction |= get_dir(src,W)
|
||||
icon_state = "[initial(icon_state)][junction]"
|
||||
|
||||
overlays.Cut()
|
||||
var/ratio = health / maxhealth
|
||||
@@ -463,9 +452,10 @@
|
||||
|
||||
/obj/structure/window/shuttle
|
||||
name = "shuttle window"
|
||||
desc = "A strong, air-locked pod window that is extremely difficult to destroy."
|
||||
desc = "A reinforced, air-locked pod window."
|
||||
icon_state = "swindow"
|
||||
dir = 5
|
||||
maxhealth = 100
|
||||
shuttlew = 1
|
||||
wtype = "shuttle"
|
||||
fulltile = 1
|
||||
reinf = 1
|
||||
@@ -20,6 +20,9 @@
|
||||
..()
|
||||
builtin_sheet = new sheet_type
|
||||
|
||||
/turf/simulated/wall/attack_tk()
|
||||
return
|
||||
|
||||
/turf/simulated/wall/proc/dismantle_wall(devastated=0, explode=0)
|
||||
if(devastated)
|
||||
devastate_wall()
|
||||
@@ -84,19 +87,6 @@
|
||||
|
||||
/turf/simulated/wall/attack_paw(mob/living/user as mob)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if ((HULK in user.mutations))
|
||||
user.do_attack_animation(src)
|
||||
if (prob(hardness))
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
|
||||
user << "<span class='notice'>You smash through the wall.</span>"
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
dismantle_wall(1)
|
||||
return
|
||||
else
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
usr << text("<span class='notice'>You punch the wall.</span>")
|
||||
return
|
||||
|
||||
return src.attack_hand(user)
|
||||
|
||||
|
||||
@@ -109,21 +99,21 @@
|
||||
dismantle_wall(1)
|
||||
return
|
||||
|
||||
/turf/simulated/wall/attack_hulk(mob/user)
|
||||
..(user, 1)
|
||||
if(prob(hardness))
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
|
||||
user << text("<span class='notice'>You smash through the wall.</span>")
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
dismantle_wall(1)
|
||||
|
||||
else
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
user << text("<span class='notice'>You punch the wall.</span>")
|
||||
return 1
|
||||
|
||||
/turf/simulated/wall/attack_hand(mob/user as mob)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if (HULK in user.mutations)
|
||||
if (prob(hardness))
|
||||
playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
|
||||
usr << text("<span class='notice'>You smash through the wall.</span>")
|
||||
usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
dismantle_wall(1)
|
||||
return
|
||||
else
|
||||
playsound(src, 'sound/effects/bang.ogg', 50, 1)
|
||||
usr << text("<span class='notice'>You punch the wall.</span>")
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You push the wall but nothing happens!</span>"
|
||||
playsound(src, 'sound/weapons/Genhit.ogg', 25, 1)
|
||||
src.add_fingerprint(user)
|
||||
@@ -288,4 +278,4 @@
|
||||
|
||||
/turf/simulated/wall/narsie_act()
|
||||
if(prob(20))
|
||||
ChangeTurf(/turf/simulated/wall/cult)
|
||||
ChangeTurf(/turf/simulated/wall/cult)
|
||||
@@ -28,11 +28,6 @@
|
||||
else
|
||||
M << "<span class='warning'>This wall is far too strong for you to destroy.</span>"
|
||||
|
||||
/turf/simulated/wall/r_wall/attack_hand(mob/user as mob)
|
||||
//this is ugly
|
||||
if ((HULK in user.mutations) || !d_state)
|
||||
..()
|
||||
|
||||
/turf/simulated/wall/r_wall/try_destroy(obj/item/weapon/W as obj, mob/user as mob, turf/T as turf)
|
||||
if(istype(W, /obj/item/weapon/melee/energy/blade))
|
||||
user << "<span class='notice'>This wall is too thick to slice through. You will need to find a different path.</span>"
|
||||
|
||||
@@ -302,7 +302,7 @@
|
||||
var/mob/living/carbon/M = slipper
|
||||
if (M.m_intent=="walk" && (lube&NO_SLIP_WHEN_WALKING))
|
||||
return 0
|
||||
if(!M.lying && (M.status_flags & CANWEAKEN) && !(HULK in M.mutations)) // we slip those who are standing and can fall.
|
||||
if(!M.lying && (M.status_flags & CANWEAKEN)) // we slip those who are standing and can fall.
|
||||
var/olddir = M.dir
|
||||
M.Stun(s_amount)
|
||||
M.Weaken(w_amount)
|
||||
|
||||
@@ -243,7 +243,8 @@ var/list/admin_verbs_hideable = list(
|
||||
/client/proc/startSinglo,
|
||||
/client/proc/fps,
|
||||
/client/proc/cmd_admin_grantfullaccess,
|
||||
/client/proc/cmd_admin_areatest
|
||||
/client/proc/cmd_admin_areatest,
|
||||
/client/proc/readmin
|
||||
)
|
||||
if(holder)
|
||||
verbs.Remove(holder.rank.adds)
|
||||
@@ -485,11 +486,11 @@ var/list/admin_verbs_hideable = list(
|
||||
set category = "Admin"
|
||||
|
||||
if(holder)
|
||||
if(alert("Confirm self-deadmin for the round? You can't re-admin yourself without someont promoting you.",,"Yes","No") == "Yes")
|
||||
log_admin("[src] deadmined themself.")
|
||||
message_admins("[src] deadmined themself.")
|
||||
deadmin()
|
||||
src << "<span class='interface'>You are now a normal player.</span>"
|
||||
log_admin("[src] deadmined themself.")
|
||||
message_admins("[src] deadmined themself.")
|
||||
deadmin()
|
||||
verbs += /client/proc/readmin
|
||||
src << "<span class='interface'>You are now a normal player.</span>"
|
||||
feedback_add_details("admin_verb","DAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/toggle_log_hrefs()
|
||||
@@ -510,3 +511,52 @@ var/list/admin_verbs_hideable = list(
|
||||
if(holder)
|
||||
src.holder.output_ai_laws()
|
||||
|
||||
/client/proc/readmin()
|
||||
set name = "Re-admin self"
|
||||
set category = "Admin"
|
||||
set desc = "Regain your admin powers."
|
||||
var/list/rank_names = list()
|
||||
for(var/datum/admin_rank/R in admin_ranks)
|
||||
rank_names[R.name] = R
|
||||
var/datum/admins/D = admin_datums[ckey]
|
||||
var/rank = null
|
||||
if(config.admin_legacy_system)
|
||||
//load text from file
|
||||
var/list/Lines = file2list("config/admins.txt")
|
||||
for(var/line in Lines)
|
||||
var/list/splitline = text2list(line, " = ")
|
||||
if(splitline[1] == ckey)
|
||||
if(splitline.len >= 2)
|
||||
rank = ckeyEx(splitline[2])
|
||||
break
|
||||
continue
|
||||
else
|
||||
if(!dbcon.IsConnected())
|
||||
message_admins("Warning, mysql database is not connected.")
|
||||
src << "Warning, mysql database is not connected."
|
||||
return
|
||||
var/sql_ckey = sanitizeSQL(ckey)
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT rank FROM [format_table_name("admin")] WHERE ckey = '[sql_ckey]'")
|
||||
query.Execute()
|
||||
while(query.NextRow())
|
||||
rank = ckeyEx(query.item[1])
|
||||
if(!D)
|
||||
if(rank_names[rank] == null)
|
||||
var/error_extra = ""
|
||||
if(!config.admin_legacy_system)
|
||||
error_extra = " Check mysql DB connection."
|
||||
error("Error while re-adminning [src], admin rank ([rank]) does not exist.[error_extra]")
|
||||
src << "Error while re-adminning, admin rank ([rank]) does not exist.[error_extra]"
|
||||
return
|
||||
D = new(rank_names[rank],ckey)
|
||||
var/client/C = directory[ckey]
|
||||
D.associate(C)
|
||||
message_admins("[src] re-adminned themselves.")
|
||||
log_admin("[src] re-adminned themselves.")
|
||||
feedback_add_details("admin_verb","RAS")
|
||||
verbs -= /client/proc/readmin
|
||||
return
|
||||
else
|
||||
src << "You are already an admin."
|
||||
verbs -= /client/proc/readmin
|
||||
return
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
if(!armed)
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/user = usr
|
||||
if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)))
|
||||
if((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY && prob(50))
|
||||
user << "Your hand slips, setting off the trigger."
|
||||
pulse(0)
|
||||
update_icon()
|
||||
@@ -65,11 +65,11 @@
|
||||
pulse(0)
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/attack_self(mob/living/user as mob)
|
||||
/obj/item/device/assembly/mousetrap/attack_self(mob/living/carbon/human/user as mob)
|
||||
if(!armed)
|
||||
user << "<span class='notice'>You arm [src].</span>"
|
||||
else
|
||||
if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)))
|
||||
if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50))
|
||||
var/which_hand = "l_hand"
|
||||
if(!user.hand)
|
||||
which_hand = "r_hand"
|
||||
@@ -83,9 +83,9 @@
|
||||
playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user as mob)
|
||||
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user as mob)
|
||||
if(armed)
|
||||
if(((user.getBrainLoss() >= 60 || CLUMSY in user.mutations)) && prob(50))
|
||||
if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50))
|
||||
var/which_hand = "l_hand"
|
||||
if(!user.hand)
|
||||
which_hand = "r_hand"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user