diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..e1893939
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,23 @@
+language: cpp
+
+matrix:
+ include:
+ - os: linux
+ compiler: gcc
+ script: cd main/source/linux && make
+ env: OPJ_CI_ARCH=i386
+ addons:
+ apt:
+ packages:
+ - gcc-multilib
+ - g++-multilib
+ - libc6-i386
+ - libcurl4-openssl-dev:i386
+ - libpng12-dev:i386
+
+ - os: osx
+ compiler: clang
+ before_script:
+ - export CC=clang
+ - export CPLUS=clang++
+ script: cd main/source/linux && make
\ No newline at end of file
diff --git a/COPYING.txt b/COPYING.txt
new file mode 100644
index 00000000..92b370f0
--- /dev/null
+++ b/COPYING.txt
@@ -0,0 +1,674 @@
+GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/README.md b/README.md
index 9d9adb16..beb1a819 100644
--- a/README.md
+++ b/README.md
@@ -1,73 +1,108 @@
-# Natural Selection v3.2.1a
-This is a complete rebuild of the game [Natural Selection] for Windows and Linux. After the SteamPipe update the game remained in an pretty bad state for years, therefore I decided to recompile its sources which are provided by [Unknownworlds Entertainment]. With this update this might be the first half-life mod which achieves multi-platform support. Speaking of this you are encouraged to compile for Mac OS X. The ultimate goal is to provide a better expierence of the Natural Selection gameplay on all major platforms and a possible distribution in the future through [Steam].
+# Natural Selection v3.2.2
-### Downloads
-Here you find the new compiled `.dlls` or `.so` files for client and server. If you just want to play or to host a server you can download them here:
-- [ns_patch_v321a.7z]
+[![Build Status](https://travis-ci.org/ENSL/NS.svg?branch=develop)](https://travis-ci.org/ENSL/NS)
-Remember to extract them to your Half-Life/ns directory.
+This is a complete rebuild of the game [Natural Selection] for Windows, Linux, and OS X. It includes updates and fixes by pierow, Prefix, fmoraw, Bacsu, puzl, and others.
-The offical download url for the complete version ns v3.2 is not working with firefox. Either use:
-```sh
-$ wget http://www.unknownworlds.com/files/ns/ns_install_v32.exe
-```
-or
-```sh
-$ curl -LO http://www.unknownworlds.com/files/ns/ns_install_v32.exe
-```
-or follow this link http://sllegacy.unknownworlds.com/files/ns/ns_install_v32.exe
-### Changes
-In order to make this game work for linux the old half-life engine files were replaced with the newer ones. In addtion some changes are accounted for the use of an acient glibc library. Some changes to the game itself have been made and these include:
-- The ChatPanel has been replaced in favor of the old hl chat.
-- The observatory has now a spherical detection like the sensory chamber
-- Removed special NS gamma since it is windows only
+## Downloads
+
+The recommended way to install the game or update an existing installation for Windows users is through the [Natural Selection Launcher](https://github.com/ENSL/NaturalLauncher/releases/) (Thanks Khelben). Simply download the installation exe or portable zip from there and run the launcher. Linux and OS X users, as well as those that want to install or patch the game manually, can find releases [here](https://github.com/ENSL/NS/releases).
+
+As the game is a Half-Life mod, Steam and Half-Life installations are required to play the game.
+
+A fresh install of NS from the launcher comes with updated config files containing everything you need to get playing on the standard settings most players prefer. There are also official marine and alien config files that can be uncommented so your binds change when joining the respective teams, but they are off by default as to not override any binds users wish to change within the game menus. Those that wish to use the Nine Legends competitive pack can do so through the settings in advanced options without having to download or install it.
-The plan is to bring the chat and the gamma back when a cross-platfrom solution can be achieved.
+If you wish to experience the game's default settings and binds from NS 3.2 you can type `exec olddefaults.cfg` in console before loading a map. A file named `backupb4old.cfg` will be saved with your previous settings if you wish to return to those after. Note that gamma ramp is no longer a working feature, so brightness will be a slightly different than it originally was, but the game was always very dark by default and still is with that config.
-### Bugs
-With great changes come great bugs.
-- Chat input is not visible while spectating
-- [sg reload bug]
-- [FPS_Effects] FPS dependant fire rates and player physics
-- gorge's view rotates when he drops a structure from the popup menu?
-- The background of text in the menu or in popups does not look nice possible realted to the `special ns gamma`.
+## Changes
+
+Updates include:
+
+- Linux and OS X support
+- Natural Selection Launcher for installing and updating the game
+- Widescreen support (now expands FOV up to 16:9 aspect instead of cutting it off)
+- Many FPS dependencies fixed, including jetpack acceleration, so the game can now be fairly played at 200+ FPS
+- Perfect jump timing no longer required for bunnyhopping (server adjustable via sv_jumpmode)
+- New minimal HUD (work in progress) and the Nine Legends HUD can be selected through advanced options or hud_style and hud_mapstyle
+- New crosshair system that can be adjusted through the advanced options and cl_cross commands (Thanks [OpenAG](https://github.com/YaLTeR/OpenAG))
+- Ambient sounds can be changed in advanced options or via cl_ambientsound
+- Raw input and sensitivity scaling options now available
+- Spectator overlay is now transparent and shows health/armor
+- Numerous bug fixes for things that broke from recent updates to Half-Life
+- The observatory has now a spherical detection like the sensory chamber
+
+## Bugs
+- Process hangs on exit sometimes
+- Arrow keys don't work for the commander
+- Chatbox eats inputs occasionally
+- Some mice experience issues with a previous fix for centering the cursor when the popupmenu is open
+- Trying to shoot the shotgun while reloading is very fickle and has poor syncronization with the server. A balance-conscientious rework is planned, but yet to be made.
+- HUD elements are stretched and/or poorly placed in widescreen. User options/commands for hud element placement are planned.
+- Clicking on the scoreboard can cause +attack to be stuck after closing the scoreboard until firing again.
+- FPS dependant fire rates and player physics. These have significantly improved with the Half-Life update and are also a non-issue now that other FPS dependency fixes are in the game and the game can be played at high frame rates, where fire rates don't vary. Very high framerates cause collision issues and other engine limitations, so an fps of 200 or 250 is recommended unless fixed.
- Flashing available alien upgrade icons (defense, movement and sensory) tend to disappear when a player dies and respawns. The icons won't appear until the alien chooses an upgrade.
- func_train and func_tracktrain entities don't reset to their original positions when a round has ended
-- windows server works only with the hlds tool
If you find more please report them!
-### Compile
-First you will need to get the files:
+## Compiling
+
+For Windows, compilation should be working if you have VS2017 installed.
+
+For Linux:
+
+First you need some libraries. On Ubuntu it is:
+
+```sh
+apt-get install build-essential git gdb gcc-multilib g++-multilib libc6-i386 libcurl4-openssl-dev:i386 libpng12-dev:i386
+```
+
+Then you will need to get the files:
```sh
-$ git clone https://github.com/fmoraw/NS.git
+git clone https://github.com/fmoraw/NS.git
```
-Then goto `NS/main/source/linux` and use `make hl_cll` for the client and `make ns` for the server.
+Then to build `` and use `make hl_cll` for the client and `make ns` for the server.
+
+```sh
+cd NS/main/source/linux
+```
+
+For client use `make hl_cll` and for server use `make ns`
-Make sure you have `g++-multilib` set up for x64 operating systems. For windows compilation should be working if you have VS2010 installed.
If you get the this error when running the app: `Fatal Error - could not load library (client.so)`, With a high chance it is because of some `UNDEFINED SYMBOLS` in the shared library. But you can check this with this command:
+
``` sh
-$ ldd -r -d client.so
+ldd -r -d client.so
```
+Make sure you have vgui.so copied to cl_dll folder too on Linux.
+
+## Debugging
+
If you want to debug:
```sh
-$ LD_LIBRARY_PATH=".:$LD_LIBRARY_PATH" gdb ./hl_linux r -game ns -dev -steam
+LD_LIBRARY_PATH=".:$LD_LIBRARY_PATH" gdb ./hl_linux r -game ns -dev -steam
```
Due to the new engine and the nature of Linux I had to make a lot of changes! You can find them with grep -Ril `@Linux`.
+For MacOS & lldb:
+```
+DYLD_LIBRARY_PATH=".:$DYLD_LIBRARY_PATH" /Applications/Xcode.app/Contents/Developer/usr/bin/lldb -- ./hl_osx r -game ns -dev -steam -windowed
+```
+Have to use XCode's lldb to get around https://stackoverflow.com/a/33589760 (Lack of environment variables). `-windowed` as windowed mode makes it easier to deal with crashes on MacOS.
+
### Hosting a server
+
Since servers are really rare at this point in time here is a tutorial how to set up an [Natural Selection] server with [hlds].
1. Follow these steps: https://developer.valvesoftware.com/wiki/SteamCMD
2. Copy the [Natural Selection] directory to steamcmd/servers/
3. Run the game :
```sh
-$ ./hlds_run -game ns -autoupdate +map ns_eclipse + sv_secure 1 + port 27015 + ip 127.0.0.1 +hostname "Natural Selection" +maxplayers 32
+./hlds_run -game ns -autoupdate +map ns_eclipse + sv_secure 1 + port 27015 + ip 127.0.0.1 +hostname "Natural Selection" +maxplayers 32
```
-
If you are behind a NAT(Router) make sure to open at least those ports:
- 27015 UDP (game transmission, pings)
- 26900 UDP (VAC service) -- automatically increments if used in case of additional server processes
@@ -82,17 +117,15 @@ There is an updated version of metamod called [metamodp](http://metamod-p.source
- [rcbot linux dlls](http://filebase.bots-united.com/index.php?act=download&id=428)
### Usefull links
-* [Usefull collection of ns files server addons, maps and erverything ](http://www.brywright.co.uk/downloads/files/index.php?dir=natural-selection/)
+
+* [Usefull collection of ns files server addons, maps and everything ](http://www.brywright.co.uk/downloads/files/index.php?dir=natural-selection/)
* [Great collection of ns guides/tutorials](http://www.naturalns.clanservers.com/forums/index.php?topic=5.0)
* [rcbot downloads](http://filebase.bots-united.com/index.php?act=category&id=19)
* [dillinger.io markdown editor](http://dillinger.io/)
[Natural Selection]:
[Unknownworlds Entertainment]:
- [ns_patch_v321a.7z]:
- [FPS_Effects]:
[Steam]:
- [sg reload bug]:
[hlds]:
[rcbot]:
diff --git a/main/alienofficial.cfg b/main/alienofficial.cfg
new file mode 100644
index 00000000..ebe0382a
--- /dev/null
+++ b/main/alienofficial.cfg
@@ -0,0 +1,5 @@
+//Alien cfg that is part of a default installation on the NS Launcher
+//Activated by pressing F2 (which also is used to join aliens)
+
+//bind "mouse2" "+movement"
+//psoff
\ No newline at end of file
diff --git a/main/cl_dlls/client.dll b/main/cl_dlls/client.dll
index 6b1fe1c5..08d0f97e 100644
Binary files a/main/cl_dlls/client.dll and b/main/cl_dlls/client.dll differ
diff --git a/main/co_umbra.wad b/main/co_umbra.wad
new file mode 100644
index 00000000..7fb9d931
Binary files /dev/null and b/main/co_umbra.wad differ
diff --git a/main/config.cfg b/main/config.cfg
index 9cb24302..8cb7a17b 100644
--- a/main/config.cfg
+++ b/main/config.cfg
@@ -6,10 +6,7 @@ bind "TAB" "+showscores"
bind "ENTER" "messagemode"
bind "ESCAPE" "cancelselect"
bind "SPACE" "+jump"
-bind "'" "+moveup"
-bind "+" "sizeup"
bind "," "impulse 123"
-bind "-" "sizedown"
bind "." "impulse 124"
bind "/" "impulse 125"
bind "0" "slot10"
@@ -22,10 +19,6 @@ bind "6" "slot6"
bind "7" "slot7"
bind "8" "slot8"
bind "9" "slot9"
-bind ";" "+mlook"
-bind "=" "sizeup"
-bind "[" "invprev"
-bind "]" "invnext"
bind "`" "toggleconsole"
bind "a" "+moveleft"
bind "c" "+showmap"
@@ -35,13 +28,14 @@ bind "f" "impulse 100"
bind "g" "impulse 3"
bind "l" "impulse 105"
bind "q" "lastinv"
-bind "r" "+reload"
+bind "r" "+movement"
bind "s" "+back"
-bind "t" "impulse 201"
+bind "b" "impulse 11"
+bind "t" "+popupmenu"
bind "u" "messagemode2"
-bind "v" "impulse 9"
+bind "v" "impulse 10"
bind "w" "+forward"
-bind "x" "impulse 81"
+bind "x" "impulse 14"
bind "y" "messagemode"
bind "z" "impulse 80"
bind "~" "toggleconsole"
@@ -52,47 +46,50 @@ bind "RIGHTARROW" "+right"
bind "ALT" "+voicerecord"
bind "CTRL" "+duck"
bind "SHIFT" "+speed"
-bind "F1" "jointeamone"
-bind "F2" "jointeamtwo"
+alias "marinecfg" "exec marineofficial.cfg"
+alias "aliencfg" "exec alienofficial.cfg"
+bind "F1" "jointeamone;marinecfg"
+bind "F2" "jointeamtwo;aliencfg"
bind "F3" "autoassign"
bind "F4" "readyroom"
bind "F5" "snapshot"
-bind "F6" "save quick"
-bind "F7" "load quick"
-bind "F10" "quit prompt"
-bind "INS" "+klook"
bind "PGDN" "+lookdown"
bind "PGUP" "+lookup"
bind "END" "centerview"
bind "MWHEELDOWN" "invnext"
bind "MWHEELUP" "invprev"
bind "MOUSE1" "+attack"
-bind "MOUSE2" "+popupmenu"
+bind "MOUSE2" "+movement"
bind "MOUSE3" "+popupmenu"
bind "MOUSE4" "lastinv"
bind "PAUSE" "pause"
_snd_mixahead "0.1"
-ati_npatch "1.0"
-ati_subdiv "2.0"
+ati_npatch "0"
+ati_subdiv "0"
bgmvolume "1.000000"
bottomcolor "144.889999"
-brightness "1.000000"
+brightness "5"
cl_allowdownload "1"
cl_allowupload "1"
cl_autohelp "1.0"
cl_buildmessages "1"
cl_centerentityid "0.0"
cl_cmdbackup "2"
-cl_cmdrate "30"
+cl_cmdrate "100"
cl_cmhotkeys "qwerasdfzxcv"
+cl_customcrosshair "0"
cl_dlmax "128"
cl_download_ingame "1"
-cl_dynamiclights "1"
+cl_dynamiclights "0"
cl_forcedefaultfov "0"
-cl_gammaramp "1"
+cl_gammaramp "0"
cl_highdetail "1"
cl_himodels "0"
+cl_iconb "221"
+cl_icong "149"
+cl_iconr "0"
cl_idealpitchscale "0.8"
+cl_labelhivesight "1"
cl_labelmaps "1"
cl_lc "1"
cl_logocolor "#Valve_Orange"
@@ -100,24 +97,26 @@ cl_logofile "lambda"
cl_lw "1"
cl_musicdelay "90"
cl_musicdirectory ""
-cl_musicenabled "1.0"
cl_musicvolume "155"
+cl_musicenabled "0"
cl_particleinfo "0"
cl_quickselecttime ".15"
cl_timeout "60"
-cl_updaterate "20"
+cl_updaterate "100"
cl_vsmoothing "0.05"
con_color "255 180 30"
console "1.000000"
-crosshair "1.000000"
-fps_max "72.0"
+crosshair "0"
+fps_max "250"
+fps_override "1"
fps_modem "0.0"
-gamma "2.500000"
+gamma "3"
+gl_vsync "0"
gl_dither "1"
gl_flipmatrix "0"
gl_fog "1"
gl_monolights "0"
-gl_overbright "0"
+gl_overbright "1"
gl_polyoffset "0.1"
hisound "1"
hpk_maxsize "4"
@@ -125,7 +124,7 @@ hud_capturemouse "1"
hud_centerid "0"
hud_classautokill "1"
hud_draw "1"
-hud_fastswitch "0"
+hud_fastswitch "1"
hud_takesshots "0"
joystick "0"
lookspring "0.000000"
@@ -137,7 +136,7 @@ m_side "0.8"
m_yaw "0.022"
model "barney"
MP3FadeTime "2.0"
-MP3Volume "0.8"
+MP3Volume "0"
mp_decals "300"
name "NSPlayer"
net_graph "0"
@@ -162,7 +161,7 @@ s_refdelay "4"
s_refgain "0.4"
s_rolloff "1.0"
s_verbwet "0.25"
-sensitivity "4.960000"
+sensitivity "2"
skin ""
suitvolume "0.250000"
sv_aim "0"
@@ -174,7 +173,14 @@ voice_enable "1"
voice_forcemicrecord "1"
voice_modenable "1"
voice_scale "1"
-volume "0.800000"
+volume "0.500000"
+m_rawinput "1"
+zoom_sensitivity_ratio "1"
+lightgamma "2"
+ex_interp "0.05"
+cl_cross "1"
+rate "30000"
+cl_bob "0"
+
+mlook
-+jlook
exec userconfig.cfg
diff --git a/main/delta.lst b/main/delta.lst
index 583637de..1003a6aa 100644
--- a/main/delta.lst
+++ b/main/delta.lst
@@ -178,7 +178,7 @@ entity_state_player_t gamedll Player_Encode
DEFINE_DELTA( spectator, DT_INTEGER, 1, 1.0 ),
DEFINE_DELTA( iuser3, DT_INTEGER, 6, 1.0 ), // Need player info for AvHCommanderModeHandler::LookupClassNameForEntity
DEFINE_DELTA( iuser4, DT_INTEGER, 32, 1.0 ), // NS custom parameter (needs 32 for AvHSpecialSound)
- DEFINE_DELTA( fuser2, DT_FLOAT, 12, 1.0 ), // For player health (energy is predicted so this isn't needed for it)
+ DEFINE_DELTA( fuser2, DT_FLOAT, 14, 1.0 ), // For player health (energy is predicted so this isn't needed for it)
DEFINE_DELTA( vuser1[0], DT_ANGLE, 8, 1.0 ),
DEFINE_DELTA( vuser1[1], DT_ANGLE, 8, 1.0 ),
DEFINE_DELTA( vuser1[2], DT_ANGLE, 8, 1.0 ),
diff --git a/main/dlls/ns.dll b/main/dlls/ns.dll
index 940d35e1..99a8c6ea 100644
Binary files a/main/dlls/ns.dll and b/main/dlls/ns.dll differ
diff --git a/main/gfx/shell/kb_act.lst b/main/gfx/shell/kb_act.lst
index 036c2634..679a9208 100644
--- a/main/gfx/shell/kb_act.lst
+++ b/main/gfx/shell/kb_act.lst
@@ -19,7 +19,7 @@
"blank" "=========================="
"+attack" "Attack (important)"
"+use" "Use/build"
-"+reload" "Reload weapon"
+"+movement" "Reload/Alien movement"
"impulse 100" "Flashlight"
"+showmap" "Show map"
"+showscores" "Display multiplayer scores"
@@ -93,4 +93,4 @@
"impulse 201" "Spray logo"
"snapshot" "Take screen shot"
"pause" "Pause game"
-"quit" "Quit game"
\ No newline at end of file
+"quit" "Quit game"
diff --git a/main/gfx/shell/kb_def.lst b/main/gfx/shell/kb_def.lst
index 404dbb52..2e2fc419 100644
--- a/main/gfx/shell/kb_def.lst
+++ b/main/gfx/shell/kb_def.lst
@@ -17,7 +17,7 @@
"INS" "+klook"
";" "+mlook"
"c" "+showmap"
-"r" "+reload"
+"r" "+movement"
"SHIFT" "+speed"
"MOUSE1" "+attack"
"MOUSE2" "+popupmenu"
diff --git a/main/gfx/vgui/640_checkset.tga b/main/gfx/vgui/640_checkset.tga
index f8df2b7e..372fb992 100644
Binary files a/main/gfx/vgui/640_checkset.tga and b/main/gfx/vgui/640_checkset.tga differ
diff --git a/main/gfx/vgui/640_checkunset.tga b/main/gfx/vgui/640_checkunset.tga
index 87b380ff..0c43f607 100644
Binary files a/main/gfx/vgui/640_checkunset.tga and b/main/gfx/vgui/640_checkunset.tga differ
diff --git a/main/gfx/vgui/640_scoreboardgl.tga b/main/gfx/vgui/640_scoreboardgl.tga
new file mode 100644
index 00000000..78bc9a3a
Binary files /dev/null and b/main/gfx/vgui/640_scoreboardgl.tga differ
diff --git a/main/gfx/vgui/640_scoreboardhmg.tga b/main/gfx/vgui/640_scoreboardhmg.tga
new file mode 100644
index 00000000..d9e3351e
Binary files /dev/null and b/main/gfx/vgui/640_scoreboardhmg.tga differ
diff --git a/main/gfx/vgui/640_scoreboardlmg.tga b/main/gfx/vgui/640_scoreboardlmg.tga
new file mode 100644
index 00000000..21fd4e6b
Binary files /dev/null and b/main/gfx/vgui/640_scoreboardlmg.tga differ
diff --git a/main/gfx/vgui/640_scoreboardmine.tga b/main/gfx/vgui/640_scoreboardmine.tga
new file mode 100644
index 00000000..eefa18d5
Binary files /dev/null and b/main/gfx/vgui/640_scoreboardmine.tga differ
diff --git a/main/gfx/vgui/640_scoreboardsg.tga b/main/gfx/vgui/640_scoreboardsg.tga
new file mode 100644
index 00000000..19f6639e
Binary files /dev/null and b/main/gfx/vgui/640_scoreboardsg.tga differ
diff --git a/main/gfx/vgui/640_scoreboardwelder.tga b/main/gfx/vgui/640_scoreboardwelder.tga
new file mode 100644
index 00000000..c34f98fd
Binary files /dev/null and b/main/gfx/vgui/640_scoreboardwelder.tga differ
diff --git a/main/liblist.gam b/main/liblist.gam
index c4ccd189..1d171d7f 100644
--- a/main/liblist.gam
+++ b/main/liblist.gam
@@ -2,13 +2,16 @@
// Natural Selection //
// by Charlie Cleveland //
////////////////////////////
-game "Natural Selection 3.2 (LUA)"
-url_info "www.natural-selection.org"
-url_dl "http://www.natural-selection.org/"
-version "v3.0"
+game "Natural Selection"
+developer "Unknown Worlds"
+developer_url "http://www.unknownworlds.com/ns/"
+url_info "http://www.unknownworlds.com/ns/"
+url_dl "http://www.unknownworlds.com/ns/view?action=files"
+icon "ns"
+version "v3.2"
size "165000000"
svonly "0"
-secure "1"
+secure "0"
cldll "cl_dlls\client.dll"
hlversion "1110"
// How to allow training but disable "New game"?
diff --git a/main/listenserver.cfg b/main/listenserver.cfg
index 42c87762..0b9a0478 100644
--- a/main/listenserver.cfg
+++ b/main/listenserver.cfg
@@ -11,9 +11,6 @@
// Common between listenserver.cfg and server.cfg //
////////////////////////////////////////////////////
-// Default server name. Change to "Bob's Server", etc.
-hostname "Natural Selection v3.1"
-
// Must specify sv_region, or it won't show up in Steam server browser
// 0: US East coast
// 1: US West coast
@@ -72,6 +69,9 @@ sv_clienttrace 3.5
///////////////////////////////
sv_lan 0
+// Forces a limit on structures on the server
+sv_structurelimit 300
+
// disable clients' ability to pause the server
pausable 0
diff --git a/main/mapcycle.txt b/main/mapcycle.txt
index 6fa9db40..b3be2319 100644
--- a/main/mapcycle.txt
+++ b/main/mapcycle.txt
@@ -23,20 +23,24 @@
// - Reduced maxplayers on bast and hera for CPU reasons
//
ns_eon "\minplayers\16\maxplayers\32\"
+ns_lucid "\minplayers\10\maxplayers\32\"
ns_metal "\minplayers\16\maxplayers\32\"
ns_caged "\minplayers\16\maxplayers\32\"
co_sava "\minplayers\6\maxplayers\20\"
co_angst "\minplayers\4\maxplayers\20\"
ns_hera "\minplayers\16\maxplayers\24\"
ns_lost "\minplayers\16\maxplayers\32\"
+ns_machina "\minplayers\16\maxplayers\24\"
ns_nothing "\minplayers\16\maxplayers\32\"
co_niveus "\minplayers\4\maxplayers\20\"
co_faceoff "\minplayers\0\maxplayers\18\"
co_daimos "\minplayers\8\maxplayers\20\"
ns_bast "\minplayers\14\maxplayers\28\"
ns_origin "\minplayers\16\maxplayers\32\"
+ns_shiva "\minplayers\16\maxplayers\32\"
co_kestrel "\minplayers\8\maxplayers\20\"
ns_tanith "\minplayers\16\maxplayers\32\"
+co_umbra "\minplayers\8\maxplayers\20\"
ns_nancy "\minplayers\14\maxplayers\32\"
ns_veil "\minplayers\16\maxplayers\32\"
co_core "\minplayers\0\maxplayers\20\"
diff --git a/main/maps/co_sava.bsp b/main/maps/co_sava.bsp
index 4c591a02..b9f78f1c 100644
Binary files a/main/maps/co_sava.bsp and b/main/maps/co_sava.bsp differ
diff --git a/main/maps/co_sava.txt b/main/maps/co_sava.txt
index 90f0dae7..fca4b0b9 100644
--- a/main/maps/co_sava.txt
+++ b/main/maps/co_sava.txt
@@ -3,16 +3,17 @@ co_sava by Mendasp
Map information:
----------------
-NS 3.0 version
+NS 3.1 version
Credits:
--------
The custom sounds used are from Marr's Ambience Pack
Nanotech texture by spacer
Scrolling smoke texture by Elcle
-Water tank model by CoolCookieCooks
+Water tank and broken RT models by CoolCookieCooks
Thanks to:
----------
Lordy
-tankefugl
\ No newline at end of file
+tankefugl
+Crispy
\ No newline at end of file
diff --git a/main/maps/co_umbra.bsp b/main/maps/co_umbra.bsp
new file mode 100644
index 00000000..946929f9
Binary files /dev/null and b/main/maps/co_umbra.bsp differ
diff --git a/main/maps/co_umbra.txt b/main/maps/co_umbra.txt
new file mode 100644
index 00000000..9aad19ee
--- /dev/null
+++ b/main/maps/co_umbra.txt
@@ -0,0 +1,27 @@
+co_umbra by Kalessin
+
+co_umbra is a large combat which features long, wide corridors with moderate cover and high ceilings. Despite the apparent advantage the marines may have, the aliens can utilise the extensive ventilation network and the many concealed ambush points to hamper the marine's progress. There are three routes linking the alien half of the map to the marine side, each route converges in the centre of the map where most of the action takes place. Because of the size of the map, it is important that the marines play aggressively to be able to secure a victory.
+
+Object names Objects/Maxobjs Memory / Maxmem Fullness
+------------ --------------- --------------- --------
+models 145/400 9280/25600 (36.3%)
+planes 4662/32768 93240/655360 (14.2%)
+vertexes 12197/65535 146364/786420 (18.6%)
+nodes 5059/32767 121416/786408 (15.4%)
+texinfos 5886/32767 235440/1310680 (18.0%)
+faces 8775/65535 175500/1310700 (13.4%)
+clipnodes 10320/32767 82560/262136 (31.5%)
+leaves 2581/8192 72268/229376 (31.5%)
+marksurfaces 11684/65535 23368/131070 (17.8%)
+surfedges 40389/512000 161556/2048000 ( 7.9%)
+edges 21051/256000 84204/1024000 ( 8.2%)
+texdata [variable] 4900/4194304 ( 0.1%)
+lightdata [variable] 1560849/6291456 (24.8%)
+visdata [variable] 53694/2097152 ( 2.6%)
+entdata [variable] 56849/524288 (10.8%)
+86 textures referenced
+=== Total BSP file data space used: 2881488 bytes ===
+
+Many thanks to everyone who helped test this map, it has come a long way since its initial release and none of this would have been possible without you!
+
+Thankyou!
\ No newline at end of file
diff --git a/main/maps/ns_altair.bsp b/main/maps/ns_altair.bsp
index 10088d37..c8dd6de1 100644
Binary files a/main/maps/ns_altair.bsp and b/main/maps/ns_altair.bsp differ
diff --git a/main/maps/ns_altair.txt b/main/maps/ns_altair.txt
index 1011fda4..31e028a7 100644
--- a/main/maps/ns_altair.txt
+++ b/main/maps/ns_altair.txt
@@ -1,3 +1,7 @@
+
+
+
+
=====================================================================
Natural-Selection Map Spec Sheet
=====================================================================
@@ -6,9 +10,10 @@
Title : Altair Underwater Mining Facility
Filename : ns_altair.bsp
Author : Paul "KungFuDiscoMonkey" Traylor
+ Michael "Olmy" Schouten
EMail : kungfudiscomonkey@gmail.com
URL : http://kungfudiscomonkey.net
-Date : February 21, 2005
+Date : November 05, 2006
------Play Information-----------------------------------------------
@@ -18,15 +23,11 @@ How Many Players: 32
------Map Information------------------------------------------------
New Textures : Yes (ns_altair.wad embedded in BSP)
- Some Textures taken from Poke646 by Marc Schröder
- Button Textures, damaged door, and new monitors by
- Samejima
+ Some Textures taken from Poke646 by Marc Schröder
+ Button Textures, damaged door, and new monitors by Samejima
New Sounds : No
-New Skybox : Yes based on deepsea1
- by Darc
- http://telefragged.com/soup/
-New Models : Not yet
-New Prefabs : Yes Tube Container by KungFuSquirrel
+New Skybox : Yes based on deepsea1 by Darc (http://telefragged.com/soup/)
+New Models : No
------Construction---------------------------------------------------
@@ -37,52 +38,7 @@ Editor(s) used : Valve Hammer Editor 3.5
Compile Machine : 3 Ghz P4, 1 gb RAM
Compile time : ~1 hour
-------Changelog------------------------------------------------------
-v1-6 OLD Versions
-
-v7 (11/8/04)
- Version number incrimented by request to reflect the massive number of improvemts since the b5 version of the map
- Added vent from Omega to Zeta with two exits into Phi
- Added vent from Muck Pump to Parts Room RT
- Rspeed optimizations
- Adjustments to Surface Umbilical to reduce LOS
- Adjustments to MS top entrance
- New monitor textures by Samejima
- Covered up pit in Omega
- More details
- New minimap built for new changes to rooms
-
-v7b (1/29/05)
- Removed Diving tanks and connected Nanite Regulation and Settling tanks
- Rerouted path from Settling tanks into Communications
- Moved weldable to Muck Pump
- Optimized Sub Bay
- Moved node from outside Parts room into parts room
-
-v7c (2/10/05)
- Moved Parts Room RT to Sigma Test Site
- Added new info_locations to help navigation and direction
- Split up Life Support info_location
- Split up Sub Bay info_location
- Removed weldable door
- Reopened path between Sub Bay and Parts Room
- Moved some alien spawns into Life Support instead of being a bit outside the hive room
-
-v7d (2/14/05)
- Played with HLRAD compile settings a bit
- Added a few new lights to sewer
- Misc detail to parts room and Station Monitoring
- Small tweek to fix minimap glitch till I have time to do a full sprite again
- Added new vent weldables
-
-v7e (2/21/05)
- Reopened route from Settling Tanks to Consistancy
- Combined Station Monitoring and Sub Refueling node into one node at SM-Power.
- Moved Settling Tank node back to Nanite Regulation
- Added small ledge in sub bay to help get around pool
- Fixed custom minimap.
-
-
+
------Additional Info------------------------------------------------
Any feedback or suggestions, please send them to kungfudiscomonkey@gmail.com
@@ -91,15 +47,21 @@ Any feedback or suggestions, please send them to kungfudiscomonkey@gmail.com
I give NO permission whatsoever to decompile this map or use the textures in any other mapping project. Also, please no using ripent or similar to modify the map, if you want something changed, email me about it and if i consider it to be valid i'll sort it.
-------And Finally----------------------------------------------------
+------Thanks---------------------------------------------------------
Thanks to the NS Dev team for making this great mod that has kept me from doing as much homework as I should.
Thanks to the NS Playtester team for helping me with good feedback and taking time to disuss with me the changes and updates to help make the map that much better.
-Thanks Plaguebearer for taking my mediocre layout and turning it into something awsome. Without his help you wouldn't be playing this map.
+Thanks Plaguebearer for taking my mediocre layout and turning it into something awsome which was the layout for the first Altair in b5.
-Thanks to TyrNemesis^ for helping me walk around the map and pointing out balance issues and node placement issues and generally helping to make Altair even better. Half the reason you are reading this file is because this guy helped make Altair what it is.
+Thanks to TyrNemesis^ for helping me walk around the map and pointing out balance issues and node placement issues and generally helping to make Altair even better through 3.0.
-------Dedication-----------------------------------------------------
-Altair is dedicated to my friends from Wake Christian Academy, Cary Alliance Church, and Grace Community Church who will never realize how much their lives have impacted mine and made me a better person because of it.
\ No newline at end of file
+Thanks to kmart and routerbox for helping me adjust the layout to be more condusive to competitive play.
+
+Thanks to JazzX, Zephor, and Ken for being the top three playtesters when it comes to giving well thought out and detailed feedback.
+
+Thanks to Olmy for really pushing me to improve Altair with several new ideas which lead me to rebuild several areas of the map to push Altair to be much greater visually and for building a new Life Support and Sub Bay (especially the new sub)
+
+------Finally--------------------------------------------------------
+This map has been brought to you by the color purple. Enjoy.
\ No newline at end of file
diff --git a/main/maps/ns_bast.bsp b/main/maps/ns_bast.bsp
index 10a1f730..410fd3af 100644
Binary files a/main/maps/ns_bast.bsp and b/main/maps/ns_bast.bsp differ
diff --git a/main/maps/ns_caged.bsp b/main/maps/ns_caged.bsp
index f14c5647..7006335b 100644
Binary files a/main/maps/ns_caged.bsp and b/main/maps/ns_caged.bsp differ
diff --git a/main/maps/ns_eclipse.bsp b/main/maps/ns_eclipse.bsp
index 9eb6955e..1981a72d 100644
Binary files a/main/maps/ns_eclipse.bsp and b/main/maps/ns_eclipse.bsp differ
diff --git a/main/maps/ns_eon.bsp b/main/maps/ns_eon.bsp
index ae9948ef..9bd1692c 100644
Binary files a/main/maps/ns_eon.bsp and b/main/maps/ns_eon.bsp differ
diff --git a/main/maps/ns_eon.txt b/main/maps/ns_eon.txt
index 673e361a..1da6366b 100644
--- a/main/maps/ns_eon.txt
+++ b/main/maps/ns_eon.txt
@@ -1,6 +1,28 @@
-ns_eon version 9
+ns_eon version 11
-released (27/05/05) Note : v9 was compiled without -extra in rad to save time.
+released (16/09/05)
+
+-New console in Marine Start and new boxes.
+-Clipped the door below the vent in Maintenance.
+-Minor aesthetic changes in Gunpods.
+
+v10a changelog (10/08/05)
+
+-New vent is now alot easier to maneuvre inside
+-Slight change to Coolant Monitoring's geometry (semi alcove type thing :/).
+-Gunpods no longer has a wall divide, and the dimensions of the room have been reduced,
+(mostly width) and the rt position has been moved to the side.
+
+v10 changelog (27/07/05)
+
+-New node layout with 9 nodes (thanks jazzx!)
+-Engine walkway vent now extends to the node room on eastern side.
+
+*Known issues - New vent is a bit awkward to maneuvre inside.
+
+v9 changelog (26/05/05)
+
+ Note : v9 was compiled without -extra in rad to save time.
Visual quality of the lighting is slightly reduced as a result.
-Extended Core Monitoring closer towards Core, so that the joining corridor is shorter, and so sieging is easier.
@@ -106,4 +128,7 @@ v4 changelog (26/1/05):
-Slightly changed layout in Core Monitoring to reduce line of sight problems.
-Fixed a stuck issue in bridge (you would get stuck on light fixtures).
-Nearly every vent that could not accomodate two skulks side by side now can.
--Included a txt file. :)
\ No newline at end of file
+-Included a txt file. :)
+
+Thanks:
+JazzX for unfailing support with eon. Zephor, and other playtesters for their input.
\ No newline at end of file
diff --git a/main/maps/ns_hera.bsp b/main/maps/ns_hera.bsp
index f50d4f4c..b9229e36 100644
Binary files a/main/maps/ns_hera.bsp and b/main/maps/ns_hera.bsp differ
diff --git a/main/maps/ns_lucid.bsp b/main/maps/ns_lucid.bsp
new file mode 100644
index 00000000..46b34ce8
Binary files /dev/null and b/main/maps/ns_lucid.bsp differ
diff --git a/main/maps/ns_machina.bsp b/main/maps/ns_machina.bsp
new file mode 100644
index 00000000..90482c76
Binary files /dev/null and b/main/maps/ns_machina.bsp differ
diff --git a/main/maps/ns_metal.bsp b/main/maps/ns_metal.bsp
index c38f8a59..947550f4 100644
Binary files a/main/maps/ns_metal.bsp and b/main/maps/ns_metal.bsp differ
diff --git a/main/maps/ns_metal.res b/main/maps/ns_metal.res
new file mode 100644
index 00000000..b9d61346
--- /dev/null
+++ b/main/maps/ns_metal.res
@@ -0,0 +1,11 @@
+gfx/env/metal_bk.tga
+gfx/env/metal_dn.tga
+gfx/env/metal_ft.tga
+gfx/env/metal_lf.tga
+gfx/env/metal_rt.tga
+gfx/env/metal_up.tga
+maps/ns_metal.bsp
+maps/ns_metal.txt
+sprites/minimaps/ns_metal.spr
+sprites/ns_metal/flare3metal.spr
+ns_metal.wad
\ No newline at end of file
diff --git a/main/maps/ns_metal.txt b/main/maps/ns_metal.txt
index 6394a5b9..41b882a2 100644
--- a/main/maps/ns_metal.txt
+++ b/main/maps/ns_metal.txt
@@ -1,4 +1,4 @@
-Metal 27-8-2004
+Metal 17-8-2005
===============================================
Natural Selection map : Metal (ns_metal.bsp)
@@ -46,6 +46,20 @@ Changelog :
-------------------------
++ update-14
+
+* Changed MS-start sign texture.
+
+-------------------------
+
++ update-13
+
+* Made MS-start smaller.
+* Fixed 2 location names.
+* Added more cover.
+
+-------------------------
+
+ update-12
* Bug Fixes.
diff --git a/main/maps/ns_nancy.bsp b/main/maps/ns_nancy.bsp
index e8b3ec44..14033a06 100644
Binary files a/main/maps/ns_nancy.bsp and b/main/maps/ns_nancy.bsp differ
diff --git a/main/maps/ns_origin.bsp b/main/maps/ns_origin.bsp
index 3acf0786..1d94fddd 100644
Binary files a/main/maps/ns_origin.bsp and b/main/maps/ns_origin.bsp differ
diff --git a/main/maps/ns_shiva.bsp b/main/maps/ns_shiva.bsp
new file mode 100644
index 00000000..b50389bc
Binary files /dev/null and b/main/maps/ns_shiva.bsp differ
diff --git a/main/maps/ns_veil.bsp b/main/maps/ns_veil.bsp
index 359dfddd..c88bca7b 100644
Binary files a/main/maps/ns_veil.bsp and b/main/maps/ns_veil.bsp differ
diff --git a/main/marineofficial.cfg b/main/marineofficial.cfg
new file mode 100644
index 00000000..eed112f7
--- /dev/null
+++ b/main/marineofficial.cfg
@@ -0,0 +1,6 @@
+//Marine cfg that is part of a default installation on the NS Launcher
+//Activated by pressing F1 (which also is used to join marines)
+
+
+//bind "mouse2" "impulse 10"
+//pson
\ No newline at end of file
diff --git a/main/models/b_armory.mdl b/main/models/b_armory.mdl
index 453fbf59..28d9b088 100644
Binary files a/main/models/b_armory.mdl and b/main/models/b_armory.mdl differ
diff --git a/main/models/b_infportal.mdl b/main/models/b_infportal.mdl
index cb97ef05..3477d17d 100644
Binary files a/main/models/b_infportal.mdl and b/main/models/b_infportal.mdl differ
diff --git a/main/models/b_infportalt.mdl b/main/models/b_infportalt.mdl
index 5b0e549e..b8da0884 100644
Binary files a/main/models/b_infportalt.mdl and b/main/models/b_infportalt.mdl differ
diff --git a/main/models/b_phasegate.mdl b/main/models/b_phasegate.mdl
index a4b49886..c0fc7ed0 100644
Binary files a/main/models/b_phasegate.mdl and b/main/models/b_phasegate.mdl differ
diff --git a/main/models/b_resourcetower.mdl b/main/models/b_resourcetower.mdl
index eb09ec4d..5ad72746 100644
Binary files a/main/models/b_resourcetower.mdl and b/main/models/b_resourcetower.mdl differ
diff --git a/main/models/b_siege.mdl b/main/models/b_siege.mdl
index b82bff3b..a0eb42c8 100644
Binary files a/main/models/b_siege.mdl and b/main/models/b_siege.mdl differ
diff --git a/main/models/b_turretfactory.mdl b/main/models/b_turretfactory.mdl
index 0685baca..b4a7665d 100644
Binary files a/main/models/b_turretfactory.mdl and b/main/models/b_turretfactory.mdl differ
diff --git a/main/models/co_sava/brokenresourcetower.mdl b/main/models/co_sava/brokenresourcetower.mdl
new file mode 100644
index 00000000..940913f9
Binary files /dev/null and b/main/models/co_sava/brokenresourcetower.mdl differ
diff --git a/main/models/ns_machina/machinahead.mdl b/main/models/ns_machina/machinahead.mdl
new file mode 100644
index 00000000..7cab4d73
Binary files /dev/null and b/main/models/ns_machina/machinahead.mdl differ
diff --git a/main/models/ns_machina/machinahead_stars.mdl b/main/models/ns_machina/machinahead_stars.mdl
new file mode 100644
index 00000000..1d0f6fcd
Binary files /dev/null and b/main/models/ns_machina/machinahead_stars.mdl differ
diff --git a/main/models/ns_machina/machinarocks.mdl b/main/models/ns_machina/machinarocks.mdl
new file mode 100644
index 00000000..b4b47220
Binary files /dev/null and b/main/models/ns_machina/machinarocks.mdl differ
diff --git a/main/models/ns_machina/machinaship.mdl b/main/models/ns_machina/machinaship.mdl
new file mode 100644
index 00000000..d937bfeb
Binary files /dev/null and b/main/models/ns_machina/machinaship.mdl differ
diff --git a/main/models/ns_machina/machinaship_add.mdl b/main/models/ns_machina/machinaship_add.mdl
new file mode 100644
index 00000000..07eb41a4
Binary files /dev/null and b/main/models/ns_machina/machinaship_add.mdl differ
diff --git a/main/models/ns_machina/machinasun.mdl b/main/models/ns_machina/machinasun.mdl
new file mode 100644
index 00000000..7667638d
Binary files /dev/null and b/main/models/ns_machina/machinasun.mdl differ
diff --git a/main/models/ns_machina/machinatsa.mdl b/main/models/ns_machina/machinatsa.mdl
new file mode 100644
index 00000000..5eb9eb6e
Binary files /dev/null and b/main/models/ns_machina/machinatsa.mdl differ
diff --git a/main/models/player/alien1/alien1.mdl b/main/models/player/alien1/alien1.mdl
index 988965ad..439cf750 100644
Binary files a/main/models/player/alien1/alien1.mdl and b/main/models/player/alien1/alien1.mdl differ
diff --git a/main/ns-hltv.cfg b/main/ns-hltv.cfg
index 3c7718f4..2625f108 100644
--- a/main/ns-hltv.cfg
+++ b/main/ns-hltv.cfg
@@ -43,4 +43,4 @@ localmsg "NS-HLTV Broadcast" 90 5 -1 0.825 FFA000FF
// these commands will be executed on connecting spectator client and may be used
// to adjust settings for HLTV (for example voice parameters)
-signoncommands "voice_scale 2; voice_overdrive 16; volume 0.5; echo Voice adjusted for NS-HLTV"
\ No newline at end of file
+// signoncommands "voice_scale 2; voice_overdrive 16; volume 0.5; echo Voice adjusted for NS-HLTV"
diff --git a/main/ns.tga b/main/ns.tga
new file mode 100644
index 00000000..af4938f6
Binary files /dev/null and b/main/ns.tga differ
diff --git a/main/ns_eon.wad b/main/ns_eon.wad
index ca65b690..ef51aa41 100644
Binary files a/main/ns_eon.wad and b/main/ns_eon.wad differ
diff --git a/main/ns_lucid.wad b/main/ns_lucid.wad
new file mode 100644
index 00000000..a578719f
Binary files /dev/null and b/main/ns_lucid.wad differ
diff --git a/main/ns_nancy.wad b/main/ns_nancy.wad
index 70fbcc23..0c0c45f1 100644
Binary files a/main/ns_nancy.wad and b/main/ns_nancy.wad differ
diff --git a/main/ns_shiva.wad b/main/ns_shiva.wad
new file mode 100644
index 00000000..9da9d4c2
Binary files /dev/null and b/main/ns_shiva.wad differ
diff --git a/main/oldbinds.cfg b/main/oldbinds.cfg
new file mode 100644
index 00000000..630567ab
--- /dev/null
+++ b/main/oldbinds.cfg
@@ -0,0 +1,71 @@
+writecfg b4oldbinds
+unbindall
+bind "TAB" "+showscores"
+bind "ENTER" "messagemode"
+bind "ESCAPE" "cancelselect"
+bind "SPACE" "+jump"
+bind "'" "+moveup"
+bind "+" "sizeup"
+bind "," "impulse 123"
+bind "-" "sizedown"
+bind "." "impulse 124"
+bind "/" "impulse 125"
+bind "0" "slot10"
+bind "1" "slot1"
+bind "2" "slot2"
+bind "3" "slot3"
+bind "4" "slot4"
+bind "5" "slot5"
+bind "6" "slot6"
+bind "7" "slot7"
+bind "8" "slot8"
+bind "9" "slot9"
+bind ";" "+mlook"
+bind "=" "sizeup"
+bind "[" "invprev"
+bind "]" "invnext"
+bind "`" "toggleconsole"
+bind "a" "+moveleft"
+bind "c" "+showmap"
+bind "d" "+moveright"
+bind "e" "+use"
+bind "f" "impulse 100"
+bind "g" "impulse 3"
+bind "l" "impulse 105"
+bind "q" "lastinv"
+bind "r" "+movement"
+bind "s" "+back"
+bind "t" "impulse 201"
+bind "u" "messagemode2"
+bind "v" "impulse 9"
+bind "w" "+forward"
+bind "x" "impulse 14"
+bind "y" "messagemode"
+bind "z" "impulse 7"
+bind "~" "toggleconsole"
+bind "UPARROW" "+forward"
+bind "DOWNARROW" "+back"
+bind "LEFTARROW" "+left"
+bind "RIGHTARROW" "+right"
+bind "ALT" "+voicerecord"
+bind "CTRL" "+duck"
+bind "SHIFT" "+speed"
+bind "F1" "jointeamone"
+bind "F2" "jointeamtwo"
+bind "F3" "autoassign"
+bind "F4" "readyroom"
+bind "F5" "snapshot"
+bind "F6" "save quick"
+bind "F7" "load quick"
+bind "F10" "quit prompt"
+bind "INS" "+klook"
+bind "PGDN" "+lookdown"
+bind "PGUP" "+lookup"
+bind "END" "centerview"
+bind "MWHEELDOWN" "invnext"
+bind "MWHEELUP" "invprev"
+bind "MOUSE1" "+attack"
+bind "MOUSE2" "+popupmenu"
+bind "MOUSE3" "+popupmenu"
+bind "MOUSE4" "lastinv"
+bind "PAUSE" "pause"
\ No newline at end of file
diff --git a/main/olddefaults.cfg b/main/olddefaults.cfg
new file mode 100644
index 00000000..43254673
--- /dev/null
+++ b/main/olddefaults.cfg
@@ -0,0 +1,189 @@
+// This file is overwritten whenever you change your user settings in the game.
+// Add custom configurations to the file "userconfig.cfg".
+
+//Backs up current cfg before proceeding.
+writecfg "backupb4old"
+
+//NS 3.2 official config.cfg
+unbindall
+bind "TAB" "+showscores"
+bind "ENTER" "messagemode"
+bind "ESCAPE" "cancelselect"
+bind "SPACE" "+jump"
+bind "'" "+moveup"
+bind "+" "sizeup"
+bind "," "impulse 123"
+bind "-" "sizedown"
+bind "." "impulse 124"
+bind "/" "impulse 125"
+bind "0" "slot10"
+bind "1" "slot1"
+bind "2" "slot2"
+bind "3" "slot3"
+bind "4" "slot4"
+bind "5" "slot5"
+bind "6" "slot6"
+bind "7" "slot7"
+bind "8" "slot8"
+bind "9" "slot9"
+bind ";" "+mlook"
+bind "=" "sizeup"
+bind "[" "invprev"
+bind "]" "invnext"
+bind "`" "toggleconsole"
+bind "a" "+moveleft"
+bind "c" "+showmap"
+bind "d" "+moveright"
+bind "e" "+use"
+bind "f" "impulse 100"
+bind "g" "impulse 3"
+bind "l" "impulse 105"
+bind "q" "lastinv"
+bind "r" "+movement"
+bind "s" "+back"
+bind "t" "impulse 201"
+bind "u" "messagemode2"
+bind "v" "impulse 9"
+bind "w" "+forward"
+bind "x" "impulse 14"
+bind "y" "messagemode"
+bind "z" "impulse 7"
+bind "~" "toggleconsole"
+bind "UPARROW" "+forward"
+bind "DOWNARROW" "+back"
+bind "LEFTARROW" "+left"
+bind "RIGHTARROW" "+right"
+bind "ALT" "+voicerecord"
+bind "CTRL" "+duck"
+bind "SHIFT" "+speed"
+bind "F1" "jointeamone"
+bind "F2" "jointeamtwo"
+bind "F3" "autoassign"
+bind "F4" "readyroom"
+bind "F5" "snapshot"
+bind "F6" "save quick"
+bind "F7" "load quick"
+bind "F10" "quit prompt"
+bind "INS" "+klook"
+bind "PGDN" "+lookdown"
+bind "PGUP" "+lookup"
+bind "END" "centerview"
+bind "MWHEELDOWN" "invnext"
+bind "MWHEELUP" "invprev"
+bind "MOUSE1" "+attack"
+bind "MOUSE2" "+popupmenu"
+bind "MOUSE3" "+popupmenu"
+bind "MOUSE4" "lastinv"
+bind "PAUSE" "pause"
+_snd_mixahead "0.1"
+ati_npatch "1.0"
+ati_subdiv "2.0"
+bgmvolume "1.000000"
+bottomcolor "144.889999"
+brightness "1.000000"
+cl_allowdownload "1"
+cl_allowupload "1"
+cl_autohelp "1.0"
+cl_buildmessages "1"
+cl_centerentityid "0.0"
+cl_cmdbackup "2"
+cl_cmdrate "30"
+cl_cmhotkeys "qwerasdfzxcv"
+cl_customcrosshair "1"
+cl_dlmax "128"
+cl_download_ingame "1"
+cl_dynamiclights "1"
+cl_forcedefaultfov "0"
+cl_gammaramp "1"
+cl_highdetail "1"
+cl_himodels "0"
+cl_iconb "221"
+cl_icong "149"
+cl_iconr "0"
+cl_idealpitchscale "0.8"
+cl_labelhivesight "1"
+cl_labelmaps "1"
+cl_lc "1"
+cl_logocolor "#Valve_Orange"
+cl_logofile "lambda"
+cl_lw "1"
+cl_musicdelay "90"
+cl_musicdirectory ""
+cl_musicenabled "1.0"
+cl_musicvolume "155"
+cl_particleinfo "0"
+cl_quickselecttime ".15"
+cl_timeout "60"
+cl_updaterate "20"
+cl_vsmoothing "0.05"
+con_color "255 180 30"
+console "1.000000"
+crosshair "1.000000"
+fps_max "72.0"
+fps_modem "0.0"
+gamma "2.500000"
+gl_dither "1"
+gl_flipmatrix "0"
+gl_fog "1"
+gl_monolights "0"
+gl_overbright "0"
+gl_polyoffset "0.1"
+hisound "1"
+hpk_maxsize "4"
+hud_capturemouse "1"
+hud_centerid "0"
+hud_classautokill "1"
+hud_draw "1"
+hud_fastswitch "0"
+hud_takesshots "0"
+joystick "0"
+lookspring "0.000000"
+lookstrafe "0.000000"
+m_filter "0"
+m_forward "1"
+m_pitch "0.022000"
+m_side "0.8"
+m_yaw "0.022"
+model "barney"
+MP3FadeTime "2.0"
+MP3Volume "0.8"
+mp_decals "300"
+name "NSPlayer"
+net_graph "0"
+net_graphpos "1"
+net_scale "5"
+r_bmodelhighfrac "5.0"
+r_detailtextures "0"
+s_a3d "0.0"
+s_automax_distance "30.0"
+s_automin_distance "2.0"
+s_bloat "2.0"
+s_distance "60"
+s_doppler "0.0"
+s_eax "0.0"
+s_leafnum "0"
+s_max_distance "1000.0"
+s_min_distance "8.0"
+s_numpolys "200"
+s_polykeep "1000000000"
+s_polysize "10000000"
+s_refdelay "4"
+s_refgain "0.4"
+s_rolloff "1.0"
+s_verbwet "0.25"
+sensitivity "4.960000"
+skin ""
+suitvolume "0.250000"
+sv_aim "0"
+sv_voiceenable "1"
+team ""
+topcolor "151.169998"
+viewsize "120.000000"
+voice_enable "1"
+voice_forcemicrecord "1"
+voice_modenable "1"
+voice_scale "1"
+volume "0.800000"
++mlook
++jlook
+exec userconfig.cfg
\ No newline at end of file
diff --git a/main/readme.txt b/main/readme.txt
index 19abccb1..bf1143f7 100644
--- a/main/readme.txt
+++ b/main/readme.txt
@@ -1,5 +1,5 @@
--------------------------------------------------------------------------
-- Natural Selection - http://www.naturalselection.com - v3.1 - 05/14/05 -
+- Natural Selection - http://www.naturalselection.com - v3.2 - 20/02/06 -
--------------------------------------------------------------------------
The NS Team
@@ -12,13 +12,7 @@ Jon Chapman
[ "Merkaba" :: level designer, level tech R&D, 2D art - ns_hera ]
Joel Rubicam
-[ "grepdashv" :: qa lead ]
-
-Florian Schwarzer
-[ "Nemesis Zero" :: project manager ]
-
-Karl Patrick
-[ "Cagey" :: programmer ]
+[ "grepdashv" :: tools ]
David Monks
[ "MaDMaXX" :: sound effects ]
@@ -26,18 +20,14 @@ David Monks
Harry Walsh
[ "puzl" :: programmer ]
-Mark Windle
-[ "Zunni" :: relations manager ]
-
Petter Rønningen
[ "tankefugl" :: programmer ]
-Joseph Stone
-[ "Alpha|UK" :: 3D art ]
-
-Ozgur Yigit
-[ "gazOzz" :: 2D art ]
+Jim Olson
+[ "JazzX" :: QA Lead ]
+Jason Lange
+[ "J" :: artist ]
Retired Members
-------------
@@ -60,6 +50,12 @@ Alex Boylan
Phil Mayfield
[ "Def one" :: animator - marine and alien view models ]
+Florian Schwarzer
+[ "Nemesis Zero" :: project manager ]
+
+Karl Patrick
+[ "Cagey" :: programmer ]
+
Joe Vaughan
[ "joev" :: development manager, code - and server monkey ]
@@ -82,6 +78,12 @@ Tom Grim
[ "ElvenThief" :: programmer ]
+Joseph Stone
+[ "Alpha|UK" :: 3D art ]
+
+Ozgur Yigit
+[ "gazOzz" :: 2D art ]
+
Level Designers
-------------
@@ -140,6 +142,9 @@ Craig Bryson
[ "Drath" :: co_niveus ]
+Mark Windle
+[ "Zunni" :: relations manager ]
+
Other Credits
-------------
diff --git a/main/resource/GameMenu.res b/main/resource/GameMenu.res
index 3bc43eb2..422022a9 100644
--- a/main/resource/GameMenu.res
+++ b/main/resource/GameMenu.res
@@ -9,7 +9,7 @@
"2"
{
"label" "#Menu_ReadyRoom"
- "command" "engine readyroom"
+ "command" "engine menureadyroom"
"OnlyInGame" "1"
}
"3"
@@ -30,13 +30,13 @@
// "command" "OpenLoadGameDialog"
// "notmulti" "1"
// }
- "6"
- {
- "label" "#GameUI_GameMenu_SaveGame"
- "command" "OpenSaveGameDialog"
- "notmulti" "1"
- "OnlyInGame" "1"
- }
+// "6"
+// {
+// "label" "#GameUI_GameMenu_SaveGame"
+// "command" "OpenSaveGameDialog"
+// "notmulti" "1"
+// "OnlyInGame" "1"
+// }
"7"
{
"label" ""
@@ -45,20 +45,27 @@
}
"8"
{
- "label" "#GameUI_GameMenu_FindServers"
- "command" "OpenServerBrowser"
+ "label" "#GameUI_GameMenu_PlayerList"
+ "command" "OpenPlayerListDialog"
+ "OnlyInGame" "1"
+ "notmulti" "0"
}
"9"
{
"label" "#GameUI_GameMenu_CreateServer"
"command" "OpenCreateMultiplayerGameDialog"
}
-// "10"
-// {
-// "name" "LoadDemo"
-// "label" "#GameUI_GameMenu_PlayDemo"
-// "command" "OpenLoadDemoDialog"
-// }
+ "10"
+ {
+ "label" "#GameUI_GameMenu_FindServers"
+ "command" "OpenServerBrowser"
+ }
+ //"11"
+ //{
+ //"name" "LoadDemo"
+ //"label" "#GameUI_GameMenu_PlayDemo"
+ //"command" "OpenLoadDemoDialog"
+ //}
"11"
{
"label" ""
@@ -80,4 +87,4 @@
"label" "#GameUI_GameMenu_Quit"
"command" "Quit"
}
-}
\ No newline at end of file
+}
diff --git a/main/resource/ns_english.txt b/main/resource/ns_english.txt
index 31887a0e..920ae3ea 100644
Binary files a/main/resource/ns_english.txt and b/main/resource/ns_english.txt differ
diff --git a/main/server.cfg b/main/server.cfg
index 78d9540e..659a0337 100644
--- a/main/server.cfg
+++ b/main/server.cfg
@@ -9,7 +9,7 @@
////////////////////////////////////////////////////
// Default server name. Change to "Bob's Server", etc.
-hostname "Natural Selection v3.1"
+hostname "Natural Selection v3.2"
// Must specify sv_region, or it won't show up in Steam server browser
// 0: US East coast
@@ -84,6 +84,9 @@ mp_timelimit 60
///////////////////////////////
sv_lan 0
+// Forces a limit on structures on the server
+sv_structurelimit 300
+
// disable clients' ability to pause the server
pausable 0
diff --git a/main/settings.scr b/main/settings.scr
index 596b8a06..e0935d2d 100644
--- a/main/settings.scr
+++ b/main/settings.scr
@@ -32,7 +32,7 @@
// Half-Life Server Configuration Layout Script (stores last settings chosen, too)
-// File generated: Thu Mar 03 11:29:18 PM
+// File generated: Sun May 07 10:30:06 AM
//
//
// Cvar - Setting
@@ -52,7 +52,7 @@ DESCRIPTION SERVER_OPTIONS
{
"#Valve_Hostname"
{ STRING }
- { "Natural Selection 3.1 Server" }
+ { "Natural Selection 3.2 Server" }
}
"maxplayers"
diff --git a/main/sound/ambience/hum.wav b/main/sound/ambience/hum.wav
index 92538158..1ced84f8 100644
Binary files a/main/sound/ambience/hum.wav and b/main/sound/ambience/hum.wav differ
diff --git a/main/sound/misc/web_form.wav b/main/sound/misc/web_form.wav
new file mode 100644
index 00000000..443a9a7c
Binary files /dev/null and b/main/sound/misc/web_form.wav differ
diff --git a/main/sound/misc/web_harden.wav b/main/sound/misc/web_harden.wav
new file mode 100644
index 00000000..9225557d
Binary files /dev/null and b/main/sound/misc/web_harden.wav differ
diff --git a/main/sound/misc/web_hit.wav b/main/sound/misc/web_hit.wav
new file mode 100644
index 00000000..c91fbc3c
Binary files /dev/null and b/main/sound/misc/web_hit.wav differ
diff --git a/main/sound/ns_machina/be_nocues.wav b/main/sound/ns_machina/be_nocues.wav
new file mode 100644
index 00000000..ee559fcb
Binary files /dev/null and b/main/sound/ns_machina/be_nocues.wav differ
diff --git a/main/sound/ns_machina/machinebass01.wav b/main/sound/ns_machina/machinebass01.wav
new file mode 100644
index 00000000..ef82bb92
Binary files /dev/null and b/main/sound/ns_machina/machinebass01.wav differ
diff --git a/main/sound/ns_machina/pulse04.wav b/main/sound/ns_machina/pulse04.wav
new file mode 100644
index 00000000..830bb587
Binary files /dev/null and b/main/sound/ns_machina/pulse04.wav differ
diff --git a/main/sound/ns_machina/pulsingwhine_mod1.mp3 b/main/sound/ns_machina/pulsingwhine_mod1.mp3
new file mode 100644
index 00000000..6cd5013e
Binary files /dev/null and b/main/sound/ns_machina/pulsingwhine_mod1.mp3 differ
diff --git a/main/sound/vox/asay11.wav b/main/sound/vox/asay11.wav
index ab5ef7f7..7b61604b 100644
Binary files a/main/sound/vox/asay11.wav and b/main/sound/vox/asay11.wav differ
diff --git a/main/sound/vox/asay41.wav b/main/sound/vox/asay41.wav
index 7b61604b..ab5ef7f7 100644
Binary files a/main/sound/vox/asay41.wav and b/main/sound/vox/asay41.wav differ
diff --git a/main/sound/weapons/charge2.wav b/main/sound/weapons/charge2.wav
new file mode 100644
index 00000000..a5471d09
Binary files /dev/null and b/main/sound/weapons/charge2.wav differ
diff --git a/main/sound/weapons/webspin1.wav b/main/sound/weapons/webspin1.wav
index a43e9665..762280f7 100644
Binary files a/main/sound/weapons/webspin1.wav and b/main/sound/weapons/webspin1.wav differ
diff --git a/main/sound/weapons/webspin2.wav b/main/sound/weapons/webspin2.wav
index 32e15d7e..759b2268 100644
Binary files a/main/sound/weapons/webspin2.wav and b/main/sound/weapons/webspin2.wav differ
diff --git a/main/source/HPB_bot/dlls/HPB_bot.vcproj b/main/source/HPB_bot/dlls/HPB_bot.vcproj
index eb944285..490b7fc4 100644
--- a/main/source/HPB_bot/dlls/HPB_bot.vcproj
+++ b/main/source/HPB_bot/dlls/HPB_bot.vcproj
@@ -16,8 +16,8 @@
@@ -88,8 +88,8 @@
diff --git a/main/source/cl_dll/ammo.cpp b/main/source/cl_dll/ammo.cpp
index 9d8af707..e39e8844 100644
--- a/main/source/cl_dll/ammo.cpp
+++ b/main/source/cl_dll/ammo.cpp
@@ -103,7 +103,7 @@ void WeaponsResource :: LoadAllWeaponSprites( void )
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-inline void LoadWeaponSprite( client_sprite_t* ptr, HSPRITE& sprite, wrect_t& bounds )
+inline void LoadWeaponSprite( client_sprite_t* ptr, AVHHSPRITE& sprite, wrect_t& bounds )
{
if( ptr )
{
@@ -300,7 +300,7 @@ void WeaponsResource::SetAmmo( int iId, int iCount )
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-HSPRITE* WeaponsResource::GetAmmoPicFromWeapon( int iAmmoId, wrect_t& rect )
+AVHHSPRITE* WeaponsResource::GetAmmoPicFromWeapon( int iAmmoId, wrect_t& rect )
{
for ( int i = 0; i < MAX_WEAPONS; i++ )
{
@@ -533,7 +533,7 @@ void WeaponsResource :: SelectSlot( int iSlot, int fAdvance, int iDirection )
int giBucketHeight, giBucketWidth, giABHeight, giABWidth; // Ammo Bar width and height
-HSPRITE ghsprBuckets; // Sprite for top row of weapons menu
+AVHHSPRITE ghsprBuckets; // Sprite for top row of weapons menu
DECLARE_MESSAGE(m_Ammo, CurWeapon ); // Current weapon and clip
DECLARE_MESSAGE(m_Ammo, WeaponList); // new weapon type
diff --git a/main/source/cl_dll/ammo.h b/main/source/cl_dll/ammo.h
index b5c3f221..90c9fa65 100644
--- a/main/source/cl_dll/ammo.h
+++ b/main/source/cl_dll/ammo.h
@@ -38,15 +38,15 @@ struct WEAPON
int iCount; // # of itesm in plist
- HSPRITE hActive;
+ AVHHSPRITE hActive;
wrect_t rcActive;
- HSPRITE hInactive;
+ AVHHSPRITE hInactive;
wrect_t rcInactive;
- HSPRITE hAmmo;
+ AVHHSPRITE hAmmo;
wrect_t rcAmmo;
- HSPRITE hAmmo2;
+ AVHHSPRITE hAmmo2;
wrect_t rcAmmo2;
- HSPRITE hCrosshair;
+ AVHHSPRITE hCrosshair;
wrect_t rcCrosshair;
/* HSPRITE hAutoaim;
diff --git a/main/source/cl_dll/ammohistory.cpp b/main/source/cl_dll/ammohistory.cpp
index 541f0e04..ea6161e2 100644
--- a/main/source/cl_dll/ammohistory.cpp
+++ b/main/source/cl_dll/ammohistory.cpp
@@ -38,7 +38,7 @@ int HISTORY_DRAW_TIME = 5;
struct ITEM_INFO
{
char szName[MAX_ITEM_NAME];
- HSPRITE spr;
+ AVHHSPRITE spr;
wrect_t rect;
};
@@ -104,7 +104,7 @@ int HistoryResource :: DrawAmmoHistory( float flTime )
else if ( rgAmmoHistory[i].type == HISTSLOT_AMMO )
{
wrect_t rcPic;
- HSPRITE *spr = gWR.GetAmmoPicFromWeapon( rgAmmoHistory[i].iId, rcPic );
+ AVHHSPRITE *spr = gWR.GetAmmoPicFromWeapon( rgAmmoHistory[i].iId, rcPic );
int r, g, b;
gHUD.GetPrimaryHudColor(r, g, b);
diff --git a/main/source/cl_dll/ammohistory.h b/main/source/cl_dll/ammohistory.h
index 661706db..74262856 100644
--- a/main/source/cl_dll/ammohistory.h
+++ b/main/source/cl_dll/ammohistory.h
@@ -53,7 +53,7 @@ class WeaponsResource
int CountAmmo( int iId );
int GetAmmo( int iId );
void SetAmmo( int iId, int iCount );
- HSPRITE* GetAmmoPicFromWeapon( int iAmmoId, wrect_t& rect ); //TODO: fix bass-ackwards arrangement and store sprites with ammo types
+ AVHHSPRITE* GetAmmoPicFromWeapon( int iAmmoId, wrect_t& rect ); //TODO: fix bass-ackwards arrangement and store sprites with ammo types
void AddWeapon( WEAPON* wp );
void PickupWeapon( WEAPON* wp );
diff --git a/main/source/cl_dll/chud.h b/main/source/cl_dll/chud.h
index b349e857..a3e5cde5 100644
--- a/main/source/cl_dll/chud.h
+++ b/main/source/cl_dll/chud.h
@@ -4,13 +4,14 @@
#include "chudmisc.h"
#include "hud_spectator.h"
#include "AvHFont.h"
+#include "hud_crosshairs.h"
class CHud
{
private:
HUDLIST *m_pHudList;
- HSPRITE m_hsprLogo;
+ AVHHSPRITE m_hsprLogo;
int m_iLogo;
client_sprite_t *m_pSpriteList;
int m_iSpriteCount;
@@ -19,9 +20,10 @@ class CHud
public:
- HSPRITE m_hsprCursor;
+ AVHHSPRITE m_hsprCursor;
float m_flTime; // the current client time
float m_fOldTime; // the time at which the HUD was last redrawn
+ float m_wsFOV; //fov recalc corrected for widescreen
double m_flTimeDelta; // the difference between flTime and fOldTime
Vector m_vecOrigin;
Vector m_vecAngles;
@@ -45,7 +47,7 @@ class CHud
private:
// the memory for these arrays are allocated in the first call to CHud::VidInit(), when the hud.txt and associated sprites are loaded.
// freed in ~CHud()
- HSPRITE *m_rghSprites; /*[HUD_SPRITE_COUNT]*/ // the sprites loaded from hud.txt
+ AVHHSPRITE *m_rghSprites; /*[HUD_SPRITE_COUNT]*/ // the sprites loaded from hud.txt
wrect_t *m_rgrcRects; /*[HUD_SPRITE_COUNT]*/
char *m_rgszSpriteNames; /*[HUD_SPRITE_COUNT][MAX_SPRITE_NAME_LENGTH]*/
@@ -53,7 +55,7 @@ class CHud
public:
- HSPRITE GetSprite( int index )
+ AVHHSPRITE GetSprite( int index )
{
return (index < 0) ? 0 : m_rghSprites[index];
}
@@ -81,7 +83,8 @@ class CHud
CHudAmmoSecondary m_AmmoSecondary;
CHudTextMessage m_TextMessage;
CHudStatusIcons m_StatusIcons;
-
+ CHudCrosshairs m_Crosshairs;
+
AvHFont mFont;
AvHFont mSmallFont;
diff --git a/main/source/cl_dll/chudmisc.h b/main/source/cl_dll/chudmisc.h
index a5c7b1e2..4a45099c 100644
--- a/main/source/cl_dll/chudmisc.h
+++ b/main/source/cl_dll/chudmisc.h
@@ -187,7 +187,7 @@ class CHudTrain: public CHudBase
int MsgFunc_Train(const char *pszName, int iSize, void *pbuf);
private:
- HSPRITE m_hSprite;
+ AVHHSPRITE m_hSprite;
int m_iPos;
};
@@ -343,8 +343,8 @@ class CHudBattery: public CHudBase
int MsgFunc_Battery(const char *pszName, int iSize, void *pbuf );
private:
- HSPRITE m_hSprite1;
- HSPRITE m_hSprite2;
+ AVHHSPRITE m_hSprite1;
+ AVHHSPRITE m_hSprite2;
wrect_t *m_prc1;
wrect_t *m_prc2;
int m_iBat;
@@ -368,9 +368,9 @@ class CHudFlashlight: public CHudBase
int MsgFunc_FlashBat(const char *pszName, int iSize, void *pbuf );
private:
- HSPRITE m_hSprite1;
- HSPRITE m_hSprite2;
- HSPRITE m_hBeam;
+ AVHHSPRITE m_hSprite1;
+ AVHHSPRITE m_hSprite2;
+ AVHHSPRITE m_hBeam;
wrect_t *m_prc1;
wrect_t *m_prc2;
wrect_t *m_prcBeam;
@@ -492,7 +492,7 @@ class CHudStatusIcons: public CHudBase
typedef struct
{
char szSpriteName[MAX_ICONSPRITENAME_LENGTH];
- HSPRITE spr;
+ AVHHSPRITE spr;
wrect_t rc;
unsigned char r, g, b;
} icon_sprite_t;
diff --git a/main/source/cl_dll/cl_dll.vcproj b/main/source/cl_dll/cl_dll.vcproj
index ee1db282..528559f7 100644
--- a/main/source/cl_dll/cl_dll.vcproj
+++ b/main/source/cl_dll/cl_dll.vcproj
@@ -15,8 +15,8 @@
-
+
Playtest
@@ -14,7 +14,7 @@
{665C1DAF-9248-E06F-4E5C-A664BAFDE9D8}
- 8.1
+ 10.0.16299.0
@@ -22,7 +22,7 @@
false
false
MultiByte
- v100
+ v141
@@ -39,13 +39,17 @@
false
client
+
+ .;zlib-1.2.8;includes\zlib-1.2.8;source\includes\zlib-1.2.8;main\source\includes\zlib-1.2.8;$(IncludePath)
+
+
MaxSpeed
OnlyExplicitInline
false
$(SolutionDir);$(SolutionDir)\particles;$(SolutionDir)\includes\lpng1251;$(SolutionDir)\includes\zlib-1.2.8;$(SolutionDir)\includes\fmod\inc;$(SolutionDir)\includes\vgui\include;../public;../common;../external;../pm_shared;../game_shared;../mod;../util;../ui;../engine;../cl_dll;../dlls
- NDEBUG;WIN32;_WINDOWS;AVH_CLIENT;USE_OLDAUTH
+ NDEBUG;WIN32;_WINDOWS;AVH_CLIENT;USE_OLDAUTH;_X86_
true
true
@@ -63,13 +67,14 @@
true
4996
true
- MultiThreaded
+ MultiThreadedDLL
Neither
+ false
- particles.lib;vgui.lib;zlib.lib;libpng.lib;wsock32.lib;sdl2.lib;%(AdditionalDependencies)
+ particles.lib;vgui.lib;zlib.lib;libpng.lib;wsock32.lib;sdl2.lib;opengl32.lib;%(AdditionalDependencies)
true
- $(SolutionDir)\particles\WIN32_Release;$(SolutionDir)\includes\lpng1251;$(SolutionDir)\includes\zlib-1.2.8;$(SolutionDir)\includes\vgui\lib\win32_vc6;$(SolutionDir)\lib\public;%(AdditionalLibraryDirectories)
+ $(SolutionDir)\particles\Release;$(SolutionDir)\includes\lpng1251;$(SolutionDir)\includes\zlib-1.2.8;$(SolutionDir)\includes\vgui\lib\win32_vc6;$(SolutionDir)\lib\public;%(AdditionalLibraryDirectories)
@@ -84,6 +89,7 @@
/NODEFAULTLIB:LIBCMT %(AdditionalOptions)
+ $(SolutionDir)..\cl_dlls\client.dll
NDEBUG;%(PreprocessorDefinitions)
@@ -164,6 +170,10 @@
MaxSpeed
%(AdditionalIncludeDirectories)
+
+ MaxSpeed
+ %(AdditionalIncludeDirectories)
+
MaxSpeed
%(AdditionalIncludeDirectories)
@@ -184,6 +194,10 @@
MaxSpeed
%(AdditionalIncludeDirectories)
+
+ MaxSpeed
+ %(AdditionalIncludeDirectories)
+
MaxSpeed
%(AdditionalIncludeDirectories)
@@ -799,6 +813,8 @@
+
+
diff --git a/main/source/cl_dll/cl_dll.vcxproj.filters b/main/source/cl_dll/cl_dll.vcxproj.filters
index 4bc1e2e5..63cc5236 100644
--- a/main/source/cl_dll/cl_dll.vcxproj.filters
+++ b/main/source/cl_dll/cl_dll.vcxproj.filters
@@ -594,6 +594,12 @@
Source Files
+
+ Source Files
+
+
+ Source Files
+
@@ -1040,6 +1046,12 @@
textrep
+
+ Header Files
+
+
+ Header Files
+
diff --git a/main/source/cl_dll/cl_util.h b/main/source/cl_dll/cl_util.h
index ad6fe1c9..93660673 100644
--- a/main/source/cl_dll/cl_util.h
+++ b/main/source/cl_dll/cl_util.h
@@ -94,8 +94,8 @@ int ScreenWidth();
// Gets the height & width of a sprite, at the specified frame
-inline int SPR_Height( HSPRITE x, int f ) { return gEngfuncs.pfnSPR_Height(x, f); }
-inline int SPR_Width( HSPRITE x, int f ) { return gEngfuncs.pfnSPR_Width(x, f); }
+inline int SPR_Height( AVHHSPRITE x, int f ) { return gEngfuncs.pfnSPR_Height(x, f); }
+inline int SPR_Width( AVHHSPRITE x, int f ) { return gEngfuncs.pfnSPR_Width(x, f); }
inline client_textmessage_t *TextMessageGet( const char *pName ) { return gEngfuncs.pfnTextMessageGet( pName ); }
inline int TextMessageDrawChar( int x, int y, int number, int r, int g, int b )
@@ -141,7 +141,7 @@ inline void UnpackRGB(int &r, int &g, int &b, unsigned long ulRGB)\
void FillRGBAClipped(vgui::Panel* inPanel, int inStartX, int inStartY, int inWidth, int inHeight, int r, int g, int b, int a);
-HSPRITE LoadSprite(const char *pszName);
+AVHHSPRITE LoadSprite(const char *pszName);
//bool LocalizeString(const char* inMessage, char* outBuffer, int inBufferSize);
bool LocalizeString(const char* inMessage, string& outputString);
diff --git a/main/source/cl_dll/health.h b/main/source/cl_dll/health.h
index 737089d4..97a8a4b1 100644
--- a/main/source/cl_dll/health.h
+++ b/main/source/cl_dll/health.h
@@ -103,8 +103,8 @@ class CHudHealth: public CHudBase
float m_fFade;
private:
- HSPRITE m_hSprite;
- HSPRITE m_hDamage;
+ AVHHSPRITE m_hSprite;
+ AVHHSPRITE m_hDamage;
DAMAGE_IMAGE m_dmg[NUM_DMG_TYPES];
int m_bitsDamage;
diff --git a/main/source/cl_dll/hud.cpp b/main/source/cl_dll/hud.cpp
index 8a71d72f..191894fc 100644
--- a/main/source/cl_dll/hud.cpp
+++ b/main/source/cl_dll/hud.cpp
@@ -203,15 +203,15 @@ void CHud :: Init( void )
g_bDuckToggled = false;
// :
- CVAR_CREATE( "zoom_sensitivity_ratio", "1.2", 0 );
+ CVAR_CREATE( "zoom_sensitivity_ratio", "1", 0 );
default_fov = CVAR_CREATE( "default_fov", "90", 0 );
m_pCvarStealMouse = CVAR_CREATE( "hud_capturemouse", "1", FCVAR_ARCHIVE );
m_pCvarDraw = CVAR_CREATE( "hud_draw", "1", FCVAR_ARCHIVE );
cl_lw = gEngfuncs.pfnGetCvarPointer( "cl_lw" );
CVAR_CREATE( "cl_showspeed", "0", 0);
- CVAR_CREATE( kvLabelMaps, "1", FCVAR_ARCHIVE);
- CVAR_CREATE( kvGammaRamp, "1", FCVAR_ARCHIVE);
+ CVAR_CREATE( kvLabelMaps, "3", FCVAR_ARCHIVE);
+ CVAR_CREATE( kvGammaRamp, "0", FCVAR_ARCHIVE);
CVAR_CREATE( kvCustomCrosshair, "1", FCVAR_ARCHIVE);
CVAR_CREATE( kvHudMapZoom, "3", FCVAR_ARCHIVE);
CVAR_CREATE( kvLabelHivesight, "1", FCVAR_ARCHIVE);
@@ -251,6 +251,7 @@ void CHud :: Init( void )
m_AmmoSecondary.Init();
m_TextMessage.Init();
m_StatusIcons.Init();
+ m_Crosshairs.Init();
m_Spectator.m_chatEnabled = (m_SayText.m_HUD_saytext->value!=0);
@@ -315,8 +316,16 @@ void CHud :: VidInit( void )
gHUD.SetViewport(theViewPort);
- mFont.Load("sprites/font_arial");
- mSmallFont.Load("sprites/font_arialsmall");
+ if (CVAR_GET_FLOAT("hud_style") == 2.0f)
+ {
+ mFont.Load("sprites/nl/font_arial");
+ mSmallFont.Load("sprites/nl/font_arialsmall");
+ }
+ else
+ {
+ mFont.Load("sprites/font_arial");
+ mSmallFont.Load("sprites/font_arialsmall");
+ }
// ----------
// Load Sprites
@@ -335,6 +344,9 @@ void CHud :: VidInit( void )
if ( !m_pSpriteList )
{
// we need to load the hud.txt, and all sprites within
+ if (CVAR_GET_FLOAT("hud_style") == 2.0f)
+ m_pSpriteList = SPR_GetList("sprites/hudnl.txt", &m_iSpriteCountAllRes);
+ else
m_pSpriteList = SPR_GetList("sprites/hud.txt", &m_iSpriteCountAllRes);
if (m_pSpriteList)
@@ -351,7 +363,7 @@ void CHud :: VidInit( void )
}
// allocated memory for sprite handle arrays
- m_rghSprites = new HSPRITE[m_iSpriteCount];
+ m_rghSprites = new AVHHSPRITE[m_iSpriteCount];
m_rgrcRects = new wrect_t[m_iSpriteCount];
m_rgszSpriteNames = new char[m_iSpriteCount * MAX_SPRITE_NAME_LENGTH];
@@ -414,6 +426,7 @@ void CHud :: VidInit( void )
m_AmmoSecondary.VidInit();
m_TextMessage.VidInit();
m_StatusIcons.VidInit();
+ m_Crosshairs.VidInit();
GetClientVoiceMgr()->VidInit();
}
@@ -535,7 +548,7 @@ int CHud::MsgFunc_SetFOV(const char *pszName, int iSize, void *pbuf)
// the clients fov is actually set in the client data update section of the hud
// Set a new sensitivity
- if ( m_iFOV == def_fov )
+ if ( m_iFOV == def_fov || CVAR_GET_FLOAT("senslock") == 1.0f)
{
// reset to saved sensitivity
m_flMouseSensitivity = 0;
diff --git a/main/source/cl_dll/hud_crosshairs.cpp b/main/source/cl_dll/hud_crosshairs.cpp
new file mode 100644
index 00000000..adcfd396
--- /dev/null
+++ b/main/source/cl_dll/hud_crosshairs.cpp
@@ -0,0 +1,219 @@
+#include "hud.h"
+#include "cl_util.h"
+#include "parsemsg.h"
+#include "hudgl.h"
+
+// Crosshair system based on OpenAG
+// https://github.com/YaLTeR/OpenAG
+
+int CHudCrosshairs::Init()
+{
+ m_iFlags = HUD_ACTIVE;
+
+ cl_cross = CVAR_CREATE("cl_cross", "0", FCVAR_ARCHIVE);
+ cl_cross_color = CVAR_CREATE("cl_cross_color", "255 255 255", FCVAR_ARCHIVE);
+ cl_cross_alpha = CVAR_CREATE("cl_cross_alpha", "255", FCVAR_ARCHIVE);
+ cl_cross_thickness = CVAR_CREATE("cl_cross_thickness", "2", FCVAR_ARCHIVE);
+ cl_cross_size = CVAR_CREATE("cl_cross_size", "6", FCVAR_ARCHIVE);
+ cl_cross_gap = CVAR_CREATE("cl_cross_gap", "3", FCVAR_ARCHIVE);
+ cl_cross_outline = CVAR_CREATE("cl_cross_outline", "2", FCVAR_ARCHIVE);
+ cl_cross_outline_alpha = CVAR_CREATE("cl_cross_outline_alpha", "255", FCVAR_ARCHIVE);
+ cl_cross_outline_inner = CVAR_CREATE("cl_cross_outline_inner", "0", FCVAR_ARCHIVE);
+ cl_cross_circle_radius = CVAR_CREATE("cl_cross_circle_radius", "0", FCVAR_ARCHIVE);
+ cl_cross_dot_size = CVAR_CREATE("cl_cross_dot_size", "0", FCVAR_ARCHIVE);
+ cl_cross_dot_color = CVAR_CREATE("cl_cross_dot_color", "", FCVAR_ARCHIVE);
+ cl_cross_dot_outline = CVAR_CREATE("cl_cross_dot_outline", "0", FCVAR_ARCHIVE);
+ cl_cross_line_top = CVAR_CREATE("cl_cross_line_top", "1", FCVAR_ARCHIVE);
+ cl_cross_line_bottom = CVAR_CREATE("cl_cross_line_bottom", "1", FCVAR_ARCHIVE);
+ cl_cross_line_left = CVAR_CREATE("cl_cross_line_left", "1", FCVAR_ARCHIVE);
+ cl_cross_line_right = CVAR_CREATE("cl_cross_line_right", "1", FCVAR_ARCHIVE);
+
+ gHUD.AddHudElem(this);
+ return 0;
+}
+
+int CHudCrosshairs::VidInit()
+{
+ return 1;
+}
+
+int CHudCrosshairs::Draw(float time)
+{
+ if (cl_cross->value == 0.0f)
+ return 0;
+
+ unsigned char alpha;
+ if (sscanf(cl_cross_alpha->string, "%hhu", &alpha) != 1)
+ alpha = 255;
+
+ if (alpha == 0)
+ return 0;
+
+ if (gHUD.GetInTopDownMode())
+ return 0;
+
+ // outline alpha perhaps unnecessary since odd numbered thicknesses feather the outline edges
+ unsigned char outalpha;
+ if (sscanf(cl_cross_outline_alpha->string, "%hhu", &outalpha) != 1)
+ outalpha = 255;
+
+ if (outalpha == 0)
+ return 0;
+
+ unsigned char r, g, b;
+ if (sscanf(cl_cross_color->string, "%hhu %hhu %hhu", &r, &g, &b) != 3) {
+ r = 0;
+ g = 255;
+ b = 0;
+ }
+
+
+ Vector2D center(ScreenWidth() / 2.0f, ScreenHeight() / 2.0f);
+
+ HudGL gl;
+
+ // Draw the outline.
+ // TODO: this contains a terrible amount of repeating complex code.
+ //
+ // Possible solution: can be changed to this with the one downside being in rare cases where cl_cross_thickness is high AND its alpha is <255, the center of each line will be slightly darker.
+ // Example below is for bottom line. Would also cause certain crosshairs that have outlines on invisible cross lines to not look right.
+ // gl.rectangle(Vector2D(center.x + offset, center.y + gap - half_width), Vector2D(center.x - offset, center.y + gap + size + half_width));
+ if (cl_cross_outline->value > 0.0f) {
+ //gl.color(0, 0, 0, alpha);
+ gl.color(0, 0, 0, outalpha);
+ gl.line_width(cl_cross_outline->value);
+
+ float size = cl_cross_size->value;
+ float gap = cl_cross_gap->value;
+ float half_thickness = cl_cross_thickness->value / 2.0f;
+ float half_width = cl_cross_outline->value / 2.0f;
+ float offset = half_thickness + half_width;
+
+ // Top line
+ if (cl_cross_line_top->value) {
+ gl.line(Vector2D(center.x - offset, center.y - gap - size), Vector2D(center.x + offset, center.y - gap - size));
+ if (cl_cross_outline_inner->value == 0.0f)
+ {
+ gl.line(Vector2D(center.x + half_thickness, center.y - gap - size + half_width), Vector2D(center.x + half_thickness, center.y - gap));
+ gl.line(Vector2D(center.x - half_thickness, center.y - gap), Vector2D(center.x - half_thickness, center.y - gap - size + half_width));
+ }
+ else
+ {
+ gl.line(Vector2D(center.x + half_thickness, center.y - gap - size + half_width), Vector2D(center.x + half_thickness, center.y - gap - half_width));
+ gl.line(Vector2D(center.x + offset, center.y - gap), Vector2D(center.x - offset, center.y - gap));
+ gl.line(Vector2D(center.x - half_thickness, center.y - gap - half_width), Vector2D(center.x - half_thickness, center.y - gap - size + half_width));
+ }
+ }
+
+ // Bottom line
+ if (cl_cross_line_bottom->value) {
+ gl.line(Vector2D(center.x - offset, center.y + gap + size), Vector2D(center.x + offset, center.y + gap + size));
+ if (cl_cross_outline_inner->value == 0.0f)
+ {
+ gl.line(Vector2D(center.x + half_thickness, center.y + gap + size - half_width), Vector2D(center.x + half_thickness, center.y + gap));
+ gl.line(Vector2D(center.x - half_thickness, center.y + gap), Vector2D(center.x - half_thickness, center.y + gap + size - half_width));
+ }
+ else
+ {
+ gl.line(Vector2D(center.x + half_thickness, center.y + gap + size - half_width), Vector2D(center.x + half_thickness, center.y + gap + half_width));
+ gl.line(Vector2D(center.x + offset, center.y + gap), Vector2D(center.x - offset, center.y + gap));
+ gl.line(Vector2D(center.x - half_thickness, center.y + gap + half_width), Vector2D(center.x - half_thickness, center.y + gap + size - half_width));
+ }
+ }
+
+ // Left line
+ if (cl_cross_line_left->value) {
+ gl.line(Vector2D(center.x - gap - size, center.y - offset), Vector2D(center.x - gap - size, center.y + offset));
+ if (cl_cross_outline_inner->value == 0.0f)
+ {
+ gl.line(Vector2D(center.x - gap - size + half_width, center.y + half_thickness), Vector2D(center.x - gap, center.y + half_thickness));
+ gl.line(Vector2D(center.x - gap, center.y - half_thickness), Vector2D(center.x - gap - size + half_width, center.y - half_thickness));
+ }
+ else
+ {
+ gl.line(Vector2D(center.x - gap - size + half_width, center.y + half_thickness), Vector2D(center.x - gap - half_width, center.y + half_thickness));
+ gl.line(Vector2D(center.x - gap, center.y + offset), Vector2D(center.x - gap, center.y - offset));
+ gl.line(Vector2D(center.x - gap - half_width, center.y - half_thickness), Vector2D(center.x - gap - size + half_width, center.y - half_thickness));
+ }
+ }
+
+ // Right line
+ if (cl_cross_line_right->value) {
+ gl.line(Vector2D(center.x + gap + size, center.y - offset), Vector2D(center.x + gap + size, center.y + offset));
+ if (cl_cross_outline_inner->value == 0.0f)
+ {
+ gl.line(Vector2D(center.x + gap + size - half_width, center.y + half_thickness), Vector2D(center.x + gap, center.y + half_thickness));
+ gl.line(Vector2D(center.x + gap, center.y - half_thickness), Vector2D(center.x + gap + size - half_width, center.y - half_thickness));
+ }
+ else
+ {
+ gl.line(Vector2D(center.x + gap + size - half_width, center.y + half_thickness), Vector2D(center.x + gap + half_width, center.y + half_thickness));
+ gl.line(Vector2D(center.x + gap, center.y + offset), Vector2D(center.x + gap, center.y - offset));
+ gl.line(Vector2D(center.x + gap + half_width, center.y - half_thickness), Vector2D(center.x + gap + size - half_width, center.y - half_thickness));
+ }
+ }
+
+ // Dot
+ if (cl_cross_dot_size->value > 0.0f && cl_cross_dot_outline->value > 0.0f) {
+ float size = cl_cross_dot_size->value;
+ Vector2D offset = Vector2D(size / 2.0f, size / 2.0f);
+ float dot_half_width = cl_cross_dot_outline->value / 2.0f;
+
+ gl.line(Vector2D(center.x - offset.x - dot_half_width, center.y - offset.y), Vector2D(center.x + offset.x + dot_half_width, center.y - offset.y));
+ gl.line(Vector2D(center.x + offset.x, center.y - offset.y + dot_half_width), Vector2D(center.x + offset.x, center.y + offset.y - dot_half_width));
+ gl.line(Vector2D(center.x - offset.x, center.y - offset.y + dot_half_width), Vector2D(center.x - offset.x, center.y + offset.y - dot_half_width));
+ gl.line(Vector2D(center.x - offset.x - dot_half_width, center.y + offset.y), Vector2D(center.x + offset.x + dot_half_width, center.y + offset.y));
+ }
+ }
+
+ gl.color(r, g, b, alpha);
+
+ // Draw the crosshairs.
+ if (cl_cross_thickness->value > 0.0f) {
+ gl.line_width(cl_cross_thickness->value);
+
+ float size = cl_cross_size->value;
+ float gap = cl_cross_gap->value;
+
+ if (cl_cross_line_top->value)
+ gl.line(Vector2D(center.x, center.y - gap - size), Vector2D(center.x, center.y - gap));
+ if (cl_cross_line_bottom->value)
+ gl.line(Vector2D(center.x, center.y + gap + size), Vector2D(center.x, center.y + gap));
+ if (cl_cross_line_left->value)
+ gl.line(Vector2D(center.x - gap - size, center.y), Vector2D(center.x - gap, center.y));
+ if (cl_cross_line_right->value)
+ gl.line(Vector2D(center.x + gap + size, center.y), Vector2D(center.x + gap, center.y));
+ }
+
+#ifdef __APPLE__
+ //Remove when OSX builds with c++11
+#else
+ // Draw the circle.
+ if (cl_cross_circle_radius->value > 0.0f) {
+ gl.line_width(1.0f);
+
+ float radius = cl_cross_circle_radius->value;
+ if (old_circle_radius != radius) {
+ // Recompute the circle points.
+ circle_points = HudGL::compute_circle(radius);
+ old_circle_radius = radius;
+ }
+
+ gl.circle(center, circle_points);
+ }
+#endif
+
+ // Draw the dot.
+ if (cl_cross_dot_size->value > 0.0f) {
+ unsigned char r, g, b;
+ if (sscanf(cl_cross_dot_color->string, "%hhu %hhu %hhu", &r, &g, &b) == 3)
+ gl.color(r, g, b, alpha);
+
+ float size = cl_cross_dot_size->value;
+ Vector2D offset = Vector2D(size / 2.0f, size / 2.0f);
+
+ gl.rectangle(center - offset, center + offset);
+ }
+
+ return 0;
+}
diff --git a/main/source/cl_dll/hud_crosshairs.h b/main/source/cl_dll/hud_crosshairs.h
new file mode 100644
index 00000000..a313ddb4
--- /dev/null
+++ b/main/source/cl_dll/hud_crosshairs.h
@@ -0,0 +1,38 @@
+#pragma once
+#include
+
+// Crosshair system based on OpenAG
+// https://github.com/YaLTeR/OpenAG
+
+class CHudCrosshairs : public CHudBase
+{
+ cvar_t* cl_cross;
+ cvar_t* cl_cross_color;
+ cvar_t* cl_cross_alpha;
+ cvar_t* cl_cross_thickness;
+ cvar_t* cl_cross_size;
+ cvar_t* cl_cross_gap;
+ cvar_t* cl_cross_outline;
+ cvar_t* cl_cross_outline_alpha;
+ cvar_t* cl_cross_outline_inner;
+ cvar_t* cl_cross_circle_radius;
+ cvar_t* cl_cross_dot_size;
+ cvar_t* cl_cross_dot_color;
+ cvar_t* cl_cross_dot_outline;
+ cvar_t* cl_cross_line_top;
+ cvar_t* cl_cross_line_bottom;
+ cvar_t* cl_cross_line_left;
+ cvar_t* cl_cross_line_right;
+
+#ifdef __APPLE__
+ //Remove when OSX builds with c++11
+#else
+ float old_circle_radius;
+ std::vector circle_points;
+#endif
+
+public:
+ virtual int Init();
+ virtual int VidInit();
+ virtual int Draw(float time);
+};
diff --git a/main/source/cl_dll/hud_redraw.cpp b/main/source/cl_dll/hud_redraw.cpp
index db8cf6c7..6adfce21 100644
--- a/main/source/cl_dll/hud_redraw.cpp
+++ b/main/source/cl_dll/hud_redraw.cpp
@@ -70,7 +70,7 @@ void CHud::Think(void)
// the clients fov is actually set in the client data update section of the hud
// Set a new sensitivity
- if ( m_iFOV == default_fov->value )
+ if ( m_iFOV == default_fov->value || CVAR_GET_FLOAT("senslock") == 1.0f)
{
// reset to saved sensitivity
m_flMouseSensitivity = 0;
diff --git a/main/source/cl_dll/hud_spectator.cpp b/main/source/cl_dll/hud_spectator.cpp
index 391a0657..44c3549e 100644
--- a/main/source/cl_dll/hud_spectator.cpp
+++ b/main/source/cl_dll/hud_spectator.cpp
@@ -1711,7 +1711,7 @@ void CHudSpectator::CheckOverviewEntities()
bool CHudSpectator::AddOverviewEntity( int type, struct cl_entity_s *ent, const char *modelname)
{
- HSPRITE hSprite = 0;
+ AVHHSPRITE hSprite = 0;
double duration = -1.0f; // duration -1 means show it only this frame;
int theFrame = 0;
bool theSuccess = false;
@@ -1820,7 +1820,7 @@ void CHudSpectator::DeathMessage(int victim)
AddOverviewEntityToList(m_hsprPlayerDead, pl, gEngfuncs.GetClientTime() + 2.0f, 0, kRenderTransTexture, 1, 1, 1);
}
-bool CHudSpectator::AddOverviewEntityToList(HSPRITE sprite, cl_entity_t *ent, double killTime, int inFrame, int inRenderMode, float r, float g, float b)
+bool CHudSpectator::AddOverviewEntityToList(AVHHSPRITE sprite, cl_entity_t *ent, double killTime, int inFrame, int inRenderMode, float r, float g, float b)
{
for ( int i = 0; i< MAX_OVERVIEW_ENTITIES; i++ )
{
diff --git a/main/source/cl_dll/hud_spectator.h b/main/source/cl_dll/hud_spectator.h
index d15e4062..def52894 100644
--- a/main/source/cl_dll/hud_spectator.h
+++ b/main/source/cl_dll/hud_spectator.h
@@ -46,7 +46,7 @@ typedef struct overviewInfo_s {
typedef struct overviewEntity_s {
- HSPRITE hSprite;
+ AVHHSPRITE hSprite;
struct cl_entity_s * entity;
double killTime;
int mFrame;
@@ -65,7 +65,7 @@ class CHudSpectator : public CHudBase
void Reset();
void CheckSettings();
void InitHUDData( void );
- bool AddOverviewEntityToList( HSPRITE sprite, cl_entity_t * ent, double killTime, int inFrame, int inRenderMode, float r, float g, float b);
+ bool AddOverviewEntityToList(AVHHSPRITE sprite, cl_entity_t * ent, double killTime, int inFrame, int inRenderMode, float r, float g, float b);
void DeathMessage(int victim);
bool AddOverviewEntity( int type, struct cl_entity_s *ent, const char *modelname );
void CheckOverviewEntities();
@@ -120,15 +120,15 @@ class CHudSpectator : public CHudBase
private:
vec3_t m_vPlayerPos[MAX_PLAYERS];
- HSPRITE m_hsprPlayerMarine;
- HSPRITE m_hsprPlayerAlien;
- HSPRITE m_hsprCamera;
- HSPRITE m_hsprPlayerDead;
- HSPRITE m_hsprViewcone;
- HSPRITE m_hsprUnkownMap;
- HSPRITE m_hsprBeam;
- HSPRITE m_hCrosshair;
- HSPRITE m_hsprWhite;
+ AVHHSPRITE m_hsprPlayerMarine;
+ AVHHSPRITE m_hsprPlayerAlien;
+ AVHHSPRITE m_hsprCamera;
+ AVHHSPRITE m_hsprPlayerDead;
+ AVHHSPRITE m_hsprViewcone;
+ AVHHSPRITE m_hsprUnkownMap;
+ AVHHSPRITE m_hsprBeam;
+ AVHHSPRITE m_hCrosshair;
+ AVHHSPRITE m_hsprWhite;
wrect_t m_crosshairRect;
diff --git a/main/source/cl_dll/hud_update.cpp b/main/source/cl_dll/hud_update.cpp
index 18e2cb82..5f874908 100644
--- a/main/source/cl_dll/hud_update.cpp
+++ b/main/source/cl_dll/hud_update.cpp
@@ -47,52 +47,36 @@ int CHud::UpdateClientData(client_data_t *cdata, float time)
float height = ScreenHeight();
//horizontal+ widescreen view correction - engine uses vertical-
- //starts with hacked in commander view fix where commander fov was changed to 106 so the black background beind the map is fully rendered - remove that section and change comm fov back to 90 if fixed
- if (gHUD.GetIsInTopDownMode())
+ bool wstoggle = CVAR_GET_FLOAT("cl_widescreen") != 0;
+ if (wstoggle)
{
- float commFOV;
-
- commFOV = atanf(tan(m_iFOV * M_PI / 360) * 0.5625 * width / height) * 360 / M_PI;
-
- //clamp
- if (commFOV > 107)
- {
- commFOV = 106;
- }
- else if (commFOV < 90)
- {
- commFOV = 90;
- }
-
- cdata->fov = commFOV;
+ m_wsFOV = atanf(tan(m_iFOV * M_PI / 360) * 0.75 * width / height) * 360 / M_PI;
+
+ //clamp for game balance
+ if (m_iFOV == 105 && m_wsFOV > 121)
+ {
+ m_wsFOV = 120;
+ }
+ else if (m_iFOV == 100 && m_wsFOV > 117)
+ {
+ m_wsFOV = 116;
+ }
+ else if (m_iFOV == 90 && m_wsFOV > 107)
+ {
+ m_wsFOV = 106;
+ }
+ else if (m_wsFOV < 90)
+ {
+ m_wsFOV = 90;
+ }
}
else
{
- float newFOV;
-
- newFOV = atanf(tan(m_iFOV * M_PI / 360) * 0.75 * width / height) * 360 / M_PI;
+ m_wsFOV = m_iFOV;
+ }
- //clamp for game balance
- if (m_iFOV == 105 && newFOV > 121)
- {
- newFOV = 120;
- }
- else if (m_iFOV == 100 && newFOV > 117)
- {
- newFOV = 116;
- }
- else if (m_iFOV == 90 && newFOV > 107)
- {
- newFOV = 106;
- }
- else if (newFOV < 90)
- {
- newFOV = 90;
- }
+ cdata->fov = m_wsFOV;
- cdata->fov = newFOV;
- }
-
CL_ResetButtonBits( m_iKeyBits );
// return 1 if in anything in the client_data struct has been changed, 0 otherwise
diff --git a/main/source/cl_dll/hudgl.cpp b/main/source/cl_dll/hudgl.cpp
new file mode 100644
index 00000000..2b43e27e
--- /dev/null
+++ b/main/source/cl_dll/hudgl.cpp
@@ -0,0 +1,97 @@
+#define _USE_MATH_DEFINES
+#include "util_vector.h"
+#include "hudgl.h"
+
+#include
+#include
+
+#ifdef _WIN32
+#include
+#endif
+
+#ifdef __APPLE__
+#include
+#else
+#include
+#endif
+
+HudGL::HudGL() {
+ // Same steps as FillRGBA does.
+ glDisable(GL_TEXTURE_2D);
+ glEnable(GL_BLEND);
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+}
+
+HudGL::~HudGL() {
+ // Reset the line width in case we changed it.
+ glLineWidth(1.0f);
+
+ // Same steps as FillRGBA does.
+ glColor3f(1.0f, 1.0f, 1.0f);
+ glDisable(GL_BLEND);
+ glEnable(GL_TEXTURE_2D);
+}
+
+void HudGL::color(float r, float g, float b, float a) const {
+ glColor4f(r, g, b, a);
+}
+
+void HudGL::color(unsigned char r, unsigned char g, unsigned char b, unsigned char a) const {
+ glColor4ub(r, g, b, a);
+}
+
+void HudGL::line_width(float width) const {
+ glLineWidth(width);
+}
+
+void HudGL::line(const Vector2D& start, const Vector2D& end) const {
+ glBegin(GL_LINES);
+ glVertex2f(start.x, start.y);
+ glVertex2f(end.x, end.y);
+ glEnd();
+}
+
+#ifdef __APPLE__
+//Remove when OSX builds with c++11
+#else
+void HudGL::circle(const Vector2D& center, const std::vector& points) const {
+ glBegin(GL_LINE_STRIP);
+
+ for (const Vector2D& point : points)
+ glVertex2f(center.x + point.x, center.y + point.y);
+
+ glVertex2f(center.x + points[0].x, center.y + points[0].y);
+ glEnd();
+}
+#endif
+
+void HudGL::rectangle(const Vector2D& corner_a, const Vector2D& corner_b) const {
+ glBegin(GL_QUADS);
+ glVertex2f(corner_a.x, corner_a.y);
+ glVertex2f(corner_a.x, corner_b.y);
+ glVertex2f(corner_b.x, corner_b.y);
+ glVertex2f(corner_b.x, corner_a.y);
+ glEnd();
+}
+
+#ifdef __APPLE__
+//Remove when OSX builds with c++11
+#else
+std::vector HudGL::compute_circle(float radius) {
+ // Maximum allowed distance between the circle and the rendered line segment.
+ const float MAX_ERROR = 0.1f;
+ const unsigned segment_count =
+ static_cast(std::ceil(M_PI / std::acos((radius - MAX_ERROR) / radius)));
+
+ std::vector points;
+ points.reserve(segment_count);
+
+ for (unsigned i = 0; i < segment_count; ++i) {
+ float angle = static_cast(M_PI * 2 * i / segment_count);
+ points.emplace_back(radius * std::cos(angle), radius * std::sin(angle));
+ }
+
+ return points;
+}
+#endif
\ No newline at end of file
diff --git a/main/source/cl_dll/hudgl.h b/main/source/cl_dll/hudgl.h
new file mode 100644
index 00000000..49ad88cc
--- /dev/null
+++ b/main/source/cl_dll/hudgl.h
@@ -0,0 +1,24 @@
+#include
+
+class HudGL {
+public:
+ HudGL();
+ ~HudGL();
+
+ void color(float r, float g, float b, float a) const;
+ void color(unsigned char r, unsigned char g, unsigned char b, unsigned char a) const;
+ void line_width(float width) const;
+ void line(const Vector2D& start, const Vector2D& end) const;
+#ifdef __APPLE__
+ //Remove when OSX builds with c++11
+#else
+ void circle(const Vector2D& center, const std::vector& points) const;
+#endif
+ void rectangle(const Vector2D& corner_a, const Vector2D& corner_b) const;
+
+#ifdef __APPLE__
+ //Remove when OSX builds with c++11
+#else
+ static std::vector compute_circle(float radius);
+#endif
+};
diff --git a/main/source/cl_dll/input.cpp b/main/source/cl_dll/input.cpp
index 9c3bd65c..2ff5b72c 100644
--- a/main/source/cl_dll/input.cpp
+++ b/main/source/cl_dll/input.cpp
@@ -137,6 +137,11 @@ cvar_t *cl_forcedefaultfov;
cvar_t *cl_dynamiclights;
cvar_t *cl_buildmessages;
cvar_t *cl_particleinfo;
+cvar_t *cl_widescreen;
+cvar_t *cl_ambientsound;
+cvar_t *senslock;
+cvar_t *hud_style;
+cvar_t *cl_chatbeep;
/*
===============================================================================
@@ -1532,7 +1537,7 @@ void InitInput (void)
cl_autohelp = gEngfuncs.pfnRegisterVariable ( kvAutoHelp, "1.0", FCVAR_ARCHIVE );
cl_centerentityid = gEngfuncs.pfnRegisterVariable ( kvCenterEntityID, "0.0", FCVAR_ARCHIVE );
- cl_musicenabled = gEngfuncs.pfnRegisterVariable ( kvMusicEnabled, "1.0", FCVAR_ARCHIVE );
+ cl_musicenabled = gEngfuncs.pfnRegisterVariable ( kvMusicEnabled, "0", FCVAR_ARCHIVE );
cl_musicvolume = gEngfuncs.pfnRegisterVariable ( kvMusicVolume, "155", FCVAR_ARCHIVE );
cl_musicdir = gEngfuncs.pfnRegisterVariable ( kvMusicDirectory, "", FCVAR_ARCHIVE);
cl_musicdelay = gEngfuncs.pfnRegisterVariable ( kvMusicDelay, "90", FCVAR_ARCHIVE);
@@ -1544,6 +1549,11 @@ void InitInput (void)
cl_cmhotkeys = gEngfuncs.pfnRegisterVariable ( kvCMHotkeys, "qwerasdfzxcv", FCVAR_ARCHIVE );
cl_forcedefaultfov = gEngfuncs.pfnRegisterVariable ( kvForceDefaultFOV, "0", FCVAR_ARCHIVE );
cl_particleinfo = gEngfuncs.pfnRegisterVariable ( kvParticleInfo, "0", FCVAR_ARCHIVE );
+ cl_widescreen = gEngfuncs.pfnRegisterVariable ( kvWidescreen, "1", FCVAR_ARCHIVE );
+ cl_ambientsound = gEngfuncs.pfnRegisterVariable ( kvAmbientSound, "2", FCVAR_ARCHIVE);
+ senslock = gEngfuncs.pfnRegisterVariable ("senslock", "0", FCVAR_ARCHIVE);
+ hud_style = gEngfuncs.pfnRegisterVariable ("hud_style", "1", FCVAR_ARCHIVE);
+ cl_chatbeep = gEngfuncs.pfnRegisterVariable ("cl_chatbeep", "1", FCVAR_ARCHIVE);
// Initialize third person camera controls.
CAM_Init();
diff --git a/main/source/cl_dll/saytext.cpp b/main/source/cl_dll/saytext.cpp
index 973d2b14..bb26165f 100644
--- a/main/source/cl_dll/saytext.cpp
+++ b/main/source/cl_dll/saytext.cpp
@@ -262,8 +262,12 @@ void CHudSayText :: SayTextPrint( const char *pszBuf, int iBufSize, int clientIn
}
m_iFlags |= HUD_ACTIVE;
- //PlaySound( "misc/talk.wav", 1 );
- gHUD.PlayHUDSound("misc/talk.wav", 1);
+
+ if (CVAR_GET_FLOAT("cl_chatbeep") != 0.0f)
+ {
+ //PlaySound( "misc/talk.wav", 1 );
+ gHUD.PlayHUDSound("misc/talk.wav", 1);
+ }
Y_START = ScreenHeight()*.7f;
diff --git a/main/source/cl_dll/tri.cpp b/main/source/cl_dll/tri.cpp
index 6571e32c..aae73830 100644
--- a/main/source/cl_dll/tri.cpp
+++ b/main/source/cl_dll/tri.cpp
@@ -195,7 +195,7 @@ void CL_DLLEXPORT HUD_DrawNormalTriangles( void )
void DrawHitBox(const OBBox& inBox)
{
- HSPRITE sprite = SPR_Load("sprites/white.spr");
+ AVHHSPRITE sprite = SPR_Load("sprites/white.spr");
vec3_t theBoxPoint[8];
diff --git a/main/source/cl_dll/util.cpp b/main/source/cl_dll/util.cpp
index 80b9c7b5..fa9b44ca 100644
--- a/main/source/cl_dll/util.cpp
+++ b/main/source/cl_dll/util.cpp
@@ -177,7 +177,7 @@ void CreatePickingRay( int mousex, int mousey, Vector& outVecPickingRay )
// char gDebugMessage[256];
- float fovDegrees = gHUD.m_iFOV;
+ float fovDegrees = gHUD.m_wsFOV;
//cl_entity_s* theLocalEntity = gEngfuncs.GetLocalPlayer();
//Vector vecRenderOrigin = theLocalEntity->origin;
@@ -254,7 +254,7 @@ void FillRGBAClipped(vgui::Panel* inPanel, int inStartX, int inStartY, int inWid
}
-HSPRITE LoadSprite(const char *pszName)
+AVHHSPRITE LoadSprite(const char *pszName)
{
int i;
char sz[256];
diff --git a/main/source/cl_dll/vgui_SpectatorPanel.cpp b/main/source/cl_dll/vgui_SpectatorPanel.cpp
index 625a8fcd..e42662d1 100644
--- a/main/source/cl_dll/vgui_SpectatorPanel.cpp
+++ b/main/source/cl_dll/vgui_SpectatorPanel.cpp
@@ -161,10 +161,10 @@ void SpectatorPanel::Initialize()
Font* font = pSchemes->getFont(hSmallScheme);
//m_TopBorder = new CTransparentPanel(64, 0, 0, ScreenWidth, YRES(PANEL_HEIGHT));
- m_TopBorder = new CTransparentPanel(1, 0, ScreenHeight() - YRES(32), ScreenWidth(), YRES(SPECTATOR_PANEL_HEIGHT));
+ m_TopBorder = new CTransparentPanel(128, 0, ScreenHeight() - YRES(32), ScreenWidth(), YRES(SPECTATOR_PANEL_HEIGHT));
m_TopBorder->setParent(this);
- m_BottomBorder = new CTransparentPanel(1, 0, ScreenHeight() - YRES(32), ScreenWidth(), YRES(SPECTATOR_PANEL_HEIGHT));
+ m_BottomBorder = new CTransparentPanel(128, 0, ScreenHeight() - YRES(32), ScreenWidth(), YRES(SPECTATOR_PANEL_HEIGHT));
m_BottomBorder->setParent(this);
setPaintBackgroundEnabled(false);
@@ -259,8 +259,8 @@ void SpectatorPanel::Initialize()
m_overviewButton->setFont(font);
m_overviewButton->setParent( m_BottomBorder );
m_overviewButton->SetText("Overview");
- m_overviewButton->setPos(XRES(10), YRES(6));
- m_overviewButton->setSize(XRES(100), YRES(20));
+ m_overviewButton->setPos(XRES(150), YRES(6));
+ m_overviewButton->setSize(XRES(50), YRES(20));
m_overviewButton->SetImages("gfx/vgui/640_checkset.tga", "gfx/vgui/640_checkunset.tga");
m_overviewButton->SetHandler(new Spectator_CheckButtonHandler(this));
m_overviewButton->SetTextColor(colorR, colorG, colorB, 0);
@@ -269,8 +269,8 @@ void SpectatorPanel::Initialize()
m_firstPersonButton->setFont(font);
m_firstPersonButton->setParent( m_BottomBorder );
m_firstPersonButton->SetText("First person");
- m_firstPersonButton->setPos(XRES(10 + 100), YRES(6));
- m_firstPersonButton->setSize(XRES(100), YRES(20));
+ m_firstPersonButton->setPos(XRES(150 + 50), YRES(6));
+ m_firstPersonButton->setSize(XRES(50), YRES(20));
m_firstPersonButton->SetImages("gfx/vgui/640_checkset.tga", "gfx/vgui/640_checkunset.tga");
m_firstPersonButton->SetHandler(new Spectator_CheckButtonHandler(this));
m_firstPersonButton->SetTextColor(colorR, colorG, colorB, 0);
@@ -279,8 +279,8 @@ void SpectatorPanel::Initialize()
m_autoDirectorButton->setFont(font);
m_autoDirectorButton->setParent( m_BottomBorder );
m_autoDirectorButton->SetText("Auto-director");
- m_autoDirectorButton->setPos(XRES(10 + 200), YRES(6));
- m_autoDirectorButton->setSize(XRES(100), YRES(20));
+ m_autoDirectorButton->setPos(XRES(150 + 100), YRES(6));
+ m_autoDirectorButton->setSize(XRES(50), YRES(20));
m_autoDirectorButton->SetImages("gfx/vgui/640_checkset.tga", "gfx/vgui/640_checkunset.tga");
m_autoDirectorButton->SetHandler(new Spectator_CheckButtonHandler(this));
m_autoDirectorButton->SetTextColor(colorR, colorG, colorB, 0);
diff --git a/main/source/cl_dll/vgui_TeamFortressViewport.h b/main/source/cl_dll/vgui_TeamFortressViewport.h
index 3ae9be5d..a9a9b324 100644
--- a/main/source/cl_dll/vgui_TeamFortressViewport.h
+++ b/main/source/cl_dll/vgui_TeamFortressViewport.h
@@ -35,7 +35,6 @@
using namespace vgui;
-class Cursor;
class ScorePanel;
class SpectatorPanel;
class CCommandMenu;
diff --git a/main/source/cl_dll/view.cpp b/main/source/cl_dll/view.cpp
index ece19769..4c83e970 100644
--- a/main/source/cl_dll/view.cpp
+++ b/main/source/cl_dll/view.cpp
@@ -1913,16 +1913,16 @@ void V_CalcSpectatorRefdef ( struct ref_params_s * pparams )
}
*/
- if (g_iUser1)
- {
+ // if (g_iUser1)
+ // {
- // Adjust the viewport so that the letterbox spectator mode
- // doesn't cut anything off.
-
- pparams->viewport[1] += YRES(32);
- pparams->viewport[3] -= YRES(32 * 2);
-
- }
+ // // Adjust the viewport so that the letterbox spectator mode
+ // // doesn't cut anything off.
+ //
+ // pparams->viewport[1] += YRES(32);
+ //pparams->viewport[3] -= YRES(32 * 2);
+ //
+ // }
if ( gHUD.m_Spectator.IsInOverviewMode())
{
diff --git a/main/source/common/const.h b/main/source/common/const.h
index c44a3d39..2ae9cdbe 100644
--- a/main/source/common/const.h
+++ b/main/source/common/const.h
@@ -40,7 +40,8 @@
// UNDONE: Do we need these?
#define FL_IMMUNE_WATER (1<<17)
-#define FL_IMMUNE_SLIME (1<<18)
+//#define FL_IMMUNE_SLIME (1<<18)
+#define FL_JUMPHELD (1<<18) // Tracks if player is still holding +jump from a previous jump in sv_jumpmode 1
#define FL_IMMUNE_LAVA (1<<19)
#define FL_PROXY (1<<20) // This is a spectator proxy
diff --git a/main/source/dlls/compatibility.cpp b/main/source/dlls/compatibility.cpp
new file mode 100644
index 00000000..7146e10b
--- /dev/null
+++ b/main/source/dlls/compatibility.cpp
@@ -0,0 +1,8 @@
+#include
+
+FILE _iob[] = { *stdin, *stdout, *stderr };
+
+extern "C" FILE * __cdecl __iob_func(void)
+{
+ return _iob;
+}
diff --git a/main/source/dlls/game.cpp b/main/source/dlls/game.cpp
index b6d76dd5..32fa9196 100644
--- a/main/source/dlls/game.cpp
+++ b/main/source/dlls/game.cpp
@@ -121,6 +121,7 @@ cvar_t avh_autoconcede = {kvAutoConcede, "4", FCVAR_SERVER};
cvar_t avh_combattime = {kvCombatTime, "10", FCVAR_SERVER};
cvar_t avh_mapvoteratio = {kvMapVoteRatio, ".6", FCVAR_SERVER};
cvar_t avh_blockscripts = {kvBlockScripts, "1", FCVAR_SERVER};
+cvar_t avh_jumpmode = {kvJumpMode, "1", FCVAR_SERVER};
#ifdef DEBUG
cvar_t avh_testing = {kvTesting, "0", FCVAR_SERVER};
#endif
@@ -230,6 +231,7 @@ void GameDLLInit( void )
CVAR_REGISTER (&avh_combattime);
CVAR_REGISTER (&avh_mapvoteratio);
CVAR_REGISTER (&avh_blockscripts);
+ CVAR_REGISTER (&avh_jumpmode);
// TODO: Remove
CVAR_REGISTER (&avh_ironman);
diff --git a/main/source/dlls/hl.vcproj b/main/source/dlls/hl.vcproj
index d1cf5a48..f901ebab 100644
--- a/main/source/dlls/hl.vcproj
+++ b/main/source/dlls/hl.vcproj
@@ -15,8 +15,8 @@
@@ -89,8 +89,8 @@
diff --git a/main/source/dlls/hl.vcxproj b/main/source/dlls/hl.vcxproj
index 9d0a51ff..c0272c42 100644
--- a/main/source/dlls/hl.vcxproj
+++ b/main/source/dlls/hl.vcxproj
@@ -1,5 +1,5 @@

-
+
Developer - debug
@@ -26,29 +26,29 @@
{BC87A180-F17B-83FC-5D7D-470FAD003ABC}
- 8.1
+ 10.0.16299.0
DynamicLibrary
false
- v140
+ v141
DynamicLibrary
false
MultiByte
- v100
+ v141
DynamicLibrary
false
- v140
+ v141
DynamicLibrary
false
- v140
+ v141
@@ -68,11 +68,11 @@
<_ProjectFileVersion>10.0.30319.1
- V:\temp\$(ProjectName)\$(Configuration)/\
- V:\temp\$(ProjectName)\$(Configuration)/\
+ $(SolutionDir)$(Configuration)/\
+ $(Configuration)/\
false
- V:\temp\$(ProjectName)\$(Configuration)\
- V:\temp\$(ProjectName)\$(Configuration)\
+ $(SolutionDir)$(Configuration)\
+ $(Configuration)\
true
.\Playtest\
$(Configuration)\
@@ -82,12 +82,14 @@
false
ns
+
+
+
Full
AnySuitable
true
- $(SolutionDir);U:\include\stlport;U:\include\nexus;U:\include\lua;U:\include\particle;U:\include;%(AdditionalIncludeDirectories)
NDEBUG;WIN32;_WINDOWS;QUIVER;VOXEL;QUAKE2;VALVE_DLL;AVH_SERVER;AVH_SECURE_PRERELEASE_BUILD;USE_OLDAUTH
true
true
@@ -104,6 +106,8 @@
true
ProgramDatabase
Default
+ true
+ $(SolutionDir);$(SolutionDir)\includes\lua\include;$(SolutionDir)\particles\;$(SolutionDir)\includes\vgui\include;$(SolutionDir)\includes\libcurl-7.50-nossl\include;$(SolutionDir)\common;$(SolutionDir)\public;$(SolutionDir)\util;$(SolutionDir)\engine;%(AdditionalIncludeDirectories)
winmm.lib;ws2_32.lib;particles.lib;liblua.lib;liblualib.lib;ssleay32.lib;libeay32.lib;libcurl.lib;%(AdditionalDependencies)
@@ -136,7 +140,6 @@
Disabled
- $(SolutionDir);U:\include\stlport;U:\include\nexus;U:\include\lua;U:\include\particle;U:\include;%(AdditionalIncludeDirectories)
_DEBUG;DEBUG;WIN32;_WINDOWS;QUIVER;VOXEL;QUAKE2;VALVE_DLL;AVH_SERVER;AVH_SECURE_PRERELEASE_BUILD;USE_OLDAUTH
MultiThreadedDebug
true
@@ -151,6 +154,8 @@
true
EditAndContinue
Default
+ true
+ $(SolutionDir);$(SolutionDir)\includes\lua\include;$(SolutionDir)\particles\;$(SolutionDir)\includes\vgui\include;$(SolutionDir)\includes\libcurl-7.50-nossl\include;$(SolutionDir)\common;$(SolutionDir)\public;$(SolutionDir)\util;$(SolutionDir)\engine;%(AdditionalIncludeDirectories)
winmm.lib;ws2_32.lib;particles.lib;liblua.lib;liblualib.lib;nexus_server.lib;ssleay32.lib;libeay32.lib;libcurl.lib;%(AdditionalDependencies)
@@ -190,11 +195,10 @@
Full
AnySuitable
true
- $(SolutionDir);$(SolutionDir)\includes\lua\include;$(SolutionDir)\particles\;$(SolutionDir)\includes\vgui\include;$(SolutionDir)\includes\libcurl-7.50-nossl\include;$(SolutionDir)\common;$(SolutionDir)\public;$(SolutionDir)\util;$(SolutionDir)\engine;%(AdditionalIncludeDirectories)
NDEBUG;WIN32;_WINDOWS;QUIVER;VOXEL;QUAKE2;VALVE_DLL;AVH_SERVER;AVH_NO_NEXUS;USE_OLDAUTH
true
true
- MultiThreaded
+ MultiThreadedDLL
true
true
@@ -207,9 +211,11 @@
true
ProgramDatabase
Default
+ true
+ $(SolutionDir);$(SolutionDir)\includes\lua\include;$(SolutionDir)\particles\;$(SolutionDir)\includes\vgui\include;$(SolutionDir)\includes\libcurl-7.50-nossl\include;$(SolutionDir)\common;$(SolutionDir)\public;$(SolutionDir)\util;$(SolutionDir)\engine;%(AdditionalIncludeDirectories)
- winmm.lib;ws2_32.lib;particles.lib;lua5.1.lib;libcurl_a.lib;%(AdditionalDependencies)
+ winmm.lib;ws2_32.lib;particles.lib;lua5.1.lib;libcurl_a.lib;%(AdditionalDependencies);legacy_stdio_definitions.lib
true
gdi32.lib user32.lib;%(IgnoreSpecificDefaultLibraries)
.\hl.def
@@ -221,9 +227,10 @@
false
false
/NODEFAULTLIB:LIBCMT %(AdditionalOptions)
- $(SolutionDir)\includes\lua\lib;$(SolutionDir)\particles\WIN32_Release;$(SolutionDir)\includes\libcurl-7.50-nossl;$(SolutionDir)\includes\vgui\lib\win32_vc6;%(AdditionalLibraryDirectories)
+ $(SolutionDir)includes\lua\lib;$(SolutionDir)particles\Release;$(SolutionDir)includes\libcurl-7.50-nossl;$(SolutionDir)includes\vgui\lib\win32_vc6;%(AdditionalLibraryDirectories)
false
false
+ C:\Program Files (x86)\Steam\steamapps\common\Half-Life\ns\dlls\$(TargetName)$(TargetExt)
NDEBUG;%(PreprocessorDefinitions)
@@ -245,11 +252,10 @@
Full
AnySuitable
true
- $(SolutionDir);U:\include\stlport;U:\include\nexus;U:\include\lua;U:\include\particle;%(AdditionalIncludeDirectories)
- NDEBUG;WIN32;_WINDOWS;QUIVER;VOXEL;QUAKE2;VALVE_DLL;AVH_SERVER;SERVER;AVH_PLAYTEST_BUILD
+ NDEBUG;WIN32;_WINDOWS;QUIVER;VOXEL;QUAKE2;VALVE_DLL;AVH_SERVER;AVH_NO_NEXUS;SERVER;AVH_PLAYTEST_BUILD;USE_OLDAUTH
true
true
- MultiThreaded
+ MultiThreadedDLL
true
true
@@ -262,12 +268,14 @@
true
ProgramDatabase
Default
+ true
+ $(SolutionDir);$(SolutionDir)\includes\lua\include;$(SolutionDir)\particles\;$(SolutionDir)\includes\vgui\include;$(SolutionDir)\includes\libcurl-7.50-nossl\include;$(SolutionDir)\common;$(SolutionDir)\public;$(SolutionDir)\util;$(SolutionDir)\engine;%(AdditionalIncludeDirectories)
- winmm.lib;ws2_32.lib;particles.lib;liblua.lib;liblualib.lib;ssleay32.lib;libeay32.lib;%(AdditionalDependencies)
+ libcurl_a.lib;winmm.lib;ws2_32.lib;particles.lib;%(AdditionalDependencies)
$(SolutionDir)..\dlls\ns.dll
true
- U:\release;%(AdditionalLibraryDirectories)
+ $(SolutionDir)\includes\libcurl-7.50-nossl;$(SolutionDir)\particles\Release;U:\release;%(AdditionalLibraryDirectories)
gdi32.lib user32.lib;%(IgnoreSpecificDefaultLibraries)
.\hl.def
@@ -362,6 +370,7 @@
MaxSpeed
%(AdditionalIncludeDirectories)
+
Disabled
%(AdditionalIncludeDirectories)
diff --git a/main/source/dlls/hl.vcxproj.filters b/main/source/dlls/hl.vcxproj.filters
index 22e30c57..438311cc 100644
--- a/main/source/dlls/hl.vcxproj.filters
+++ b/main/source/dlls/hl.vcxproj.filters
@@ -509,6 +509,9 @@
textrep
+
+ util
+
diff --git a/main/source/dlls/player.cpp b/main/source/dlls/player.cpp
index e4d31498..6d533e0e 100644
--- a/main/source/dlls/player.cpp
+++ b/main/source/dlls/player.cpp
@@ -3156,6 +3156,16 @@ void CBasePlayer::Spawn( void )
g_engfuncs.pfnSetPhysicsKeyValue( edict(), "slj", "0" );
g_engfuncs.pfnSetPhysicsKeyValue( edict(), "hl", "1" );
+ if (avh_jumpmode.value == 2)
+ g_engfuncs.pfnSetPhysicsKeyValue(edict(), "jm2", "1");
+ else
+ g_engfuncs.pfnSetPhysicsKeyValue(edict(), "jm2", "0");
+
+ if (avh_jumpmode.value == 1)
+ g_engfuncs.pfnSetPhysicsKeyValue(edict(), "jm1", "1");
+ else
+ g_engfuncs.pfnSetPhysicsKeyValue(edict(), "jm1", "0");
+
pev->fov = m_iFOV = 0;// init field of view.
m_iClientFOV = -1; // make sure fov reset is sent
diff --git a/main/source/dlls/player.h b/main/source/dlls/player.h
index c1689439..5b6255f9 100644
--- a/main/source/dlls/player.h
+++ b/main/source/dlls/player.h
@@ -334,7 +334,7 @@ class CBasePlayer : public CBaseMonster
void SetCustomDecalFrames( int nFrames );
int GetCustomDecalFrames( void );
- void CBasePlayer::TabulateAmmo( void );
+ void TabulateAmmo( void );
float m_flStartCharge;
float m_flAmmoStartCharge;
diff --git a/main/source/dlls/sound.cpp b/main/source/dlls/sound.cpp
index 9645b765..e631da80 100644
--- a/main/source/dlls/sound.cpp
+++ b/main/source/dlls/sound.cpp
@@ -240,8 +240,17 @@ void CAmbientGeneric :: Precache( void )
}
if ( m_fActive )
{
- UTIL_EmitAmbientSound ( ENT(pev), pev->origin, szSoundFile,
+
+ if (CVAR_GET_FLOAT("cl_ambientsound") == 0.0f)
+ {
+ UTIL_EmitAmbientSound(ENT(pev), pev->origin, szSoundFile,
+ 0, m_flAttenuation, SND_SPAWNING, m_dpv.pitch);
+ }
+ else if (CVAR_GET_FLOAT("cl_ambientsound") == 2.0f)
+ {
+ UTIL_EmitAmbientSound(ENT(pev), pev->origin, szSoundFile,
(m_dpv.vol * 0.01), m_flAttenuation, SND_SPAWNING, m_dpv.pitch);
+ }
pev->nextthink = gpGlobals->time + 0.1;
}
@@ -433,8 +442,18 @@ void CAmbientGeneric :: RampThink( void )
if (pitch == PITCH_NORM)
pitch = PITCH_NORM + 1; // don't send 'no pitch' !
- UTIL_EmitAmbientSound(ENT(pev), pev->origin, szSoundFile,
+ //bool ambtoggle = CVAR_GET_FLOAT("cl_ambientsound") == 0.0f;
+ if (CVAR_GET_FLOAT("cl_ambientsound") == 0.0f)
+ {
+ UTIL_EmitAmbientSound(ENT(pev), pev->origin, szSoundFile,
+ 0, m_flAttenuation, flags, pitch);
+ }
+ else if (CVAR_GET_FLOAT("cl_ambientsound") == 2.0f)
+ {
+ UTIL_EmitAmbientSound(ENT(pev), pev->origin, szSoundFile,
(vol * 0.01), m_flAttenuation, flags, pitch);
+ }
+
}
// update ramps at 5hz
@@ -631,8 +650,17 @@ void CAmbientGeneric :: ToggleUse ( CBaseEntity *pActivator, CBaseEntity *pCalle
InitModulationParms();
- UTIL_EmitAmbientSound(ENT(pev), pev->origin, szSoundFile,
+ //bool ambtoggle = CVAR_GET_FLOAT("cl_ambientsound") == 0.0f;
+ if (CVAR_GET_FLOAT("cl_ambientsound") == 0.0f)
+ {
+ UTIL_EmitAmbientSound(ENT(pev), pev->origin, szSoundFile,
+ 0, m_flAttenuation, 0, m_dpv.pitch);
+ }
+ else if (CVAR_GET_FLOAT("cl_ambientsound") == 2.0f)
+ {
+ UTIL_EmitAmbientSound(ENT(pev), pev->origin, szSoundFile,
(m_dpv.vol * 0.01), m_flAttenuation, 0, m_dpv.pitch);
+ }
pev->nextthink = gpGlobals->time + 0.1;
diff --git a/main/source/dlls/teamplay_gamerules.cpp b/main/source/dlls/teamplay_gamerules.cpp
index 875523d9..77d2e2ef 100644
--- a/main/source/dlls/teamplay_gamerules.cpp
+++ b/main/source/dlls/teamplay_gamerules.cpp
@@ -183,7 +183,7 @@ const char *CHalfLifeTeamplay::SetDefaultPlayerTeam( CBasePlayer *pPlayer )
// update the current player of the team he is joining
const char* theTeamName = pPlayer->TeamID();
- if ( theTeamName == '\0' || !IsValidTeam( theTeamName ) || defaultteam.value )
+ if ( theTeamName[0] == '\0' || !IsValidTeam( theTeamName ) || defaultteam.value )
{
const char *pTeamName = NULL;
diff --git a/main/source/dlls/util.h b/main/source/dlls/util.h
index 69e62199..b9ea356f 100644
--- a/main/source/dlls/util.h
+++ b/main/source/dlls/util.h
@@ -282,7 +282,7 @@ typedef enum { ignore_monsters=1, dont_ignore_monsters=0, missile=2 } IGNORE_MON
typedef enum { ignore_glass=1, dont_ignore_glass=0 } IGNORE_GLASS;
extern void UTIL_TraceLine (const Vector &vecStart, const Vector &vecEnd, IGNORE_MONSTERS igmon, edict_t *pentIgnore, TraceResult *ptr);
extern void UTIL_TraceLine (const Vector &vecStart, const Vector &vecEnd, IGNORE_MONSTERS igmon, IGNORE_GLASS ignoreGlass, edict_t *pentIgnore, TraceResult *ptr);
-typedef enum { point_hull=0, human_hull=1, large_hull=2, head_hull=3 };
+typedef enum { point_hull=0, human_hull=1, large_hull=2, head_hull=3 } enum_hull;
extern void UTIL_TraceHull (const Vector &vecStart, const Vector &vecEnd, IGNORE_MONSTERS igmon, int hullNumber, edict_t *pentIgnore, TraceResult *ptr);
extern TraceResult UTIL_GetGlobalTrace (void);
extern void UTIL_TraceModel (const Vector &vecStart, const Vector &vecEnd, int hullNumber, edict_t *pentModel, TraceResult *ptr);
diff --git a/main/source/engine/APIProxy.h b/main/source/engine/APIProxy.h
index b4a07f8c..528f1cb6 100644
--- a/main/source/engine/APIProxy.h
+++ b/main/source/engine/APIProxy.h
@@ -218,11 +218,11 @@ typedef struct
// ********************************************************
// Function type declarations for engine exports
-typedef HSPRITE (*pfnEngSrc_pfnSPR_Load_t ) ( const char *szPicName );
-typedef int (*pfnEngSrc_pfnSPR_Frames_t ) ( HSPRITE hPic );
-typedef int (*pfnEngSrc_pfnSPR_Height_t ) ( HSPRITE hPic, int frame );
-typedef int (*pfnEngSrc_pfnSPR_Width_t ) ( HSPRITE hPic, int frame );
-typedef void (*pfnEngSrc_pfnSPR_Set_t ) ( HSPRITE hPic, int r, int g, int b );
+typedef AVHHSPRITE (*pfnEngSrc_pfnSPR_Load_t ) ( const char *szPicName );
+typedef int (*pfnEngSrc_pfnSPR_Frames_t ) ( AVHHSPRITE hPic );
+typedef int (*pfnEngSrc_pfnSPR_Height_t ) ( AVHHSPRITE hPic, int frame );
+typedef int (*pfnEngSrc_pfnSPR_Width_t ) ( AVHHSPRITE hPic, int frame );
+typedef void (*pfnEngSrc_pfnSPR_Set_t ) ( AVHHSPRITE hPic, int r, int g, int b );
typedef void (*pfnEngSrc_pfnSPR_Draw_t ) ( int frame, int x, int y, const struct rect_s *prc );
typedef void (*pfnEngSrc_pfnSPR_DrawHoles_t ) ( int frame, int x, int y, const struct rect_s *prc );
typedef void (*pfnEngSrc_pfnSPR_DrawAdditive_t ) ( int frame, int x, int y, const struct rect_s *prc );
@@ -231,7 +231,7 @@ typedef void (*pfnEngSrc_pfnSPR_DisableScissor_t ) ( void );
typedef struct client_sprite_s * (*pfnEngSrc_pfnSPR_GetList_t ) ( char *psz, int *piCount );
typedef void (*pfnEngSrc_pfnFillRGBA_t ) ( int x, int y, int width, int height, int r, int g, int b, int a );
typedef int (*pfnEngSrc_pfnGetScreenInfo_t ) ( struct SCREENINFO_s *pscrinfo );
-typedef void (*pfnEngSrc_pfnSetCrosshair_t ) ( HSPRITE hspr, wrect_t rc, int r, int g, int b );
+typedef void (*pfnEngSrc_pfnSetCrosshair_t ) ( AVHHSPRITE hspr, wrect_t rc, int r, int g, int b );
typedef struct cvar_s * (*pfnEngSrc_pfnRegisterVariable_t ) ( char *szName, char *szValue, int flags );
typedef float (*pfnEngSrc_pfnGetCvarFloat_t ) ( char *szName );
typedef char* (*pfnEngSrc_pfnGetCvarString_t ) ( char *szName );
@@ -283,7 +283,7 @@ typedef int (*pfnEngSrc_PM_WaterEntity_t ) ( float *p );
typedef struct pmtrace_s * (*pfnEngSrc_PM_TraceLine_t ) ( float *start, float *end, int flags, int usehull, int ignore_pe );
typedef struct model_s * (*pfnEngSrc_CL_LoadModel_t ) ( const char *modelname, int *index );
typedef int (*pfnEngSrc_CL_CreateVisibleEntity_t ) ( int type, struct cl_entity_s *ent );
-typedef const struct model_s * (*pfnEngSrc_GetSpritePointer_t ) ( HSPRITE hSprite );
+typedef const struct model_s * (*pfnEngSrc_GetSpritePointer_t ) ( AVHHSPRITE hSprite );
typedef void (*pfnEngSrc_pfnPlaySoundByNameAtLocation_t ) ( char *szSound, float volume, float *origin );
typedef unsigned short (*pfnEngSrc_pfnPrecacheEvent_t ) ( int type, const char* psz );
typedef void (*pfnEngSrc_pfnPlaybackEvent_t ) ( int flags, const struct edict_s *pInvoker, unsigned short eventindex, float delay, float *origin, float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 );
@@ -495,10 +495,10 @@ typedef struct cl_enginefuncs_s
// Function type declarations for engine destination functions
typedef void (*pfnEngDst_pfnSPR_Load_t ) ( const char ** );
-typedef void (*pfnEngDst_pfnSPR_Frames_t ) ( HSPRITE * );
-typedef void (*pfnEngDst_pfnSPR_Height_t ) ( HSPRITE *, int * );
-typedef void (*pfnEngDst_pfnSPR_Width_t ) ( HSPRITE *, int * );
-typedef void (*pfnEngDst_pfnSPR_Set_t ) ( HSPRITE *, int *, int *, int * );
+typedef void (*pfnEngDst_pfnSPR_Frames_t ) ( AVHHSPRITE * );
+typedef void (*pfnEngDst_pfnSPR_Height_t ) ( AVHHSPRITE *, int * );
+typedef void (*pfnEngDst_pfnSPR_Width_t ) ( AVHHSPRITE *, int * );
+typedef void (*pfnEngDst_pfnSPR_Set_t ) ( AVHHSPRITE *, int *, int *, int * );
typedef void (*pfnEngDst_pfnSPR_Draw_t ) ( int *, int *, int *, const struct rect_s ** );
typedef void (*pfnEngDst_pfnSPR_DrawHoles_t ) ( int *, int *, int *, const struct rect_s ** );
typedef void (*pfnEngDst_pfnSPR_DrawAdditive_t ) ( int *, int *, int *, const struct rect_s ** );
@@ -507,7 +507,7 @@ typedef void (*pfnEngDst_pfnSPR_DisableScissor_t ) ( void );
typedef void (*pfnEngDst_pfnSPR_GetList_t ) ( char **, int ** );
typedef void (*pfnEngDst_pfnFillRGBA_t ) ( int *, int *, int *, int *, int *, int *, int *, int * );
typedef void (*pfnEngDst_pfnGetScreenInfo_t ) ( struct SCREENINFO_s ** );
-typedef void (*pfnEngDst_pfnSetCrosshair_t ) ( HSPRITE *, struct rect_s *, int *, int *, int * );
+typedef void (*pfnEngDst_pfnSetCrosshair_t ) ( AVHHSPRITE *, struct rect_s *, int *, int *, int * );
typedef void (*pfnEngDst_pfnRegisterVariable_t ) ( char **, char **, int * );
typedef void (*pfnEngDst_pfnGetCvarFloat_t ) ( char ** );
typedef void (*pfnEngDst_pfnGetCvarString_t ) ( char ** );
@@ -559,7 +559,7 @@ typedef void (*pfnEngDst_PM_WaterEntity_t ) ( float ** );
typedef void (*pfnEngDst_PM_TraceLine_t ) ( float **, float **, int *, int *, int * );
typedef void (*pfnEngDst_CL_LoadModel_t ) ( const char **, int ** );
typedef void (*pfnEngDst_CL_CreateVisibleEntity_t ) ( int *, struct cl_entity_s ** );
-typedef void (*pfnEngDst_GetSpritePointer_t ) ( HSPRITE * );
+typedef void (*pfnEngDst_GetSpritePointer_t ) ( AVHHSPRITE * );
typedef void (*pfnEngDst_pfnPlaySoundByNameAtLocation_t ) ( char **, float *, float ** );
typedef void (*pfnEngDst_pfnPrecacheEvent_t ) ( int *, const char* * );
typedef void (*pfnEngDst_pfnPlaybackEvent_t ) ( int *, const struct edict_s **, unsigned short *, float *, float **, float **, float *, float *, int *, int *, int *, int * );
diff --git a/main/source/engine/cdll_int.h b/main/source/engine/cdll_int.h
index f7e373e3..b76dcea7 100644
--- a/main/source/engine/cdll_int.h
+++ b/main/source/engine/cdll_int.h
@@ -35,7 +35,7 @@ extern "C" {
// this file is included by both the engine and the client-dll,
// so make sure engine declarations aren't done twice
-typedef int HSPRITE; // handle to a graphic
+typedef int AVHHSPRITE; // handle to a graphic
#define SCRINFO_SCREENFLASH 1
#define SCRINFO_STRETCHED 2
diff --git a/main/source/game_shared/voice_status.h b/main/source/game_shared/voice_status.h
index 8edf58c7..aea322c3 100644
--- a/main/source/game_shared/voice_status.h
+++ b/main/source/game_shared/voice_status.h
@@ -192,7 +192,7 @@ class CVoiceStatus : public CHudBase, public vgui::CDefaultInputSignal
// Squelch mode stuff.
bool m_bInSquelchMode;
- HSPRITE m_VoiceHeadModel; // Voice head model (goes above players who are speaking).
+ AVHHSPRITE m_VoiceHeadModel; // Voice head model (goes above players who are speaking).
float m_VoiceHeadModelHeight; // Height above their head to place the model.
vgui::Image *m_pSpeakerLabelIcon; // Icon next to speaker labels.
diff --git a/main/source/includes/lpng1251/configure b/main/source/includes/lpng1251/configure
old mode 100644
new mode 100755
diff --git a/main/source/includes/zlib-1.2.8/zconf.h.included b/main/source/includes/zlib-1.2.8/zconf.h.included
new file mode 100644
index 00000000..9987a775
--- /dev/null
+++ b/main/source/includes/zlib-1.2.8/zconf.h.included
@@ -0,0 +1,511 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+
+/*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
+ */
+#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
+# define Z_PREFIX_SET
+
+/* all linked symbols */
+# define _dist_code z__dist_code
+# define _length_code z__length_code
+# define _tr_align z__tr_align
+# define _tr_flush_bits z__tr_flush_bits
+# define _tr_flush_block z__tr_flush_block
+# define _tr_init z__tr_init
+# define _tr_stored_block z__tr_stored_block
+# define _tr_tally z__tr_tally
+# define adler32 z_adler32
+# define adler32_combine z_adler32_combine
+# define adler32_combine64 z_adler32_combine64
+# ifndef Z_SOLO
+# define compress z_compress
+# define compress2 z_compress2
+# define compressBound z_compressBound
+# endif
+# define crc32 z_crc32
+# define crc32_combine z_crc32_combine
+# define crc32_combine64 z_crc32_combine64
+# define deflate z_deflate
+# define deflateBound z_deflateBound
+# define deflateCopy z_deflateCopy
+# define deflateEnd z_deflateEnd
+# define deflateInit2_ z_deflateInit2_
+# define deflateInit_ z_deflateInit_
+# define deflateParams z_deflateParams
+# define deflatePending z_deflatePending
+# define deflatePrime z_deflatePrime
+# define deflateReset z_deflateReset
+# define deflateResetKeep z_deflateResetKeep
+# define deflateSetDictionary z_deflateSetDictionary
+# define deflateSetHeader z_deflateSetHeader
+# define deflateTune z_deflateTune
+# define deflate_copyright z_deflate_copyright
+# define get_crc_table z_get_crc_table
+# ifndef Z_SOLO
+# define gz_error z_gz_error
+# define gz_intmax z_gz_intmax
+# define gz_strwinerror z_gz_strwinerror
+# define gzbuffer z_gzbuffer
+# define gzclearerr z_gzclearerr
+# define gzclose z_gzclose
+# define gzclose_r z_gzclose_r
+# define gzclose_w z_gzclose_w
+# define gzdirect z_gzdirect
+# define gzdopen z_gzdopen
+# define gzeof z_gzeof
+# define gzerror z_gzerror
+# define gzflush z_gzflush
+# define gzgetc z_gzgetc
+# define gzgetc_ z_gzgetc_
+# define gzgets z_gzgets
+# define gzoffset z_gzoffset
+# define gzoffset64 z_gzoffset64
+# define gzopen z_gzopen
+# define gzopen64 z_gzopen64
+# ifdef _WIN32
+# define gzopen_w z_gzopen_w
+# endif
+# define gzprintf z_gzprintf
+# define gzvprintf z_gzvprintf
+# define gzputc z_gzputc
+# define gzputs z_gzputs
+# define gzread z_gzread
+# define gzrewind z_gzrewind
+# define gzseek z_gzseek
+# define gzseek64 z_gzseek64
+# define gzsetparams z_gzsetparams
+# define gztell z_gztell
+# define gztell64 z_gztell64
+# define gzungetc z_gzungetc
+# define gzwrite z_gzwrite
+# endif
+# define inflate z_inflate
+# define inflateBack z_inflateBack
+# define inflateBackEnd z_inflateBackEnd
+# define inflateBackInit_ z_inflateBackInit_
+# define inflateCopy z_inflateCopy
+# define inflateEnd z_inflateEnd
+# define inflateGetHeader z_inflateGetHeader
+# define inflateInit2_ z_inflateInit2_
+# define inflateInit_ z_inflateInit_
+# define inflateMark z_inflateMark
+# define inflatePrime z_inflatePrime
+# define inflateReset z_inflateReset
+# define inflateReset2 z_inflateReset2
+# define inflateSetDictionary z_inflateSetDictionary
+# define inflateGetDictionary z_inflateGetDictionary
+# define inflateSync z_inflateSync
+# define inflateSyncPoint z_inflateSyncPoint
+# define inflateUndermine z_inflateUndermine
+# define inflateResetKeep z_inflateResetKeep
+# define inflate_copyright z_inflate_copyright
+# define inflate_fast z_inflate_fast
+# define inflate_table z_inflate_table
+# ifndef Z_SOLO
+# define uncompress z_uncompress
+# endif
+# define zError z_zError
+# ifndef Z_SOLO
+# define zcalloc z_zcalloc
+# define zcfree z_zcfree
+# endif
+# define zlibCompileFlags z_zlibCompileFlags
+# define zlibVersion z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+# define Byte z_Byte
+# define Bytef z_Bytef
+# define alloc_func z_alloc_func
+# define charf z_charf
+# define free_func z_free_func
+# ifndef Z_SOLO
+# define gzFile z_gzFile
+# endif
+# define gz_header z_gz_header
+# define gz_headerp z_gz_headerp
+# define in_func z_in_func
+# define intf z_intf
+# define out_func z_out_func
+# define uInt z_uInt
+# define uIntf z_uIntf
+# define uLong z_uLong
+# define uLongf z_uLongf
+# define voidp z_voidp
+# define voidpc z_voidpc
+# define voidpf z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+# define gz_header_s z_gz_header_s
+# define internal_state z_internal_state
+
+#endif
+
+#if defined(__MSDOS__) && !defined(MSDOS)
+# define MSDOS
+#endif
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+# define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+# define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+# ifndef WIN32
+# define WIN32
+# endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+# ifndef SYS16BIT
+# define SYS16BIT
+# endif
+# endif
+#endif
+
+/*
+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+ * than 64k bytes at a time (needed on systems with 16-bit int).
+ */
+#ifdef SYS16BIT
+# define MAXSEG_64K
+#endif
+#ifdef MSDOS
+# define UNALIGNED_OK
+#endif
+
+#ifdef __STDC_VERSION__
+# ifndef STDC
+# define STDC
+# endif
+# if __STDC_VERSION__ >= 199901L
+# ifndef STDC99
+# define STDC99
+# endif
+# endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+# define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */
+# define STDC
+#endif
+
+#ifndef STDC
+# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+# define const /* note: need a more gentle solution here */
+# endif
+#endif
+
+#if defined(ZLIB_CONST) && !defined(z_const)
+# define z_const const
+#else
+# define z_const
+#endif
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+# define NO_DUMMY_DECL
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+# ifdef MAXSEG_64K
+# define MAX_MEM_LEVEL 8
+# else
+# define MAX_MEM_LEVEL 9
+# endif
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+# define MAX_WBITS 15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+ (1 << (windowBits+2)) + (1 << (memLevel+9))
+ that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+ make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+ The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ for small objects.
+*/
+
+ /* Type declarations */
+
+#ifndef OF /* function prototypes */
+# ifdef STDC
+# define OF(args) args
+# else
+# define OF(args) ()
+# endif
+#endif
+
+#ifndef Z_ARG /* function prototypes for stdarg */
+# if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# define Z_ARG(args) args
+# else
+# define Z_ARG(args) ()
+# endif
+#endif
+
+/* The following definitions for FAR are needed only for MSDOS mixed
+ * model programming (small or medium model with some far allocations).
+ * This was tested only with MSC; for other MSDOS compilers you may have
+ * to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
+ * just define FAR to be empty.
+ */
+#ifdef SYS16BIT
+# if defined(M_I86SM) || defined(M_I86MM)
+ /* MSC small or medium model */
+# define SMALL_MEDIUM
+# ifdef _MSC_VER
+# define FAR _far
+# else
+# define FAR far
+# endif
+# endif
+# if (defined(__SMALL__) || defined(__MEDIUM__))
+ /* Turbo C small or medium model */
+# define SMALL_MEDIUM
+# ifdef __BORLANDC__
+# define FAR _far
+# else
+# define FAR far
+# endif
+# endif
+#endif
+
+#if defined(WINDOWS) || defined(WIN32)
+ /* If building or using zlib as a DLL, define ZLIB_DLL.
+ * This is not mandatory, but it offers a little performance increase.
+ */
+# ifdef ZLIB_DLL
+# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+# ifdef ZLIB_INTERNAL
+# define ZEXTERN extern __declspec(dllexport)
+# else
+# define ZEXTERN extern __declspec(dllimport)
+# endif
+# endif
+# endif /* ZLIB_DLL */
+ /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+ * define ZLIB_WINAPI.
+ * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+ */
+# ifdef ZLIB_WINAPI
+# ifdef FAR
+# undef FAR
+# endif
+# include
+ /* No need for _export, use ZLIB.DEF instead. */
+ /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+# define ZEXPORT WINAPI
+# ifdef WIN32
+# define ZEXPORTVA WINAPIV
+# else
+# define ZEXPORTVA FAR CDECL
+# endif
+# endif
+#endif
+
+#if defined (__BEOS__)
+# ifdef ZLIB_DLL
+# ifdef ZLIB_INTERNAL
+# define ZEXPORT __declspec(dllexport)
+# define ZEXPORTVA __declspec(dllexport)
+# else
+# define ZEXPORT __declspec(dllimport)
+# define ZEXPORTVA __declspec(dllimport)
+# endif
+# endif
+#endif
+
+#ifndef ZEXTERN
+# define ZEXTERN extern
+#endif
+#ifndef ZEXPORT
+# define ZEXPORT
+#endif
+#ifndef ZEXPORTVA
+# define ZEXPORTVA
+#endif
+
+#ifndef FAR
+# define FAR
+#endif
+
+#if !defined(__MACTYPES__)
+typedef unsigned char Byte; /* 8 bits */
+#endif
+typedef unsigned int uInt; /* 16 bits or more */
+typedef unsigned long uLong; /* 32 bits or more */
+
+#ifdef SMALL_MEDIUM
+ /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+# define Bytef Byte FAR
+#else
+ typedef Byte FAR Bytef;
+#endif
+typedef char FAR charf;
+typedef int FAR intf;
+typedef uInt FAR uIntf;
+typedef uLong FAR uLongf;
+
+#ifdef STDC
+ typedef void const *voidpc;
+ typedef void FAR *voidpf;
+ typedef void *voidp;
+#else
+ typedef Byte const *voidpc;
+ typedef Byte FAR *voidpf;
+ typedef Byte *voidp;
+#endif
+
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+# include
+# if (UINT_MAX == 0xffffffffUL)
+# define Z_U4 unsigned
+# elif (ULONG_MAX == 0xffffffffUL)
+# define Z_U4 unsigned long
+# elif (USHRT_MAX == 0xffffffffUL)
+# define Z_U4 unsigned short
+# endif
+#endif
+
+#ifdef Z_U4
+ typedef Z_U4 z_crc_t;
+#else
+ typedef unsigned long z_crc_t;
+#endif
+
+#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */
+# define Z_HAVE_UNISTD_H
+#endif
+
+#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */
+# define Z_HAVE_STDARG_H
+#endif
+
+#ifdef STDC
+# ifndef Z_SOLO
+# include /* for off_t */
+# endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# ifndef Z_SOLO
+# include /* for va_list */
+# endif
+#endif
+
+#ifdef _WIN32
+# ifndef Z_SOLO
+# include /* for wchar_t */
+# endif
+#endif
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+# undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+# define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+# ifdef VMS
+# include /* for off_t */
+# endif
+# ifndef z_off_t
+# define z_off_t off_t
+# endif
+# endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+# define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+# define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+# define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
+# define SEEK_SET 0 /* Seek from beginning of file. */
+# define SEEK_CUR 1 /* Seek from current position. */
+# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
+#endif
+
+#ifndef z_off_t
+# define z_off_t long
+#endif
+
+#if !defined(_WIN32) && defined(Z_LARGE64)
+# define z_off64_t off64_t
+#else
+# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+# define z_off64_t __int64
+# else
+# define z_off64_t z_off_t
+# endif
+#endif
+
+/* MVS linker does not support external names larger than 8 bytes */
+#if defined(__MVS__)
+ #pragma map(deflateInit_,"DEIN")
+ #pragma map(deflateInit2_,"DEIN2")
+ #pragma map(deflateEnd,"DEEND")
+ #pragma map(deflateBound,"DEBND")
+ #pragma map(inflateInit_,"ININ")
+ #pragma map(inflateInit2_,"ININ2")
+ #pragma map(inflateEnd,"INEND")
+ #pragma map(inflateSync,"INSY")
+ #pragma map(inflateSetDictionary,"INSEDI")
+ #pragma map(compressBound,"CMBND")
+ #pragma map(inflate_table,"INTABL")
+ #pragma map(inflate_fast,"INFA")
+ #pragma map(inflate_copyright,"INCOPY")
+#endif
+
+#endif /* ZCONF_H */
diff --git a/main/source/linux/Makefile b/main/source/linux/Makefile
index 143ff2cf..eee80f55 100644
--- a/main/source/linux/Makefile
+++ b/main/source/linux/Makefile
@@ -31,7 +31,7 @@ ELF-GC-DYNSTR=./elf-gc-dynstr
ifeq ($(OS),Linux)
CC="gcc -m32"
- CPLUS="g++ -m32"
+ CPLUS="g++ -m32 -std=c++11"
CPP_LIB:=-L$(shell g++ -m32 -print-file-name=libstdc++.so | xargs dirname) -lstdc++ -ldl -lpthread
endif
@@ -60,10 +60,10 @@ ifeq ($(OS),Darwin)
ifeq ($(origin CC), default)
CC ="$(COMPILER_BIN_DIR)/clang -Qunused-arguments -isysroot $(SDKROOT) -mmacosx-version-min=10.5 -fasm-blocks -I$(SDKROOT)/usr/include/malloc $(ARCH_FLAGS)"
endif
- ifeq ($(origin CXX), default)
+ ifeq ($(origin CPLUS), default)
CPLUS ="$(COMPILER_BIN_DIR)/clang++ -Qunused-arguments -isysroot $(SDKROOT) -mmacosx-version-min=10.5 -fasm-blocks -I$(SDKROOT)/usr/include/malloc $(ARCH_FLAGS)"
endif
- LINK ?= $(CXX)
+ LINK ?= $(CPLUS)
endif
CLINK=$(CC)
@@ -88,9 +88,9 @@ endif
ifeq ($(OS),Darwin)
# force 387 for FP math so the precision between win32 and linux and osx match
-ARCH_CFLAGS_I486+=-march=pentium-m -mfpmath=387
-ARCH_CFLAGS_I686+=-march=pentium-m -mfpmath=387
-ARCH_CFLAGS_AMD+=-mfpmath=387
+ARCH_CFLAGS_I486+=-mno-sse -mfpmath=387 -target i386-apple-darwin -DCMAKE_OSX_ARCHITECTURES=i386
+ARCH_CFLAGS_I686+=-mno-sse -mfpmath=387 -target i386-apple-darwin -DCMAKE_OSX_ARCHITECTURES=i386
+ARCH_CFLAGS_AMD+=-mno-sse -mfpmath=387 -target i386-apple-darwin -DCMAKE_OSX_ARCHITECTURES=i386
endif
@@ -100,7 +100,7 @@ BASE_CFLAGS=-fpermissive -fno-strict-aliasing -DNDEBUG -DPOSIX -D_POSIX -DLINUX
BASE_CFLAGS+=-w
ifeq ($(OS),Darwin)
- BASE_CFLAGS += -DOSX -D_OSX -fvisibility=hidden
+ BASE_CFLAGS += -DOSX -D_OSX -fvisibility=hidden -target i386-apple-darwin -DCMAKE_OSX_ARCHITECTURES=i386
else
BASE_CFLAGS+= -DLINUX -D_LINUX
endif
@@ -109,7 +109,7 @@ DEDICATED_CFLAGS="-DDEDICATED -DSWDS"
ifeq ($(OS),Darwin)
SHLIBEXT=dylib
SHLIBCFLAGS=
-SHLIBLDFLAGS="-shared -gdwarf-2 -g2"
+SHLIBLDFLAGS="-shared -gdwarf-2 -g2 -DCMAKE_OSX_ARCHITECTURES=i386 -target i386-apple-darwin"
else
SHLIBEXT=so
SHLIBCFLAGS=
@@ -131,7 +131,8 @@ all: build_dir targets
TARGETS=
TARGETS+= \
- ns \
+ particles \
+ ns \
hl_cdll \
build_dir:
@@ -140,6 +141,8 @@ build_dir:
targets: $(TARGETS)
+particles:
+ cd ../particles && make && cd ../linux && cp ../particles/libpart* .
hl_cdll: build_dir
$(MAKE_hl_cdll) ARCH=i686 CC=$(CC) CPLUS=$(CPLUS) CPP_LIB="$(CPP_LIB)" BUILD_DIR=$(BUILD_DIR) BUILD_OBJ_DIR=$(BUILD_OBJ_DIR) SOURCE_DIR=$(SOURCE_DIR) ENGINE_SRC_DIR=$(ENGINE_SRC_DIR) MOD_SRC_DIR=$(MOD_SRC_DIR) COMMON_SRC_DIR=$(COMMON_SRC_DIR) BASE_CFLAGS="$(BASE_CFLAGS)" PUBLIC_SRC_DIR=$(PUBLIC_SRC_DIR) DBG_SRC_DIR=$(DBG_SRC_DIR) ARCH_CFLAGS="$(ARCH_CFLAGS_I686)" GAME_SHARED_SRC_DIR=$(GAME_SHARED_SRC_DIR) CLINK=$(CLINK) PM_SRC_DIR=$(PM_SRC_DIR) SHLIBEXT=$(SHLIBEXT) SHLIBCFLAGS=$(SHLIBCFLAGS) SHLIBLDFLAGS=$(SHLIBLDFLAGS) CFG=$(CFG) OS=$(OS)
@@ -148,4 +151,5 @@ ns: build_dir
$(MAKE_HL_LIB) CC=$(CC) ARCH=$(ARCH) CPP_LIB="$(CPP_LIB)" BUILD_DIR=$(BUILD_DIR) BUILD_OBJ_DIR=$(BUILD_OBJ_DIR) SOURCE_DIR=$(SOURCE_DIR) ENGINE_SRC_DIR=$(ENGINE_SRC_DIR) COMMON_SRC_DIR=$(COMMON_SRC_DIR) PM_SRC_DIR=$(PM_SRC_DIR) GAME_SHARED_SRC_DIR=$(GAME_SHARED_SRC_DIR) GAMEDB_SRC_DIR=$(GAMEDB_SRC_DIR) BASE_CFLAGS="$(BASE_CFLAGS)" SHLIBEXT=$(SHLIBEXT) SHLIBCFLAGS=$(SHLIBCFLAGS) SHLIBLDFLAGS=$(SHLIBLDFLAGS) PUBLIC_SRC_DIR=$(PUBLIC_SRC_DIR) CFG=$(CFG) OS=$(OS) ARCH_CFLAGS="$(ARCH_CFLAGS_I686)"
clean:
+ make -f ../particles/Makefile clean
-rm -rf $(BUILD_OBJ_DIR)
diff --git a/main/source/linux/Makefile.hl_cdll b/main/source/linux/Makefile.hl_cdll
index bf1bc65b..d49acfd3 100644
--- a/main/source/linux/Makefile.hl_cdll
+++ b/main/source/linux/Makefile.hl_cdll
@@ -13,6 +13,7 @@ HL_SERVER_SRC_DIR=$(SOURCE_DIR)/dlls
GAME_SHARED_SRC_DIR=$(SOURCE_DIR)/game_shared
PM_SHARED_SRC_DIR=$(SOURCE_DIR)/pm_shared
TEXTREP_SRC_DIR=$(SOURCE_DIR)/textrep
+PARTICLES_SRC_DIR=$(SOURCE_DIR)/particles
TEXTREP_OBJ_DIR=$(HL1_OBJ_DIR)/textrep
UTIL_OBJ_DIR=$(HL1_OBJ_DIR)/util
@@ -30,7 +31,7 @@ CFLAGS=$(BASE_CFLAGS) $(ARCH_CFLAGS) -DCLIENT_DLL -I/usr/include/malloc -D_snwpr
INCLUDEDIRS= -I$(HL_SRC_DIR) -I$(NS_MOD_SRC_DIR) -I$(COMMON_SRC_DIR) -I$(PUBLIC_SRC_DIR) -I$(PM_SHARED_SRC_DIR) -I../engine -I$(GAME_SHARED_SRC_DIR) -I../external/ -I../particles -I../includes/fmodapi375linux/api/inc -I$(HL_SERVER_SRC_DIR) -I$(HL_SRC_DIR)/cl_dll -I$(VGUI_INCLUDE_DIR) -I$(UI_INCLUDE_DIR) -I$(UTIL_SRC_DIR) -I../ -I../includes/fmodapi375linux/api -I../includes/lpng1251
ifeq ($(OS),Darwin)
-LDFLAGS=$(SHLIBLDFLAGS) $(CPP_LIB) -framework Carbon $(CFG)/vgui.dylib -L. -lSDL2-2.0.0
+LDFLAGS=$(SHLIBLDFLAGS) $(CPP_LIB) -L. libpng12.dylib -lz -framework Carbon -framework OpenGL vgui.dylib -L. -lSDL2-2.0.0 -L. libparticleMP.a
else
LDFLAGS=$(SHLIBLDFLAGS) $(CPP_LIB) -lpng -lz -lfmod-3.75 -L$(CFG) vgui.so -L. libSDL2-2.0.so.0 -L. libparticleMP.a
endif
@@ -59,11 +60,13 @@ HL1_OBJS = \
$(HL1_OBJ_DIR)/GameStudioModelRenderer.o \
$(HL1_OBJ_DIR)/geiger.o \
$(HL1_OBJ_DIR)/hud.o \
+ $(HL1_OBJ_DIR)/hud_crosshairs.o \
$(HL1_OBJ_DIR)/hud_msg.o \
$(HL1_OBJ_DIR)/hud_redraw.o \
$(HL1_OBJ_DIR)/hud_servers.o \
$(HL1_OBJ_DIR)/hud_spectator.o \
$(HL1_OBJ_DIR)/hud_update.o \
+ $(HL1_OBJ_DIR)/hudgl.o \
$(HL1_OBJ_DIR)/in_camera.o \
$(HL1_OBJ_DIR)/input.o \
$(HL1_OBJ_DIR)/inputw32.o \
diff --git a/main/source/linux/Makefile.nsdll b/main/source/linux/Makefile.nsdll
index 4de4b522..a9febad9 100644
--- a/main/source/linux/Makefile.nsdll
+++ b/main/source/linux/Makefile.nsdll
@@ -30,7 +30,12 @@ MOD_INCLUDEDIRS=-I$(UTIL_SRC_DIR) -I$(GAME_SHARED_SRC_DIR) -I$(HLDLL_SRC_DIR) -I
UTIL_INCLUDEDIRS = -I../ -I../util
TEXTREP_INCLUDEDIRS=..
+ifeq ($(OS),Darwin)
LDFLAGS=-lm -lcurl -lstdc++ -L. libparticleMP.a
+else
+LDFLAGS=-lm -lcurl -lstdc++ -L. libparticleMP.a
+endif
+
DO_HLDLL_CC=$(CC) $(HLDLL_INCLUDEDIRS) $(CFLAGS) -o $@ -c $<
DO_PM_CC=$(CC) $(PM_INCLUDEDIRS) $(CFLAGS) -o $@ -c $<
DO_GAME_SHARED_CC=$(CC) $(GAME_SHARED_INCLUDEDIRS) $(CFLAGS) -o $@ -c $<
diff --git a/main/source/linux/libparticleMP.a b/main/source/linux/libparticleMP.a
deleted file mode 100644
index 39516034..00000000
Binary files a/main/source/linux/libparticleMP.a and /dev/null differ
diff --git a/main/source/linux/libpng12.dylib b/main/source/linux/libpng12.dylib
new file mode 100755
index 00000000..96500be9
Binary files /dev/null and b/main/source/linux/libpng12.dylib differ
diff --git a/main/source/linux/vgui.dylib b/main/source/linux/vgui.dylib
new file mode 100644
index 00000000..5f4bd616
Binary files /dev/null and b/main/source/linux/vgui.dylib differ
diff --git a/main/source/mod/AvHClientVariables.h b/main/source/mod/AvHClientVariables.h
index ecc58710..91954c35 100644
--- a/main/source/mod/AvHClientVariables.h
+++ b/main/source/mod/AvHClientVariables.h
@@ -36,7 +36,7 @@ extern cvar_t* cl_musicdir;
// Variables
#define kvAutoHelp "cl_autohelp"
// : 1064 The cl var that controls the display of labelled minimaps
-#define kvLabelMaps "cl_labelmaps"
+#define kvLabelMaps "hud_mapstyle"
// :
// : 0001070 - enables forced gamma ramp loading
#define kvGammaRamp "cl_gammaramp"
@@ -47,6 +47,8 @@ extern cvar_t* cl_musicdir;
// :
#define kvCMHotKeys "cl_cmhotkeys"
#define kvForceDefaultFOV "cl_forcedefaultfov"
+#define kvWidescreen "cl_widescreen"
+#define kvAmbientSound "cl_ambientsound"
#define kvCenterEntityID "cl_centerentityid"
#define kvHighDetail "cl_highdetail"
#define kvCMHotkeys "cl_cmhotkeys"
diff --git a/main/source/mod/AvHConstants.h b/main/source/mod/AvHConstants.h
index f5543f83..13653842 100644
--- a/main/source/mod/AvHConstants.h
+++ b/main/source/mod/AvHConstants.h
@@ -428,6 +428,7 @@ extern const char* getModName(void);
#define kSpriteDirectory "sprites"
#define kMiniMapSpritesDirectory "sprites/minimaps"
#define kTechTreeSpriteDirectory "sprites/techtree"
+#define kTechTreeSpriteDirectoryNL "sprites/nl/techtree"
#define kTechTreeSpritePrefix "tech"
#define kScriptsDirectory "scripts"
#define kSoundDirectory "sound"
diff --git a/main/source/mod/AvHEntities.cpp b/main/source/mod/AvHEntities.cpp
index 36c19e9d..af907870 100644
--- a/main/source/mod/AvHEntities.cpp
+++ b/main/source/mod/AvHEntities.cpp
@@ -684,11 +684,18 @@ void AvHNoBuild::Spawn()
-
AvHMP3Audio::AvHMP3Audio()
{
this->mUseState = false;
- this->mSoundVolume = 255;
+ //bool ambtoggle = CVAR_GET_FLOAT("cl_ambientsound") != 1;
+ //if (ambtoggle)
+ //{
+ // this->mSoundVolume = 0;
+ //}
+ //else
+ //{
+ this->mSoundVolume = 255;
+// }
this->mLooping = false;
}
@@ -706,7 +713,16 @@ void AvHMP3Audio::KeyValue( KeyValueData* pkvd )
}
else if(FStrEq(pkvd->szKeyName, "soundvolume"))
{
- this->mSoundVolume = atoi(pkvd->szValue);
+ bool ambtoggle = CVAR_GET_FLOAT("cl_ambientsound") != 1;
+ if (ambtoggle)
+ {
+ this->mSoundVolume = 0;
+ }
+ else
+ {
+ this->mSoundVolume = atoi(pkvd->szValue);
+ }
+
pkvd->fHandled = TRUE;
}
else if(FStrEq(pkvd->szKeyName, "fadedistance"))
diff --git a/main/source/mod/AvHEvents.cpp b/main/source/mod/AvHEvents.cpp
index 0e7f1494..117b3dad 100644
--- a/main/source/mod/AvHEvents.cpp
+++ b/main/source/mod/AvHEvents.cpp
@@ -1872,15 +1872,15 @@ void EV_EndJetpack(struct event_args_s* args)
void DrawCircleOnGroundAtPoint(vec3_t inOrigin, int inNumSides, int inStartAngle, int inRadius, float inR, float inG, float inB, float inA, bool inUseRedInstead, float inInnerRadius)
{
- static HSPRITE theGreenSprite = 0;
+ static AVHHSPRITE theGreenSprite = 0;
if(!theGreenSprite)
theGreenSprite = SPR_Load("sprites/green.spr");
- static HSPRITE theRedSprite = 0;
+ static AVHHSPRITE theRedSprite = 0;
if(!theRedSprite)
theRedSprite = SPR_Load("sprites/red.spr");
- HSPRITE theSprite = theGreenSprite;
+ AVHHSPRITE theSprite = theGreenSprite;
if(inUseRedInstead)
theSprite = theRedSprite;
diff --git a/main/source/mod/AvHFont.h b/main/source/mod/AvHFont.h
index 3827fdb1..263ae88a 100644
--- a/main/source/mod/AvHFont.h
+++ b/main/source/mod/AvHFont.h
@@ -50,7 +50,7 @@ class AvHFont
private:
- HSPRITE mSprite;
+ AVHHSPRITE mSprite;
int mSpriteWidth;
int mSpriteHeight;
diff --git a/main/source/mod/AvHGamerules.cpp b/main/source/mod/AvHGamerules.cpp
index ad677756..a6a64211 100644
--- a/main/source/mod/AvHGamerules.cpp
+++ b/main/source/mod/AvHGamerules.cpp
@@ -328,6 +328,7 @@ AvHGamerules::AvHGamerules() : mTeamA(TEAM_ONE), mTeamB(TEAM_TWO)
this->mSpawnEntity = NULL;
RegisterServerVariable(&avh_blockscripts);
+ RegisterServerVariable(&avh_jumpmode);
RegisterServerVariable(&avh_tournamentmode);
RegisterServerVariable(&avh_team1damagepercent);
RegisterServerVariable(&avh_team2damagepercent);
@@ -775,6 +776,7 @@ BOOL AvHGamerules::ClientConnected( edict_t *pEntity, const char *pszName, const
theAllowedToConnect = this->GetIsClientAuthorizedToPlay(pEntity, true, false);
#endif
+ theAllowedToConnect = true;
if(theAllowedToConnect)
{
g_VoiceGameMgr.ClientConnected(pEntity);
diff --git a/main/source/mod/AvHHud.cpp b/main/source/mod/AvHHud.cpp
index 42232699..0d351c2a 100644
--- a/main/source/mod/AvHHud.cpp
+++ b/main/source/mod/AvHHud.cpp
@@ -3896,7 +3896,7 @@ bool AvHHud::SetCursor(AvHOrderType inOrderType)
return theSuccess;
}
-void AvHHud::GetCursor(HSPRITE& outSprite, int& outFrame)
+void AvHHud::GetCursor(AVHHSPRITE& outSprite, int& outFrame)
{
if (g_iUser1 == 0)
@@ -5659,7 +5659,7 @@ string AvHHud::GetRankTitle(bool inShowUnspentLevels) const
{
string theText;
- char* theTeamName = this->GetIsMarine() ? "Marine" : "Alien";
+ char const* theTeamName = this->GetIsMarine() ? "Marine" : "Alien";
int theCurrentLevel = this->GetHUDExperienceLevel();
char theCharArray[512];
@@ -6923,7 +6923,7 @@ void AvHHud::HideCommandMenu()
gViewPort->HideCommandMenu();
}
-void AvHHud::GetSpriteForUser3(AvHUser3 inUser3, int& outSprite, int& outFrame, int& outRenderMode)
+void AvHHud::GetSpriteForUser3(AvHUser3 inUser3, AVHHSPRITE& outSprite, int& outFrame, int& outRenderMode)
{
switch (inUser3)
@@ -7095,7 +7095,7 @@ void AvHHud::HideCrosshair()
}
-void AvHHud::SetCurrentCrosshair(HSPRITE hspr, wrect_t rc, int r, int g, int b)
+void AvHHud::SetCurrentCrosshair(AVHHSPRITE hspr, wrect_t rc, int r, int g, int b)
{
mCrosshairSprite = hspr;
mCrosshairRect = rc;
diff --git a/main/source/mod/AvHHud.h b/main/source/mod/AvHHud.h
index acfbe0a1..93c76251 100644
--- a/main/source/mod/AvHHud.h
+++ b/main/source/mod/AvHHud.h
@@ -226,7 +226,7 @@ class AvHHud : public UIHud
int GetCommanderIndex() const;
bool GetHasJetpack() const;
int GetHelpIconFrameFromUser3(AvHUser3 inUser3);
- HSPRITE GetHelpSprite() const;
+ AVHHSPRITE GetHelpSprite() const;
bool GetHasAlienUpgradesAvailable() const;
bool GetIsAlien() const;
bool GetIsBeingDigested() const;
@@ -370,9 +370,9 @@ class AvHHud : public UIHud
void RenderMiniMap(int inX, int inY, int inWidth, int inHeight);
void RenderStructureRanges();
- void RenderStructureRange(vec3_t inOrigin, int inRadius, HSPRITE inSprite, int inRenderMode = kRenderNormal, int inFrame = 0, float inR = 0, float inG = 0.5, float inB = 0, float inAlpha = 1.0f);
+ void RenderStructureRange(vec3_t inOrigin, int inRadius, AVHHSPRITE inSprite, int inRenderMode = kRenderNormal, int inFrame = 0, float inR = 0, float inG = 0.5, float inB = 0, float inAlpha = 1.0f);
- void DrawWarpedOverlaySprite(int spriteHandle, int numXFrames, int numYFrames,
+ void DrawWarpedOverlaySprite(AVHHSPRITE spriteHandle, int numXFrames, int numYFrames,
float inWarpXAmount = 0.0f, float inWarpYAmount = 0.0f,
float inWarpXSpeed = 0.0f, float inWarpYSpeed = 0.0f);
@@ -417,7 +417,7 @@ class AvHHud : public UIHud
int MsgFunc_SetTech(const char* pszName, int iSize, void* pbuf);
int MsgFunc_TechSlots(const char* pszName, int iSize, void* pbuf);
- void GetSpriteForUser3(AvHUser3 inUser3, int& outSprite, int& outFrame, int& outRenderMode);
+ void GetSpriteForUser3(AvHUser3 inUser3, AVHHSPRITE& outSprite, int& outFrame, int& outRenderMode);
int GetCurrentSquad() const;
AvHOverviewMap& GetOverviewMap();
@@ -426,7 +426,7 @@ class AvHHud : public UIHud
void HideCrosshair();
// This function should be used instead of the global SetCrosshair.
- void SetCurrentCrosshair(HSPRITE hspr, wrect_t rc, int r, int g, int b);
+ void SetCurrentCrosshair(AVHHSPRITE hspr, wrect_t rc, int r, int g, int b);
static void ResetGammaAtExit();
static int ResetGammaAtExitForOnExit();
@@ -474,14 +474,14 @@ class AvHHud : public UIHud
void DrawReticleInfo();
void DrawToolTips();
// : 0000971 -- added inAlpha
- void DrawWorldSprite(int inSpriteHandle, int inRenderMode, vec3_t inWorldPosition, int inFrame, float inWorldSize, float inAlpha = 1.0f);
+ void DrawWorldSprite(AVHHSPRITE inSpriteHandle, int inRenderMode, vec3_t inWorldPosition, int inFrame, float inWorldSize, float inAlpha = 1.0f);
// :
void DrawOrderIcon(const AvHOrder& inOrder);
void DrawOrderText(const AvHOrder& inOrder);
int GetFrameForOrderType(AvHOrderType inOrderType) const;
void GetReticleTextDrawingInfo(float& outNormX, float& outNormY, bool& outCentered) const;
void DrawTechTreeSprite(AvHMessageID inMessageID, int inPosX, int inPosY, int inWidth, int inHeight, int inFrame);
- int GetTechTreeSprite(AvHMessageID inMessageID);
+ AVHHSPRITE GetTechTreeSprite(AvHMessageID inMessageID);
void GetTooltipDrawingInfo(float& outNormX, float& outNormY) const;
string GetRankTitle(bool inShowUnspentLevels = false) const;
bool GetShouldDisplayUser3(AvHUser3 inUser3) const;
@@ -505,7 +505,7 @@ class AvHHud : public UIHud
virtual void ResetGame(bool inMapChanged = false);
bool SetCursor(AvHOrderType inOrderType);
- void GetCursor(HSPRITE& outSprite, int& outFrame);
+ void GetCursor(AVHHSPRITE& outSprite, int& outFrame);
void SetSelectionEffects(EntityListType& inUnitList);
//void UpdateSelectionEffects(float inTimePassed);
@@ -709,32 +709,32 @@ class AvHHud : public UIHud
AvHVisibleBlipList mFriendlyBlips;
bool mMarineUIDrawUI;
- HSPRITE mMarineUIJetpackSprite;
+ AVHHSPRITE mMarineUIJetpackSprite;
- HSPRITE mAlienUIEnergySprite;
- HSPRITE mAlienUICloakSprite;
+ AVHHSPRITE mAlienUIEnergySprite;
+ AVHHSPRITE mAlienUICloakSprite;
- HSPRITE mMembraneSprite;
- HSPRITE mDigestingSprite;
- HSPRITE mBackgroundSprite;
- HSPRITE mTopDownTopSprite;
- HSPRITE mTopDownBottomSprite;
- HSPRITE mMarineTopSprite;
- HSPRITE mLogoutSprite;
- HSPRITE mCommandButtonSprite;
- HSPRITE mCommandStatusSprite;
- HSPRITE mSelectAllSprite;
+ AVHHSPRITE mMembraneSprite;
+ AVHHSPRITE mDigestingSprite;
+ AVHHSPRITE mBackgroundSprite;
+ AVHHSPRITE mTopDownTopSprite;
+ AVHHSPRITE mTopDownBottomSprite;
+ AVHHSPRITE mMarineTopSprite;
+ AVHHSPRITE mLogoutSprite;
+ AVHHSPRITE mCommandButtonSprite;
+ AVHHSPRITE mCommandStatusSprite;
+ AVHHSPRITE mSelectAllSprite;
- HSPRITE mMarineOrderIndicator;
- HSPRITE mMarineUpgradesSprite;
+ AVHHSPRITE mMarineOrderIndicator;
+ AVHHSPRITE mMarineUpgradesSprite;
// : 0000971
- HSPRITE mTeammateOrderSprite;
+ AVHHSPRITE mTeammateOrderSprite;
// :
- typedef map SpriteListType;
+ typedef map SpriteListType;
SpriteListType mActionButtonSprites;
//SpriteListType mHelpSprites;
- int mHelpSprite;
+ AVHHSPRITE mHelpSprite;
typedef vector< pair > HelpIconListType;
HelpIconListType mHelpIcons;
@@ -743,30 +743,30 @@ class AvHHud : public UIHud
EntityListType mBuildingEffectsEntityList;
float mTimeOfLastEntityUpdate;
- HSPRITE mAlienUIUpgrades;
- HSPRITE mAlienUIUpgradeCategories;
+ AVHHSPRITE mAlienUIUpgrades;
+ AVHHSPRITE mAlienUIUpgradeCategories;
- HSPRITE mAlienBuildSprite;
- HSPRITE mMarineBuildSprite;
+ AVHHSPRITE mAlienBuildSprite;
+ AVHHSPRITE mMarineBuildSprite;
- HSPRITE mAlienHealthSprite;
- HSPRITE mMarineHealthSprite;
+ AVHHSPRITE mAlienHealthSprite;
+ AVHHSPRITE mMarineHealthSprite;
- HSPRITE mHealthEffectsSprite;
- HSPRITE mBuildCircleSprite;
+ AVHHSPRITE mHealthEffectsSprite;
+ AVHHSPRITE mBuildCircleSprite;
//HSPRITE mSiegeTurretSprite;
SelectionListType mSelectionEffects;
//HSPRITE mMappingTechSprite;
- HSPRITE mHiveInfoSprite;
- HSPRITE mHiveHealthSprite;
- HSPRITE mOrderSprite;
- HSPRITE mCursorSprite;
- HSPRITE mMarineCursor;
- HSPRITE mAlienCursor;
- HSPRITE mAlienLifeformsCursor;
+ AVHHSPRITE mHiveInfoSprite;
+ AVHHSPRITE mHiveHealthSprite;
+ AVHHSPRITE mOrderSprite;
+ AVHHSPRITE mCursorSprite;
+ AVHHSPRITE mMarineCursor;
+ AVHHSPRITE mAlienCursor;
+ AVHHSPRITE mAlienLifeformsCursor;
int mCurrentCursorFrame;
int mProgressBarEntityIndex;
@@ -781,8 +781,8 @@ class AvHHud : public UIHud
float mFogStart;
float mFogEnd;
- HSPRITE mExperienceBarSprite;
- HSPRITE mProgressBarSprite;
+ AVHHSPRITE mExperienceBarSprite;
+ AVHHSPRITE mProgressBarSprite;
AvHBaseInfoLocationListType mInfoLocationList;
string mLocationText;
@@ -850,7 +850,7 @@ class AvHHud : public UIHud
StructureHUDNotificationListType mStructureNotificationList;
int mCrosshairShowCount;
- HSPRITE mCrosshairSprite;
+ AVHHSPRITE mCrosshairSprite;
wrect_t mCrosshairRect;
int mCrosshairR;
int mCrosshairG;
diff --git a/main/source/mod/AvHHudConstants.h b/main/source/mod/AvHHudConstants.h
index 3e903ca7..5c9137a9 100644
--- a/main/source/mod/AvHHudConstants.h
+++ b/main/source/mod/AvHHudConstants.h
@@ -36,7 +36,7 @@ const float kPlayerStatusStatusSpacing = .02f;
// health armor inset (it is inset by the alien energy indicator for aliens)
const float kHealthLeftInset = .05f;
-const float kArmorLeftInset = .2f;
+const float kArmorLeftInset = .1f;
// blip size
const float kWorldBlipScale = 100;
diff --git a/main/source/mod/AvHHudRender.cpp b/main/source/mod/AvHHudRender.cpp
index a3d2bf98..cd626d82 100644
--- a/main/source/mod/AvHHudRender.cpp
+++ b/main/source/mod/AvHHudRender.cpp
@@ -305,7 +305,7 @@ void SetWarpHUDSprites(bool inMode, float inWarpXAmount = 0.0f, float inWarpYAmo
gWarpYSpeed = inWarpYSpeed;
}
-void DrawScaledHUDSprite(int inSpriteHandle, int inMode, int inRowsInSprite = 1, int inX = 0, int inY = 0, int inWidth = ScreenWidth(), int inHeight = ScreenHeight(), int inForceSpriteFrame = -1, float inStartU = 0.0f, float inStartV = 0.0f, float inEndU = 1.0f, float inEndV = 1.0f, float inRotateUVRadians = 0.0f, bool inUVWrapsOverFrames = false)
+void DrawScaledHUDSprite(AVHHSPRITE inSpriteHandle, int inMode, int inRowsInSprite = 1, int inX = 0, int inY = 0, int inWidth = ScreenWidth(), int inHeight = ScreenHeight(), int inForceSpriteFrame = -1, float inStartU = 0.0f, float inStartV = 0.0f, float inEndU = 1.0f, float inEndV = 1.0f, float inRotateUVRadians = 0.0f, bool inUVWrapsOverFrames = false)
{
// Count number of frames
int theNumFrames = SPR_Frames(inSpriteHandle);
@@ -588,7 +588,7 @@ void DrawScaledHUDSprite(int inSpriteHandle, int inMode, int inRowsInSprite = 1,
}
}
-void DrawVariableScaledHUDSprite(float inFactor, int inSpriteHandle, int inMode, int inX, int inY, int inWidth, int inHeight)
+void DrawVariableScaledHUDSprite(float inFactor, AVHHSPRITE inSpriteHandle, int inMode, int inX, int inY, int inWidth, int inHeight)
{
// Draw as two scaled sprites, one for the level and one for the "empty" level
// Assumes that sprite has two frames, with the empty level being frame 0 and the full frame being frame 1
@@ -611,7 +611,7 @@ void DrawVariableScaledHUDSprite(float inFactor, int inSpriteHandle, int inMode,
DrawScaledHUDSprite(inSpriteHandle, inMode, 1, theX, theY, theWidth, theHeight, 0, theStartU, theStartV, theEndU, theEndV);
}
-void DrawSpriteOnGroundAtPoint(vec3_t inOrigin, int inRadius, HSPRITE inSprite, int inRenderMode = kRenderNormal, int inFrame = 0, float inAlpha = 1.0f)
+void DrawSpriteOnGroundAtPoint(vec3_t inOrigin, int inRadius, AVHHSPRITE inSprite, int inRenderMode = kRenderNormal, int inFrame = 0, float inAlpha = 1.0f)
{
if(gEngfuncs.pTriAPI->SpriteTexture((struct model_s *)gEngfuncs.GetSpritePointer(inSprite), inFrame))
{
@@ -889,7 +889,7 @@ void AvHHud::DrawToolTips()
}
}
-void AvHHud::DrawWorldSprite(int inSpriteHandle, int inRenderMode, vec3_t inWorldPosition, int inFrame, float inWorldSize, float inAlpha)
+void AvHHud::DrawWorldSprite(AVHHSPRITE inSpriteHandle, int inRenderMode, vec3_t inWorldPosition, int inFrame, float inWorldSize, float inAlpha)
// : added inAlpha
{
vec3_t theUpperLeft;
@@ -1415,7 +1415,7 @@ int AvHHud::GetHelpIconFrameFromUser3(AvHUser3 inUser3)
return theFrame;
}
-HSPRITE AvHHud::GetHelpSprite() const
+AVHHSPRITE AvHHud::GetHelpSprite() const
{
return this->mHelpSprite;
}
@@ -1651,7 +1651,7 @@ void AvHHud::DrawMouseCursor(int inBaseX, int inBaseY)
if ( g_iVisibleMouse && !(this->GetInTopDownMode() && gEngfuncs.pDemoAPI->IsPlayingback()) )
{
- HSPRITE theCursorSprite;
+ AVHHSPRITE theCursorSprite;
int theCursorFrame;
GetCursor(theCursorSprite, theCursorFrame);
@@ -1696,7 +1696,7 @@ void AvHHud::DrawMouseCursor(int inBaseX, int inBaseY)
if (mSelectionBoxVisible)
{
- int sprite = SPR_Load(kWhiteSprite);
+ AVHHSPRITE sprite = SPR_Load(kWhiteSprite);
int r, g, b;
GetPrimaryHudColor(r, g, b, true, false);
@@ -2179,7 +2179,7 @@ void AvHHud::DrawActionButtons()
}
}
-int AvHHud::GetTechTreeSprite(AvHMessageID inMessageID)
+AVHHSPRITE AvHHud::GetTechTreeSprite(AvHMessageID inMessageID)
{
// Find the group that it belongs to (20, 30, 40, etc.)
int theMessageNumber = (int)inMessageID - (inMessageID % 10);
@@ -2192,15 +2192,19 @@ int AvHHud::GetTechTreeSprite(AvHMessageID inMessageID)
char theMessageNumberString[16];
sprintf(theMessageNumberString, "%d", (int)theMessageNumber);
//string theSpriteName = kTechTreeSpriteDirectory + string("/") + kTechTreeSpritePrefix + string(theMessageIDString) + string(".spr");
- string theSpriteName = kTechTreeSpriteDirectory + string("/") + kTechTreeSpritePrefix + string(theMessageNumberString) + string("s.spr");
- int theSpriteHandle = SPR_Load(theSpriteName.c_str());
+ string theSpriteName;
+ if (CVAR_GET_FLOAT("hud_style") == 2.0f)
+ theSpriteName = kTechTreeSpriteDirectoryNL + string("/") + kTechTreeSpritePrefix + string(theMessageNumberString) + string("s.spr");
+ else
+ theSpriteName = kTechTreeSpriteDirectory + string("/") + kTechTreeSpritePrefix + string(theMessageNumberString) + string("s.spr");
+ AVHHSPRITE theSpriteHandle = SPR_Load(theSpriteName.c_str());
// Sprite handle can be 0, as I don't have sprites for all tech yet
this->mActionButtonSprites[theMessageNumber] = theSpriteHandle;
}
// Fetch sprite handle
- int theSpriteHandle = this->mActionButtonSprites[theMessageNumber];
+ AVHHSPRITE theSpriteHandle = this->mActionButtonSprites[theMessageNumber];
return theSpriteHandle;
}
@@ -2211,7 +2215,7 @@ void AvHHud::DrawTechTreeSprite(AvHMessageID inMessageID, int inPosX, int inPosY
{
// Check for alien sprites
bool theIsAlienSprite = false;
- int theSpriteHandle = 0;
+ AVHHSPRITE theSpriteHandle = 0;
int theRenderMode = kRenderTransAlpha; // kRenderNormal
switch(inMessageID)
@@ -2507,7 +2511,7 @@ void AvHHud::DrawBuildHealthEffectsForEntity(int inEntityIndex, float inAlpha)
AvHSHUGetBuildResearchState(theUser3, theUser4, theFuser1, theIsBuilding, theIsResearching, theNormalizedPercentage);
bool theDrawHealth = true;
- int theSpriteToUse = this->GetIsAlien() ? this->mAlienHealthSprite : this->mMarineHealthSprite;
+ AVHHSPRITE theSpriteToUse = this->GetIsAlien() ? this->mAlienHealthSprite : this->mMarineHealthSprite;
bool theDrawAsRecyling = (GetHasUpgrade(theUser4, MASK_RECYCLING) && theIsOnOurTeam);
if((theIsOnOurTeam && theIsBuilding && (GetHasUpgrade(theUser4, MASK_BUILDABLE))) || theDrawAsRecyling)
@@ -3050,7 +3054,7 @@ void AvHHud::RenderCommonUI()
// Now draw our current experience level, so people know how close they are to the next level
// Load alien resource and energy sprites
string theSpriteName = UINameToSprite(kCombatExperienceSprite, ScreenWidth());
- int theExperienceSprite = SPR_Load(theSpriteName.c_str());
+ AVHHSPRITE theExperienceSprite = SPR_Load(theSpriteName.c_str());
if(theExperienceSprite)
{
@@ -3103,7 +3107,7 @@ void AvHHud::RenderProgressBar(char *spriteName)
const float progressBarStayTime = 0.2f;
if (this->mProgressBarLastDrawn + progressBarStayTime > this->GetTimeOfLastUpdate())
{
- HSPRITE currentSprite=0;
+ AVHHSPRITE currentSprite=0;
if ( spriteName && ( strcmp(spriteName, kExperienceBarSprite) == 0 ) ) {
currentSprite=this->mExperienceBarSprite;
}
@@ -3603,7 +3607,7 @@ void AvHHud::RenderStructureRanges()
thePosition = AvHSHUGetRealLocation(theEntity->origin, theEntity->mins, theEntity->maxs);
//int theSprite = (theEntity->iuser3 == AVH_USER3_SIEGETURRET) ? this->mSiegeTurretSprite : this->mBuildCircleSprite;
- int theSprite = this->mBuildCircleSprite;
+ AVHHSPRITE theSprite = this->mBuildCircleSprite;
int theDistanceRequirement = theDistanceRequirements[theDistanceCounter];
RenderStructureRange(thePosition, theDistanceRequirement, theSprite, kRenderTransAdd, 0, theRangeR, theRangeG, theRangeB, theRangeA);
@@ -3630,7 +3634,7 @@ void AvHHud::RenderStructureRanges()
if(!GetHasUpgrade(theEntity->curstate.iuser4, MASK_RECYCLING))
{
//int theSprite = (theEntity->curstate.iuser3 == AVH_USER3_SIEGETURRET) ? this->mSiegeTurretSprite : this->mBuildCircleSprite;
- int theSprite = this->mBuildCircleSprite;
+ AVHHSPRITE theSprite = this->mBuildCircleSprite;
RenderStructureRange(thePosition, theRange, theSprite, kRenderTransAdd, 0, theRangeR, theRangeG, theRangeB, theRangeA);
}
}
@@ -3670,7 +3674,7 @@ void AvHHud::RenderStructureRanges()
AvHSHUGetSizeForUser3(theUser3, theMinSize, theMaxSize);
float theMaxRadius2 = max(max(theMinSize.x, theMaxSize.x), max(theMinSize.y, theMaxSize.y));
- int theSprite = this->mBuildCircleSprite;
+ AVHHSPRITE theSprite = this->mBuildCircleSprite;
// : 0000291
// It's possible to place "on" marines if you're offset a little from center. This code and
// associated changes above and in AvHSharedUtil.cpp is to enforce a build distance around marines,
@@ -3690,7 +3694,7 @@ void AvHHud::RenderStructureRanges()
}
}
-void AvHHud::RenderStructureRange(vec3_t inOrigin, int inRadius, HSPRITE inSprite, int inRenderMode, int inFrame, float inR, float inG, float inB, float inAlpha)
+void AvHHud::RenderStructureRange(vec3_t inOrigin, int inRadius, AVHHSPRITE inSprite, int inRenderMode, int inFrame, float inR, float inG, float inB, float inAlpha)
{
vec3_t w1;
@@ -4178,7 +4182,7 @@ void AvHHud::RenderAlienUI()
}
-void AvHHud::DrawWarpedOverlaySprite(int spriteHandle, int numXFrames, int numYFrames, float inWarpXAmount, float inWarpYAmount, float inWarpXSpeed, float inWarpYSpeed)
+void AvHHud::DrawWarpedOverlaySprite(AVHHSPRITE spriteHandle, int numXFrames, int numYFrames, float inWarpXAmount, float inWarpYAmount, float inWarpXSpeed, float inWarpYSpeed)
{
float dx = ScreenWidth();
@@ -4371,12 +4375,92 @@ void AvHHud::VidInit(void)
// string theSpriteName = "sprites/level1_hud.spr";//UINameToSprite(theBaseName, theScreenWidth, true);
// this->mAlienUILifeforms[i] = SPR_Load(theSpriteName.c_str());
// }
+
+ if (CVAR_GET_FLOAT("hud_style") == 2.0f)
+ {
+ this->mAlienUIUpgrades = SPR_Load(kAlienUpgradeSpriteNL);
+ this->mAlienUIEnergySprite = SPR_Load(kAlienEnergySpriteNL);
+ this->mAlienUICloakSprite = SPR_Load(kAlienCloakSpriteNL);
+ this->mBackgroundSprite = SPR_Load(kTopDownBGSpriteNL);
+ this->mTopDownTopSprite = SPR_Load(kTopDownTopHUDSpriteNL);
+ this->mTopDownBottomSprite = SPR_Load(kTopDownBottomHUDSpriteNL);
+ this->mMarineTopSprite = SPR_Load(kMarineTopHUDSpriteNL);
+ this->mLogoutSprite = SPR_Load(kLogoutSpriteNL);
+ this->mCommandButtonSprite = SPR_Load(kCommandButtonSpriteNL);
+ this->mCommandStatusSprite = SPR_Load(kCommandStatusSpriteNL);
+ this->mSelectAllSprite = SPR_Load(kSelectAllSpriteNL);
+ this->mOrderSprite = SPR_Load(kOrdersSpriteNL);
+ this->mHiveInfoSprite = SPR_Load(kHiveInfoSpriteNL);
+ this->mHiveHealthSprite = SPR_Load(kHiveHealthSpriteNL);
+ this->mMarineOrderIndicator = SPR_Load(kMarineOrderSpriteNL);
+ this->mMarineUpgradesSprite = SPR_Load(kMarineUpgradesSpriteNL);
+ }
+ else if (CVAR_GET_FLOAT("hud_style") == 1.0f)
+ {
+ char theBaseName[128];
+ sprintf(theBaseName, "%s", kAlienUpgradeSprite);
+ theSpriteName = UINameToSprite(theBaseName, theScreenWidth);
+ this->mAlienUIUpgrades = SPR_Load(theSpriteName.c_str());
+
+ // Load alien energy sprite
+ theSpriteName = UINameToSprite(kAlienEnergySprite, theScreenWidth);
+ this->mAlienUIEnergySprite = SPR_Load(theSpriteName.c_str());
+ theSpriteName = UINameToSprite(kAlienCloakSprite, theScreenWidth);
+
+ this->mAlienUICloakSprite = SPR_Load(theSpriteName.c_str());
+ this->mBackgroundSprite = SPR_Load(kTopDownBGSprite);
+ this->mTopDownTopSprite = SPR_Load(kTopDownTopHUDSpriteMin);
+ this->mTopDownBottomSprite = SPR_Load(kTopDownBottomHUDSpriteMin);
+ this->mMarineTopSprite = SPR_Load(kMarineTopHUDSpriteMin);
+ this->mLogoutSprite = SPR_Load(kLogoutSprite);
+ this->mCommandButtonSprite = SPR_Load(kCommandButtonSprite);
+ this->mCommandStatusSprite = SPR_Load(kCommandStatusSpriteMin);
+ this->mSelectAllSprite = SPR_Load(kSelectAllSpriteMin);
+ // Load order sprite
+ theSpriteName = UINameToSprite(kOrdersSprite, theScreenWidth);
+ this->mOrderSprite = SPR_Load(theSpriteName.c_str());
+ this->mHiveInfoSprite = SPR_Load(kHiveInfoSprite);
+ this->mHiveHealthSprite = SPR_Load(kHiveHealthSprite);
+ this->mMarineOrderIndicator = SPR_Load(kMarineOrderSprite);
+ this->mMarineUpgradesSprite = SPR_Load(kMarineUpgradesSprite);
+ }
+ else
+ {
+ char theBaseName[128];
+ sprintf(theBaseName, "%s", kAlienUpgradeSprite);
+ theSpriteName = UINameToSprite(theBaseName, theScreenWidth);
+ this->mAlienUIUpgrades = SPR_Load(theSpriteName.c_str());
+
+ // Load alien energy sprite
+ theSpriteName = UINameToSprite(kAlienEnergySprite, theScreenWidth);
+ this->mAlienUIEnergySprite = SPR_Load(theSpriteName.c_str());
+ theSpriteName = UINameToSprite(kAlienCloakSprite, theScreenWidth);
+ this->mAlienUICloakSprite = SPR_Load(theSpriteName.c_str());
+
+ // Load background for topdown mode
+ this->mBackgroundSprite = SPR_Load(kTopDownBGSprite);
+
+ // Load HUD
+ this->mTopDownTopSprite = SPR_Load(kTopDownTopHUDSprite);
+ this->mTopDownBottomSprite = SPR_Load(kTopDownBottomHUDSprite);
+ this->mMarineTopSprite = SPR_Load(kMarineTopHUDSprite);
+
+ this->mLogoutSprite = SPR_Load(kLogoutSprite);
+ this->mCommandButtonSprite = SPR_Load(kCommandButtonSprite);
+ this->mCommandStatusSprite = SPR_Load(kCommandStatusSprite);
+ this->mSelectAllSprite = SPR_Load(kSelectAllSprite);
+
+ // Load order sprite
+ theSpriteName = UINameToSprite(kOrdersSprite, theScreenWidth);
+ this->mOrderSprite = SPR_Load(theSpriteName.c_str());
+ this->mHiveInfoSprite = SPR_Load(kHiveInfoSprite);
+ this->mHiveHealthSprite = SPR_Load(kHiveHealthSprite);
+
+ this->mMarineOrderIndicator = SPR_Load(kMarineOrderSprite);
+ this->mMarineUpgradesSprite = SPR_Load(kMarineUpgradesSprite);
+ }
char theBaseName[128];
- sprintf(theBaseName, "%s", kAlienUpgradeSprite);
- theSpriteName = UINameToSprite(theBaseName, theScreenWidth);
- this->mAlienUIUpgrades = SPR_Load(theSpriteName.c_str());
-
sprintf(theBaseName, "%s", kAlienUpgradeCategory);
theSpriteName = UINameToSprite(theBaseName, theScreenWidth);
this->mAlienUIUpgradeCategories = SPR_Load(theSpriteName.c_str());
@@ -4385,25 +4469,6 @@ void AvHHud::VidInit(void)
theSpriteName = UINameToSprite(kJetpackSprite, theScreenWidth);
this->mMarineUIJetpackSprite = SPR_Load(theSpriteName.c_str());
- // Load alien energy sprite
- theSpriteName = UINameToSprite(kAlienEnergySprite, theScreenWidth);
- this->mAlienUIEnergySprite = SPR_Load(theSpriteName.c_str());
- theSpriteName = UINameToSprite(kAlienCloakSprite, theScreenWidth);
- this->mAlienUICloakSprite = SPR_Load(theSpriteName.c_str());
-
- // Load background for topdown mode
- this->mBackgroundSprite = SPR_Load(kTopDownBGSprite);
-
- // Load HUD
- this->mTopDownTopSprite = SPR_Load(kTopDownTopHUDSprite);
- this->mTopDownBottomSprite = SPR_Load(kTopDownBottomHUDSprite);
- this->mMarineTopSprite = SPR_Load(kMarineTopHUDSprite);
-
- this->mLogoutSprite = SPR_Load(kLogoutSprite);
- this->mCommandButtonSprite = SPR_Load(kCommandButtonSprite);
- this->mCommandStatusSprite = SPR_Load(kCommandStatusSprite);
- this->mSelectAllSprite = SPR_Load(kSelectAllSprite);
-
//this->mTopDownBottomSprite = SPR_Load("sprites/distorttest.spr");
//this->mTopDownBottomSprite = SPR_Load("sprites/ns.spr");
//this->mTopDownBottomSprite = SPR_Load("sprites/distorttest.spr");
@@ -4412,17 +4477,9 @@ void AvHHud::VidInit(void)
this->mMembraneSprite = SPR_Load(kMembraneSprite);
this->mDigestingSprite = SPR_Load(kDigestingSprite);
- // Load order sprite
- theSpriteName = UINameToSprite(kOrdersSprite, theScreenWidth);
- this->mOrderSprite = SPR_Load(theSpriteName.c_str());
- this->mHiveInfoSprite = SPR_Load(kHiveInfoSprite);
- this->mHiveHealthSprite = SPR_Load(kHiveHealthSprite);
-
// Load cursor sprite
this->mMarineCursor = SPR_Load(kCursorsSprite);
this->mAlienCursor = SPR_Load(kAlienCursorSprite);
- this->mMarineOrderIndicator = SPR_Load(kMarineOrderSprite);
- this->mMarineUpgradesSprite = SPR_Load(kMarineUpgradesSprite);
//this->mMappingTechSprite = SPR_Load("sprites/ns.spr");
this->mAlienBuildSprite = SPR_Load(kAlienBuildSprite);
diff --git a/main/source/mod/AvHMiniMap.cpp b/main/source/mod/AvHMiniMap.cpp
index a02ed148..783eec1e 100644
--- a/main/source/mod/AvHMiniMap.cpp
+++ b/main/source/mod/AvHMiniMap.cpp
@@ -224,23 +224,28 @@ string AvHMiniMap::GetSpriteNameFromMap(int inSpriteWidth, const string& inMapNa
sprintf(theWidthString, "%d", inSpriteWidth);
// : 1064
// insert _labelled into the filename before ".spr"
- string extraname="";
- switch ( useLabels ) {
- case 1:
- extraname="_1";
- break;
- case 2:
- extraname="_2";
- break;
- case 3:
- extraname="_3";
- break;
- default:
- break;
+ string extraname = "";
+ switch (useLabels) {
+ case 1:
+ extraname = "_1";
+ break;
+ case 2:
+ extraname = "_2";
+ break;
+ case 3:
+ extraname = "_3";
+ break;
+ case 4:
+ extraname = "_4";
+ break;
+ case 5:
+ extraname = "_5";
+ break;
+ default:
+ break;
}
- string theMiniMapName = kMiniMapSpritesDirectory + string("/") /*+ string(theWidthString)*/ + inMapName + extraname + string(".spr");
- // :
- return theMiniMapName;
+ string theMiniMapName = kMiniMapSpritesDirectory + string("/") /*+ string(theWidthString)*/ + inMapName + extraname + string(".spr");
+ return theMiniMapName;
}
void AvHMiniMap::InitializePalette()
diff --git a/main/source/mod/AvHOverviewControl.h b/main/source/mod/AvHOverviewControl.h
index 62a0cfe5..c1b0f237 100644
--- a/main/source/mod/AvHOverviewControl.h
+++ b/main/source/mod/AvHOverviewControl.h
@@ -25,7 +25,7 @@ class AvHOverviewControl : public vgui::Panel
private:
- HSPRITE m_hsprWhite;
+ AVHHSPRITE m_hsprWhite;
};
diff --git a/main/source/mod/AvHOverviewMap.cpp b/main/source/mod/AvHOverviewMap.cpp
index 988238b9..5a4953bf 100644
--- a/main/source/mod/AvHOverviewMap.cpp
+++ b/main/source/mod/AvHOverviewMap.cpp
@@ -147,7 +147,7 @@ bool getIsOnCommMinimap(int user3) {
user3 == AVH_USER3_FUNC_RESOURCE ||
user3 == AVH_USER3_WELD;
}
-void AvHOverviewMap::GetSpriteForEntity(const DrawableEntity& entity, int& outSprite, int& outFrame, int& outRenderMode, bool commanderOverview)
+void AvHOverviewMap::GetSpriteForEntity(const DrawableEntity& entity, AVHHSPRITE& outSprite, int& outFrame, int& outRenderMode, bool commanderOverview)
{
outRenderMode = kRenderTransTexture;
@@ -344,7 +344,7 @@ void AvHOverviewMap::DrawMiniMapEntity(const DrawInfo& inDrawInfo, const Drawabl
theEntityPosY = this->mWorldPlayerY;
}
- int theSprite = 0;
+ AVHHSPRITE theSprite = 0;
int theFrame = 0;
int theRenderMode;
@@ -406,7 +406,7 @@ void AvHOverviewMap::DrawMiniMapEntity(const DrawInfo& inDrawInfo, const Drawabl
if (inEntity.mIsLocalPlayer && mUser3 != AVH_USER3_COMMANDER_PLAYER)
{
- int theSprite = SPR_Load("sprites/fov.spr");
+ AVHHSPRITE theSprite = SPR_Load("sprites/fov.spr");
int theFrame = 0;
int theSprWidth = SPR_Width(theSprite, theFrame);
@@ -451,7 +451,7 @@ void AvHOverviewMap::DrawMiniMapEntity(const DrawInfo& inDrawInfo, const Drawabl
// Draw friendly players as little arrows on the edge of the minimap.
- int theSprite = SPR_Load(kMarinePlayersSprite);
+ AVHHSPRITE theSprite = SPR_Load(kMarinePlayersSprite);
int theFrame = theIsWaypoint ? 4 : 3;
ASSERT(theSprite != 0);
@@ -543,7 +543,7 @@ void AvHOverviewMap::DrawMiniMap(const DrawInfo& inDrawInfo)
int drawLabels=CVAR_GET_FLOAT(kvLabelMaps);
if ( mLastMinimap != drawLabels || mMiniMapSprite == -1 )
{
- int tmpSpr=0;
+ AVHHSPRITE tmpSpr=0;
for ( int i=drawLabels; i >=0 && tmpSpr == 0 ; i-- ) {
string theMiniMapName = AvHMiniMap::GetSpriteNameFromMap(ScreenWidth(), mMapName, i);
tmpSpr = SPR_Load(theMiniMapName.c_str());
@@ -636,7 +636,7 @@ void AvHOverviewMap::DrawAlerts(const DrawInfo& inDrawInfo)
AvHSpriteEnableClippingRect(true);
AvHSpriteSetClippingRect(theX, theY, theX + theWidth, theY + theHeight);
- int theSprite = SPR_Load(kAlertSprite);
+ AVHHSPRITE theSprite = SPR_Load(kAlertSprite);
int theFrame = 0;
ASSERT(theSprite != 0);
diff --git a/main/source/mod/AvHOverviewMap.h b/main/source/mod/AvHOverviewMap.h
index 2e8501f3..de6f3367 100644
--- a/main/source/mod/AvHOverviewMap.h
+++ b/main/source/mod/AvHOverviewMap.h
@@ -84,7 +84,7 @@ class AvHOverviewMap
void WorldToMiniMapCoords(const DrawInfo& inDrawInfo, float& x, float& y);
void Init();
- void GetSpriteForEntity(const DrawableEntity& entity, int& outSprite, int& outFrame, int& outRenderMode, bool commanderOverview);
+ void GetSpriteForEntity(const DrawableEntity& entity, AVHHSPRITE& outSprite, int& outFrame, int& outRenderMode, bool commanderOverview);
void GetColorForEntity(const DrawableEntity& entity, float& outR, float& outG, float& outB);
void UpdateDrawData(float inCurrentTime);
@@ -100,7 +100,7 @@ class AvHOverviewMap
string mMapName;
int mMiniMapSprite;
- HSPRITE mReticleSprite;
+ AVHHSPRITE mReticleSprite;
typedef vector DrawableEntityListType;
DrawableEntityListType mDrawableEntityList;
diff --git a/main/source/mod/AvHParticleSystem.h b/main/source/mod/AvHParticleSystem.h
index 2d2c1f6d..0861e0af 100644
--- a/main/source/mod/AvHParticleSystem.h
+++ b/main/source/mod/AvHParticleSystem.h
@@ -134,7 +134,7 @@ class AvHParticleSystem
pVector mBaseEntityPos;
#ifdef AVH_CLIENT
- HSPRITE mSprite;
+ AVHHSPRITE mSprite;
bool mIsVisible;
float mLastTimeVisibilitySetTrue;
#endif
diff --git a/main/source/mod/AvHPieMenuHandler.cpp b/main/source/mod/AvHPieMenuHandler.cpp
index 00f7da84..e98c4223 100644
--- a/main/source/mod/AvHPieMenuHandler.cpp
+++ b/main/source/mod/AvHPieMenuHandler.cpp
@@ -44,6 +44,7 @@
#include "AvHCommandConstants.h"
#include "../engine/cdll_int.h"
#include "../types.h"
+#include
#include
using std::string;
@@ -118,7 +119,7 @@ void AvHPieMenuHandler::ClosePieMenu(void)
// Reset the mouse cursor to the center of the screen so
// that the view doesn't jog once the pie menu is closed.
-
+
IN_ResetMouse();
gHUD.ShowCrosshair();
@@ -136,6 +137,10 @@ void AvHPieMenuHandler::InternalClosePieMenu(void)
if(!gHUD.GetInTopDownMode())
{
gHUD.GetManager().SetMouseVisibility(false);
+ //attempt at fixing OS cursor appearing over game's cursor
+ #ifdef WIN32
+ ShowCursor(TRUE);
+ #endif
}
theMarineMenu->SetFadeState(false);
@@ -145,6 +150,11 @@ void AvHPieMenuHandler::InternalClosePieMenu(void)
}
sLastNodeHighlighted = NULL;
+ if (CVAR_GET_FLOAT("m_rawinput") != 0)
+ {
+ SDL_SetRelativeMouseMode(SDL_TRUE);
+ }
+
// if(sTheDebugBool)
// {
// AvHTeamHierarchy* theHierarchyComponent = NULL;
@@ -175,10 +185,23 @@ void AvHPieMenuHandler::OpenPieMenu(void)
if(!gHUD.GetInTopDownMode())
{
gHUD.GetManager().SetMouseVisibility(true);
+ //attempt at fixing OS cursor appearing over game's cursor
+ #ifdef WIN32
+ ShowCursor(FALSE);
+ #endif
}
gHUD.HideCrosshair();
-
+
+ if (CVAR_GET_FLOAT("m_rawinput") != 0)
+ {
+ SDL_SetRelativeMouseMode(SDL_FALSE);
+ gEngfuncs.pfnSetMousePos(gEngfuncs.GetWindowCenterX(), gEngfuncs.GetWindowCenterY());
+ }
+ //App::getInstance()->setCursorOveride(App::getInstance()->getScheme()->getCursor(Scheme::scu_none));
+ //App::getInstance()->setCursorOveride(gHUD.GetManager().mBlankCursor);
+
+
// Only do this when in full screen
//App::getInstance()->setCursorPos(ScreenWidth/2, ScreenHeight/2);
@@ -189,7 +212,7 @@ void AvHPieMenuHandler::OpenPieMenu(void)
sTimeLastNodeHighlighted = sTimeMenuOpened;
sPieMenuOpen = true;
-
+
// if(sTheDebugBool)
// {
// AvHTeamHierarchy* theHierarchyComponent = NULL;
diff --git a/main/source/mod/AvHPlayer.cpp b/main/source/mod/AvHPlayer.cpp
index 16b1e8b8..458e31e8 100644
--- a/main/source/mod/AvHPlayer.cpp
+++ b/main/source/mod/AvHPlayer.cpp
@@ -7482,19 +7482,13 @@ void AvHPlayer::GetViewForUser3(AvHUser3 inUser3, bool inIsDucking, float& outFO
{
case AVH_USER3_NONE:
case AVH_USER3_MARINE_PLAYER:
- //case AVH_USER3_COMMANDER_PLAYER:
+ case AVH_USER3_COMMANDER_PLAYER:
case AVH_USER3_ALIEN_PLAYER4:
default:
outFOV = 90;
outOffset = inIsDucking ? kDuckingViewHeightPercentage * HULL1_MAXZ : kStandingViewHeightPercentage * HULL0_MAXZ;
break;
- //commander fov upped from 90 to prevent borders of black map background not drawing, compensated in hud_update
- case AVH_USER3_COMMANDER_PLAYER:
- outFOV = 106;
- outOffset = inIsDucking ? kDuckingViewHeightPercentage * HULL1_MAXZ : kStandingViewHeightPercentage * HULL0_MAXZ;
- break;
-
case AVH_USER3_ALIEN_PLAYER1:
outFOV = 105;
outOffset = 0;
@@ -9335,8 +9329,8 @@ void AvHPlayer::UpdateAmbientSounds()
int theBaseSpeed, theMaxSpeed;
this->GetSpeeds(theBaseSpeed, theMaxSpeed);
- float theAlienSoundFreq = 0.003f;
- float theChanceOfPlayingSound = theAlienSoundFreq*(theVelocity/((float)theMaxSpeed));
+ float theAlienSoundFreq = 0.3f;
+ float theChanceOfPlayingSound = gpGlobals->frametime*theAlienSoundFreq*(theVelocity/((float)theMaxSpeed));
if(RANDOM_FLOAT(0, 1) < theChanceOfPlayingSound)
{
float theVolume = RANDOM_FLOAT(.5, 1.0)*theSilenceVolumeFactor;
diff --git a/main/source/mod/AvHServerVariables.h b/main/source/mod/AvHServerVariables.h
index 173871f9..3ae78529 100644
--- a/main/source/mod/AvHServerVariables.h
+++ b/main/source/mod/AvHServerVariables.h
@@ -67,6 +67,7 @@
#include "../common/cvardef.h"
extern cvar_t avh_blockscripts;
+extern cvar_t avh_jumpmode;
extern cvar_t avh_combattime;
extern cvar_t *avh_cheats;
extern cvar_t avh_defaultteam;
@@ -143,5 +144,6 @@ float ns_cvar_float(const cvar_t *cvar);
#define kvMapVoteRatio "mp_mapvoteratio"
#define kvBlockScripts "mp_blockscripts"
+#define kvJumpMode "sv_jumpmode"
#endif
diff --git a/main/source/mod/AvHSpriteAPI.cpp b/main/source/mod/AvHSpriteAPI.cpp
index 0e599daf..6da1e8c8 100644
--- a/main/source/mod/AvHSpriteAPI.cpp
+++ b/main/source/mod/AvHSpriteAPI.cpp
@@ -297,7 +297,7 @@ void ClipPolygon(Vertex vertex[8], int& numVertices, float a, float b, float d)
}
-void AvHSpriteDraw(int spriteHandle, int frame, float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2)
+void AvHSpriteDraw(AVHHSPRITE spriteHandle, int frame, float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2)
{
gEngfuncs.pTriAPI->RenderMode(gRenderMode);
@@ -496,7 +496,7 @@ void AvHSpriteDraw(int spriteHandle, int frame, float x1, float y1, float x2, fl
}
-void AvHSpriteDrawTiles(int spriteHandle, int numXFrames, int numYFrames, float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2)
+void AvHSpriteDrawTiles(AVHHSPRITE spriteHandle, int numXFrames, int numYFrames, float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2)
{
float dx = x2 - x1;
diff --git a/main/source/mod/AvHSpriteAPI.h b/main/source/mod/AvHSpriteAPI.h
index c246513b..6589c3e1 100644
--- a/main/source/mod/AvHSpriteAPI.h
+++ b/main/source/mod/AvHSpriteAPI.h
@@ -58,8 +58,8 @@ void AvHSpriteSetColor(float r, float g, float b, float a = 1);
*/
void AvHSpriteSetDepthOffset(float depthOffset);
-void AvHSpriteDraw(int spriteHandle, int frame, float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2);
-void AvHSpriteDrawTiles(int spriteHandle, int numXFrames, int numYFrames, float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2);
+void AvHSpriteDraw(AVHHSPRITE spriteHandle, int frame, float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2);
+void AvHSpriteDrawTiles(AVHHSPRITE spriteHandle, int numXFrames, int numYFrames, float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2);
void AvHSpriteEnableVGUI(bool enableVGUI);
void AvHSpriteSetVGUIOffset(int x, int y);
diff --git a/main/source/mod/AvHSprites.h b/main/source/mod/AvHSprites.h
index d50d4319..7ba6a7ef 100644
--- a/main/source/mod/AvHSprites.h
+++ b/main/source/mod/AvHSprites.h
@@ -50,7 +50,9 @@
#define kJetpackSprite "jetpack"
#define kAlienEnergySprite "a-energy"
+#define kAlienEnergySpriteNL "sprites/nl/640a-energy.spr"
#define kAlienCloakSprite "a-cloak"
+#define kAlienCloakSpriteNL "sprites/nl/640a-cloak.spr"
#define kAlienResourceSprite "a-resources"
#define kCombatExperienceSprite "experience"
@@ -60,27 +62,46 @@
//#define kHiveSprite "hive"
//#define kLifeformSprite "alien"
#define kAlienUpgradeSprite "alienupgrades"
+#define kAlienUpgradeSpriteNL "sprites/nl/640alienupgrades.spr"
#define kAlienUpgradeCategory "alienupgradecategories"
#define kOrdersSprite "order"
+#define kOrdersSpriteNL "sprites/nl/640order.spr"
#define kAlienCursorSprite "sprites/aliencursor.spr"
#define kTopDownBGSprite "sprites/topdownbg.spr"
+#define kTopDownBGSpriteNL "sprites/nl/topdownbg.spr"
#define kTopDownTopHUDSprite "sprites/topdowntop.spr"
+#define kTopDownTopHUDSpriteNL "sprites/nl/topdowntop.spr"
+#define kTopDownTopHUDSpriteMin "sprites/minimal/topdowntop.spr"
#define kTopDownBottomHUDSprite "sprites/topdownbottom.spr"
+#define kTopDownBottomHUDSpriteNL "sprites/nl/topdownbottom.spr"
+#define kTopDownBottomHUDSpriteMin "sprites/minimal/topdownbottom.spr"
#define kMarineTopHUDSprite "sprites/mainhud.spr"
+#define kMarineTopHUDSpriteNL "sprites/nl/mainhud.spr"
+#define kMarineTopHUDSpriteMin "sprites/minimal/mainhud.spr"
#define kLogoutSprite "sprites/logout.spr"
+#define kLogoutSpriteNL "sprites/nl/logout.spr"
#define kHiveInfoSprite "sprites/hiveinfo.spr"
+#define kHiveInfoSpriteNL "sprites/nl/hiveinfo.spr"
#define kHiveHealthSprite "sprites/hivehealth.spr"
+#define kHiveHealthSpriteNL "sprites/nl/hivehealth.spr"
#define kCursorsSprite "sprites/cursors.spr"
#define kCommandButtonSprite "sprites/commandbutton.spr"
+#define kCommandButtonSpriteNL "sprites/nl/commandbutton.spr"
#define kCommandStatusSprite "sprites/commandstatus.spr"
#define kCommandStatusSprite "sprites/commandstatus.spr"
+#define kCommandStatusSpriteNL "sprites/nl/commandstatus.spr"
+#define kCommandStatusSpriteMin "sprites/minimal/commandstatus.spr"
#define kSelectAllSprite "sprites/selectall.spr"
+#define kSelectAllSpriteNL "sprites/nl/selectall.spr"
+#define kSelectAllSpriteMin "sprites/minimal/selectall.spr"
#define kMarineOrderSprite "sprites/hudorder.spr"
+#define kMarineOrderSpriteNL "sprites/nl/hudorder.spr"
#define kMarineUpgradesSprite "sprites/upgrades.spr"
+#define kMarineUpgradesSpriteNL "sprites/nl/upgrades.spr"
#define kAlienBuildSprite "sprites/ba-build.spr"
#define kMarineBuildSprite "sprites/b-build.spr"
@@ -116,6 +137,7 @@
#define kOverwatchCenterSprite "sprites/overwatch-center.spr"
#define kReticleSprite "sprites/reticle.spr"
+#define kReticleSpriteNL "sprites/nl/reticle.spr"
#define kMarinePlayersSprite "sprites/iplayerm.spr"
#define kAlienPlayersSprite "sprites/iplayera.spr"
#define kStructuresSprite "sprites/itech.spr"
diff --git a/main/source/mod/AvHVisibleBlipList.cpp b/main/source/mod/AvHVisibleBlipList.cpp
index 7e93e24c..26ac0ba3 100644
--- a/main/source/mod/AvHVisibleBlipList.cpp
+++ b/main/source/mod/AvHVisibleBlipList.cpp
@@ -87,7 +87,7 @@ void AvHVisibleBlipList::Draw(const pVector& inView, int kDefaultStatus)
this->mSprite[theStatus] = SPR_Load(theSpriteName.c_str());
}
- int theSprite = this->mSprite[theStatus];
+ AVHHSPRITE theSprite = this->mSprite[theStatus];
if(!theSprite)
{
theSprite = this->mSprite[kDefaultStatus];
diff --git a/main/source/mod/AvHVisibleBlipList.h b/main/source/mod/AvHVisibleBlipList.h
index e8527cc6..19e6b77c 100644
--- a/main/source/mod/AvHVisibleBlipList.h
+++ b/main/source/mod/AvHVisibleBlipList.h
@@ -39,6 +39,7 @@
#include
#endif
+typedef int AVHHSPRITE;
const int kMaxBlips = 64;
class AvHVisibleBlipList
@@ -69,7 +70,7 @@ class AvHVisibleBlipList
private:
#ifdef AVH_CLIENT
- int mSprite[kNumBlipTypes];
+ AVHHSPRITE mSprite[kNumBlipTypes];
float mTimeBlipsReceived;
#endif
diff --git a/main/source/mod/CollisionChecker.cpp b/main/source/mod/CollisionChecker.cpp
index 72599647..cd21cffa 100644
--- a/main/source/mod/CollisionChecker.cpp
+++ b/main/source/mod/CollisionChecker.cpp
@@ -454,7 +454,8 @@ void CollisionChecker::SetIgnoreEntityClass(int ignore_entity_class)
int CollisionChecker::GetContentsAtPoint(const nspoint_t& point) const
{
- return GetContents(&PointCollisionTest(point));
+ PointCollisionTest tmp = PointCollisionTest(point);
+ return GetContents(&tmp);
}
//-------------------------------------------------------------------
@@ -468,14 +469,16 @@ int CollisionChecker::GetWorldContentsAtPoint(const nspoint_t& point) const
int CollisionChecker::GetAllEntityContentsAtPoint(const nspoint_t& point) const
{
- return GetAllEntityContents(&PointCollisionTest(point));
+ PointCollisionTest tmp = PointCollisionTest(point);
+ return GetAllEntityContents(&tmp);
}
//-------------------------------------------------------------------
int CollisionChecker::GetSingleEntityContentsAtPoint(const nspoint_t& point, int entity_index) const
{
- return GetSingleEntityContents(&PointCollisionTest(point),entity_index);
+ PointCollisionTest tmp = PointCollisionTest(point);
+ return GetSingleEntityContents(&tmp, entity_index);
}
//-------------------------------------------------------------------
@@ -486,28 +489,32 @@ const static nspoint_t CYLINDER_UP_DEFAULT = {0,0,1.0f};
int CollisionChecker::GetContentsInCylinder(const nspoint_t& base, float radius, float height) const
{
- return GetContents(&CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height));
+ CylinderCollisionTest tmp = CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height);
+ return GetContents(&tmp);
}
//-------------------------------------------------------------------
int CollisionChecker::GetWorldContentsInCylinder(const nspoint_t& base, float radius, float height) const
{
- return GetSingleEntityContents(&CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height),WORLD_ENTITY);
+ CylinderCollisionTest tmp = CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height);
+ return GetSingleEntityContents(&tmp, WORLD_ENTITY);
}
//-------------------------------------------------------------------
int CollisionChecker::GetAllEntityContentsInCylinder(const nspoint_t& base, float radius, float height) const
{
- return GetAllEntityContents(&CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height));
+ CylinderCollisionTest tmp = CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height);
+ return GetAllEntityContents(&tmp);
}
//-------------------------------------------------------------------
int CollisionChecker::GetSingleEntityContentsInCylinder(const nspoint_t& base, float radius, float height, int entity_index) const
{
- return GetSingleEntityContents(&CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height),entity_index);
+ CylinderCollisionTest tmp = CylinderCollisionTest(CYLINDER_UP_DEFAULT,base,radius,height);
+ return GetSingleEntityContents(&tmp,entity_index);
}
//-------------------------------------------------------------------
@@ -516,28 +523,32 @@ int CollisionChecker::GetSingleEntityContentsInCylinder(const nspoint_t& base, f
int CollisionChecker::GetContentsInAABB(const nspoint_t& mins, const nspoint_t& maxs) const
{
- return GetContents(&AABBCollisionTest(mins,maxs));
+ AABBCollisionTest tmp = AABBCollisionTest(mins,maxs);
+ return GetContents(&tmp);
}
//-------------------------------------------------------------------
int CollisionChecker::GetWorldContentsInAABB(const nspoint_t& mins, const nspoint_t& maxs) const
{
- return GetSingleEntityContents(&AABBCollisionTest(mins,maxs),WORLD_ENTITY);
+ AABBCollisionTest tmp = AABBCollisionTest(mins,maxs);
+ return GetSingleEntityContents(&tmp, WORLD_ENTITY);
}
//-------------------------------------------------------------------
int CollisionChecker::GetAllEntityContentsInAABB(const nspoint_t& mins, const nspoint_t& maxs) const
{
- return GetAllEntityContents(&AABBCollisionTest(mins,maxs));
+ AABBCollisionTest tmp = AABBCollisionTest(mins,maxs);
+ return GetAllEntityContents(&tmp);
}
//-------------------------------------------------------------------
int CollisionChecker::GetSingleEntityContentsInAABB(const nspoint_t& mins, const nspoint_t& maxs, int entity_index) const
{
- return GetSingleEntityContents(&AABBCollisionTest(mins,maxs),entity_index);
+ AABBCollisionTest tmp = AABBCollisionTest(mins,maxs);
+ return GetSingleEntityContents(&tmp,entity_index);
}
//-------------------------------------------------------------------
diff --git a/main/source/particles/Makefile b/main/source/particles/Makefile
index b4ebad78..4ff94947 100644
--- a/main/source/particles/Makefile
+++ b/main/source/particles/Makefile
@@ -11,12 +11,21 @@ GLUT_HOME =/usr/local/contrib/unmoderated
MP = #-mp -DPARTICLE_MP
+OS:=$(shell uname)
+
# Make it real fast on an Origin 2000.
#LNO =-LNO:opt=1:fusion=2:fission=2:fusion_peeling_limit=2048:cs1=32K:cs2=8M
COPT = $(MP) -O3 $(LNO) -fPIC
CFLAGS = $(COPT) $(COMPFLAGS) -I. -I.. -I$(GLUT_HOME)/include -I/usr/include/c++/4.8/ -I../common -I../public -I../pm_shared -I../engine
+ifeq ($(OS),Darwin)
+SLIBB = libtool -static *.o -o libparticleMP.a
+CFLAGS += -target i386-apple-darwin -DCMAKE_OSX_ARCHITECTURES=i386
+else
+SLIBB = ar clq $@ $(POBJS)
+endif
+
POBJS =action_api.o actions.o HLRender.o opengl.o system.o
ALL = libparticleMP.a
@@ -31,7 +40,7 @@ all: $(ALL)
libparticleMP.a: $(POBJS)
rm -f $@
- ar clq $@ $(POBJS)
+ $(SLIBB)
SPDir:
(make)
diff --git a/main/source/particles/libparticleMP.a b/main/source/particles/libparticleMP.a
deleted file mode 100644
index 39516034..00000000
Binary files a/main/source/particles/libparticleMP.a and /dev/null differ
diff --git a/main/source/particles/opengl.cpp b/main/source/particles/opengl.cpp
index 2f48a566..564ff577 100644
--- a/main/source/particles/opengl.cpp
+++ b/main/source/particles/opengl.cpp
@@ -9,9 +9,16 @@
#ifdef WIN32
// This is for something in gl.h.
#include
+#else
+#define NULL 0
#endif
+#ifdef __APPLE__
+#include
+#else
#include
+#endif
+
// XXX #include
// Emit OpenGL calls to draw the particles. These are drawn with
diff --git a/main/source/particles/p_vector.h b/main/source/particles/p_vector.h
index 45ef5d7b..54e28ba1 100644
--- a/main/source/particles/p_vector.h
+++ b/main/source/particles/p_vector.h
@@ -8,7 +8,11 @@
#ifndef particle_vector_h
#define particle_vector_h
-#include
+#if _MSC_VER >= 1900 // C++11 Compatible for Visual Studio 2015 and later.
+ #include
+#else
+ #include "math.h"
+#endif
#ifndef M_PI
#define M_PI 3.1415926535897932384626433f
diff --git a/main/source/particles/particles.vcxproj b/main/source/particles/particles.vcxproj
index f8dad634..48ec55ac 100644
--- a/main/source/particles/particles.vcxproj
+++ b/main/source/particles/particles.vcxproj
@@ -1,5 +1,5 @@
-
-
+
+
Debug
@@ -12,9 +12,10 @@
{5AADD469-7488-4B34-A9FD-01CFAC5972FD}
- v4.0
+ v4.5.2
ManagedCProj
particles
+ 10.0.16299.0
@@ -22,12 +23,14 @@
true
true
Unicode
+ v141
StaticLibrary
false
true
Unicode
+ v141
@@ -45,7 +48,7 @@
false
- $(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;..;
+ $(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;.;$(VCToolsInstallDir)\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\shared;..;../common;../public
@@ -65,6 +68,9 @@
Level3
WIN32;NDEBUG;%(PreprocessorDefinitions)
NotUsing
+ $(VCInstallDir)
+ $(FrameworkPathOverride)
+ MultiThreadedDLL
true
diff --git a/main/source/pm_shared/pm_shared.cpp b/main/source/pm_shared/pm_shared.cpp
index 841c9ee6..912a96e7 100644
--- a/main/source/pm_shared/pm_shared.cpp
+++ b/main/source/pm_shared/pm_shared.cpp
@@ -159,6 +159,7 @@ extern int gBlinkEffectSuccessEventID;
#include "../mod/AvHSelectionHelper.h"
int gHeightLevel = 0;
+int JpEventTimer = 0;
const float kMarineBackpedalSpeedScalar = .4f;
const float kMarineSidestepSpeedScalar = 1.0f;
@@ -5334,12 +5335,14 @@ void PM_Jump (void)
{
int i;
qboolean tfc = false;
-
+ qboolean autojump = false;
+ qboolean queuedjump = false;
qboolean cansuperjump = false;
if (pmove->dead || GetHasUpgrade(pmove->iuser4, MASK_ENSNARED))
{
- pmove->oldbuttons |= IN_JUMP ; // don't jump again until released
+ //pmove->oldbuttons |= IN_JUMP; // don't jump again until released
+ pmove->flags |= FL_JUMPHELD;
return;
}
@@ -5449,7 +5452,7 @@ void PM_Jump (void)
// Flag that we jumped.
// HACK HACK HACK
// Remove this when the game .dll no longer does physics code!!!!
- pmove->oldbuttons |= IN_JUMP; // don't jump again until released
+ //pmove->oldbuttons |= IN_JUMP; // don't jump again until released
return; // in air, so no effect
}
@@ -5459,8 +5462,21 @@ void PM_Jump (void)
// if ( pmove->oldbuttons & IN_JUMP && (pmove->velocity[0] == 0 || !theIsAlien || pmove->iuser3 == AVH_USER3_ALIEN_PLAYER3) )
//return; // don't pogo stick
- if ( pmove->oldbuttons & IN_JUMP )
+ autojump = atoi(pmove->PM_Info_ValueForKey(pmove->physinfo, "jm2"));
+ queuedjump = atoi(pmove->PM_Info_ValueForKey(pmove->physinfo, "jm1"));
+ bool theHasJetpackUpgrade = GetHasUpgrade(pmove->iuser4, MASK_UPGRADE_7) && (pmove->iuser3 == AVH_USER3_MARINE_PLAYER);
+
+ if ((!autojump && !queuedjump) || pmove->iuser3 == AVH_USER3_ALIEN_PLAYER3 || theHasJetpackUpgrade)
+ {
+ if (pmove->oldbuttons & IN_JUMP)
return; // don't pogo stick
+ }
+
+ if (queuedjump)
+ {
+ if (pmove->flags & FL_JUMPHELD)
+ return;
+ }
// In the air now.
pmove->onground = -1;
@@ -5513,7 +5529,8 @@ void PM_Jump (void)
PM_FixupGravityVelocity();
// Flag that we jumped.
- pmove->oldbuttons |= IN_JUMP; // don't jump again until released
+ //pmove->oldbuttons |= IN_JUMP; // don't jump again until released
+ pmove->flags |= FL_JUMPHELD;
}
/*
@@ -6364,11 +6381,17 @@ void PM_Jetpack()
pmove->velocity[1] += (theWishVelocity[1] / pmove->clientmaxspeed) * (theTimePassed * theWeightScalar*kJetpackForce);
pmove->velocity[2] += theTimePassed*theWeightScalar*kJetpackForce;
- // Play an event every so often
- if(pmove->runfuncs /*&& (pmove->RandomLong(0, 2) == 0)*/)
- {
- pmove->PM_PlaybackEventFull(0, pmove->player_index, gJetpackEventID, 0, (float *)pmove->origin, (float *)pmove->origin, 0.0, 0.0, /*theWeaponIndex*/ 0, 0, 0, 0 );
- }
+ //FPS independent jetpack event. Scales with FPS without timer.
+ JpEventTimer += pmove->cmd.msec;
+ if (JpEventTimer > 7)
+ {
+ // Play an event every so often
+ if (pmove->runfuncs /*&& (pmove->RandomLong(0, 2) == 0)*/)
+ {
+ pmove->PM_PlaybackEventFull(0, pmove->player_index, gJetpackEventID, 0, (float *)pmove->origin, (float *)pmove->origin, 0.0, 0.0, /*theWeaponIndex*/ 0, 0, 0, 0);
+ }
+ JpEventTimer = 0;
+ }
}
float theJetpackEnergy = pmove->fuser3/kNormalizationNetworkFactor;
@@ -6678,6 +6701,7 @@ void PM_PlayerMove ( qboolean server )
else
{
pmove->oldbuttons &= ~IN_JUMP;
+ pmove->flags &= ~FL_JUMPHELD;
}
// Fricion is handled before we add in any base velocity. That way, if we are on a conveyor,
diff --git a/main/source/ui/FadingImageLabel.h b/main/source/ui/FadingImageLabel.h
index 29641b98..67f21a44 100644
--- a/main/source/ui/FadingImageLabel.h
+++ b/main/source/ui/FadingImageLabel.h
@@ -109,7 +109,7 @@ class FadingImageLabel : public Panel, public ReloadableComponent
string mImageName;
string mText;
bool mImageMode;
- int mSprite;
+ AVHHSPRITE mSprite;
int mSpriteWidth;
int mSpriteHeight;
diff --git a/main/source/ui/PieNode.h b/main/source/ui/PieNode.h
index 07eef506..d4044103 100644
--- a/main/source/ui/PieNode.h
+++ b/main/source/ui/PieNode.h
@@ -167,7 +167,7 @@ class PieNode : public FadingImageLabel
PieNode* mParentPieNode;
string mConnectorSpriteName;
- int mConnectorSprite;
+ AVHHSPRITE mConnectorSprite;
string mLocalizedText;
string mBaseText;
diff --git a/main/source/ui/ScoreboardIcon.cpp b/main/source/ui/ScoreboardIcon.cpp
index 62640133..d1333db5 100644
--- a/main/source/ui/ScoreboardIcon.cpp
+++ b/main/source/ui/ScoreboardIcon.cpp
@@ -133,7 +133,14 @@ void loadImages( const int icon_number, std::vector& images )
std::string extension = ".tga";
std::string icon_name;
- unsigned char icon_bytes[2] = { (icon_number >> 8) & 0xFF, icon_number & 0xFF };
+ unsigned char icon_bytes[2] = {
+ static_cast(
+ (icon_number >> 8) & 0xFF
+ ),
+ static_cast(
+ icon_number & 0xFF
+ )
+ };
MakeHexPairsFromBytes(icon_bytes,icon_name,2);
icon_name = "0x" + icon_name;
diff --git a/main/source/ui/SpritePanel.h b/main/source/ui/SpritePanel.h
index 875ccc6f..7642e67a 100644
--- a/main/source/ui/SpritePanel.h
+++ b/main/source/ui/SpritePanel.h
@@ -6,6 +6,8 @@
#include "ui/ReloadableComponent.h"
#include "../types.h"
+typedef int AVHHSPRITE;
+
class SpritePanel : public vgui::Panel, public ReloadableComponent, public GammaAwareComponent
{
public:
@@ -27,7 +29,7 @@ class SpritePanel : public vgui::Panel, public ReloadableComponent, public Gamma
string mBaseSpriteName;
string mRenderMode;
string mVAlignment;
- int mSpriteHandle;
+ AVHHSPRITE mSpriteHandle;
float mGammaSlope;
};
diff --git a/main/source/ui/UIUtil.cpp b/main/source/ui/UIUtil.cpp
index 9a041559..6a705a2b 100644
--- a/main/source/ui/UIUtil.cpp
+++ b/main/source/ui/UIUtil.cpp
@@ -22,7 +22,7 @@
#include "cl_dll/hud.h"
#include "cl_dll/cl_util.h"
-void UIDrawVariableBarSpriteHoles(int inSprite, int inX, int inY, float inPercentage, float inGammaSlope, bool inTrueHolesFalseAdditive, float inSecondaryPercentage)
+void UIDrawVariableBarSpriteHoles(AVHHSPRITE inSprite, int inX, int inY, float inPercentage, float inGammaSlope, bool inTrueHolesFalseAdditive, float inSecondaryPercentage)
{
// Assumes that frame 0 is the empty sprite, frame 1 is full sprite
const int kEmptyFrame = 0;
diff --git a/main/source/util/Balance.txt b/main/source/util/Balance.txt
index 88271db8..df0b22de 100644
--- a/main/source/util/Balance.txt
+++ b/main/source/util/Balance.txt
@@ -121,7 +121,7 @@
#define kGameHDSpaceNeeded 300
#define kGameVersionMajor 3
#define kGameVersionMinor 2
-#define kGameVersionRevision 1
+#define kGameVersionRevision 2
#define kGestateBaseArmor 150
#define kGestateHealth 200
#define kGorgeArmorUpgrade 50
diff --git a/main/source/util/CString.h b/main/source/util/CString.h
index fcea4b1a..578c280f 100644
--- a/main/source/util/CString.h
+++ b/main/source/util/CString.h
@@ -34,12 +34,12 @@ class CString
void operator =(const string& inString)
{
- sprintf_s(this->mString, "%s", inString.c_str());
+ sprintf_s(this->mString, sizeof(this->mString), "%s", inString.c_str());
}
void operator =(const CString& inString)
{
- sprintf_s(this->mString, "%s", inString.mString);
+ sprintf_s(this->mString, sizeof(this->mString), "%s", inString.mString);
}
bool operator ==(const CString& inString) const
diff --git a/main/source/util/Zassert.h b/main/source/util/Zassert.h
index 18f8fefb..21c6a4c8 100644
--- a/main/source/util/Zassert.h
+++ b/main/source/util/Zassert.h
@@ -93,7 +93,7 @@ int emailMsgTo( char *msg, char *emailAddress );
// function declarations for the call from the assert macro.
// So, the ASSERTFUNC macro defines function in a portable way
#ifdef WIN32
- #define ASSERTFUNC _CRTIMP void __cdecl _assert( void *msg, void *file, unsigned line )
+ #define ASSERTFUNC void __cdecl _assert( void *msg, void *file, unsigned line )
#else
#define ASSERTFUNC __dead void __assert __P((const char *msg,const char *file,int line))
#endif
diff --git a/main/sprites/320w-s.spr b/main/sprites/320w-s.spr
index 19bd7b75..d51ec7ed 100644
Binary files a/main/sprites/320w-s.spr and b/main/sprites/320w-s.spr differ
diff --git a/main/sprites/320w.spr b/main/sprites/320w.spr
index aac68b17..8cdef0ca 100644
Binary files a/main/sprites/320w.spr and b/main/sprites/320w.spr differ
diff --git a/main/sprites/640a-cloak.spr b/main/sprites/640a-cloak.spr
new file mode 100644
index 00000000..2731c45f
Binary files /dev/null and b/main/sprites/640a-cloak.spr differ
diff --git a/main/sprites/640a-energy.spr b/main/sprites/640a-energy.spr
index 6d37f09d..065aee86 100644
Binary files a/main/sprites/640a-energy.spr and b/main/sprites/640a-energy.spr differ
diff --git a/main/sprites/640mw1-s.spr b/main/sprites/640mw1-s.spr
index 3a6d70e8..3e805b40 100644
Binary files a/main/sprites/640mw1-s.spr and b/main/sprites/640mw1-s.spr differ
diff --git a/main/sprites/640mw1.spr b/main/sprites/640mw1.spr
index 54e4ccfe..913aa8be 100644
Binary files a/main/sprites/640mw1.spr and b/main/sprites/640mw1.spr differ
diff --git a/main/sprites/640nlhud7.spr b/main/sprites/640nlhud7.spr
new file mode 100644
index 00000000..abff1df9
Binary files /dev/null and b/main/sprites/640nlhud7.spr differ
diff --git a/main/sprites/640progress.spr b/main/sprites/640progress.spr
new file mode 100644
index 00000000..3f5bb95e
Binary files /dev/null and b/main/sprites/640progress.spr differ
diff --git a/main/sprites/co_umbra/spores.spr b/main/sprites/co_umbra/spores.spr
new file mode 100644
index 00000000..8abf32c5
Binary files /dev/null and b/main/sprites/co_umbra/spores.spr differ
diff --git a/main/sprites/comm-blip.spr b/main/sprites/comm-blip.spr
index 34a58b61..9efed1a6 100644
Binary files a/main/sprites/comm-blip.spr and b/main/sprites/comm-blip.spr differ
diff --git a/main/sprites/hudnl.txt b/main/sprites/hudnl.txt
new file mode 100644
index 00000000..754b3853
--- /dev/null
+++ b/main/sprites/hudnl.txt
@@ -0,0 +1,149 @@
+148
+selection 320 320hud1 160 220 80 20
+bucket1 320 320hud2 108 16 12 12
+bucket2 320 320hud2 108 28 12 12
+bucket3 320 320hud2 108 40 12 12
+bucket4 320 320hud2 108 52 12 12
+bucket5 320 320hud2 108 64 12 12
+bucket0 320 320hud2 108 76 12 12
+dmg_bio 320 320hud4 0 0 32 32
+dmg_poison 320 320hud4 0 0 32 32
+dmg_chem 320 320hud4 32 0 32 32
+dmg_cold 320 320hud4 64 0 32 32
+dmg_drown 320 320hud4 96 0 32 32
+dmg_heat 320 320hud4 128 0 32 32
+dmg_gas 320 320hud4 160 0 32 32
+dmg_rad 320 320hud4 192 0 32 32
+dmg_shock 320 320hud4 224 0 32 32
+number_0 320 320hud2 0 0 12 16
+number_1 320 320hud2 12 0 12 16
+number_2 320 320hud2 24 0 12 16
+number_3 320 320hud2 36 0 12 16
+number_4 320 320hud2 48 0 12 16
+number_5 320 320hud2 60 0 12 16
+number_6 320 320hud2 72 0 12 16
+number_7 320 320hud2 84 0 12 16
+number_8 320 320hud2 96 0 12 16
+number_9 320 320hud2 108 0 12 16
+divider 320 320hud2 120 0 1 20
+cross 320 320hud2 0 72 16 16
+d_skull 320 640hud7 72 25 12 12
+flash_full 320 320hud2 16 72 18 16
+flash_empty 320 320hud2 34 72 18 16
+flash_beam 320 320hud2 52 72 6 16
+title_half 320 320hud3 0 48 128 16
+title_life 320 320hud3 128 48 116 16
+d_knife 320 640aw3-s 100 232 64 24
+d_handgrenade 320 640aw1 192 231 64 24
+d_grenade 320 640aw3-s 192 192 64 24
+d_grenadegun 320 640aw3-s 192 192 64 24
+d_machinegun 320 640aw3-s 192 96 64 24
+d_pistol 320 640aw3-s 192 168 64 24
+d_heavymachinegun 320 640aw3-s 0 230 101 26
+d_shotgun 320 640aw3-s 164 231 80 26
+d_tripmine 320 640aw3-s 192 145 64 24
+d_item_mine 320 640aw3-s 192 145 64 24
+d_welder 320 640aw3-s 192 120 64 24
+d_turret 320 640aw3-s 172 0 18 32
+d_offensechamber 320 640aw3-s 192 24 64 24
+d_sporegunprojectile 320 640aw3-s 192 0 64 24
+d_healingspray 320 640aw3-s 192 72 64 24
+d_parasite 320 640aw3-s 192 48 64 24
+d_siegeturret 320 640aw3 143 224 48 32
+d_spitgunspit 320 640aw3 192 102 64 24
+d_claws 320 640aw3 176 48 80 32
+d_bitegun 320 640aw3 192 0 64 24
+d_bite2gun 320 640aw3 192 24 64 24
+d_spikegun 320 640aw3 192 183 64 24
+d_spikeprojectile 320 640aw3 192 183 64 24
+d_swipe 320 640aw3 0 225 64 24
+d_divinewind 320 640aw3 192 127 64 24
+d_bilebomb 320 640aw3 192 207 64 24
+d_acidrocket 320 640aw3 61 225 64 24
+d_leap 320 640aw3 192 80 64 24
+d_charge 320 640aw3 176 151 80 32
+d_babblerprojectile 320 640aw3 192 231 64 24
+d_devour 320 640aw3 192 231 64 24
+d_nuke 320 320w-s 80 160 32 32
+d_tracktrain 320 320w-s 112 160 32 16
+d_team_advturretfactory 320 320w-s 80 240 32 16
+d_team_turretfactory 320 320w-s 80 240 32 16
+d_resourcetower 320 320w-s 80 240 32 16
+suit_full 320 320hud2 0 88 16 16
+suit_empty 320 320hud2 16 88 16 16
+
+//===========================================
+
+selection 640 640hud3 0 180 170 45
+bucket1 640 640nlhud7 168 72 20 20
+bucket2 640 640nlhud7 188 72 20 20
+bucket3 640 640nlhud7 208 72 20 20
+bucket4 640 640nlhud7 168 92 20 20
+bucket5 640 640nlhud7 188 92 20 20
+bucket0 640 640nlhud7 208 92 20 20
+dmg_poison 640 640hud8 128 0 64 64
+dmg_bio 640 640hud8 128 0 64 64
+dmg_chem 640 640hud8 0 0 64 64
+dmg_drown 640 640hud8 64 0 64 64
+dmg_gas 640 640hud9 0 0 64 64
+dmg_cold 640 640hud9 64 0 64 64
+dmg_heat 640 640hud9 128 0 64 64
+dmg_rad 640 640hud9 192 0 64 64
+dmg_shock 640 640hud8 192 0 64 64
+number_0 640 640nlhud7 0 0 24 25
+number_1 640 640nlhud7 24 0 24 25
+number_2 640 640nlhud7 48 0 24 25
+number_3 640 640nlhud7 72 0 24 25
+number_4 640 640nlhud7 96 0 24 25
+number_5 640 640nlhud7 120 0 24 25
+number_6 640 640nlhud7 144 0 24 25
+number_7 640 640nlhud7 168 0 24 25
+number_8 640 640nlhud7 192 0 24 25
+number_9 640 640nlhud7 216 0 24 25
+divider 640 640nlhud7 240 0 2 40
+cross 640 640nlhud7 48 25 24 24
+d_skull 640 640nlhud7 72 25 12 12
+flash_full 640 640nlhud7 160 25 32 32
+flash_empty 640 640nlhud7 112 25 32 32
+flash_beam 640 640nlhud7 144 25 16 32
+title_half 640 640hud4 0 226 256 30
+title_life 640 640hud5 0 226 220 30
+d_knife 640 640aw3-s 100 232 64 24
+d_handgrenade 640 640aw1 192 231 64 24
+d_grenade 640 640aw3-s 192 192 64 24
+d_grenadegun 640 640aw3-s 192 192 64 24
+d_machinegun 640 640aw3-s 192 96 64 24
+d_pistol 640 640aw3-s 192 168 64 24
+d_heavymachinegun 640 640aw3-s 0 230 101 26
+d_shotgun 640 640aw3-s 164 231 80 26
+d_tripmine 640 640aw3-s 192 145 64 24
+d_item_mine 640 640aw3-s 192 145 64 24
+d_welder 640 640aw3-s 192 120 64 24
+d_turret 640 640aw3-s 172 0 18 32
+d_offensechamber 640 640aw3-s 192 24 64 24
+d_sporegunprojectile 640 640aw3-s 192 0 64 24
+d_healingspray 640 640aw3-s 192 72 64 24
+d_parasite 640 640aw3-s 192 48 64 24
+d_siegeturret 640 640aw3 143 224 48 32
+d_spitgunspit 640 640aw3 192 102 64 24
+d_claws 640 640aw3 176 48 80 32
+d_bitegun 640 640aw3 192 0 64 24
+d_bite2gun 640 640aw3 192 24 64 24
+d_spikegun 640 640aw3 192 183 64 17
+d_spikeprojectile 640 640aw3 192 183 64 17
+d_swipe 640 640aw3 0 225 64 24
+d_divinewind 640 640aw3 192 127 64 24
+d_bilebomb 640 640aw3 192 200 64 25
+d_acidrocket 640 640aw3 61 225 64 24
+d_leap 640 640aw3 192 80 64 24
+d_charge 640 640aw3 176 151 80 32
+d_babblerprojectile 640 640aw3 192 231 64 24
+d_devour 640 640aw3 192 224 64 32
+d_nuke 640 320w-s 80 160 32 32
+d_tracktrain 640 640hud1 192 240 32 16
+d_team_advturretfactory 640 320w-s 80 240 32 16
+d_team_turretfactory 640 320w-s 80 240 32 16
+d_resourcetower 640 320w-s 80 240 32 16
+suit_full 640 640nlhud7 0 25 24 24
+suit_empty 640 640nlhud7 24 25 24 24
+
diff --git a/main/sprites/iplayera.spr b/main/sprites/iplayera.spr
index 179eec68..f5b2331d 100644
Binary files a/main/sprites/iplayera.spr and b/main/sprites/iplayera.spr differ
diff --git a/main/sprites/iplayerm.spr b/main/sprites/iplayerm.spr
index 41d20a4a..db77541d 100644
Binary files a/main/sprites/iplayerm.spr and b/main/sprites/iplayerm.spr differ
diff --git a/main/sprites/machina_01.spr b/main/sprites/machina_01.spr
new file mode 100644
index 00000000..cf71857b
Binary files /dev/null and b/main/sprites/machina_01.spr differ
diff --git a/main/sprites/machina_02.spr b/main/sprites/machina_02.spr
new file mode 100644
index 00000000..c8fedf83
Binary files /dev/null and b/main/sprites/machina_02.spr differ
diff --git a/main/sprites/mainhud.spr b/main/sprites/mainhud.spr
index ed437bb0..2ed86c40 100644
Binary files a/main/sprites/mainhud.spr and b/main/sprites/mainhud.spr differ
diff --git a/main/sprites/minimal/commandstatus.spr b/main/sprites/minimal/commandstatus.spr
new file mode 100644
index 00000000..0f4e57c1
Binary files /dev/null and b/main/sprites/minimal/commandstatus.spr differ
diff --git a/main/sprites/minimal/mainhud.spr b/main/sprites/minimal/mainhud.spr
new file mode 100644
index 00000000..8695df60
Binary files /dev/null and b/main/sprites/minimal/mainhud.spr differ
diff --git a/main/sprites/minimal/selectall.spr b/main/sprites/minimal/selectall.spr
new file mode 100644
index 00000000..c172fbf5
Binary files /dev/null and b/main/sprites/minimal/selectall.spr differ
diff --git a/main/sprites/minimal/topdownbottom.spr b/main/sprites/minimal/topdownbottom.spr
new file mode 100644
index 00000000..5bf638b9
Binary files /dev/null and b/main/sprites/minimal/topdownbottom.spr differ
diff --git a/main/sprites/minimal/topdowntop.spr b/main/sprites/minimal/topdowntop.spr
new file mode 100644
index 00000000..bc6f850f
Binary files /dev/null and b/main/sprites/minimal/topdowntop.spr differ
diff --git a/main/sprites/minimaps/ns_altair.spr b/main/sprites/minimaps/ns_altair.spr
index ba045ea6..49d39f23 100644
Binary files a/main/sprites/minimaps/ns_altair.spr and b/main/sprites/minimaps/ns_altair.spr differ
diff --git a/main/sprites/minimaps/ns_altair_1.spr b/main/sprites/minimaps/ns_altair_1.spr
new file mode 100644
index 00000000..61b9f4df
Binary files /dev/null and b/main/sprites/minimaps/ns_altair_1.spr differ
diff --git a/main/sprites/minimaps/ns_altair_2.spr b/main/sprites/minimaps/ns_altair_2.spr
new file mode 100644
index 00000000..64df4532
Binary files /dev/null and b/main/sprites/minimaps/ns_altair_2.spr differ
diff --git a/main/sprites/minimaps/ns_altair_3.spr b/main/sprites/minimaps/ns_altair_3.spr
new file mode 100644
index 00000000..53e6b0b2
Binary files /dev/null and b/main/sprites/minimaps/ns_altair_3.spr differ
diff --git a/main/sprites/minimaps/ns_altair_4.spr b/main/sprites/minimaps/ns_altair_4.spr
new file mode 100644
index 00000000..0a3f114f
Binary files /dev/null and b/main/sprites/minimaps/ns_altair_4.spr differ
diff --git a/main/sprites/minimaps/ns_altair_5.spr b/main/sprites/minimaps/ns_altair_5.spr
new file mode 100644
index 00000000..0934d3be
Binary files /dev/null and b/main/sprites/minimaps/ns_altair_5.spr differ
diff --git a/main/sprites/minimaps/ns_ayumi.spr b/main/sprites/minimaps/ns_ayumi.spr
index 64ce7aa4..7d8a034e 100644
Binary files a/main/sprites/minimaps/ns_ayumi.spr and b/main/sprites/minimaps/ns_ayumi.spr differ
diff --git a/main/sprites/minimaps/ns_ayumi_1.spr b/main/sprites/minimaps/ns_ayumi_1.spr
new file mode 100644
index 00000000..7c1e158c
Binary files /dev/null and b/main/sprites/minimaps/ns_ayumi_1.spr differ
diff --git a/main/sprites/minimaps/ns_ayumi_2.spr b/main/sprites/minimaps/ns_ayumi_2.spr
new file mode 100644
index 00000000..699ea85f
Binary files /dev/null and b/main/sprites/minimaps/ns_ayumi_2.spr differ
diff --git a/main/sprites/minimaps/ns_ayumi_3.spr b/main/sprites/minimaps/ns_ayumi_3.spr
new file mode 100644
index 00000000..945cd7d3
Binary files /dev/null and b/main/sprites/minimaps/ns_ayumi_3.spr differ
diff --git a/main/sprites/minimaps/ns_ayumi_4.spr b/main/sprites/minimaps/ns_ayumi_4.spr
new file mode 100644
index 00000000..bc785eb9
Binary files /dev/null and b/main/sprites/minimaps/ns_ayumi_4.spr differ
diff --git a/main/sprites/minimaps/ns_ayumi_5.spr b/main/sprites/minimaps/ns_ayumi_5.spr
new file mode 100644
index 00000000..4ac96270
Binary files /dev/null and b/main/sprites/minimaps/ns_ayumi_5.spr differ
diff --git a/main/sprites/minimaps/ns_bast.spr b/main/sprites/minimaps/ns_bast.spr
index 2672f908..fd179c24 100644
Binary files a/main/sprites/minimaps/ns_bast.spr and b/main/sprites/minimaps/ns_bast.spr differ
diff --git a/main/sprites/minimaps/ns_bast_1.spr b/main/sprites/minimaps/ns_bast_1.spr
new file mode 100644
index 00000000..8382ce2d
Binary files /dev/null and b/main/sprites/minimaps/ns_bast_1.spr differ
diff --git a/main/sprites/minimaps/ns_bast_2.spr b/main/sprites/minimaps/ns_bast_2.spr
new file mode 100644
index 00000000..4db62d90
Binary files /dev/null and b/main/sprites/minimaps/ns_bast_2.spr differ
diff --git a/main/sprites/minimaps/ns_bast_3.spr b/main/sprites/minimaps/ns_bast_3.spr
new file mode 100644
index 00000000..a8fb4baa
Binary files /dev/null and b/main/sprites/minimaps/ns_bast_3.spr differ
diff --git a/main/sprites/minimaps/ns_bast_4.spr b/main/sprites/minimaps/ns_bast_4.spr
new file mode 100644
index 00000000..b6705662
Binary files /dev/null and b/main/sprites/minimaps/ns_bast_4.spr differ
diff --git a/main/sprites/minimaps/ns_bast_5.spr b/main/sprites/minimaps/ns_bast_5.spr
new file mode 100644
index 00000000..061c7a69
Binary files /dev/null and b/main/sprites/minimaps/ns_bast_5.spr differ
diff --git a/main/sprites/minimaps/ns_caged.spr b/main/sprites/minimaps/ns_caged.spr
index b3c6095b..fcb9e10e 100644
Binary files a/main/sprites/minimaps/ns_caged.spr and b/main/sprites/minimaps/ns_caged.spr differ
diff --git a/main/sprites/minimaps/ns_caged_1.spr b/main/sprites/minimaps/ns_caged_1.spr
new file mode 100644
index 00000000..50d65cc9
Binary files /dev/null and b/main/sprites/minimaps/ns_caged_1.spr differ
diff --git a/main/sprites/minimaps/ns_caged_2.spr b/main/sprites/minimaps/ns_caged_2.spr
new file mode 100644
index 00000000..6102fee7
Binary files /dev/null and b/main/sprites/minimaps/ns_caged_2.spr differ
diff --git a/main/sprites/minimaps/ns_caged_3.spr b/main/sprites/minimaps/ns_caged_3.spr
new file mode 100644
index 00000000..4fc95b00
Binary files /dev/null and b/main/sprites/minimaps/ns_caged_3.spr differ
diff --git a/main/sprites/minimaps/ns_caged_4.spr b/main/sprites/minimaps/ns_caged_4.spr
new file mode 100644
index 00000000..8d25eb79
Binary files /dev/null and b/main/sprites/minimaps/ns_caged_4.spr differ
diff --git a/main/sprites/minimaps/ns_caged_5.spr b/main/sprites/minimaps/ns_caged_5.spr
new file mode 100644
index 00000000..e7d8bd22
Binary files /dev/null and b/main/sprites/minimaps/ns_caged_5.spr differ
diff --git a/main/sprites/minimaps/ns_eclipse.spr b/main/sprites/minimaps/ns_eclipse.spr
index da2f5709..628f7ed9 100644
Binary files a/main/sprites/minimaps/ns_eclipse.spr and b/main/sprites/minimaps/ns_eclipse.spr differ
diff --git a/main/sprites/minimaps/ns_eclipse_1.spr b/main/sprites/minimaps/ns_eclipse_1.spr
new file mode 100644
index 00000000..873bcb56
Binary files /dev/null and b/main/sprites/minimaps/ns_eclipse_1.spr differ
diff --git a/main/sprites/minimaps/ns_eclipse_2.spr b/main/sprites/minimaps/ns_eclipse_2.spr
new file mode 100644
index 00000000..4e1f65a8
Binary files /dev/null and b/main/sprites/minimaps/ns_eclipse_2.spr differ
diff --git a/main/sprites/minimaps/ns_eclipse_3.spr b/main/sprites/minimaps/ns_eclipse_3.spr
new file mode 100644
index 00000000..ea18e6ed
Binary files /dev/null and b/main/sprites/minimaps/ns_eclipse_3.spr differ
diff --git a/main/sprites/minimaps/ns_eclipse_4.spr b/main/sprites/minimaps/ns_eclipse_4.spr
new file mode 100644
index 00000000..6fbd1737
Binary files /dev/null and b/main/sprites/minimaps/ns_eclipse_4.spr differ
diff --git a/main/sprites/minimaps/ns_eclipse_5.spr b/main/sprites/minimaps/ns_eclipse_5.spr
new file mode 100644
index 00000000..20c2e114
Binary files /dev/null and b/main/sprites/minimaps/ns_eclipse_5.spr differ
diff --git a/main/sprites/minimaps/ns_eon.spr b/main/sprites/minimaps/ns_eon.spr
index e908d40f..b570677a 100644
Binary files a/main/sprites/minimaps/ns_eon.spr and b/main/sprites/minimaps/ns_eon.spr differ
diff --git a/main/sprites/minimaps/ns_eon_1.spr b/main/sprites/minimaps/ns_eon_1.spr
new file mode 100644
index 00000000..36fd21d7
Binary files /dev/null and b/main/sprites/minimaps/ns_eon_1.spr differ
diff --git a/main/sprites/minimaps/ns_eon_2.spr b/main/sprites/minimaps/ns_eon_2.spr
new file mode 100644
index 00000000..953d10ed
Binary files /dev/null and b/main/sprites/minimaps/ns_eon_2.spr differ
diff --git a/main/sprites/minimaps/ns_eon_3.spr b/main/sprites/minimaps/ns_eon_3.spr
new file mode 100644
index 00000000..340c375c
Binary files /dev/null and b/main/sprites/minimaps/ns_eon_3.spr differ
diff --git a/main/sprites/minimaps/ns_eon_4.spr b/main/sprites/minimaps/ns_eon_4.spr
new file mode 100644
index 00000000..40b208a7
Binary files /dev/null and b/main/sprites/minimaps/ns_eon_4.spr differ
diff --git a/main/sprites/minimaps/ns_eon_5.spr b/main/sprites/minimaps/ns_eon_5.spr
new file mode 100644
index 00000000..8d8b5bb0
Binary files /dev/null and b/main/sprites/minimaps/ns_eon_5.spr differ
diff --git a/main/sprites/minimaps/ns_hera.spr b/main/sprites/minimaps/ns_hera.spr
index 0e619afd..a51dea0f 100644
Binary files a/main/sprites/minimaps/ns_hera.spr and b/main/sprites/minimaps/ns_hera.spr differ
diff --git a/main/sprites/minimaps/ns_hera_1.spr b/main/sprites/minimaps/ns_hera_1.spr
new file mode 100644
index 00000000..50c89a93
Binary files /dev/null and b/main/sprites/minimaps/ns_hera_1.spr differ
diff --git a/main/sprites/minimaps/ns_hera_2.spr b/main/sprites/minimaps/ns_hera_2.spr
new file mode 100644
index 00000000..62265a5a
Binary files /dev/null and b/main/sprites/minimaps/ns_hera_2.spr differ
diff --git a/main/sprites/minimaps/ns_hera_3.spr b/main/sprites/minimaps/ns_hera_3.spr
new file mode 100644
index 00000000..db7fb3b6
Binary files /dev/null and b/main/sprites/minimaps/ns_hera_3.spr differ
diff --git a/main/sprites/minimaps/ns_hera_4.spr b/main/sprites/minimaps/ns_hera_4.spr
new file mode 100644
index 00000000..a3ab3dfe
Binary files /dev/null and b/main/sprites/minimaps/ns_hera_4.spr differ
diff --git a/main/sprites/minimaps/ns_hera_5.spr b/main/sprites/minimaps/ns_hera_5.spr
new file mode 100644
index 00000000..e0f0c21a
Binary files /dev/null and b/main/sprites/minimaps/ns_hera_5.spr differ
diff --git a/main/sprites/minimaps/ns_lost.spr b/main/sprites/minimaps/ns_lost.spr
index af210faa..a6959f6f 100644
Binary files a/main/sprites/minimaps/ns_lost.spr and b/main/sprites/minimaps/ns_lost.spr differ
diff --git a/main/sprites/minimaps/ns_lost_1.spr b/main/sprites/minimaps/ns_lost_1.spr
new file mode 100644
index 00000000..37a4dead
Binary files /dev/null and b/main/sprites/minimaps/ns_lost_1.spr differ
diff --git a/main/sprites/minimaps/ns_lost_2.spr b/main/sprites/minimaps/ns_lost_2.spr
new file mode 100644
index 00000000..13cf9e30
Binary files /dev/null and b/main/sprites/minimaps/ns_lost_2.spr differ
diff --git a/main/sprites/minimaps/ns_lost_3.spr b/main/sprites/minimaps/ns_lost_3.spr
new file mode 100644
index 00000000..4a1195d5
Binary files /dev/null and b/main/sprites/minimaps/ns_lost_3.spr differ
diff --git a/main/sprites/minimaps/ns_lost_4.spr b/main/sprites/minimaps/ns_lost_4.spr
new file mode 100644
index 00000000..cbfc5e47
Binary files /dev/null and b/main/sprites/minimaps/ns_lost_4.spr differ
diff --git a/main/sprites/minimaps/ns_lost_5.spr b/main/sprites/minimaps/ns_lost_5.spr
new file mode 100644
index 00000000..0e3c702a
Binary files /dev/null and b/main/sprites/minimaps/ns_lost_5.spr differ
diff --git a/main/sprites/minimaps/ns_lucid.spr b/main/sprites/minimaps/ns_lucid.spr
new file mode 100644
index 00000000..3d0ffbca
Binary files /dev/null and b/main/sprites/minimaps/ns_lucid.spr differ
diff --git a/main/sprites/minimaps/ns_lucid_1.spr b/main/sprites/minimaps/ns_lucid_1.spr
new file mode 100644
index 00000000..a4f74793
Binary files /dev/null and b/main/sprites/minimaps/ns_lucid_1.spr differ
diff --git a/main/sprites/minimaps/ns_lucid_2.spr b/main/sprites/minimaps/ns_lucid_2.spr
new file mode 100644
index 00000000..6bbd7c44
Binary files /dev/null and b/main/sprites/minimaps/ns_lucid_2.spr differ
diff --git a/main/sprites/minimaps/ns_lucid_3.spr b/main/sprites/minimaps/ns_lucid_3.spr
new file mode 100644
index 00000000..1f1b147e
Binary files /dev/null and b/main/sprites/minimaps/ns_lucid_3.spr differ
diff --git a/main/sprites/minimaps/ns_lucid_4.spr b/main/sprites/minimaps/ns_lucid_4.spr
new file mode 100644
index 00000000..15413189
Binary files /dev/null and b/main/sprites/minimaps/ns_lucid_4.spr differ
diff --git a/main/sprites/minimaps/ns_lucid_5.spr b/main/sprites/minimaps/ns_lucid_5.spr
new file mode 100644
index 00000000..44b05be1
Binary files /dev/null and b/main/sprites/minimaps/ns_lucid_5.spr differ
diff --git a/main/sprites/minimaps/ns_machina.spr b/main/sprites/minimaps/ns_machina.spr
new file mode 100644
index 00000000..eff238df
Binary files /dev/null and b/main/sprites/minimaps/ns_machina.spr differ
diff --git a/main/sprites/minimaps/ns_machina_1.spr b/main/sprites/minimaps/ns_machina_1.spr
new file mode 100644
index 00000000..f42f4154
Binary files /dev/null and b/main/sprites/minimaps/ns_machina_1.spr differ
diff --git a/main/sprites/minimaps/ns_machina_2.spr b/main/sprites/minimaps/ns_machina_2.spr
new file mode 100644
index 00000000..06f7deab
Binary files /dev/null and b/main/sprites/minimaps/ns_machina_2.spr differ
diff --git a/main/sprites/minimaps/ns_machina_3.spr b/main/sprites/minimaps/ns_machina_3.spr
new file mode 100644
index 00000000..96f4f651
Binary files /dev/null and b/main/sprites/minimaps/ns_machina_3.spr differ
diff --git a/main/sprites/minimaps/ns_machina_4.spr b/main/sprites/minimaps/ns_machina_4.spr
new file mode 100644
index 00000000..6fea6a68
Binary files /dev/null and b/main/sprites/minimaps/ns_machina_4.spr differ
diff --git a/main/sprites/minimaps/ns_machina_5.spr b/main/sprites/minimaps/ns_machina_5.spr
new file mode 100644
index 00000000..dba671f9
Binary files /dev/null and b/main/sprites/minimaps/ns_machina_5.spr differ
diff --git a/main/sprites/minimaps/ns_metal.spr b/main/sprites/minimaps/ns_metal.spr
index 669ebcff..c8860219 100644
Binary files a/main/sprites/minimaps/ns_metal.spr and b/main/sprites/minimaps/ns_metal.spr differ
diff --git a/main/sprites/minimaps/ns_metal_1.spr b/main/sprites/minimaps/ns_metal_1.spr
new file mode 100644
index 00000000..24e5cf2a
Binary files /dev/null and b/main/sprites/minimaps/ns_metal_1.spr differ
diff --git a/main/sprites/minimaps/ns_metal_2.spr b/main/sprites/minimaps/ns_metal_2.spr
new file mode 100644
index 00000000..5dc1a3fc
Binary files /dev/null and b/main/sprites/minimaps/ns_metal_2.spr differ
diff --git a/main/sprites/minimaps/ns_metal_3.spr b/main/sprites/minimaps/ns_metal_3.spr
new file mode 100644
index 00000000..3eb93955
Binary files /dev/null and b/main/sprites/minimaps/ns_metal_3.spr differ
diff --git a/main/sprites/minimaps/ns_metal_4.spr b/main/sprites/minimaps/ns_metal_4.spr
new file mode 100644
index 00000000..71da0772
Binary files /dev/null and b/main/sprites/minimaps/ns_metal_4.spr differ
diff --git a/main/sprites/minimaps/ns_metal_5.spr b/main/sprites/minimaps/ns_metal_5.spr
new file mode 100644
index 00000000..be9bc139
Binary files /dev/null and b/main/sprites/minimaps/ns_metal_5.spr differ
diff --git a/main/sprites/minimaps/ns_nancy.spr b/main/sprites/minimaps/ns_nancy.spr
index 983014aa..a78066bc 100644
Binary files a/main/sprites/minimaps/ns_nancy.spr and b/main/sprites/minimaps/ns_nancy.spr differ
diff --git a/main/sprites/minimaps/ns_nancy_1.spr b/main/sprites/minimaps/ns_nancy_1.spr
new file mode 100644
index 00000000..a9016cb3
Binary files /dev/null and b/main/sprites/minimaps/ns_nancy_1.spr differ
diff --git a/main/sprites/minimaps/ns_nancy_2.spr b/main/sprites/minimaps/ns_nancy_2.spr
new file mode 100644
index 00000000..357402a6
Binary files /dev/null and b/main/sprites/minimaps/ns_nancy_2.spr differ
diff --git a/main/sprites/minimaps/ns_nancy_3.spr b/main/sprites/minimaps/ns_nancy_3.spr
new file mode 100644
index 00000000..21b24f3c
Binary files /dev/null and b/main/sprites/minimaps/ns_nancy_3.spr differ
diff --git a/main/sprites/minimaps/ns_nancy_4.spr b/main/sprites/minimaps/ns_nancy_4.spr
new file mode 100644
index 00000000..904820b0
Binary files /dev/null and b/main/sprites/minimaps/ns_nancy_4.spr differ
diff --git a/main/sprites/minimaps/ns_nancy_5.spr b/main/sprites/minimaps/ns_nancy_5.spr
new file mode 100644
index 00000000..a38eaeba
Binary files /dev/null and b/main/sprites/minimaps/ns_nancy_5.spr differ
diff --git a/main/sprites/minimaps/ns_nothing.spr b/main/sprites/minimaps/ns_nothing.spr
index 39d0ee64..4ef0e425 100644
Binary files a/main/sprites/minimaps/ns_nothing.spr and b/main/sprites/minimaps/ns_nothing.spr differ
diff --git a/main/sprites/minimaps/ns_nothing_1.spr b/main/sprites/minimaps/ns_nothing_1.spr
new file mode 100644
index 00000000..9aff0d31
Binary files /dev/null and b/main/sprites/minimaps/ns_nothing_1.spr differ
diff --git a/main/sprites/minimaps/ns_nothing_2.spr b/main/sprites/minimaps/ns_nothing_2.spr
new file mode 100644
index 00000000..b8807f94
Binary files /dev/null and b/main/sprites/minimaps/ns_nothing_2.spr differ
diff --git a/main/sprites/minimaps/ns_nothing_3.spr b/main/sprites/minimaps/ns_nothing_3.spr
new file mode 100644
index 00000000..9043afa3
Binary files /dev/null and b/main/sprites/minimaps/ns_nothing_3.spr differ
diff --git a/main/sprites/minimaps/ns_nothing_4.spr b/main/sprites/minimaps/ns_nothing_4.spr
new file mode 100644
index 00000000..eb254cc8
Binary files /dev/null and b/main/sprites/minimaps/ns_nothing_4.spr differ
diff --git a/main/sprites/minimaps/ns_nothing_5.spr b/main/sprites/minimaps/ns_nothing_5.spr
new file mode 100644
index 00000000..c1ebc236
Binary files /dev/null and b/main/sprites/minimaps/ns_nothing_5.spr differ
diff --git a/main/sprites/minimaps/ns_orbital_cal_4.spr b/main/sprites/minimaps/ns_orbital_cal_4.spr
new file mode 100644
index 00000000..0c574e66
Binary files /dev/null and b/main/sprites/minimaps/ns_orbital_cal_4.spr differ
diff --git a/main/sprites/minimaps/ns_orbital_cal_5.spr b/main/sprites/minimaps/ns_orbital_cal_5.spr
new file mode 100644
index 00000000..392a2373
Binary files /dev/null and b/main/sprites/minimaps/ns_orbital_cal_5.spr differ
diff --git a/main/sprites/minimaps/ns_origin.spr b/main/sprites/minimaps/ns_origin.spr
index bdffa368..a172392d 100644
Binary files a/main/sprites/minimaps/ns_origin.spr and b/main/sprites/minimaps/ns_origin.spr differ
diff --git a/main/sprites/minimaps/ns_origin_1.spr b/main/sprites/minimaps/ns_origin_1.spr
new file mode 100644
index 00000000..7273f9e4
Binary files /dev/null and b/main/sprites/minimaps/ns_origin_1.spr differ
diff --git a/main/sprites/minimaps/ns_origin_2.spr b/main/sprites/minimaps/ns_origin_2.spr
new file mode 100644
index 00000000..0caf97c9
Binary files /dev/null and b/main/sprites/minimaps/ns_origin_2.spr differ
diff --git a/main/sprites/minimaps/ns_origin_3.spr b/main/sprites/minimaps/ns_origin_3.spr
new file mode 100644
index 00000000..c865458a
Binary files /dev/null and b/main/sprites/minimaps/ns_origin_3.spr differ
diff --git a/main/sprites/minimaps/ns_origin_4.spr b/main/sprites/minimaps/ns_origin_4.spr
new file mode 100644
index 00000000..f90c8279
Binary files /dev/null and b/main/sprites/minimaps/ns_origin_4.spr differ
diff --git a/main/sprites/minimaps/ns_origin_5.spr b/main/sprites/minimaps/ns_origin_5.spr
new file mode 100644
index 00000000..890c7753
Binary files /dev/null and b/main/sprites/minimaps/ns_origin_5.spr differ
diff --git a/main/sprites/minimaps/ns_shiva.spr b/main/sprites/minimaps/ns_shiva.spr
new file mode 100644
index 00000000..16ee3cdd
Binary files /dev/null and b/main/sprites/minimaps/ns_shiva.spr differ
diff --git a/main/sprites/minimaps/ns_shiva_1.spr b/main/sprites/minimaps/ns_shiva_1.spr
new file mode 100644
index 00000000..9d63283d
Binary files /dev/null and b/main/sprites/minimaps/ns_shiva_1.spr differ
diff --git a/main/sprites/minimaps/ns_shiva_2.spr b/main/sprites/minimaps/ns_shiva_2.spr
new file mode 100644
index 00000000..7baf252a
Binary files /dev/null and b/main/sprites/minimaps/ns_shiva_2.spr differ
diff --git a/main/sprites/minimaps/ns_shiva_3.spr b/main/sprites/minimaps/ns_shiva_3.spr
new file mode 100644
index 00000000..0a37eb99
Binary files /dev/null and b/main/sprites/minimaps/ns_shiva_3.spr differ
diff --git a/main/sprites/minimaps/ns_shiva_4.spr b/main/sprites/minimaps/ns_shiva_4.spr
new file mode 100644
index 00000000..12220209
Binary files /dev/null and b/main/sprites/minimaps/ns_shiva_4.spr differ
diff --git a/main/sprites/minimaps/ns_shiva_5.spr b/main/sprites/minimaps/ns_shiva_5.spr
new file mode 100644
index 00000000..64ce274e
Binary files /dev/null and b/main/sprites/minimaps/ns_shiva_5.spr differ
diff --git a/main/sprites/minimaps/ns_tanith.spr b/main/sprites/minimaps/ns_tanith.spr
index faeb8b94..868d62e8 100644
Binary files a/main/sprites/minimaps/ns_tanith.spr and b/main/sprites/minimaps/ns_tanith.spr differ
diff --git a/main/sprites/minimaps/ns_tanith_1.spr b/main/sprites/minimaps/ns_tanith_1.spr
new file mode 100644
index 00000000..d4e78bb9
Binary files /dev/null and b/main/sprites/minimaps/ns_tanith_1.spr differ
diff --git a/main/sprites/minimaps/ns_tanith_2.spr b/main/sprites/minimaps/ns_tanith_2.spr
new file mode 100644
index 00000000..406ae587
Binary files /dev/null and b/main/sprites/minimaps/ns_tanith_2.spr differ
diff --git a/main/sprites/minimaps/ns_tanith_3.spr b/main/sprites/minimaps/ns_tanith_3.spr
new file mode 100644
index 00000000..d5e78fb4
Binary files /dev/null and b/main/sprites/minimaps/ns_tanith_3.spr differ
diff --git a/main/sprites/minimaps/ns_tanith_4.spr b/main/sprites/minimaps/ns_tanith_4.spr
new file mode 100644
index 00000000..786861c8
Binary files /dev/null and b/main/sprites/minimaps/ns_tanith_4.spr differ
diff --git a/main/sprites/minimaps/ns_tanith_5.spr b/main/sprites/minimaps/ns_tanith_5.spr
new file mode 100644
index 00000000..f6ebea3c
Binary files /dev/null and b/main/sprites/minimaps/ns_tanith_5.spr differ
diff --git a/main/sprites/minimaps/ns_veil.spr b/main/sprites/minimaps/ns_veil.spr
index 6a0c2abe..b2c4ac74 100644
Binary files a/main/sprites/minimaps/ns_veil.spr and b/main/sprites/minimaps/ns_veil.spr differ
diff --git a/main/sprites/minimaps/ns_veil_1.spr b/main/sprites/minimaps/ns_veil_1.spr
new file mode 100644
index 00000000..bc1ccf8b
Binary files /dev/null and b/main/sprites/minimaps/ns_veil_1.spr differ
diff --git a/main/sprites/minimaps/ns_veil_2.spr b/main/sprites/minimaps/ns_veil_2.spr
new file mode 100644
index 00000000..3ce86b51
Binary files /dev/null and b/main/sprites/minimaps/ns_veil_2.spr differ
diff --git a/main/sprites/minimaps/ns_veil_3.spr b/main/sprites/minimaps/ns_veil_3.spr
new file mode 100644
index 00000000..63643f82
Binary files /dev/null and b/main/sprites/minimaps/ns_veil_3.spr differ
diff --git a/main/sprites/minimaps/ns_veil_4.spr b/main/sprites/minimaps/ns_veil_4.spr
new file mode 100644
index 00000000..fe34a9f9
Binary files /dev/null and b/main/sprites/minimaps/ns_veil_4.spr differ
diff --git a/main/sprites/minimaps/ns_veil_5.spr b/main/sprites/minimaps/ns_veil_5.spr
new file mode 100644
index 00000000..d0cc0df7
Binary files /dev/null and b/main/sprites/minimaps/ns_veil_5.spr differ
diff --git a/main/sprites/nl/640a-cloak.spr b/main/sprites/nl/640a-cloak.spr
new file mode 100644
index 00000000..f363c52a
Binary files /dev/null and b/main/sprites/nl/640a-cloak.spr differ
diff --git a/main/sprites/nl/640a-energy.spr b/main/sprites/nl/640a-energy.spr
new file mode 100644
index 00000000..cb6d875e
Binary files /dev/null and b/main/sprites/nl/640a-energy.spr differ
diff --git a/main/sprites/nl/640alienupgrades.spr b/main/sprites/nl/640alienupgrades.spr
new file mode 100644
index 00000000..c1dd32ed
Binary files /dev/null and b/main/sprites/nl/640alienupgrades.spr differ
diff --git a/main/sprites/nl/640order.spr b/main/sprites/nl/640order.spr
new file mode 100644
index 00000000..22a63b16
Binary files /dev/null and b/main/sprites/nl/640order.spr differ
diff --git a/main/sprites/nl/commandbutton.spr b/main/sprites/nl/commandbutton.spr
new file mode 100644
index 00000000..085d98da
Binary files /dev/null and b/main/sprites/nl/commandbutton.spr differ
diff --git a/main/sprites/nl/commandstatus.spr b/main/sprites/nl/commandstatus.spr
new file mode 100644
index 00000000..0f4e57c1
Binary files /dev/null and b/main/sprites/nl/commandstatus.spr differ
diff --git a/main/sprites/nl/font_arial.dat b/main/sprites/nl/font_arial.dat
new file mode 100644
index 00000000..fd4486f3
Binary files /dev/null and b/main/sprites/nl/font_arial.dat differ
diff --git a/main/sprites/nl/font_arial.spr b/main/sprites/nl/font_arial.spr
new file mode 100644
index 00000000..88afd0dd
Binary files /dev/null and b/main/sprites/nl/font_arial.spr differ
diff --git a/main/sprites/nl/font_arialsmall.dat b/main/sprites/nl/font_arialsmall.dat
new file mode 100644
index 00000000..fd4486f3
Binary files /dev/null and b/main/sprites/nl/font_arialsmall.dat differ
diff --git a/main/sprites/nl/font_arialsmall.spr b/main/sprites/nl/font_arialsmall.spr
new file mode 100644
index 00000000..88afd0dd
Binary files /dev/null and b/main/sprites/nl/font_arialsmall.spr differ
diff --git a/main/sprites/nl/hivehealth.spr b/main/sprites/nl/hivehealth.spr
new file mode 100644
index 00000000..21c04475
Binary files /dev/null and b/main/sprites/nl/hivehealth.spr differ
diff --git a/main/sprites/nl/hiveinfo.spr b/main/sprites/nl/hiveinfo.spr
new file mode 100644
index 00000000..fdb6db67
Binary files /dev/null and b/main/sprites/nl/hiveinfo.spr differ
diff --git a/main/sprites/nl/hudorder.spr b/main/sprites/nl/hudorder.spr
new file mode 100644
index 00000000..22a63b16
Binary files /dev/null and b/main/sprites/nl/hudorder.spr differ
diff --git a/main/sprites/nl/logout.spr b/main/sprites/nl/logout.spr
new file mode 100644
index 00000000..a5b4ecab
Binary files /dev/null and b/main/sprites/nl/logout.spr differ
diff --git a/main/sprites/nl/mainhud.spr b/main/sprites/nl/mainhud.spr
new file mode 100644
index 00000000..e36f91f5
Binary files /dev/null and b/main/sprites/nl/mainhud.spr differ
diff --git a/main/sprites/nl/reticle.spr b/main/sprites/nl/reticle.spr
new file mode 100644
index 00000000..e0632d64
Binary files /dev/null and b/main/sprites/nl/reticle.spr differ
diff --git a/main/sprites/nl/selectall.spr b/main/sprites/nl/selectall.spr
new file mode 100644
index 00000000..6175e718
Binary files /dev/null and b/main/sprites/nl/selectall.spr differ
diff --git a/main/sprites/nl/techtree/tech0s.spr b/main/sprites/nl/techtree/tech0s.spr
new file mode 100644
index 00000000..52aba559
Binary files /dev/null and b/main/sprites/nl/techtree/tech0s.spr differ
diff --git a/main/sprites/nl/techtree/tech20s.spr b/main/sprites/nl/techtree/tech20s.spr
new file mode 100644
index 00000000..2e85784d
Binary files /dev/null and b/main/sprites/nl/techtree/tech20s.spr differ
diff --git a/main/sprites/nl/techtree/tech30s.spr b/main/sprites/nl/techtree/tech30s.spr
new file mode 100644
index 00000000..4ece6d17
Binary files /dev/null and b/main/sprites/nl/techtree/tech30s.spr differ
diff --git a/main/sprites/nl/techtree/tech40s.spr b/main/sprites/nl/techtree/tech40s.spr
new file mode 100644
index 00000000..ccc5e9ce
Binary files /dev/null and b/main/sprites/nl/techtree/tech40s.spr differ
diff --git a/main/sprites/nl/techtree/tech50s.spr b/main/sprites/nl/techtree/tech50s.spr
new file mode 100644
index 00000000..46f222a5
Binary files /dev/null and b/main/sprites/nl/techtree/tech50s.spr differ
diff --git a/main/sprites/nl/techtree/tech60s.spr b/main/sprites/nl/techtree/tech60s.spr
new file mode 100644
index 00000000..fc41cbc1
Binary files /dev/null and b/main/sprites/nl/techtree/tech60s.spr differ
diff --git a/main/sprites/nl/techtree/tech80s.spr b/main/sprites/nl/techtree/tech80s.spr
new file mode 100644
index 00000000..b5dc6394
Binary files /dev/null and b/main/sprites/nl/techtree/tech80s.spr differ
diff --git a/main/sprites/nl/topdownbg.spr b/main/sprites/nl/topdownbg.spr
new file mode 100644
index 00000000..24c6897a
Binary files /dev/null and b/main/sprites/nl/topdownbg.spr differ
diff --git a/main/sprites/nl/topdownbottom.spr b/main/sprites/nl/topdownbottom.spr
new file mode 100644
index 00000000..ca6b5a19
Binary files /dev/null and b/main/sprites/nl/topdownbottom.spr differ
diff --git a/main/sprites/nl/topdowntop.spr b/main/sprites/nl/topdowntop.spr
new file mode 100644
index 00000000..774365bc
Binary files /dev/null and b/main/sprites/nl/topdowntop.spr differ
diff --git a/main/sprites/nl/upgrades.spr b/main/sprites/nl/upgrades.spr
new file mode 100644
index 00000000..02ac1d97
Binary files /dev/null and b/main/sprites/nl/upgrades.spr differ
diff --git a/main/sprites/nl_crosshairs.spr b/main/sprites/nl_crosshairs.spr
new file mode 100644
index 00000000..cdedc434
Binary files /dev/null and b/main/sprites/nl_crosshairs.spr differ
diff --git a/main/sprites/ns_shiva/thanks.spr b/main/sprites/ns_shiva/thanks.spr
new file mode 100644
index 00000000..6c3d4117
Binary files /dev/null and b/main/sprites/ns_shiva/thanks.spr differ
diff --git a/main/sprites/techtree/tech20s.spr b/main/sprites/techtree/tech20s.spr
index 7a81c56d..5489d857 100644
Binary files a/main/sprites/techtree/tech20s.spr and b/main/sprites/techtree/tech20s.spr differ
diff --git a/main/sprites/upgrades.spr b/main/sprites/upgrades.spr
index bd71d657..160a1277 100644
Binary files a/main/sprites/upgrades.spr and b/main/sprites/upgrades.spr differ
diff --git a/main/sprites/weapon_acidrocketgun.txt b/main/sprites/weapon_acidrocketgun.txt
index 6c442778..e6d3f572 100644
--- a/main/sprites/weapon_acidrocketgun.txt
+++ b/main/sprites/weapon_acidrocketgun.txt
@@ -1,9 +1,28 @@
-8
+27
weapon 320 320w 0 180 80 20
weapon_s 320 320w-s 0 180 80 20
ammo 320 640hud7 96 96 24 24
-crosshair 320 xhairacid 0 0 128 128
weapon 640 640aw4 0 90 170 45
weapon_s 640 640aw4-s 0 90 170 45
ammo 640 640hud7 96 96 24 24
-crosshair 640 xhairacid 0 0 128 128
\ No newline at end of file
+crosshair_0 320 xhairacid 0 0 128 128
+crosshair_1 320 xhairaw1 0 0 40 40
+crosshair_2 320 xhairaw2 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw1 0 0 40 40
+crosshair_2 640 xhairaw2 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw1 40 0 50 50
+crosshair_2 800 xhairaw2 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw1 90 0 64 64
+crosshair_2 1024 xhairaw2 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw1 154 0 80 80
+crosshair_2 1280 xhairaw2 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_bilebombgun.txt b/main/sprites/weapon_bilebombgun.txt
index 8fbcf215..9a853bf7 100644
--- a/main/sprites/weapon_bilebombgun.txt
+++ b/main/sprites/weapon_bilebombgun.txt
@@ -1,9 +1,28 @@
-10
-weapon 320 320w 0 40 80 20
-weapon_s 320 320w-s 0 40 80 20
-ammo 320 320hud2 0 16 18 18
-crosshair 320 xhairbile 0 0 128 64
-weapon 640 640aw4 0 0 170 45
-weapon_s 640 640aw4-s 0 0 170 45
-ammo 640 640hud7 0 72 24 24
-crosshair 640 xhairbile 0 0 128 64
+27
+weapon 320 320w 0 40 80 20
+weapon_s 320 320w-s 0 40 80 20
+ammo 320 320hud2 0 16 18 18
+weapon 640 640aw4 0 0 170 45
+weapon_s 640 640aw4-s 0 0 170 45
+ammo 640 640hud7 0 72 24 24
+crosshair_0 640 xhairbile 0 0 128 64
+crosshair_1 320 xhairal1-1 0 0 256 256
+crosshair_2 320 xhairal2-1 0 0 256 256
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairal1-1 0 0 256 256
+crosshair_2 640 xhairal2-1 0 0 256 256
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairal1-2 0 0 256 256
+crosshair_2 800 xhairal2-2 0 0 256 256
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairal1-3 0 0 256 256
+crosshair_2 1024 xhairal2-3 0 0 256 256
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairal1-4 0 0 256 256
+crosshair_2 1280 xhairal2-4 0 0 256 256
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_bite2gun.txt b/main/sprites/weapon_bite2gun.txt
index e2babebc..b5e7ec66 100644
--- a/main/sprites/weapon_bite2gun.txt
+++ b/main/sprites/weapon_bite2gun.txt
@@ -1,7 +1,27 @@
-6
+26
weapon 320 320w 0 120 80 20
weapon_s 320 320w-s 0 120 80 20
ammo 320 640hud7 96 96 24 24
weapon 640 640aw1 0 180 170 45
weapon_s 640 640aw1-s 0 180 170 45
ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairaw3 0 0 40 40
+crosshair_2 320 xhairaw4 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw3 0 0 40 40
+crosshair_2 640 xhairaw4 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw3 40 0 50 50
+crosshair_2 800 xhairaw4 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw3 90 0 64 64
+crosshair_2 1024 xhairaw4 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw3 154 0 80 80
+crosshair_2 1280 xhairaw4 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_bitegun.txt b/main/sprites/weapon_bitegun.txt
index 11159479..8c4b5820 100644
--- a/main/sprites/weapon_bitegun.txt
+++ b/main/sprites/weapon_bitegun.txt
@@ -1,7 +1,27 @@
-6
+26
weapon 320 320w 0 60 80 20
weapon_s 320 320w-s 0 60 80 20
ammo 320 640hud7 96 96 24 24
weapon 640 640aw1 0 45 170 45
weapon_s 640 640aw1-s 0 45 170 45
ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairaw3 0 0 40 40
+crosshair_2 320 xhairaw4 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw3 0 0 40 40
+crosshair_2 640 xhairaw4 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw3 40 0 50 50
+crosshair_2 800 xhairaw4 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw3 90 0 64 64
+crosshair_2 1024 xhairaw4 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw3 154 0 80 80
+crosshair_2 1280 xhairaw4 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_blink.txt b/main/sprites/weapon_blink.txt
index c9b872d0..19350d0f 100644
--- a/main/sprites/weapon_blink.txt
+++ b/main/sprites/weapon_blink.txt
@@ -1,9 +1,27 @@
-8
-weapon 320 320w 0 80 80 20
-weapon_s 320 320w-s 0 80 80 20
-ammo 320 640hud7 96 96 24 24
-autoaim 320 crosshairs 0 72 24 24
-weapon 640 640aw3 0 45 170 45
-weapon_s 640 640aw3-s 0 45 170 45
-ammo 640 640hud7 96 96 24 24
-autoaim 640 crosshairs 0 72 24 24
+26
+weapon 320 320w 0 80 80 20
+weapon_s 320 320w-s 0 80 80 20
+ammo 320 640hud7 96 96 24 24
+weapon 640 640aw3 0 45 170 45
+weapon_s 640 640aw3-s 0 45 170 45
+ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairal1-1 0 0 256 256
+crosshair_2 320 xhairal2-1 0 0 256 256
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairal1-1 0 0 256 256
+crosshair_2 640 xhairal2-1 0 0 256 256
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairal1-2 0 0 256 256
+crosshair_2 800 xhairal2-2 0 0 256 256
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairal1-3 0 0 256 256
+crosshair_2 1024 xhairal2-3 0 0 256 256
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairal1-4 0 0 256 256
+crosshair_2 1280 xhairal2-4 0 0 256 256
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_charge.txt b/main/sprites/weapon_charge.txt
index aa50b203..ad764303 100644
--- a/main/sprites/weapon_charge.txt
+++ b/main/sprites/weapon_charge.txt
@@ -1,7 +1,27 @@
-6
-weapon 320 320w 0 100 80 20
-weapon_s 320 320w-s 0 100 80 20
-ammo 320 640hud7 96 96 24 24
-weapon 640 640aw2 0 90 170 45
-weapon_s 640 640aw2-s 0 90 170 45
-ammo 640 640hud7 96 96 24 24
+26
+weapon 320 320w 0 100 80 20
+weapon_s 320 320w-s 0 100 80 20
+ammo 320 640hud7 96 96 24 24
+weapon 640 640aw2 0 90 170 45
+weapon_s 640 640aw2-s 0 90 170 45
+ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairal1-1 0 0 256 256
+crosshair_2 320 xhairal2-1 0 0 256 256
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairal1-1 0 0 256 256
+crosshair_2 640 xhairal2-1 0 0 256 256
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairal1-2 0 0 256 256
+crosshair_2 800 xhairal2-2 0 0 256 256
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairal1-3 0 0 256 256
+crosshair_2 1024 xhairal2-3 0 0 256 256
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairal1-4 0 0 256 256
+crosshair_2 1280 xhairal2-4 0 0 256 256
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_claws.txt b/main/sprites/weapon_claws.txt
index f1eebce3..1009a995 100644
--- a/main/sprites/weapon_claws.txt
+++ b/main/sprites/weapon_claws.txt
@@ -1,7 +1,27 @@
-6
+26
weapon 320 320w 80 140 80 20
weapon_s 320 320w-s 80 140 80 20
ammo 320 640hud7 96 96 24 24
weapon 640 640aw1 0 135 170 45
weapon_s 640 640aw1-s 0 135 170 45
ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairaw3 0 0 40 40
+crosshair_2 320 xhairaw4 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw3 0 0 40 40
+crosshair_2 640 xhairaw4 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw3 40 0 50 50
+crosshair_2 800 xhairaw4 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw3 90 0 64 64
+crosshair_2 1024 xhairaw4 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw3 154 0 80 80
+crosshair_2 1280 xhairaw4 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_devour.txt b/main/sprites/weapon_devour.txt
index 60be8f60..b86c483c 100644
--- a/main/sprites/weapon_devour.txt
+++ b/main/sprites/weapon_devour.txt
@@ -1,7 +1,27 @@
-6
+26
weapon 320 320w 0 20 80 20
weapon_s 320 320w-s 0 20 80 20
ammo 320 640hud7 96 96 24 24
weapon 640 640aw2 0 135 170 45
weapon_s 640 640aw2-s 0 135 170 45
ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairaw1 0 0 40 40
+crosshair_2 320 xhairaw2 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw1 0 0 40 40
+crosshair_2 640 xhairaw2 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw1 40 0 50 50
+crosshair_2 800 xhairaw2 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw1 90 0 64 64
+crosshair_2 1024 xhairaw2 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw1 154 0 80 80
+crosshair_2 1280 xhairaw2 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_divinewind.txt b/main/sprites/weapon_divinewind.txt
index ed37a843..193837dd 100644
--- a/main/sprites/weapon_divinewind.txt
+++ b/main/sprites/weapon_divinewind.txt
@@ -1,7 +1,27 @@
-6
-weapon 320 320w 0 140 80 20
-weapon_s 320 320w-s 0 140 80 20
-ammo 320 640hud7 96 96 24 24
-weapon 640 640aw3 0 135 170 45
-weapon_s 640 640aw3-s 0 135 170 45
-ammo 640 640hud7 96 96 24 24
+26
+weapon 320 320w 0 140 80 20
+weapon_s 320 320w-s 0 140 80 20
+ammo 320 640hud7 96 96 24 24
+weapon 640 640aw3 0 135 170 45
+weapon_s 640 640aw3-s 0 135 170 45
+ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairax1-1 0 0 256 256
+crosshair_2 320 xhairax2-1 0 0 256 256
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairax1-1 0 0 256 256
+crosshair_2 640 xhairax2-1 0 0 256 256
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairax1-2 0 0 256 256
+crosshair_2 800 xhairax2-2 0 0 256 256
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairax1-3 0 0 256 256
+crosshair_2 1024 xhairax2-3 0 0 256 256
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairax1-4 0 0 256 256
+crosshair_2 1280 xhairax2-4 0 0 256 256
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_grenade.txt b/main/sprites/weapon_grenade.txt
index ae1b06d3..be8a720e 100644
--- a/main/sprites/weapon_grenade.txt
+++ b/main/sprites/weapon_grenade.txt
@@ -1,10 +1,27 @@
-9
+26
weapon 320 320w 160 160 80 20
weapon_s 320 320w-s 160 160 80 20
ammo 320 640hud7 72 96 24 24
-autoaim 320 crosshairs 0 0 24 24
weapon 640 640mw1 0 180 170 45
weapon_s 640 640mw1-s 0 180 170 45
ammo 640 640hud7 72 96 24 24
-autoaim 640 crosshairs 0 72 24 24
-autoaim 640 crosshairs 0 72 24 24
+crosshair_1 320 xhairmw1 0 0 40 40
+crosshair_2 320 xhairmw2 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairmw1 0 0 40 40
+crosshair_2 640 xhairmw2 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairmw1 40 0 50 50
+crosshair_2 800 xhairmw2 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairmw1 90 0 64 64
+crosshair_2 1024 xhairmw2 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairmw1 154 0 80 80
+crosshair_2 1280 xhairmw2 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_grenadegun.txt b/main/sprites/weapon_grenadegun.txt
index d203502a..de727e34 100644
--- a/main/sprites/weapon_grenadegun.txt
+++ b/main/sprites/weapon_grenadegun.txt
@@ -1,11 +1,28 @@
-10
+27
weapon 320 320w 160 120 80 20
weapon_s 320 320w-s 160 120 80 20
ammo 320 640hud7 72 96 24 24
-crosshair 320 xhairgl 0 0 64 64
-autoaim 320 crosshairs 0 0 24 24
weapon 640 640mw1 0 0 170 45
weapon_s 640 640mw1-s 0 0 170 45
ammo 640 640hud7 72 96 24 24
-crosshair 640 xhairgl 0 0 64 0
-autoaim 640 crosshairs 0 72 24 24
+crosshair_0 320 xhairgl 0 0 64 0
+crosshair_1 320 xhairgl140 0 0 40 0
+crosshair_2 320 xhairgl240 0 0 40 0
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairgl140 0 0 40 0
+crosshair_2 640 xhairgl240 0 0 40 0
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairgl140 0 0 50 0
+crosshair_2 800 xhairgl240 0 0 50 0
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairgl164 0 0 64 0
+crosshair_2 1024 xhairgl264 0 0 64 0
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairgl180 0 0 80 0
+crosshair_2 1280 xhairgl280 0 0 80 0
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_healingspray.txt b/main/sprites/weapon_healingspray.txt
index 5be43ebf..08f131bb 100644
--- a/main/sprites/weapon_healingspray.txt
+++ b/main/sprites/weapon_healingspray.txt
@@ -1,7 +1,27 @@
-8
+26
weapon 320 320w 0 200 80 20
weapon_s 320 320w-s 0 200 80 20
ammo 320 640hud7 96 96 24 24
-weapon 640 640aw4 0 135 170 45
-weapon_s 640 640aw4-s 0 135 170 45
+weapon 640 640aw4 0 135 170 45
+weapon_s 640 640aw4-s 0 135 170 45
ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairaw3 0 0 40 40
+crosshair_2 320 xhairaw4 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw3 0 0 40 40
+crosshair_2 640 xhairaw4 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw3 40 0 50 50
+crosshair_2 800 xhairaw4 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw3 90 0 64 64
+crosshair_2 1024 xhairaw4 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw3 154 0 80 80
+crosshair_2 1280 xhairaw4 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_heavymachinegun.txt b/main/sprites/weapon_heavymachinegun.txt
index 543eff32..1c47c52f 100644
--- a/main/sprites/weapon_heavymachinegun.txt
+++ b/main/sprites/weapon_heavymachinegun.txt
@@ -1,11 +1,28 @@
-10
+27
weapon 320 320w 160 100 80 20
weapon_s 320 320w-s 160 100 80 20
ammo 320 640hud7 0 96 24 24
-crosshair 320 xhairhmg 0 0 64 64
-autoaim 320 crosshairs 0 72 24 24
weapon 640 640mw2 0 45 170 45
weapon_s 640 640mw2-s 0 45 170 45
ammo 640 640hud7 0 96 24 24
-crosshair 640 xhairhmg 0 0 64 64
-autoaim 640 crosshairs 0 72 24 24
+crosshair_0 320 xhairhmg 0 0 64 64
+crosshair_1 320 xhairmw1 0 160 40 40
+crosshair_2 320 xhairmw2 0 160 40 40
+crosshair_3 320 xhairmw3 0 160 40 40
+crosshair_4 320 xhairmw4 0 160 40 40
+crosshair_1 640 xhairmw1 0 160 40 40
+crosshair_2 640 xhairmw2 0 160 40 40
+crosshair_3 640 xhairmw3 0 160 40 40
+crosshair_4 640 xhairmw4 0 160 40 40
+crosshair_1 800 xhairmw1 40 160 50 50
+crosshair_2 800 xhairmw2 40 160 50 50
+crosshair_3 800 xhairmw3 40 160 50 50
+crosshair_4 800 xhairmw4 40 160 50 50
+crosshair_1 1024 xhairmw1 90 160 64 64
+crosshair_2 1024 xhairmw2 90 160 64 64
+crosshair_3 1024 xhairmw3 90 160 64 64
+crosshair_4 1024 xhairmw4 90 160 64 64
+crosshair_1 1280 xhairmw1 154 160 80 80
+crosshair_2 1280 xhairmw2 154 160 80 80
+crosshair_3 1280 xhairmw3 154 160 80 80
+crosshair_4 1280 xhairmw4 154 160 80 80
diff --git a/main/sprites/weapon_knife.txt b/main/sprites/weapon_knife.txt
index 0fba1a00..f6498bbb 100644
--- a/main/sprites/weapon_knife.txt
+++ b/main/sprites/weapon_knife.txt
@@ -1,7 +1,28 @@
-10
+27
weapon 320 320w 160 140 80 20
weapon_s 320 320w-s 160 140 80 20
ammo 320 320hud2 0 16 18 18
weapon 640 640mw1 0 135 170 45
weapon_s 640 640mw1-s 0 135 170 45
ammo 640 640hud7 0 72 24 24
+crosshair_1 320 xhairmw1 0 0 40 40
+crosshair_2 320 xhairmw2 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairmw1 0 0 40 40
+crosshair_2 640 xhairmw2 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairmw1 40 0 50 50
+crosshair_2 800 xhairmw2 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairmw1 90 0 64 64
+crosshair_2 1024 xhairmw2 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairmw1 154 0 80 80
+crosshair_2 1280 xhairmw2 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
+
diff --git a/main/sprites/weapon_leap.txt b/main/sprites/weapon_leap.txt
index 52bfe83b..5eb1ad43 100644
--- a/main/sprites/weapon_leap.txt
+++ b/main/sprites/weapon_leap.txt
@@ -1,7 +1,27 @@
-6
-weapon 320 320w 0 0 80 20
-weapon_s 320 320w-s 0 0 80 20
-ammo 320 640hud7 96 96 24 24
-weapon 640 640aw1 0 0 170 45
-weapon_s 640 640aw1-s 0 0 170 45
-ammo 640 640hud7 96 96 24 24
+26
+weapon 320 320w 0 0 80 20
+weapon_s 320 320w-s 0 0 80 20
+ammo 320 640hud7 96 96 24 24
+weapon 640 640aw1 0 0 170 45
+weapon_s 640 640aw1-s 0 0 170 45
+ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairal1-1 0 0 256 256
+crosshair_2 320 xhairal2-1 0 0 256 256
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairal1-1 0 0 256 256
+crosshair_2 640 xhairal2-1 0 0 256 256
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairal1-2 0 0 256 256
+crosshair_2 800 xhairal2-2 0 0 256 256
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairal1-3 0 0 256 256
+crosshair_2 1024 xhairal2-3 0 0 256 256
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairal1-4 0 0 256 256
+crosshair_2 1280 xhairal2-4 0 0 256 256
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_machinegun.txt b/main/sprites/weapon_machinegun.txt
index 6dede7a9..ce7534bb 100644
--- a/main/sprites/weapon_machinegun.txt
+++ b/main/sprites/weapon_machinegun.txt
@@ -1,11 +1,28 @@
-10
+27
weapon 320 320w 160 0 80 20
weapon_s 320 320w-s 160 0 80 20
ammo 320 640hud7 48 72 24 24
-crosshair 320 xhairmg 0 0 64 64
-autoaim 320 crosshairs 0 72 24 24
weapon 640 640mw2 0 180 170 45
weapon_s 640 640mw2-s 0 180 170 45
ammo 640 640hud7 48 72 24 24
-crosshair 640 xhairmg 0 0 64 64
-autoaim 640 crosshairs 0 72 24 24
+crosshair_0 320 xhairmg 0 0 64 64
+crosshair_1 320 xhairmw5 0 0 40 40
+crosshair_2 320 xhairmw6 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairmw5 0 0 40 40
+crosshair_2 640 xhairmw6 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairmw5 40 0 50 50
+crosshair_2 800 xhairmw6 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairmw5 90 0 64 64
+crosshair_2 1024 xhairmw6 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairmw5 154 0 80 80
+crosshair_2 1280 xhairmw6 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_metabolize.txt b/main/sprites/weapon_metabolize.txt
index 79ddf677..bd794ebc 100644
--- a/main/sprites/weapon_metabolize.txt
+++ b/main/sprites/weapon_metabolize.txt
@@ -1,9 +1,27 @@
-8
+26
weapon 320 320w 0 200 80 20
weapon_s 320 320w-s 0 200 80 20
ammo 320 640hud7 96 96 24 24
-autoaim 320 crosshairs 0 72 24 24
weapon 640 640aw3 0 180 170 45
weapon_s 640 640aw3-s 0 180 170 45
ammo 640 640hud7 96 96 24 24
-autoaim 640 crosshairs 0 72 24 24
+crosshair_1 320 xhairaw3 0 0 40 40
+crosshair_2 320 xhairaw4 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw3 0 0 40 40
+crosshair_2 640 xhairaw4 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw3 40 0 50 50
+crosshair_2 800 xhairaw4 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw3 90 0 64 64
+crosshair_2 1024 xhairaw4 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw3 154 0 80 80
+crosshair_2 1280 xhairaw4 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_mine.txt b/main/sprites/weapon_mine.txt
index 7c214f7c..2ec0eeb3 100644
--- a/main/sprites/weapon_mine.txt
+++ b/main/sprites/weapon_mine.txt
@@ -1,7 +1,27 @@
-6
+26
weapon 320 320w 160 40 80 20
weapon_s 320 320w-s 160 40 80 20
ammo 320 640hud7 96 96 24 24
weapon 640 640mw2 0 0 170 45
weapon_s 640 640mw2-s 0 0 170 45
ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairmw1 0 0 40 40
+crosshair_2 320 xhairmw2 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairmw1 0 0 40 40
+crosshair_2 640 xhairmw2 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairmw1 40 0 50 50
+crosshair_2 800 xhairmw2 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairmw1 90 0 64 64
+crosshair_2 1024 xhairmw2 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairmw1 154 0 80 80
+crosshair_2 1280 xhairmw2 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_parasite.txt b/main/sprites/weapon_parasite.txt
index 59d488aa..b36c3c10 100644
--- a/main/sprites/weapon_parasite.txt
+++ b/main/sprites/weapon_parasite.txt
@@ -1,7 +1,26 @@
-10
+25
weapon 320 320w 80 80 80 20
weapon_s 320 320w-s 80 80 80 20
-crosshair 320 xhairpara 0 0 128 128
weapon 640 640aw3 0 0 170 45
weapon_s 640 640aw3-s 0 0 170 45
-crosshair 640 xhairpara 0 0 128 128
+crosshair_0 320 xhairpara 0 0 128 128
+crosshair_1 320 xhairaw1 0 0 40 40
+crosshair_2 320 xhairaw2 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw1 0 0 40 40
+crosshair_2 640 xhairaw2 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw1 40 0 50 50
+crosshair_2 800 xhairaw2 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw1 90 0 64 64
+crosshair_2 1024 xhairaw2 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw1 154 0 80 80
+crosshair_2 1280 xhairaw2 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_pistol.txt b/main/sprites/weapon_pistol.txt
index 8285ca39..41685b54 100644
--- a/main/sprites/weapon_pistol.txt
+++ b/main/sprites/weapon_pistol.txt
@@ -1,11 +1,28 @@
-10
+27
weapon 320 320w 160 60 80 20
weapon_s 320 320w-s 160 60 80 20
ammo 320 640hud7 24 72 24 24
-crosshair 320 xhairp 0 0 64 64
-autoaim 320 crosshairs 0 72 24 24
-weapon 640 640mw1 0 90 170 45
+weapon 640 640mw1 0 90 170 45
weapon_s 640 640mw1-s 0 90 170 45
ammo 640 640hud7 24 72 24 24
-crosshair 640 xhairp 0 0 64 64
-autoaim 640 crosshairs 0 72 24 24
+crosshair_0 320 xhairp 0 0 64 64
+crosshair_1 320 xhairmw1 0 0 40 40
+crosshair_2 320 xhairmw2 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairmw1 0 0 40 40
+crosshair_2 640 xhairmw2 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairmw1 40 0 50 50
+crosshair_2 800 xhairmw2 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairmw1 90 0 64 64
+crosshair_2 1024 xhairmw2 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairmw1 154 0 80 80
+crosshair_2 1280 xhairmw2 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_primalscream.txt b/main/sprites/weapon_primalscream.txt
index 73f1f439..9dac7ad5 100644
--- a/main/sprites/weapon_primalscream.txt
+++ b/main/sprites/weapon_primalscream.txt
@@ -1,7 +1,27 @@
-10
-weapon 320 320w 80 100 80 20
-weapon_s 320 320w-s 80 100 80 20
-ammo 320 320hud2 0 16 18 18
-weapon 640 640aw2 0 180 170 45
-weapon_s 640 640aw2-s 0 180 170 45
-ammo 640 640hud7 0 72 24 24
+26
+weapon 320 320w 80 100 80 20
+weapon_s 320 320w-s 80 100 80 20
+ammo 320 320hud2 0 16 18 18
+weapon 640 640aw2 0 180 170 45
+weapon_s 640 640aw2-s 0 180 170 45
+ammo 640 640hud7 0 72 24 24
+crosshair_1 320 xhairaps1-1 0 0 256 256
+crosshair_2 320 xhairaps2-1 0 0 256 256
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaps1-1 0 0 256 256
+crosshair_2 640 xhairaps2-1 0 0 256 256
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaps1-2 0 0 256 256
+crosshair_2 800 xhairaps2-2 0 0 256 256
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaps1-3 0 0 256 256
+crosshair_2 1024 xhairaps2-3 0 0 256 256
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaps1-4 0 0 256 256
+crosshair_2 1280 xhairaps2-4 0 0 256 256
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_shotgun.txt b/main/sprites/weapon_shotgun.txt
index 9f73fff3..530ca15d 100644
--- a/main/sprites/weapon_shotgun.txt
+++ b/main/sprites/weapon_shotgun.txt
@@ -1,9 +1,28 @@
-14
+27
weapon 320 320w 160 80 80 20
weapon_s 320 320w-s 160 80 80 20
ammo 320 640hud7 0 72 24 24
-crosshair 320 xhairsg 0 0 256 256
weapon 640 640mw2 0 135 170 45
weapon_s 640 640mw2-s 0 135 170 45
ammo 640 640hud7 0 72 24 24
-crosshair 640 xhairsg 0 0 256 256
+crosshair_0 320 xhairsg 0 0 64 64
+crosshair_1 320 xhairmw1 0 80 40 40
+crosshair_2 320 xhairmw2 0 80 40 40
+crosshair_3 320 xhairmw3 0 80 40 40
+crosshair_4 320 xhairmw4 0 80 40 40
+crosshair_1 640 xhairmw1 0 80 40 40
+crosshair_2 640 xhairmw2 0 80 40 40
+crosshair_3 640 xhairmw3 0 80 40 40
+crosshair_4 640 xhairmw4 0 80 40 40
+crosshair_1 800 xhairmw1 40 80 50 50
+crosshair_2 800 xhairmw2 40 80 50 50
+crosshair_3 800 xhairmw3 40 80 50 50
+crosshair_4 800 xhairmw4 40 80 50 50
+crosshair_1 1024 xhairmw1 90 80 64 64
+crosshair_2 1024 xhairmw2 90 80 64 64
+crosshair_3 1024 xhairmw3 90 80 64 64
+crosshair_4 1024 xhairmw4 90 80 64 64
+crosshair_1 1280 xhairmw1 154 80 80 80
+crosshair_2 1280 xhairmw2 154 80 80 80
+crosshair_3 1280 xhairmw3 154 80 80 80
+crosshair_4 1280 xhairmw4 154 80 80 80
diff --git a/main/sprites/weapon_spikegun.txt b/main/sprites/weapon_spikegun.txt
index 985aa79c..51e385a6 100644
--- a/main/sprites/weapon_spikegun.txt
+++ b/main/sprites/weapon_spikegun.txt
@@ -1,11 +1,28 @@
-10
+27
weapon 320 320w 80 120 80 20
weapon_s 320 320w-s 80 120 80 20
ammo 320 320hud2 0 16 18 18
-crosshair 320 xhairalien 0 0 128 128
-autoaim 320 crosshairs 0 72 24 24
weapon 640 640aw2 0 0 170 45
weapon_s 640 640aw2-s 0 0 170 45
ammo 640 640hud7 0 72 24 24
-crosshair 640 xhairalien 0 0 128 128
-autoaim 640 crosshairs 0 72 24 24
+crosshair_0 320 xhairalien 0 0 128 128
+crosshair_1 320 xhairaw1 0 0 40 40
+crosshair_2 320 xhairaw2 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw1 0 0 40 40
+crosshair_2 640 xhairaw2 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw1 40 0 50 50
+crosshair_2 800 xhairaw2 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw1 90 0 64 64
+crosshair_2 1024 xhairaw2 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw1 154 0 80 80
+crosshair_2 1280 xhairaw2 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_spit.txt b/main/sprites/weapon_spit.txt
index 336fed17..832f58ed 100644
--- a/main/sprites/weapon_spit.txt
+++ b/main/sprites/weapon_spit.txt
@@ -1,9 +1,28 @@
-10
+27
weapon 320 320w 0 160 80 20
weapon_s 320 320w-s 0 160 80 20
ammo 320 640hud7 96 96 24 24
-crosshair 320 xhairspit 0 0 64 64
weapon 640 640aw1 0 90 170 45
weapon_s 640 640aw1-s 0 90 170 45
ammo 640 640hud7 96 96 24 24
-crosshair 640 xhairspit 0 0 64 64
+crosshair_0 320 xhairspit 0 0 64 64
+crosshair_1 320 xhairaw1 0 0 40 40
+crosshair_2 320 xhairaw2 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw1 0 0 40 40
+crosshair_2 640 xhairaw2 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw1 40 0 50 50
+crosshair_2 800 xhairaw2 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw1 90 0 64 64
+crosshair_2 1024 xhairaw2 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw1 154 0 80 80
+crosshair_2 1280 xhairaw2 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_spore.txt b/main/sprites/weapon_spore.txt
index 00cb677f..75328606 100644
--- a/main/sprites/weapon_spore.txt
+++ b/main/sprites/weapon_spore.txt
@@ -1,11 +1,28 @@
-10
-weapon 320 320w 0 220 80 20
-weapon_s 320 320w-s 0 220 80 20
-ammo 320 640hud7 96 96 24 24
-crosshair 320 xhairalien 0 0 128 128
-autoaim 320 crosshairs 0 72 24 24
-weapon 640 640mw2 0 90 170 45
-weapon_s 640 640mw2-s 0 90 170 45
-ammo 640 640hud7 96 96 24 24
-crosshair 640 xhairalien 0 0 128 128
-autoaim 640 crosshairs 0 72 24 24
+27
+weapon 320 320w 0 220 80 20
+weapon_s 320 320w-s 0 220 80 20
+ammo 320 640hud7 96 96 24 24
+weapon 640 640mw2 0 90 170 45
+weapon_s 640 640mw2-s 0 90 170 45
+ammo 640 640hud7 96 96 24 24
+crosshair_0 320 xhairalien 0 0 128 128
+crosshair_1 320 xhairas1-1 0 0 256 256
+crosshair_2 320 xhairas2-1 0 0 256 256
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairas1-1 0 0 256 256
+crosshair_2 640 xhairas2-1 0 0 256 256
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairas1-2 0 0 256 256
+crosshair_2 800 xhairas2-2 0 0 256 256
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairas1-3 0 0 256 256
+crosshair_2 1024 xhairas2-3 0 0 256 256
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairas1-4 0 0 256 256
+crosshair_2 1280 xhairas2-4 0 0 256 256
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_stomp.txt b/main/sprites/weapon_stomp.txt
index 1d53e187..1f7edbd8 100644
--- a/main/sprites/weapon_stomp.txt
+++ b/main/sprites/weapon_stomp.txt
@@ -1,7 +1,27 @@
-8
+26
weapon 320 320w 80 60 80 20
weapon_s 320 320w-s 80 60 80 20
ammo 320 640hud7 96 96 24 24
weapon 640 640aw4 0 45 170 45
weapon_s 640 640aw4-s 0 45 170 45
ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairaw3 0 0 40 40
+crosshair_2 320 xhairaw4 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw3 0 0 40 40
+crosshair_2 640 xhairaw4 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw3 40 0 50 50
+crosshair_2 800 xhairaw4 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw3 90 0 64 64
+crosshair_2 1024 xhairaw4 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw3 154 0 80 80
+crosshair_2 1280 xhairaw4 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_swipe.txt b/main/sprites/weapon_swipe.txt
index 8d0f7c07..1560a4c9 100644
--- a/main/sprites/weapon_swipe.txt
+++ b/main/sprites/weapon_swipe.txt
@@ -1,7 +1,27 @@
-6
+26
weapon 320 320w 80 0 80 20
weapon_s 320 320w-s 80 0 80 20
ammo 320 640hud7 96 96 24 24
weapon 640 640aw4 0 180 170 45
weapon_s 640 640aw4-s 0 180 170 45
ammo 640 640hud7 96 96 24 24
+crosshair_1 320 xhairaw3 0 0 40 40
+crosshair_2 320 xhairaw4 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaw3 0 0 40 40
+crosshair_2 640 xhairaw4 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaw3 40 0 50 50
+crosshair_2 800 xhairaw4 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaw3 90 0 64 64
+crosshair_2 1024 xhairaw4 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaw3 154 0 80 80
+crosshair_2 1280 xhairaw4 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/weapon_umbra.txt b/main/sprites/weapon_umbra.txt
index 752a5652..5d1bc26e 100644
--- a/main/sprites/weapon_umbra.txt
+++ b/main/sprites/weapon_umbra.txt
@@ -1,9 +1,28 @@
-8
-weapon 320 320w 80 20 80 20
-weapon_s 320 320w-s 80 20 80 20
-crosshair 320 xhairalien 0 0 128 128
-ammo 320 640hud7 96 96 24 24
-weapon 640 640aw3 0 90 170 45
-weapon_s 640 640aw3-s 0 90 170 45
-ammo 640 640hud7 96 96 24 24
-crosshair 640 xhairalien 0 0 128 128
\ No newline at end of file
+27
+weapon 320 320w 80 20 80 20
+weapon_s 320 320w-s 80 20 80 20
+ammo 320 640hud7 96 96 24 24
+weapon 640 640aw3 0 90 170 45
+weapon_s 640 640aw3-s 0 90 170 45
+ammo 640 640hud7 96 96 24 24
+crosshair_0 320 xhairalien 0 0 128 128
+crosshair_1 320 xhairau1-1 0 0 256 256
+crosshair_2 320 xhairau2-1 0 0 256 256
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairau1-1 0 0 256 256
+crosshair_2 640 xhairau2-1 0 0 256 256
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairau1-2 0 0 256 256
+crosshair_2 800 xhairau2-2 0 0 256 256
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairau1-3 0 0 256 256
+crosshair_2 1024 xhairau2-3 0 0 256 256
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairau1-4 0 0 256 256
+crosshair_2 1280 xhairau2-4 0 0 256 256
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_webspinner.txt b/main/sprites/weapon_webspinner.txt
index 94020a1b..756127c7 100644
--- a/main/sprites/weapon_webspinner.txt
+++ b/main/sprites/weapon_webspinner.txt
@@ -1,9 +1,28 @@
-8
-weapon 320 320w 80 40 80 20
-weapon_s 320 320w-s 80 40 80 20
-ammo 320 640hud7 96 96 24 24
-crosshair 320 xhairweb 0 0 64 64
-weapon 640 640aw2 0 45 170 45
-weapon_s 640 640aw2-s 0 45 170 45
-ammo 640 640hud7 96 96 24 24
-crosshair 640 xhairweb 0 0 64 64
+27
+weapon 320 320w 80 40 80 20
+weapon_s 320 320w-s 80 40 80 20
+ammo 320 640hud7 96 96 24 24
+weapon 640 640aw2 0 45 170 45
+weapon_s 640 640aw2-s 0 45 170 45
+ammo 640 640hud7 96 96 24 24
+crosshair_0 320 xhairweb 0 0 64 64
+crosshair_1 320 xhairaweb1-1 0 0 256 256
+crosshair_2 320 xhairaweb2-1 0 0 256 256
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairaweb1-1 0 0 256 256
+crosshair_2 640 xhairaweb2-1 0 0 256 256
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairaweb1-2 0 0 256 256
+crosshair_2 800 xhairaweb2-2 0 0 256 256
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairaweb1-3 0 0 256 256
+crosshair_2 1024 xhairaweb2-3 0 0 256 256
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairaweb1-4 0 0 256 256
+crosshair_2 1280 xhairaweb2-4 0 0 256 256
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
\ No newline at end of file
diff --git a/main/sprites/weapon_welder.txt b/main/sprites/weapon_welder.txt
index affca805..aea7f9d0 100644
--- a/main/sprites/weapon_welder.txt
+++ b/main/sprites/weapon_welder.txt
@@ -1,7 +1,27 @@
-14
+26
weapon 320 320w 160 20 80 20
weapon_s 320 320w-s 160 20 80 20
ammo 320 640hud7 0 72 24 24
weapon 640 640mw1 0 45 170 45
weapon_s 640 640mw1-s 0 45 170 45
ammo 640 640hud7 0 72 24 24
+crosshair_1 320 xhairmw1 0 0 40 40
+crosshair_2 320 xhairmw2 0 0 40 40
+crosshair_3 320 xhairmw3 0 0 40 40
+crosshair_4 320 xhairmw4 0 0 40 40
+crosshair_1 640 xhairmw1 0 0 40 40
+crosshair_2 640 xhairmw2 0 0 40 40
+crosshair_3 640 xhairmw3 0 0 40 40
+crosshair_4 640 xhairmw4 0 0 40 40
+crosshair_1 800 xhairmw1 40 0 50 50
+crosshair_2 800 xhairmw2 40 0 50 50
+crosshair_3 800 xhairmw3 40 0 50 50
+crosshair_4 800 xhairmw4 40 0 50 50
+crosshair_1 1024 xhairmw1 90 0 64 64
+crosshair_2 1024 xhairmw2 90 0 64 64
+crosshair_3 1024 xhairmw3 90 0 64 64
+crosshair_4 1024 xhairmw4 90 0 64 64
+crosshair_1 1280 xhairmw1 154 0 80 80
+crosshair_2 1280 xhairmw2 154 0 80 80
+crosshair_3 1280 xhairmw3 154 0 80 80
+crosshair_4 1280 xhairmw4 154 0 80 80
diff --git a/main/sprites/webstrand.spr b/main/sprites/webstrand.spr
index dc611c33..58006eb2 100644
Binary files a/main/sprites/webstrand.spr and b/main/sprites/webstrand.spr differ
diff --git a/main/sprites/xhairal1-1.spr b/main/sprites/xhairal1-1.spr
new file mode 100644
index 00000000..22832fde
Binary files /dev/null and b/main/sprites/xhairal1-1.spr differ
diff --git a/main/sprites/xhairal1-2.spr b/main/sprites/xhairal1-2.spr
new file mode 100644
index 00000000..aff010a2
Binary files /dev/null and b/main/sprites/xhairal1-2.spr differ
diff --git a/main/sprites/xhairal1-3.spr b/main/sprites/xhairal1-3.spr
new file mode 100644
index 00000000..4aa7b716
Binary files /dev/null and b/main/sprites/xhairal1-3.spr differ
diff --git a/main/sprites/xhairal1-4.spr b/main/sprites/xhairal1-4.spr
new file mode 100644
index 00000000..4fd3e606
Binary files /dev/null and b/main/sprites/xhairal1-4.spr differ
diff --git a/main/sprites/xhairal2-1.spr b/main/sprites/xhairal2-1.spr
new file mode 100644
index 00000000..5868c5fd
Binary files /dev/null and b/main/sprites/xhairal2-1.spr differ
diff --git a/main/sprites/xhairal2-2.spr b/main/sprites/xhairal2-2.spr
new file mode 100644
index 00000000..9da947f8
Binary files /dev/null and b/main/sprites/xhairal2-2.spr differ
diff --git a/main/sprites/xhairal2-3.spr b/main/sprites/xhairal2-3.spr
new file mode 100644
index 00000000..540461bb
Binary files /dev/null and b/main/sprites/xhairal2-3.spr differ
diff --git a/main/sprites/xhairal2-4.spr b/main/sprites/xhairal2-4.spr
new file mode 100644
index 00000000..29407d4a
Binary files /dev/null and b/main/sprites/xhairal2-4.spr differ
diff --git a/main/sprites/xhairaps1-1.spr b/main/sprites/xhairaps1-1.spr
new file mode 100644
index 00000000..9ddb01a1
Binary files /dev/null and b/main/sprites/xhairaps1-1.spr differ
diff --git a/main/sprites/xhairaps1-2.spr b/main/sprites/xhairaps1-2.spr
new file mode 100644
index 00000000..9e8e5f69
Binary files /dev/null and b/main/sprites/xhairaps1-2.spr differ
diff --git a/main/sprites/xhairaps1-3.spr b/main/sprites/xhairaps1-3.spr
new file mode 100644
index 00000000..98c7adc8
Binary files /dev/null and b/main/sprites/xhairaps1-3.spr differ
diff --git a/main/sprites/xhairaps1-4.spr b/main/sprites/xhairaps1-4.spr
new file mode 100644
index 00000000..27e18550
Binary files /dev/null and b/main/sprites/xhairaps1-4.spr differ
diff --git a/main/sprites/xhairaps2-1.spr b/main/sprites/xhairaps2-1.spr
new file mode 100644
index 00000000..93533d44
Binary files /dev/null and b/main/sprites/xhairaps2-1.spr differ
diff --git a/main/sprites/xhairaps2-2.spr b/main/sprites/xhairaps2-2.spr
new file mode 100644
index 00000000..a9cfa8b7
Binary files /dev/null and b/main/sprites/xhairaps2-2.spr differ
diff --git a/main/sprites/xhairaps2-3.spr b/main/sprites/xhairaps2-3.spr
new file mode 100644
index 00000000..61a7f4a9
Binary files /dev/null and b/main/sprites/xhairaps2-3.spr differ
diff --git a/main/sprites/xhairaps2-4.spr b/main/sprites/xhairaps2-4.spr
new file mode 100644
index 00000000..6b86fc98
Binary files /dev/null and b/main/sprites/xhairaps2-4.spr differ
diff --git a/main/sprites/xhairas1-1.spr b/main/sprites/xhairas1-1.spr
new file mode 100644
index 00000000..9af6a0df
Binary files /dev/null and b/main/sprites/xhairas1-1.spr differ
diff --git a/main/sprites/xhairas1-2.spr b/main/sprites/xhairas1-2.spr
new file mode 100644
index 00000000..090df7c9
Binary files /dev/null and b/main/sprites/xhairas1-2.spr differ
diff --git a/main/sprites/xhairas1-3.spr b/main/sprites/xhairas1-3.spr
new file mode 100644
index 00000000..50d3fd68
Binary files /dev/null and b/main/sprites/xhairas1-3.spr differ
diff --git a/main/sprites/xhairas1-4.spr b/main/sprites/xhairas1-4.spr
new file mode 100644
index 00000000..253665fb
Binary files /dev/null and b/main/sprites/xhairas1-4.spr differ
diff --git a/main/sprites/xhairas2-1.spr b/main/sprites/xhairas2-1.spr
new file mode 100644
index 00000000..38fb08f7
Binary files /dev/null and b/main/sprites/xhairas2-1.spr differ
diff --git a/main/sprites/xhairas2-2.spr b/main/sprites/xhairas2-2.spr
new file mode 100644
index 00000000..d2c47d76
Binary files /dev/null and b/main/sprites/xhairas2-2.spr differ
diff --git a/main/sprites/xhairas2-3.spr b/main/sprites/xhairas2-3.spr
new file mode 100644
index 00000000..93d9cf35
Binary files /dev/null and b/main/sprites/xhairas2-3.spr differ
diff --git a/main/sprites/xhairas2-4.spr b/main/sprites/xhairas2-4.spr
new file mode 100644
index 00000000..88020322
Binary files /dev/null and b/main/sprites/xhairas2-4.spr differ
diff --git a/main/sprites/xhairau1-1.spr b/main/sprites/xhairau1-1.spr
new file mode 100644
index 00000000..9c6096fb
Binary files /dev/null and b/main/sprites/xhairau1-1.spr differ
diff --git a/main/sprites/xhairau1-2.spr b/main/sprites/xhairau1-2.spr
new file mode 100644
index 00000000..6ebc0811
Binary files /dev/null and b/main/sprites/xhairau1-2.spr differ
diff --git a/main/sprites/xhairau1-3.spr b/main/sprites/xhairau1-3.spr
new file mode 100644
index 00000000..801afb5b
Binary files /dev/null and b/main/sprites/xhairau1-3.spr differ
diff --git a/main/sprites/xhairau1-4.spr b/main/sprites/xhairau1-4.spr
new file mode 100644
index 00000000..d46a74eb
Binary files /dev/null and b/main/sprites/xhairau1-4.spr differ
diff --git a/main/sprites/xhairau2-1.spr b/main/sprites/xhairau2-1.spr
new file mode 100644
index 00000000..a3d45443
Binary files /dev/null and b/main/sprites/xhairau2-1.spr differ
diff --git a/main/sprites/xhairau2-2.spr b/main/sprites/xhairau2-2.spr
new file mode 100644
index 00000000..d3cd0056
Binary files /dev/null and b/main/sprites/xhairau2-2.spr differ
diff --git a/main/sprites/xhairau2-3.spr b/main/sprites/xhairau2-3.spr
new file mode 100644
index 00000000..9ccd4776
Binary files /dev/null and b/main/sprites/xhairau2-3.spr differ
diff --git a/main/sprites/xhairau2-4.spr b/main/sprites/xhairau2-4.spr
new file mode 100644
index 00000000..08ab63a3
Binary files /dev/null and b/main/sprites/xhairau2-4.spr differ
diff --git a/main/sprites/xhairaw1.spr b/main/sprites/xhairaw1.spr
new file mode 100644
index 00000000..f5d1a39b
Binary files /dev/null and b/main/sprites/xhairaw1.spr differ
diff --git a/main/sprites/xhairaw2.spr b/main/sprites/xhairaw2.spr
new file mode 100644
index 00000000..b0d9b013
Binary files /dev/null and b/main/sprites/xhairaw2.spr differ
diff --git a/main/sprites/xhairaw3.spr b/main/sprites/xhairaw3.spr
new file mode 100644
index 00000000..93ff282f
Binary files /dev/null and b/main/sprites/xhairaw3.spr differ
diff --git a/main/sprites/xhairaw4.spr b/main/sprites/xhairaw4.spr
new file mode 100644
index 00000000..8610eeb8
Binary files /dev/null and b/main/sprites/xhairaw4.spr differ
diff --git a/main/sprites/xhairaweb1-1.spr b/main/sprites/xhairaweb1-1.spr
new file mode 100644
index 00000000..d772d57a
Binary files /dev/null and b/main/sprites/xhairaweb1-1.spr differ
diff --git a/main/sprites/xhairaweb1-2.spr b/main/sprites/xhairaweb1-2.spr
new file mode 100644
index 00000000..d2188ea1
Binary files /dev/null and b/main/sprites/xhairaweb1-2.spr differ
diff --git a/main/sprites/xhairaweb1-3.spr b/main/sprites/xhairaweb1-3.spr
new file mode 100644
index 00000000..f2a29750
Binary files /dev/null and b/main/sprites/xhairaweb1-3.spr differ
diff --git a/main/sprites/xhairaweb1-4.spr b/main/sprites/xhairaweb1-4.spr
new file mode 100644
index 00000000..1540c116
Binary files /dev/null and b/main/sprites/xhairaweb1-4.spr differ
diff --git a/main/sprites/xhairaweb2-1.spr b/main/sprites/xhairaweb2-1.spr
new file mode 100644
index 00000000..bd36506b
Binary files /dev/null and b/main/sprites/xhairaweb2-1.spr differ
diff --git a/main/sprites/xhairaweb2-2.spr b/main/sprites/xhairaweb2-2.spr
new file mode 100644
index 00000000..6ee710b0
Binary files /dev/null and b/main/sprites/xhairaweb2-2.spr differ
diff --git a/main/sprites/xhairaweb2-3.spr b/main/sprites/xhairaweb2-3.spr
new file mode 100644
index 00000000..d43cfbf0
Binary files /dev/null and b/main/sprites/xhairaweb2-3.spr differ
diff --git a/main/sprites/xhairaweb2-4.spr b/main/sprites/xhairaweb2-4.spr
new file mode 100644
index 00000000..2fb6743e
Binary files /dev/null and b/main/sprites/xhairaweb2-4.spr differ
diff --git a/main/sprites/xhairax1-1.spr b/main/sprites/xhairax1-1.spr
new file mode 100644
index 00000000..41f9f843
Binary files /dev/null and b/main/sprites/xhairax1-1.spr differ
diff --git a/main/sprites/xhairax1-2.spr b/main/sprites/xhairax1-2.spr
new file mode 100644
index 00000000..0e90985b
Binary files /dev/null and b/main/sprites/xhairax1-2.spr differ
diff --git a/main/sprites/xhairax1-3.spr b/main/sprites/xhairax1-3.spr
new file mode 100644
index 00000000..a0496b01
Binary files /dev/null and b/main/sprites/xhairax1-3.spr differ
diff --git a/main/sprites/xhairax1-4.spr b/main/sprites/xhairax1-4.spr
new file mode 100644
index 00000000..5b9a521f
Binary files /dev/null and b/main/sprites/xhairax1-4.spr differ
diff --git a/main/sprites/xhairax2-1.spr b/main/sprites/xhairax2-1.spr
new file mode 100644
index 00000000..eb2b3a17
Binary files /dev/null and b/main/sprites/xhairax2-1.spr differ
diff --git a/main/sprites/xhairax2-2.spr b/main/sprites/xhairax2-2.spr
new file mode 100644
index 00000000..663583f2
Binary files /dev/null and b/main/sprites/xhairax2-2.spr differ
diff --git a/main/sprites/xhairax2-3.spr b/main/sprites/xhairax2-3.spr
new file mode 100644
index 00000000..7b6c3de8
Binary files /dev/null and b/main/sprites/xhairax2-3.spr differ
diff --git a/main/sprites/xhairax2-4.spr b/main/sprites/xhairax2-4.spr
new file mode 100644
index 00000000..ceea9be7
Binary files /dev/null and b/main/sprites/xhairax2-4.spr differ
diff --git a/main/sprites/xhairgl140.spr b/main/sprites/xhairgl140.spr
new file mode 100644
index 00000000..e77c6448
Binary files /dev/null and b/main/sprites/xhairgl140.spr differ
diff --git a/main/sprites/xhairgl150.spr b/main/sprites/xhairgl150.spr
new file mode 100644
index 00000000..8e6fcd56
Binary files /dev/null and b/main/sprites/xhairgl150.spr differ
diff --git a/main/sprites/xhairgl164.spr b/main/sprites/xhairgl164.spr
new file mode 100644
index 00000000..f390bdb3
Binary files /dev/null and b/main/sprites/xhairgl164.spr differ
diff --git a/main/sprites/xhairgl180.spr b/main/sprites/xhairgl180.spr
new file mode 100644
index 00000000..470301d0
Binary files /dev/null and b/main/sprites/xhairgl180.spr differ
diff --git a/main/sprites/xhairgl240.spr b/main/sprites/xhairgl240.spr
new file mode 100644
index 00000000..1cb1c1db
Binary files /dev/null and b/main/sprites/xhairgl240.spr differ
diff --git a/main/sprites/xhairgl250.spr b/main/sprites/xhairgl250.spr
new file mode 100644
index 00000000..e477c63c
Binary files /dev/null and b/main/sprites/xhairgl250.spr differ
diff --git a/main/sprites/xhairgl264.spr b/main/sprites/xhairgl264.spr
new file mode 100644
index 00000000..304b455c
Binary files /dev/null and b/main/sprites/xhairgl264.spr differ
diff --git a/main/sprites/xhairgl280.spr b/main/sprites/xhairgl280.spr
new file mode 100644
index 00000000..8a944bdd
Binary files /dev/null and b/main/sprites/xhairgl280.spr differ
diff --git a/main/sprites/xhairmw1.spr b/main/sprites/xhairmw1.spr
new file mode 100644
index 00000000..e8a70ba3
Binary files /dev/null and b/main/sprites/xhairmw1.spr differ
diff --git a/main/sprites/xhairmw2.spr b/main/sprites/xhairmw2.spr
new file mode 100644
index 00000000..ddf7189d
Binary files /dev/null and b/main/sprites/xhairmw2.spr differ
diff --git a/main/sprites/xhairmw3.spr b/main/sprites/xhairmw3.spr
new file mode 100644
index 00000000..72a4a1dd
Binary files /dev/null and b/main/sprites/xhairmw3.spr differ
diff --git a/main/sprites/xhairmw4.spr b/main/sprites/xhairmw4.spr
new file mode 100644
index 00000000..f05698b1
Binary files /dev/null and b/main/sprites/xhairmw4.spr differ
diff --git a/main/sprites/xhairmw5.spr b/main/sprites/xhairmw5.spr
new file mode 100644
index 00000000..b94ee95e
Binary files /dev/null and b/main/sprites/xhairmw5.spr differ
diff --git a/main/sprites/xhairmw6.spr b/main/sprites/xhairmw6.spr
new file mode 100644
index 00000000..3a867ffb
Binary files /dev/null and b/main/sprites/xhairmw6.spr differ
diff --git a/main/sprites/xhairsg.spr b/main/sprites/xhairsg.spr
index c0168ff5..ca97df7f 100644
Binary files a/main/sprites/xhairsg.spr and b/main/sprites/xhairsg.spr differ
diff --git a/main/titles.txt b/main/titles.txt
index bd3121e2..abf90c05 100644
--- a/main/titles.txt
+++ b/main/titles.txt
@@ -1,4 +1,4 @@
-//TITLES FOR NATURAL SELECTION
+ //TITLES FOR NATURAL SELECTION
//DO NOT ALTER THIS FILE
// Position command $position x y
// x & y are from 0 to 1 to be screen resolution independent
@@ -20,7 +20,7 @@ Natural Selection is created and maintained by Unknown Worlds Entertainment. Vi
NS_Site
{
-Check the front page of www.naturalselection.com for late-breaking news
+Check the front page of www.naturalselection.com for late-breaking news.
}
Team_AutoAssign
@@ -78,6 +78,13 @@ AutoTeam
Auto-assigned
}
+ReadyRoomThrottleMessage
+{
+You must press the key twice to return to the readyroom.
+}
+//"or type bind f4 "readyroom; wait; readyroom" for all you moaning ****" - Unnamed dev.
+
+
Muted
{
Muted
@@ -110,9 +117,10 @@ Exclamation
ChooseAnUpgrade
{
-Choose an upgrade by opening your pop-up menu (right-click by default)!
+Choose an upgrade by opening your pop-up menu (right-click by default).
}
+
YouAreAttacking
{
You are attacking!
@@ -310,7 +318,7 @@ This server does not currently allow spectators.
ObsInEyePrefix
{
-Viewing through eyes of
+Looking through eyes of
}
SpectatorTeam
@@ -363,6 +371,26 @@ KILLS
Kills
}
+EXTRA
+{
+Info
+}
+
+COLWEAP
+{
+Weapon
+}
+
+COLLEVEL
+{
+Level
+}
+
+COLRES
+{
+Res
+}
+
DEATHS
{
Deaths
@@ -409,11 +437,6 @@ ReadyRoomMessage
You are in the Ready Room. Walk through an entrance to join a team or observe the game.
}
-ReadyRoomThrottleMessage
-{
-You must press the key twice to return to the Ready Room
-}
-
ReinforcementMessage
{
You are waiting in line to spawn back in.
@@ -451,7 +474,7 @@ There are too many players on this team already.
CantJoinAfterSpectating
{
-You cannot join the game in progress once you've been a spectator.
+You can not join the game in progress once you've been a spectator.
}
JoinTeamTooFast
@@ -481,12 +504,12 @@ You are now a soldier. Try to follow orders from your commander, and do your be
ObjectivesVsAliens
{
-You are fighting aliens! Aliens respawn at hives - to win the game, you must kill all the alien hives and then kill the remaining aliens.
+You are fighting the alien menace! Aliens respawn at hives - to win the game, you must kill all the alien hives and then kill the remaining aliens.
}
ObjectivesVsMarines
{
-You are fighting marines! Marines respawn at infantry portals - to win the game, you must kill all their infantry portals and then kill all remaining marines.
+You are fighting the marine invaders! Marines respawn at infantry portals - to win the game, you must destroy all their infantry portals and then kill all remaining marines.
}
Handicap
@@ -1435,7 +1458,7 @@ The game won't start until both sides have players.
// Translation note: don't translate "ready"
GameWontStartUntilReady
{
-Game won't start until both teams type "ready".
+The game won't start until both teams type "ready".
}
EvolvingMessage
@@ -1488,6 +1511,11 @@ MustGestateUp
You can only change to higher lifeforms.
}
+SurfaceTooSteep
+{
+You need a flatter surface to gestate on.
+}
+
MustGestateOnGround
{
You must stand on flat ground to gestate.
@@ -1558,6 +1586,11 @@ TooManyStructuresOfThisTypeNearby
There are too many structures of this type nearby.
}
+TooManyStructuresOnServer
+{
+Server's structure limit exceeded.
+}
+
TooManyStructuresInArea
{
There are too many structures nearby.
@@ -1576,13 +1609,15 @@ There are too many webs nearby.
TeamOneWon
{
-The TSA Marines have exterminated the alien infestation
+The marines have won the game!
}
+// The TSA Marines have exterminated the alien infestation!
TeamTwoWon
{
-The alien Kharaa have eradicated the human presence
+The aliens have won the game!
}
+// The alien Kharaa have eradicated the human presence!
GameDraw
{
@@ -1707,7 +1742,7 @@ Drop your current weapon, to get more speed, or to give to someone else to use.
TechNodeHelp_5
{
-Leave game and go back to the ready room. This will let you switch teams, observe the game, or take a break. Note that excessive Ready Room idling is often frowned upon.
+Leave the game and go back to the ready room. This will let you switch teams, observe the game, or take a break. Note that excessive Ready Room idling is often frowned upon.
}
TechNodeHelp_6
@@ -1961,7 +1996,7 @@ Grenades
TechNodeHelp_37
{
-Issues one grenade to all soldiers on spawn
+Issues grenades to all soldiers on spawn
}
TechNodeLabel_38
@@ -2124,7 +2159,7 @@ Siege turret
TechNodeHelp_57
{
-High-powered turret, fires sonic blast through walls. Only harms structures
+High-powered turret, fires a sonic blast through walls. Only harms structures
}
TechNodeLabel_58
@@ -2251,7 +2286,7 @@ Remove this structure in exchange for some resources.
TechNodeHelp_80
{
-Ask your commander for orders. The commander will be notified that you are looking for something to do, and will give likely you an order
+Ask your commander for orders. The commander will be notified that you are looking for something to do, and will likely give you an order
}
TechNodeHelp_81
@@ -2344,7 +2379,7 @@ Carapace
TechNodeHelp_101
{
-Increases amount of armor. Each level of carapace absorbs roughly 16% more damage
+Increases amount of armor. Each level of carapace increases damage absorption
}
TechNodeLabel_102
@@ -2354,7 +2389,7 @@ Regeneration
TechNodeHelp_102
{
-You automatically heal all damage over time. Higher levels will heal you faster. Does not stack with your innate regenartion
+You automatically heal damage over time. Higher levels will heal you faster. Does not stack with your innate regenartion
}
TechNodeLabel_103
@@ -2364,7 +2399,7 @@ Redemption
TechNodeHelp_103
{
-The hive will automatically try to save you when you're near death, pulling you back to the hive to heal
+The hive will automatically try to save you when you're near death, pulling you back close to it to heal your wounds
}
TechNodeHelp_104
@@ -2411,7 +2446,6 @@ TechNodeHelp_109
{
Quietens your every action
}
-// "quiet, quieter, vewwy vewwy quiet" - An unnamed playtester.
TechNodeLabel_110
{
@@ -2420,7 +2454,7 @@ Cloaking
TechNodeHelp_110
{
-You gain invisibility. Fast movements will increase your opacity. Attacks, observatories and scanner sweeps will uncloak you
+You gain invisibility. Fast movements will increase your opacity. Attacks, proximity to observatories and scanner sweeps will uncloak you. Use your cloaking indicator to see how cloaked you are
}
TechNodeLabel_111
@@ -2450,7 +2484,7 @@ Skulk
TechNodeHelp_113
{
-Gestate to Skulk. This is a fast, small alien that is best suited for one on one combat, harassment and guerilla tactics. Can climb walls (disable with the "duck" key)
+Gestate into a Skulk. This is a fast, small alien that is best suited for one on one combat, harassment and guerilla tactics. Can climb walls (disable with the "duck" key)
}
TechNodeLabel_114
@@ -2460,7 +2494,7 @@ Gorge
TechNodeHelp_114
{
-Gestate to Gorge. Creates and grows resource towers, hives, upgrade chambers and turrets. Weak in combat, but good as support unit since it can heal friends and friendly structures
+Gestate into a Gorge. Creates and grows resource towers, hives, upgrade chambers and turrets. Weak in combat, but good as support unit since it can heal friends and friendly structures
}
TechNodeLabel_115
@@ -2470,7 +2504,7 @@ Lerk
TechNodeHelp_115
{
-Gestate to Lerk. Provides versatile combat support. Has long-range spike shooting, choking area-effect spores and protective "umbra" ability. Fly by tapping the jump key. Glide by holding the jump key while in the air
+Gestate into a Lerk. Provides versatile combat support. Has a bite attack, choking area-effect spores and a protective "umbra" ability. Fly by tapping the jump key. Glide by holding the jump key while in the air
}
TechNodeLabel_116
@@ -2480,7 +2514,7 @@ Fade
TechNodeHelp_116
{
-Gestate to Fade. The Kharaa's main combat unit, with swiping attacks, an acid rocket attack, and teleportation
+Gestate into a Fade. The Kharaa's main combat unit, with swiping attacks, an acid-based rocket, and teleportation
}
TechNodeLabel_117
@@ -2490,7 +2524,7 @@ Onos
TechNodeHelp_117
{
-Gestate to Onos. A behemoth that can stomp to stun his enemies, charge through enemies and devour them. This alien is capable of taking on multiple marines at once
+Gestate into an Onos. A behemoth that can stomp to stun his enemies, charge through enemies and devour them. This alien is capable of taking on multiple marines at once
}
TechNodeLabel_118
@@ -2726,12 +2760,12 @@ Hive
User3Desc_17
{
-Aliens spawn here, grants access to higher alien lifeforms and upgrades
+Aliens spawn here, grants access to higher alien lifeforms and upgrades, allows aliens teleportation between hives
}
User3FriendlyDesc_17
{
-You spawn here. It will heal you when you are close by. Provides "hive sight", which communicates friends, enemies and alerts to your team. Protect your hives at all costs
+You spawn here. It will heal you when you are close by. Provides "hive sight", which communicates friendly and enemy positions as well as alerts to your team. You can 'use' a hive to teleport to another fully built hive or a growing hive which is under attack. Protect your hives at all costs
}
User3Name_22
@@ -2787,17 +2821,17 @@ armory
User3Desc_25
{
-Gives ammo and allows construction of shotguns, mines and welders within range
+Gives ammo, heals friendly soldiers and allows construction of shotguns, mines and welders within range
}
User3CommanderDesc_25
{
-Gives free ammo to friendly soldiers. Allows construction of shotguns, mines and welders within range. Select the armory to see this range
+Gives free ammo and heals friendly soldiers. Allows construction of shotguns, mines and welders within range. Select the armory to see this range
}
User3FriendlyDesc_25
{
-"Use" the armory to get free ammo for your current weapon. Also allows construction of shotguns and mines within range
+"Use" the armory to get free ammo for your current weapon or heal small wounds. Also allows the construction of shotguns and mines within range
}
@@ -2808,19 +2842,18 @@ advanced armory
User3Desc_26
{
-Gives ammo and allows construction of heavy machine guns and grenade launchers within range
+Gives ammo, heals players, and allows the construction of heavy machine guns and grenade launchers within range
}
User3CommanderDesc_26
{
-Gives free ammo to friendly soldiers. Allows construction of heavy machine guns and grenade launchers within range. Select the advanced armory to see this range
+Gives free ammo and heals friendly soldiers. Allows the construction of heavy machine guns and grenade launchers within range. Select the advanced armory to see its range
}
User3FriendlyDesc_26
{
-"Use" the advanced armory to get free ammo for your current weapon. Also allows construction of heavy machine guns and grenade launchers within range
+"Use" the advanced armory to get free ammo for your current weapon and heal minor wounds. Also allows the construction of heavy machine guns and grenade launchers within range
}
-// "O The armory will now randomly kill players as they use it (Bug in which Armory would occasionally Heal players has been fixed)" - An unnamed PT Lead
User3Name_27
{
@@ -3147,7 +3180,7 @@ Swipe - Deadly close-combat attack. Get close to your enemies and attack. Good
Weapon8Help
{
-Webs - Shoot globules near each other and a web will be created between them. Webs slow enemies and prevent them from using their weapons for a time. Webs can be destroyed with the welder or by grenade fire
+Webs - Shoot globules near each other and a web will be created between them. Webs need to "set" before they are effective. Webs slow enemies and prevent them from using their weapons for a time. Webs can be destroyed with the welder or by grenade fire
}
Weapon9Help
@@ -3162,12 +3195,12 @@ Parasite - Infects target with a parasite, making him show up on hive sight at a
Weapon11Help
{
-Blink - Allows near-instant teleportation. Point in the direction to travel, and hold the button
+Blink - Allows near-instant teleportation. Point in the direction to travel, and hold the button. Alternatively use your +movement/reload bind to blink
}
Weapon12Help
{
-Xenocide - Explosive suicide. Shortly after activating, you blow up, doing heavy damage to everything nearby. Damage: %d
+Xenocide - Explosive suicide. Shortly after activating, you blow up, dealing heavy damage to everything nearby. Damage: %d
}
Weapon13Help
@@ -3212,12 +3245,12 @@ Grenade launcher - Grenades detonate after 4 seconds, or on contact, and do spla
Weapon21Help
{
-Leap - Jump forward quickly, slashing at everything in your way. Useful for movement, and also in combat. Damage: %d
+Leap - Jump forward quickly, slashing at everything in your way. Useful for movement, and also in combat. You can use your reload/+movement bind to leap Damage: %d
}
Weapon22Help
{
-Charge - Trample forth in a rage, hurting everything you touch. The charge drains energy and stops when you run out of energy. Damage: Substantional
+Charge - Trample forth in a rage, hurting everything you touch, pushing other players out of your way. The charge drains energy and stops when you release the attack key. Damage: Substantial
}
Weapon23Help
@@ -3227,7 +3260,7 @@ Umbra - Emits a bacterial mist that slows enemy bullets that enter it. Any frie
Weapon24Help
{
-Primal scream - All teammates within range during scream gain energy back faster, move faster and do more damage. Listen for their screams of defiance
+Primal scream - All teammates within range during scream gain energy back faster, move faster and do more damage. Hear their screams of defiance!
}
Weapon25Help
@@ -3257,7 +3290,7 @@ Stomp - Stuns all enemy players it touches for %d seconds.
Weapon30Help
{
-Devour - Eat a nearby enemy. Player is slowly digested, taking %d damage per second. Onos gets this this damage back as health. If Onos is killed before digestion completes, the enemy is freed
+Devour - Eat a nearby enemy whole. Player is slowly digested, taking %d damage per second. The Onos gets this this damage back as health. If the Onos is killed before digestion completes, the enemy is freed
}
@@ -3360,12 +3393,12 @@ There is an enemy hive nearby, go kill it to stop the alien menace!
HelpTextFriendlyMovementChamber
{
-Press your "use" key on this movement chamber to teleport to a hive under attack. It also increases your energy regeneration when nearby
+Press your "use" key near this movement chamber to teleport to a hive under attack. It also increases your energy regeneration when nearby
}
HelpTextAttackMovementChamber
{
-This is an enemy movement chamber, it allows them to teleport to their hive and makes them regain energy faster
+This is an enemy movement chamber, it allows them to teleport to their hives and makes them regain energy faster
}
HelpTextFriendlyOffensiveChamber
@@ -3425,7 +3458,7 @@ Use your "pop-up menu" to access voice commands, ask for orders, leave the team,
HelpTextOrder
{
-You have been given an order by the commander. The blue circle on your screen describes the location and type of your order. Use your pop-up menu to ask for orders or acknowledge them
+You have been given an order by the commander. The blue circle on your screen describes the location and type of your order. Use your pop-up menu to ask for orders or acknowledge them
}
HelpTextCommanderUseable
@@ -3455,7 +3488,7 @@ Press your "pop-up menu" key to change lifeforms and evolve upgrades (default is
HelpTextAttackTower
{
-This resource tower earns resources for the enemy...destroy it!
+This resource tower gathers resources for the enemy...destroy it!
}
HelpTextAlienWeapons
@@ -3490,7 +3523,7 @@ There is an unbuilt alien structure nearby. Alien structures build slowly on th
HelpTextAlienHiveSight
{
-The animated icons on your screen indicate your team's "hive sight". Green icons are your team's gorges, yellow-reddish icons show hive locations and red icons show structures or friends under attack
+The animated icons on your screen indicate your team's "hive sight". Green icons are your team's gorges, yellow-greenish icons show hive locations and red icons show structures or friends under attack
}
HelpTextAlienVisionMode
@@ -3510,17 +3543,17 @@ One of your teammates or structures is under attack. Spin your view around and
HelpTextBuilder
{
-You are now a Gorge. Stay out of combat and use your pop-up menu to build different structures
+You are now a Gorge. Stay out of combat and use your pop-up menu to build different structures
}
HelpTextWeb
{
-Fire web strands at walls and floors to create webs between them. Enemies that touch webs are slowed and can't use their weapons temporarily
+Fire web strands at walls and floors to create webs between them. Strands take 3 seconds to harden and become active. Enemies that touch webs are slowed and can't use their weapons temporarily
}
HelpTextWallwalking
{
-You can hold your duck key to walk up walls and ceilings
+You can walk up walls and ceilings. Press your 'walk' key to navigate tricky bits. Hold your 'duck' key to detach yourself, or 'jump' to vault off the wall
}
HelpTextBite
@@ -3550,12 +3583,12 @@ Hold your right mouse button (secondary attack) to show the pop-up menu
HelpTextBuyUpgrade
{
-Aliens can evolve new traits with the pop-up menu. Try it: hold your pop-up menu button (right mouse button by default), and move the mouse right
+Aliens can evolve new traits with the pop-up menu. Try it: hold your pop-up menu button (right mouse button by default), and move the mouse right
}
HelpTextBuyLifeform
{
-Aliens can morph into new lifeforms. Try it: hold your pop-up menu button (right mouse button by default), move your mouse down, then right, then release
+Aliens can morph into new lifeforms. Try it: hold your pop-up menu button (right mouse button by default), move your mouse down, then right, then release
}
HelpTextCommanderGiveOrders
@@ -3591,7 +3624,7 @@ This target can be attacked! Right-click to give an attack order
HelpTextCommanderWeld
{
-This target can be welded. Buy a welder for a teammate, then right-click here to give a welding order
+This target can be welded. Buy a welder for a player, then right-click here to give a welding order
}
HelpTextCommanderGet
diff --git a/main/updatesettings.cfg b/main/updatesettings.cfg
new file mode 100644
index 00000000..c2d19ac8
--- /dev/null
+++ b/main/updatesettings.cfg
@@ -0,0 +1,10 @@
+writecfg "backupb4update"
+m_rawinput "1"
+fps_max "250"
+fps_override "1"
+gl_vsync "0"
+developer "0"
+rate "30000"
+cl_updaterate "100"
+cl_cmdrate "100"
+ex_interp "0.05"
\ No newline at end of file
diff --git a/main/user.scr b/main/user.scr
index 39909725..4c2587eb 100644
--- a/main/user.scr
+++ b/main/user.scr
@@ -32,7 +32,7 @@
// Half-Life User Info Configuration Layout Script (stores last settings chosen, too)
-// File generated: Wed Jun 22 14:28:14 AM
+// File generated: Sun Aug 12 07:21:40 AM
//
//
// Cvar - Setting
@@ -45,34 +45,197 @@ DESCRIPTION INFO_OPTIONS
{
"Show hints"
{ BOOL }
- { "1" }
- SetInfo
+ { "0" }
+ }
+
+ "hud_style"
+ {
+ "HUD style (requires map reload)"
+ {
+ LIST
+ "Original" "0"
+ "Minimal" "1"
+ "Competitive - Nine Legends" "2"
+ }
+ { "1.000000" }
+ }
+
+ "hud_mapstyle"
+ {
+ "Map style"
+ {
+ LIST
+ "Opaque Unlabeled" "0"
+ "Opaque Labeled" "1"
+ "Semi-transparent Unlabeled" "2"
+ "Semi-transparent Labeled" "3"
+ "Transparent Unlabeled" "4"
+ "Transparent Labeled" "5"
+ }
+ { "3.000000" }
+ }
+
+ "cl_hudmapzoom"
+ {
+ "Marine minimap zoom level"
+ {
+ LIST
+ "No map" "0"
+ "No Zoom (X1)" "1"
+ "Medium Zoom (2X)" "2"
+ "Full Zoom (3X) " "3"
+ }
+ { "3.000000" }
}
- "cl_labelmaps"
+ "cl_cross"
{
- "Draw location names"
+ "New crosshair system"
{ BOOL }
{ "1" }
}
- "cl_centerentityid"
+ "cl_cross_color"
{
- "Center player names"
+ "Crosshair color (R G B)"
+ { STRING }
+ { "255 255 255" }
+ }
+
+ "cl_cross_alpha"
+ {
+ "Crosshair transparency (0-255)"
+ { NUMBER 0.000000 255.000000 }
+ { "255.000000" }
+ }
+
+ "cl_cross_size"
+ {
+ "Crosshair length"
+ { NUMBER -1.000000 -1.000000 }
+ { "6.000000" }
+ }
+
+ "cl_cross_gap"
+ {
+ "Crosshair gap"
+ { NUMBER -1.000000 -1.000000 }
+ { "3.000000" }
+ }
+
+ "cl_cross_thickness"
+ {
+ "Crosshair thickness"
+ { NUMBER -1.000000 -1.000000 }
+ { "2.000000" }
+ }
+
+ "cl_cross_outline"
+ {
+ "Crosshair outline thickness"
+ { NUMBER -1.000000 -1.000000 }
+ { "2.000000" }
+ }
+
+ "cl_cross_outline_alpha"
+ {
+ "Crosshair outline transparency (0-255)"
+ { NUMBER 0.000000 255.000000 }
+ { "255.000000" }
+ }
+
+ "cl_cross_outline_inner"
+ {
+ "Outline inside of cross"
{ BOOL }
{ "0" }
}
- "cl_highdetail"
+ "cl_cross_dot_size"
{
- "High detail particle systems"
+ "Crosshair dot size"
+ { NUMBER -1.000000 -1.000000 }
+ { "0.000000" }
+ }
+
+ "cl_cross_dot_outline"
+ {
+ "Crosshair dot outline thickness"
+ { NUMBER -1.000000 -1.000000 }
+ { "0.000000" }
+ }
+
+ "cl_cross_circle_radius"
+ {
+ "Crosshair circle size"
+ { NUMBER 0.000000 255.000000 }
+ { "0.000000" }
+ }
+
+ "crosshair"
+ {
+ "Legacy crosshair system"
{ BOOL }
- { "1" }
+ { "0" }
+ }
+
+ "cl_customcrosshair"
+ {
+ "Legacy crosshair selection"
+ {
+ LIST
+ "Classic Crosshairs" "0"
+ "Custom 1" "1"
+ "Custom 2" "2"
+ "Custom 3" "3"
+ "Custom 4" "4"
+ }
+ { "0.000000" }
+ }
+
+ "cl_ambientsound"
+ {
+ "Ambient sound (requies map reload)"
+ {
+ LIST
+ "None" "0"
+ "All - Original" "1"
+ "Selective" "2"
+ }
+ { "2.000000" }
+ }
+
+ "senslock"
+ {
+ "Don't scale sensitivity with FOV (Skulk/Gorge)"
+ { BOOL }
+ { "0" }
+ }
+
+ "zoom_sensitivity_ratio"
+ {
+ "Zoom sensitivity ratio (skulk/gorge)"
+ { NUMBER 0.000000 5.000000 }
+ { "1.000000" }
+ }
+
+ "cl_cmhotkeys"
+ {
+ "Commander hotkeys"
+ { STRING }
+ { "qwerasdfzxcv" }
}
- "cl_forcedefaultfov"
+ "cl_centerentityid"
+ {
+ "Center player names"
+ { BOOL }
+ { "0" }
+ }
+
+ "cl_highdetail"
{
- "Force 90 degree FOV"
+ "High detail particle systems"
{ BOOL }
{ "0" }
}
@@ -84,25 +247,25 @@ DESCRIPTION INFO_OPTIONS
{ "1" }
}
- "cl_dynamiclights"
+ "cl_labelhivesight"
{
- "Dynamic lights"
+ "Show alien hivesight text"
{ BOOL }
{ "1" }
}
- "cl_gammaramp"
+ "cl_dynamiclights"
{
- "Enable gamma ramp"
+ "Dynamic lights"
{ BOOL }
- { "1" }
+ { "0" }
}
"hud_fastswitch"
{
"Weapon fast-switch"
{ BOOL }
- { "0" }
+ { "1" }
}
"cl_musicenabled"
@@ -116,7 +279,7 @@ DESCRIPTION INFO_OPTIONS
{
"Music volume (0-255)"
{ NUMBER 0.000000 255.000000 }
- { "155.000000" }
+ { "100.000000" }
}
"cl_musicdirectory"
@@ -133,13 +296,6 @@ DESCRIPTION INFO_OPTIONS
{ "90.000000" }
}
- "cl_cmhotkeys"
- {
- "Commander hotkeys"
- { STRING }
- { "qwerasdfzxcv" }
- }
-
"r_decals"
{
"Decal limit"
diff --git a/main/userconfig.cfg b/main/userconfig.cfg
index 1c7ee3aa..e500df81 100644
--- a/main/userconfig.cfg
+++ b/main/userconfig.cfg
@@ -1,2 +1,35 @@
// Add your own configuration options in this file
// This file will not be rewritten as config.cfg will
+
+//Some commands placed here as default via NS Launcher installation because they are deleted/overwritten in config.cfg otherwise
+
+//Brighter lighting
+lightgamma "2"
+//brightness "5" //part of new default config
+//gamma "3" //part of new default config
+
+//Allow FPS above 100
+fps_override "1"
+gl_vsync "0"
+
+//View and weapon bob off
+cl_bob "0"
+
+//Execute marine and alien cfgs on F1/F2 press
+alias marinecfg "exec marineofficial.cfg;echo marine config loaded"
+alias aliencfg "exec alienofficial.cfg;echo alien config loaded"
+bind "F1" "jointeamone;marinecfg"
+bind "F2" "jointeamtwo;aliencfg"
+
+//Network rates for the 21st century
+rate "30000"
+cl_updaterate "100"
+cl_cmdrate "100"
+ex_interp "0.05"
+
+//Pistol script - toggled with P key
+alias "+pscript" "+attack"
+alias "-pscript" "-attack;wait;+attack;wait;wait;-attack"
+alias pson "bind mouse1 +pscript;bind p psoff"
+alias psoff "bind mouse1 +attack;bind p pson"
+bind p "pson"
\ No newline at end of file