diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7904fd4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +user.config +engine +bin +obj +mods/*/*.dll +mods/*/*.mdb +mods/*/*.pdb +/*.dll +/*.dll.config +/*.so +/*.dylib +/*.pdb +/*.mdb +/*.exe +DOCUMENTATION.md +Lua-API.md +StyleCopViolations.xml +.DS_Store \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e69de29 diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..1b9efa0 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,35 @@ +# Travis-CI Build for OpenRAModSDK +# see travis-ci.org for details + +language: csharp +mono: 4.6.1 +sudo: false + +addons: + apt: + packages: + - liblua5.1-0 + - nsis + - nsis-common + +script: + - make + - . mod.config; + if [ "${TRAVIS_TEST_MOD}" == "True" ]; then make test || travis_terminate 1; fi; + if [ "${TRAVIS_TEST_PACKAGING}" == "True" ]; then ./packaging/package-all.sh test-0 || travis_terminate 1; fi + +before_deploy: + - mkdir build + - cd build && ../packaging/package-all.sh ${TRAVIS_TAG} ${PWD} && cd .. + - . mod.config + +deploy: + provider: releases + api_key: ${GH_DEPLOY_API_KEY} + file: + - build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}.exe + - build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}-macOS.zip + - build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}-winportable.zip + skip_cleanup: true + on: + tags: true diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..18c4b5e --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by private-messaging a project team member (users with a + in front +of their name) via our IRC channel (#openra on freenode – +[webchat](http://webchat.freenode.net/?channels=openra)). All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..14ee84e --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,15 @@ +# OpenRA Mod SDK Contributing Guidelines + +Thank you for your interest in OpenRA, OpenRA modding, and the OpenRA Mod SDK. OpenRA is an open source project, and our community members – you – are the driving force behind it. There are many ways to contribute, from writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests or writing code which can be incorporated into OpenRA, the Mod SDK, or our other sub-projects. + +Please note that this repository is specifically for the scripts and infrastructure used to develop and build mods; bugs and feature requests against OpenRA itself should be directed to [the main OpenRA/OpenRA repository](https://github.com/OpenRA/OpenRA). If you do come across a bug with the Mod SDK, or would like to request a new feature, then please take a look at the issue tracker first to see if it has already been reported. + +When developing new features, it is important to make sure that they work on all our supported platforms. Right now, this means Windows >= 7 (with PowerShell >= 3), macOS >= 10.7, and Linux. We would like to also support *BSD, but do not currently have a means to test this. + +Some issues to be aware of include: +* Use http://www.shellcheck.net/ to confirm POSIX compatibility of *.sh scripts. +* Avoid non-standard gnu extensions to common Unix tools (e.g. the `-f` flag from GNU `readlink`) + +While your pull-request is in review it will be helpful if you join IRC to discuss the changes. + +See also the in-depth guide on [contributing](https://github.com/OpenRA/OpenRA/wiki/Contributing) on the main OpenRA project wiki. Most of the content on this page also applies to the Mod SDK. \ No newline at end of file diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/COPYING @@ -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/Makefile b/Makefile new file mode 100644 index 0000000..e637d82 --- /dev/null +++ b/Makefile @@ -0,0 +1,94 @@ +############################# INSTRUCTIONS ############################# +# +# to compile, run: +# make +# +# to remove the files created by compiling, run: +# make clean +# +# to set the mods version, run: +# make version [VERSION="custom-version"] +# +# to check lua scripts for syntax errors, run: +# make check-scripts +# +# to check the official mods for erroneous yaml files, run: +# make test +# +# to check the official mod dlls for StyleCop violations, run: +# make check +# + +.PHONY: utility stylecheck build clean engine version check-scripts check test +.DEFAULT_GOAL := build + +VERSION = $(shell git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || echo git-`git rev-parse --short HEAD`) +MOD_ID = $(shell cat user.config mod.config 2> /dev/null | awk -F= '/MOD_ID/ { print $$2; exit }') +ENGINE_DIRECTORY = $(shell cat user.config mod.config 2> /dev/null | awk -F= '/ENGINE_DIRECTORY/ { print $$2; exit }') +INCLUDE_DEFAULT_MODS = $(shell cat user.config mod.config 2> /dev/null | awk -F= '/INCLUDE_DEFAULT_MODS/ { print $$2; exit }') + +MOD_SEARCH_PATHS = "$(shell python -c "import os; print(os.path.realpath('.'))")/mods" +ifeq ($(INCLUDE_DEFAULT_MODS),"True") + MOD_SEARCH_PATHS := "$(MOD_SEARCH_PATHS),./mods" +endif + +MANIFEST_PATH = "mods/$(MOD_ID)/mod.yaml" + +HAS_MSBUILD = $(shell command -v msbuild 2> /dev/null) +HAS_LUAC = $(shell command -v luac 2> /dev/null) +LUA_FILES = $(shell find mods/*/maps/* -iname '*.lua') +PROJECT_DIRS = $(shell dirname $$(find . -iname "*.csproj" -not -path "$(ENGINE_DIRECTORY)/*")) + +engine: + @./fetch-engine.sh || (printf "Unable to continue without engine files\n"; exit 1) + @cd $(ENGINE_DIRECTORY) && make core + +utility: engine + @test -f "$(ENGINE_DIRECTORY)/OpenRA.Utility.exe" || (printf "OpenRA.Utility.exe not found!\n"; exit 1) + +stylecheck: engine + @test -f "$(ENGINE_DIRECTORY)/OpenRA.StyleCheck.exe" || (cd $(ENGINE_DIRECTORY) && make stylecheck) + +build: engine +ifeq ("$(HAS_MSBUILD)","") + @find . -maxdepth 1 -name '*.sln' -exec xbuild /nologo /verbosity:quiet /p:TreatWarningsAsErrors=true \; +else + @find . -maxdepth 1 -name '*.sln' -exec msbuild /t:Rebuild /nr:false \; +endif + +clean: engine +ifeq ("$(HAS_MSBUILD)","") + @find . -maxdepth 1 -name '*.sln' -exec xbuild /nologo /verbosity:quiet /p:TreatWarningsAsErrors=true /t:Clean \; +else + @find . -maxdepth 1 -name '*.sln' -exec msbuild /t:Clean /nr:false \; +endif + @cd $(ENGINE_DIRECTORY) && make clean + @printf "The engine has been cleaned.\n" + +version: + @awk '{sub("Version:.*$$","Version: $(VERSION)"); print $0}' $(MANIFEST_PATH) > $(MANIFEST_PATH).tmp && \ + awk '{sub("/[^/]*: User$$", "/$(VERSION): User"); print $0}' $(MANIFEST_PATH).tmp > $(MANIFEST_PATH) && \ + rm $(MANIFEST_PATH).tmp + @printf "Version changed to $(VERSION).\n" + +check-scripts: +ifeq ("$(HAS_LUAC)","") + @printf "'luac' not found.\n" && exit 1 +endif + @echo + @echo "Checking for Lua syntax errors..." +ifneq ("$(LUA_FILES)","") + @luac -p $(LUA_FILES) +endif + +check: utility stylecheck + @echo "Checking for explicit interface violations..." + @MOD_SEARCH_PATHS="$(MOD_SEARCH_PATHS)" mono --debug "$(ENGINE_DIRECTORY)/OpenRA.Utility.exe" $(MOD_ID) --check-explicit-interfaces + @for i in $(PROJECT_DIRS) ; do \ + echo "Checking for code style violations in $${i}...";\ + mono --debug "$(ENGINE_DIRECTORY)/OpenRA.StyleCheck.exe" $${i};\ + done + +test: utility + @echo "Testing $(MOD_ID) mod MiniYAML..." + @MOD_SEARCH_PATHS="$(MOD_SEARCH_PATHS)" mono --debug "$(ENGINE_DIRECTORY)/OpenRA.Utility.exe" $(MOD_ID) --check-yaml \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0e9a510 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +This repository contains a bare development environment for creating a new mod/game on the [OpenRA](https://github.com/OpenRA/OpenRA) engine. + +These scripts and support files wrap and automatically manage a copy of the OpenRA game engine and common files, and provide entrypoints to run development versions of your project and to generate platform-specific installers for your players. + +The key scripts in this SDK are: + +| Windows | Linux / macOS | Purpose +| --------------------- | ------------------------ | ------------- | +| make.cmd | Makefile | Compiles your project and fetches dependencies (including the OpenRA engine). +| launch-game.cmd | launch-game.sh | Launches your project from the SDK directory. +| launch-server.cmd | launch-server.sh | Launches a dedicated server for your project from the SDK directory. +| utility.cmd | utility.sh | Launches the OpenRA Utility for your project. +| <not available> | packaging/package-all.sh | Generates release installers for your project. + +To launch your project from the development environment you must first compile the project by running `make.cmd` (Windows), or opening a terminal in the SDK directory and running `make` (Linux / macOS). You can then run `launch-game.cmd` (Windows) or `launch-game.sh` (Linux / macOS) to run your game. + +The `example` mod included in this repository provides the bare minimum structure to launch to the in-game main menu for the sole purpose of demonstrating the SDK. See [Getting Started](https://github.com/OpenRA/OpenRAModTemplate/wiki/Getting-Started) on the Wiki for instructions on how to adapt this template for your own projects. For common questions, please see the [FAQ](https://github.com/OpenRA/OpenRAModSDK/wiki/FAQ). diff --git a/fetch-engine.sh b/fetch-engine.sh new file mode 100644 index 0000000..0e53acd --- /dev/null +++ b/fetch-engine.sh @@ -0,0 +1,61 @@ +#!/bin/sh +# Helper script used to check and update engine dependencies +# This should not be called manually + +command -v curl >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires curl."; exit 1; } +command -v python >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires python."; exit 1; } + +TEMPLATE_LAUNCHER=$(python -c "import os; print(os.path.realpath('$0'))") +TEMPLATE_ROOT=$(dirname "${TEMPLATE_LAUNCHER}") + +# shellcheck source=mod.config +. "${TEMPLATE_ROOT}/mod.config" + +if [ -f "${TEMPLATE_ROOT}/user.config" ]; then + # shellcheck source=user.config + . "${TEMPLATE_ROOT}/user.config" +fi + +CURRENT_ENGINE_VERSION=$(cat "${ENGINE_DIRECTORY}/VERSION" 2> /dev/null) + +if [ -f "${ENGINE_DIRECTORY}/VERSION" ] && [ "${CURRENT_ENGINE_VERSION}" = "${ENGINE_VERSION}" ]; then + exit 0 +fi + +if [ "${AUTOMATIC_ENGINE_MANAGEMENT}" = "True" ]; then + echo "OpenRA engine version ${ENGINE_VERSION} is required." + + if [ -d "${ENGINE_DIRECTORY}" ]; then + if [ "${CURRENT_ENGINE_VERSION}" != "" ]; then + echo "Deleting engine version ${CURRENT_ENGINE_VERSION}." + else + echo "Deleting existing engine (unknown version)." + fi + + rm -rf "${ENGINE_DIRECTORY}" + fi + + echo "Downloading engine..." + curl -s -L -o "${AUTOMATIC_ENGINE_TEMP_ARCHIVE_NAME}" -O "${AUTOMATIC_ENGINE_SOURCE}" || exit 3 + + # Github zipballs package code with a top level directory named based on the refspec + # Extract to a temporary directory and then move the subdir to our target location + REFNAME=$(unzip -qql "${AUTOMATIC_ENGINE_TEMP_ARCHIVE_NAME}" | head -n1 | tr -s ' ' | cut -d' ' -f5-) + + rm -rf "${AUTOMATIC_ENGINE_EXTRACT_DIRECTORY}" + mkdir "${AUTOMATIC_ENGINE_EXTRACT_DIRECTORY}" + unzip -qq -d "${AUTOMATIC_ENGINE_EXTRACT_DIRECTORY}" "${AUTOMATIC_ENGINE_TEMP_ARCHIVE_NAME}" + mv "${AUTOMATIC_ENGINE_EXTRACT_DIRECTORY}/${REFNAME}" "${ENGINE_DIRECTORY}" + rmdir "${AUTOMATIC_ENGINE_EXTRACT_DIRECTORY}" + rm "${AUTOMATIC_ENGINE_TEMP_ARCHIVE_NAME}" + + echo "Compiling engine..." + cd "${ENGINE_DIRECTORY}" || exit 1 + make version VERSION="${ENGINE_VERSION}" + exit 0 +fi + +echo "Automatic engine management is disabled." +echo "Please manually update the engine to version ${ENGINE_VERSION}." +exit 1 + diff --git a/launch-dedicated.cmd b/launch-dedicated.cmd new file mode 100644 index 0000000..f5f07cc --- /dev/null +++ b/launch-dedicated.cmd @@ -0,0 +1,34 @@ +:: example launch script, see https://github.com/OpenRA/OpenRA/wiki/Dedicated for details + +@echo on + +set Name="Dedicated Server" +set ListenPort=1234 +set ExternalPort=1234 +set AdvertiseOnline=True +set EnableSingleplayer=False +set Password="" + +@echo off + +title %Name% +FOR /F "tokens=1,2 delims==" %%A IN (mod.config) DO (set %%A=%%B) +if exist user.config (FOR /F "tokens=1,2 delims==" %%A IN (user.config) DO (set %%A=%%B)) + +set MOD_SEARCH_PATHS=%~dp0mods +if %INCLUDE_DEFAULT_MODS% neq "True" goto start +set MOD_SEARCH_PATHS=%MOD_SEARCH_PATHS%,./mods + +:start +if not exist %ENGINE_DIRECTORY%\OpenRA.Game.exe goto noengine +cd %ENGINE_DIRECTORY% + +:loop +OpenRA.Server.exe Game.Mod=%MOD_ID% Server.Name=%Name% Server.ListenPort=%ListenPort% Server.ExternalPort=%ExternalPort% Server.AdvertiseOnline=%AdvertiseOnline% Server.EnableSingleplayer=%EnableSingleplayer% Server.Password=%Password% +goto loop + +:noengine +echo Required engine files not found. +echo Run `make all` in the mod directory to fetch and build the required files, then try again. +pause +exit /b \ No newline at end of file diff --git a/launch-dedicated.sh b/launch-dedicated.sh new file mode 100644 index 0000000..407befc --- /dev/null +++ b/launch-dedicated.sh @@ -0,0 +1,49 @@ +#!/bin/sh +# Usage: +# $ ./launch-dedicated.sh # Launch a dedicated server with default settings +# $ Mod="" ./launch-dedicated.sh # Launch a dedicated server with default settings but override the Mod +# Read the file to see which settings you can override + +set -e +command -v python >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires python."; exit 1; } +command -v mono >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires mono."; exit 1; } + +TEMPLATE_LAUNCHER=$(python -c "import os; print(os.path.realpath('$0'))") +TEMPLATE_ROOT=$(dirname "${TEMPLATE_LAUNCHER}") + +# shellcheck source=mod.config +. "${TEMPLATE_ROOT}/mod.config" + +if [ -f "${TEMPLATE_ROOT}/user.config" ]; then + # shellcheck source=user.config + . "${TEMPLATE_ROOT}/user.config" +fi + +MOD_SEARCH_PATHS="${TEMPLATE_ROOT}/mods" +if [ "${INCLUDE_DEFAULT_MODS}" = "True" ]; then + MOD_SEARCH_PATHS="${MOD_SEARCH_PATHS},./mods" +fi + +NAME="${Name:-"Dedicated Server"}" +LAUNCH_MOD="${Mod:-"${MOD_ID}"}" +LISTEN_PORT="${ListenPort:-"1234"}" +EXTERNAL_PORT="${ExternalPort:-"1234"}" +ADVERTISE_ONLINE="${AdvertiseOnline:-"True"}" +ENABLE_SINGLE_PLAYER="${EnableSingleplayer:-"False"}" +PASSWORD="${Password:-""}" + +cd "${TEMPLATE_ROOT}" +if [ ! -f "${ENGINE_DIRECTORY}/OpenRA.Game.exe" ]; then + echo "Required engine files not found." + echo "Run \`make\` in the mod directory to fetch and build the required files, then try again."; + exit 1 +fi + +cd "${ENGINE_DIRECTORY}" + +while true; do + MOD_SEARCH_PATHS="${MOD_SEARCH_PATHS}" mono --debug OpenRA.Server.exe Game.Mod="${LAUNCH_MOD}" \ + Server.Name="${NAME}" Server.ListenPort="${LISTEN_PORT}" Server.ExternalPort="${EXTERNAL_PORT}" \ + Server.AdvertiseOnline="${ADVERTISE_ONLINE}" \ + Server.EnableSingleplayer="${ENABLE_SINGLE_PLAYER}" Server.Password="${PASSWORD}" +done diff --git a/launch-game.cmd b/launch-game.cmd new file mode 100644 index 0000000..56a982a --- /dev/null +++ b/launch-game.cmd @@ -0,0 +1,35 @@ +@echo off +title OpenRA +FOR /F "tokens=1,2 delims==" %%A IN (mod.config) DO (set %%A=%%B) +if exist user.config (FOR /F "tokens=1,2 delims==" %%A IN (user.config) DO (set %%A=%%B)) + +set TEMPLATE_LAUNCHER=%0 +set MOD_SEARCH_PATHS=%~dp0mods +if %INCLUDE_DEFAULT_MODS% neq "True" goto launch +set MOD_SEARCH_PATHS=%MOD_SEARCH_PATHS%,./mods + +:launch +set TEMPLATE_DIR=%CD% +if not exist %ENGINE_DIRECTORY%\OpenRA.Game.exe goto noengine + +cd %ENGINE_DIRECTORY% +OpenRA.Game.exe Game.Mod=%MOD_ID% Engine.LaunchPath="%TEMPLATE_LAUNCHER%" "Engine.ModSearchPaths=%MOD_SEARCH_PATHS%" "%*" +set ERROR=%errorlevel% +cd %TEMPLATE_DIR% + +if %ERROR% neq 0 goto crashdialog +exit /b + +:noengine +echo Required engine files not found. +echo Run `make all` in the mod directory to fetch and build the required files, then try again. +pause +exit /b + +:crashdialog +echo ---------------------------------------- +echo OpenRA has encountered a fatal error. +echo * Log Files are available in Documents\OpenRA\Logs +echo * FAQ is available at https://github.com/OpenRA/OpenRA/wiki/FAQ +echo ---------------------------------------- +pause diff --git a/launch-game.sh b/launch-game.sh new file mode 100644 index 0000000..3094b39 --- /dev/null +++ b/launch-game.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +set -e +command -v python >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires python."; exit 1; } +command -v mono >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires mono."; exit 1; } + +TEMPLATE_LAUNCHER=$(python -c "import os; print(os.path.realpath('$0'))") +TEMPLATE_ROOT=$(dirname "${TEMPLATE_LAUNCHER}") + +# shellcheck source=mod.config +. "${TEMPLATE_ROOT}/mod.config" + +if [ -f "${TEMPLATE_ROOT}/user.config" ]; then + # shellcheck source=user.config + . "${TEMPLATE_ROOT}/user.config" +fi + +MOD_SEARCH_PATHS="${TEMPLATE_ROOT}/mods" +if [ "${INCLUDE_DEFAULT_MODS}" = "True" ]; then + MOD_SEARCH_PATHS="${MOD_SEARCH_PATHS},./mods" +fi + +cd "${TEMPLATE_ROOT}" +if [ ! -f "${ENGINE_DIRECTORY}/OpenRA.Game.exe" ]; then + echo "Required engine files not found." + echo "Run \`make\` in the mod directory to fetch and build the required files, then try again."; + exit 1 +fi + +cd "${ENGINE_DIRECTORY}" +mono OpenRA.Game.exe Engine.LaunchPath="${TEMPLATE_LAUNCHER}" "Engine.ModSearchPaths=${MOD_SEARCH_PATHS}" Game.Mod="${MOD_ID}" "$@" diff --git a/make.cmd b/make.cmd new file mode 100644 index 0000000..92b05b7 --- /dev/null +++ b/make.cmd @@ -0,0 +1 @@ +@powershell -NoProfile -ExecutionPolicy Bypass -File make.ps1 %* diff --git a/make.ps1 b/make.ps1 new file mode 100644 index 0000000..58ed470 --- /dev/null +++ b/make.ps1 @@ -0,0 +1,378 @@ +####### The starting point for the script is the bottom ####### + +############################################################### +########################## FUNCTIONS ########################## +############################################################### +function All-Command +{ + If (!(Test-Path "*.sln")) + { + return + } + + $msBuild = FindMSBuild + $msBuildArguments = "/t:Rebuild /nr:false" + if ($msBuild -eq $null) + { + echo "Unable to locate an appropriate version of MSBuild." + } + else + { + $proc = Start-Process $msBuild $msBuildArguments -NoNewWindow -PassThru -Wait + if ($proc.ExitCode -ne 0) + { + echo "Build failed. If just the development tools failed to build, try installing Visual Studio. You may also still be able to run the game." + } + else + { + echo "Build succeeded." + } + } +} + +function Clean-Command +{ + If (!(Test-Path "*.sln")) + { + return + } + + $msBuild = FindMSBuild + $msBuildArguments = "/t:Clean /nr:false" + if ($msBuild -eq $null) + { + echo "Unable to locate an appropriate version of MSBuild." + } + else + { + $proc = Start-Process $msBuild $msBuildArguments -NoNewWindow -PassThru -Wait + rm *.dll + rm *.dll.config + rm mods/*/*.dll + rm *.pdb + rm mods/*/*.pdb + rm *.exe + rm ./*/bin -r + rm ./*/obj -r + echo "Clean complete." + } +} + +function Version-Command +{ + if ($command.Length -gt 1) + { + $version = $command[1] + } + elseif (Get-Command 'git' -ErrorAction SilentlyContinue) + { + $gitRepo = git rev-parse --is-inside-work-tree + if ($gitRepo) + { + $version = git name-rev --name-only --tags --no-undefined HEAD 2>$null + if ($version -eq $null) + { + $version = "git-" + (git rev-parse --short HEAD) + } + } + else + { + echo "Not a git repository. The version will remain unchanged." + } + } + else + { + echo "Unable to locate Git. The version will remain unchanged." + } + + if ($version -ne $null) + { + $mod = "mods/" + $modID + "/mod.yaml" + $replacement = (gc $mod) -Replace "Version:.*", ("Version: {0}" -f $version) + sc $mod $replacement + + $prefix = $(gc $mod) | Where { $_.ToString().EndsWith(": User") } + if ($prefix -and $prefix.LastIndexOf("/") -ne -1) + { + $prefix = $prefix.Substring(0, $prefix.LastIndexOf("/")) + } + $replacement = (gc $mod) -Replace ".*: User", ("{0}/{1}: User" -f $prefix, $version) + sc $mod $replacement + + echo ("Version strings set to '{0}'." -f $version) + } +} + +function Test-Command +{ + if (Test-Path $utilityPath) + { + echo "Testing $modID mod MiniYAML" + Invoke-Expression "$utilityPath $modID --check-yaml" + } + else + { + UtilityNotFound + } +} + +function Check-Command +{ + if (Test-Path $utilityPath) + { + echo "Checking for explicit interface violations..." + Invoke-Expression "$utilityPath $modID --check-explicit-interfaces" + } + else + { + UtilityNotFound + } + + if (Test-Path $styleCheckPath) + { + echo "Checking for code style violations in OpenRA.Mods.$modID..." + Invoke-Expression "$styleCheckPath OpenRA.Mods.$modID" + } + else + { + echo "$styleCheckPath could not be found. Build the project first using the `"all`" command." + } +} + +function Check-Scripts-Command +{ + if ((Get-Command "luac.exe" -ErrorAction SilentlyContinue) -ne $null) + { + echo "Testing Lua scripts..." + foreach ($script in ls "mods/*/maps/*/*.lua") + { + luac -p $script + } + echo "Check completed!" + } + else + { + echo "luac.exe could not be found. Please install Lua." + } +} + +function Docs-Command +{ + if (Test-Path $utilityPath) + { + Invoke-Expression "$utilityPath $modID --docs | Out-File -Encoding 'UTF8' DOCUMENTATION.md" + Invoke-Expression "$utilityPath $modID --lua-docs | Out-File -Encoding 'UTF8' Lua-API.md" + echo "Docs generated." + } + else + { + UtilityNotFound + } +} + +function FindMSBuild +{ + $key = "HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" + $property = Get-ItemProperty $key -ErrorAction SilentlyContinue + if ($property -eq $null -or $property.MSBuildToolsPath -eq $null) + { + return $null + } + + $path = Join-Path $property.MSBuildToolsPath -ChildPath "MSBuild.exe" + if (Test-Path $path) + { + return $path + } + + return $null +} + +function UtilityNotFound +{ + echo "$utilityPath could not be found. Build the project first using the `"all`" command." +} + +function WaitForInput +{ + echo "Press enter to continue." + while ($true) + { + if ([System.Console]::KeyAvailable) + { + exit + } + Start-Sleep -Milliseconds 50 + } +} + +function ReadConfigLine($line, $name) +{ + $prefix = $name + '=' + if ($line.StartsWith($prefix)) + { + [Environment]::SetEnvironmentVariable($name, $line.Replace($prefix, '').Replace('"', '')) + } +} + +function ParseConfigFile($fileName) +{ + $names = @("MOD_ID", "INCLUDE_DEFAULT_MODS", "ENGINE_VERSION", "AUTOMATIC_ENGINE_MANAGEMENT", "AUTOMATIC_ENGINE_SOURCE", + "AUTOMATIC_ENGINE_EXTRACT_DIRECTORY", "AUTOMATIC_ENGINE_TEMP_ARCHIVE_NAME", "ENGINE_DIRECTORY") + + $reader = [System.IO.File]::OpenText($fileName) + while($null -ne ($line = $reader.ReadLine())) + { + foreach ($name in $names) + { + ReadConfigLine $line $name + } + } +} + +############################################################### +############################ Main ############################# +############################################################### +if ($PSVersionTable.PSVersion.Major -clt 3) +{ + echo "The makefile requires PowerShell version 3 or higher." + echo "Please download and install the latest Windows Management Framework version from Microsoft." + WaitForInput +} + +if ($args.Length -eq 0) +{ + echo "Command list:" + echo "" + echo " all Builds the game, its development tools and the mod dlls." + echo " version Sets the version strings for all mods to the latest" + echo " version for the current Git branch." + echo " clean Removes all built and copied files." + echo " from the mods and the engine directories." + echo " test Tests the mod's MiniYAML for errors." + echo " check Checks .cs files for StyleCop violations." + echo " check-scripts Checks .lua files for syntax errors." + echo " docs Generates the trait and Lua API documentation." + echo "" + $command = (Read-Host "Enter command").Split(' ', 2) +} +else +{ + $command = $args +} + +# Load the environment variables from the config file +# and get the mod ID from the local environment variable +ParseConfigFile "mod.config" + +if (Test-Path "user.config") +{ + ParseConfigFile "user.config" +} + +$modID = $env:MOD_ID + +$env:MOD_SEARCH_PATHS = (Get-Item -Path ".\" -Verbose).FullName + "\mods" +if ($env:INCLUDE_DEFAULT_MODS -eq "True") +{ + $env:MOD_SEARCH_PATHS = $env:MOD_SEARCH_PATHS + ",./mods" +} + +# Run the same command on the engine's make file +if ($command -eq "all" -or $command -eq "clean") +{ + $templateDir = $pwd.Path + $versionFile = $env:ENGINE_DIRECTORY + "/VERSION" + if ((Test-Path $versionFile) -and [System.IO.File]::OpenText($versionFile).ReadLine() -eq $env:ENGINE_VERSION) + { + cd $env:ENGINE_DIRECTORY + Invoke-Expression ".\make.cmd $command" + echo "" + cd $templateDir + } + elseif ($env:AUTOMATIC_ENGINE_MANAGEMENT -ne "True") + { + echo "Automatic engine management is disabled." + echo "Please manually update the engine to version $env:ENGINE_VERSION." + WaitForInput + } + else + { + echo "OpenRA engine version $env:ENGINE_VERSION is required." + + if (Test-Path $env:ENGINE_DIRECTORY) + { + if ((Test-Path $versionFile) -and [System.IO.File]::OpenText($versionFile).ReadLine() -ne "") + { + echo "Deleting engine version $currentEngine." + } + else + { + echo "Deleting existing engine (unknown version)." + } + + rm $env:ENGINE_DIRECTORY -r + } + + echo "Downloading engine..." + + if (Test-Path $env:AUTOMATIC_ENGINE_EXTRACT_DIRECTORY) + { + rm $env:AUTOMATIC_ENGINE_EXTRACT_DIRECTORY -r + } + + $url = $env:AUTOMATIC_ENGINE_SOURCE + $url = $url.Replace("$", "").Replace("{ENGINE_VERSION}", $env:ENGINE_VERSION) + + mkdir $env:AUTOMATIC_ENGINE_EXTRACT_DIRECTORY > $null + $dlPath = Join-Path $pwd (Split-Path -leaf $env:AUTOMATIC_ENGINE_EXTRACT_DIRECTORY) + $dlPath = Join-Path $dlPath (Split-Path -leaf $env:AUTOMATIC_ENGINE_TEMP_ARCHIVE_NAME) + + $client = new-object System.Net.WebClient + [Net.ServicePointManager]::SecurityProtocol = 'Tls12' + $client.DownloadFile($url, $dlPath) + + Add-Type -assembly "system.io.compression.filesystem" + [io.compression.zipfile]::ExtractToDirectory($dlPath, $env:AUTOMATIC_ENGINE_EXTRACT_DIRECTORY) + rm $dlPath + + $extractedDir = Get-ChildItem $env:AUTOMATIC_ENGINE_EXTRACT_DIRECTORY -Recurse | ?{ $_.PSIsContainer } | Select-Object -First 1 + Move-Item $extractedDir.FullName -Destination $templateDir + Rename-Item $extractedDir.Name (Split-Path -leaf $env:ENGINE_DIRECTORY) + + rm $env:AUTOMATIC_ENGINE_EXTRACT_DIRECTORY -r + + cd $env:ENGINE_DIRECTORY + Invoke-Expression ".\make.cmd version $env:ENGINE_VERSION" + Invoke-Expression ".\make.cmd $command" + echo "" + cd $templateDir + } +} + +$utilityPath = $env:ENGINE_DIRECTORY + "/OpenRA.Utility.exe" +$styleCheckPath = $env:ENGINE_DIRECTORY + "/OpenRA.StyleCheck.exe" + +$execute = $command +if ($command.Length -gt 1) +{ + $execute = $command[0] +} + +switch ($execute) +{ + "all" { All-Command } + "version" { Version-Command } + "clean" { Clean-Command } + "test" { Test-Command } + "check" { Check-Command } + "check-scripts" { Check-Scripts-Command } + "docs" { Docs-Command } + Default { echo ("Invalid command '{0}'" -f $command) } +} + +# In case the script was called without any parameters we keep the window open +if ($args.Length -eq 0) +{ + WaitForInput +} diff --git a/mod.config b/mod.config new file mode 100644 index 0000000..a986aa7 --- /dev/null +++ b/mod.config @@ -0,0 +1,107 @@ +############################################################################## +# Core Configuration +# +# Basic settings that should be changed by all projects. +############################################################################## + +# The id of the mod packaged by this project. +# This must exist as a directory in the mods directory and should not contain spaces. +MOD_ID="ura" + +# The OpenRA engine version to use for this project. +ENGINE_VERSION="release-20180307" + +# Enable this to make the default OpenRA mods available for use in your mod.yaml +# Packages list (via $mod references). Accepts values "True" or "False". +# WARNING: This setting is provided to simplify early project development, +# and must be disabled before you can package installers for your project! +INCLUDE_DEFAULT_MODS="False" + +############################################################################## +# Continuous Integration +# +# Settings controlling the behaviour of Travis CI +# (if it has been enabled on your GitHub repository) +############################################################################## + +# Enable tests for common errors when a new commit is pushed to the GitHub repository +# Accepts values "True" or "False". +TRAVIS_TEST_MOD="True" + +# Perform a dry run of the installer generation when a new commit is pushed to the GitHub repository +# Accepts values "True" or "False". +TRAVIS_TEST_PACKAGING="False" + +############################################################################## +# Packaging +# +# Settings controlling the creation of installers. +############################################################################## + +# The prefix used for the installer filenames. +# - Windows installers will be named as {PACKAGING_INSTALLER_NAME}-{TAG}.exe +# - macOS installers will be named as {PACKAGING_INSTALLER_NAME}-{TAG}.zip +PACKAGING_INSTALLER_NAME="ExampleMod" + +# The human-readable name for this project. +# This is used in: +# - Crash dialogs (all platforms) +# - macOS .app bundle name +# - macOS menu bar +# - macOS "About" window +# - Windows installer +# - Windows start menu +# - Windows desktop shortcut +# - Windows "Programs and Features" list +PACKAGING_DISPLAY_NAME="Example Mod" + +# The URL for the project homepage. +# This is used in: +# - Windows "Add/Remove Programs" list +PACKAGING_WEBSITE_URL="http://openra.net" + +# The URL that is opened when a player presses the "FAQ" button in the crash dialog. +PACKAGING_FAQ_URL="http://wiki.openra.net/FAQ" + +# The human-readable project authors. +# This is used in: +# - Windows "Add/Remove Programs" list +PACKAGING_AUTHORS="Example Mod authors" + +# The git tag to use for the macOS Launcher files. +PACKAGING_OSX_LAUNCHER_TAG="osx-launcher-20171118" + +# Filename to use for the launcher executable on Windows. +PACKAGING_WINDOWS_LAUNCHER_NAME="ExampleMod" + +# The name of the Windows Program Files directory to install the project files to. +PACKAGING_WINDOWS_INSTALL_DIR_NAME="OpenRA Example Mod" + +# The key prefix used for Windows registry metadata. +# This should not contain spaces or special characters. +PACKAGING_WINDOWS_REGISTRY_KEY="OpenRAExampleMod" + +############################################################################## +# Advanced Configuration +# +# Most projects will not need to modify these +############################################################################## + +# Automatic engine managment will treat the OpenRA engine files like a read-only dependency. +# Disable this if you would like to modify or manager your own engine files. +AUTOMATIC_ENGINE_MANAGEMENT="True" + +# The URL to download the engine files from when AUTOMATIC_ENGINE_MANAGEMENT is enabled. +AUTOMATIC_ENGINE_SOURCE="https://github.com/OpenRA/OpenRA/archive/${ENGINE_VERSION}.zip" + +# Temporary file/directory names used by automatic engine management. +# Paths outside the SDK directory are not officially supported. +AUTOMATIC_ENGINE_EXTRACT_DIRECTORY="./engine_temp" +AUTOMATIC_ENGINE_TEMP_ARCHIVE_NAME="engine.zip" +ENGINE_DIRECTORY="./engine" + +# The url to download the OpenRA macOS launcher files. +PACKAGING_OSX_LAUNCHER_SOURCE="https://github.com/OpenRA/OpenRALauncherOSX/releases/download/${PACKAGING_OSX_LAUNCHER_TAG}/launcher.zip" + +# Temporary file name used when downloading the OpenRA macOS launcher files. +PACKAGING_OSX_LAUNCHER_TEMP_ARCHIVE_NAME="launcher.zip" diff --git a/mods/ura/ZoodRangmah.ttf b/mods/ura/ZoodRangmah.ttf new file mode 100644 index 0000000..8b28063 Binary files /dev/null and b/mods/ura/ZoodRangmah.ttf differ diff --git a/mods/ura/audio/music.yaml b/mods/ura/audio/music.yaml new file mode 100644 index 0000000..81f0dc7 --- /dev/null +++ b/mods/ura/audio/music.yaml @@ -0,0 +1,47 @@ +await_r: Afterlife (Await) +bigf226m: Bigfoot +crus226m: Crush +dense_r: Dense +fac1226m: Face to the Enemy 1 +fac2226m: Face to the Enemy 2 +fogger1a: Fogger +hell226m: Hell March +intro: Intro + Hidden: true +map: Map + Hidden: true +mud1a: Mud +radio2: Radio 2 +credits: Reload Fire (Credits) +rollout: Roll Out +run1226m: Run (For Your Life) +score: Militant Force (Scores) + Hidden: true +smsh226m: Smash +snake: Snake +terminat: Terminate +tren226m: Trenches +twin: Twin Cannon +vector1a: Vector +work226m: Workmen + +# Counterstrike tracks +araziod: Arazoid +backstab: Backstab +chaos2: Chaos +shut_it: Shut It +2nd_hand: The Second Hand +twinmix1: Twin Cannon (Remix) +under3: Underlying Thoughts +vr2: Voice Rhythm 2 + +# Aftermath tracks +await: Afterlife (Await) +bog: Bog +float_v2: Floating +gloom: Gloom +grndwire: Groundwire +rpt: Running Through Pipes +search: The Search +traction: Traction +wastelnd: Wasteland diff --git a/mods/ura/audio/notifications.yaml b/mods/ura/audio/notifications.yaml new file mode 100644 index 0000000..8fb769f --- /dev/null +++ b/mods/ura/audio/notifications.yaml @@ -0,0 +1,132 @@ +Speech: + Notifications: + AbombAvailable: aavail1 + AbombLaunchDetected: alaunch1 + AbombPrepping: aprep1 + AbombReady: aready1 + AirUnitLost: aunitl1 + AlliedForcesApproaching: aappro1 + AlliedForcesFallen: afallen1 + AlliedForcesSelected: aselect1 + AlliedReinforcementsArrived: aarrive1 + AlliedReinforcementsEast: aarive1 + AlliedReinforcementsNorth: aarrivn1 + AlliedReinforcementsSouth: aarrivs1 + AlliedReinforcementsWest: aarrivw1 + AtomBombLaunchDetected: atlnch1 + AtomBombPrepping: atprep1 + BaseAttack: baseatk1 + Building: abldgin1 + BuildingCannotPlaceAudio: nodeply1 + BuildingCaptured: strucap1 + BuildingInfiltrated: bldginf1 + BuildingInProgress: progres1 + BuildingProgress: bldgprg1 + Cancelled: cancld1 + ChronosphereCharging: chrochr1 + ChronosphereReady: chrordy1 + ChronosphereTestSuccessful: chroyes1 + CommandCenterAttack: cmdcntr1 + CommandoFreed: comndof1 + CommandoRescued: comndor1 + ConstructionComplete: conscmp1 + ControlCenterDeactivated: cntlded1 + ConvoyApproaching: convyap1 + ConvoyUnitLost: convlst1 + CreditsStolen: credit1 + EnemyUnitsApproaching: enmyapp1 + EnemyDetected: enmydet + ExplosiveChargePlaced: xploplc1 + FirstObjectiveMet: 1objmet1 + FourtyMinutesRemaining: 40minr + HarvesterAttack: + InsufficientFunds: nofunds1 + InsufficientPower: nopowr1 + IronCurtainCharging: ironchg1 + IronCurtainReady: ironrdy1 + KosyginFreed: kosyfre1 + KosyginRescued: kosyres1 + Leave: bct1 + Lose: misnlst1 + LowPower: lopower1 + MercenaryFreed: mercf1 + MercenaryRescued: mercr1 + MissionAccomplished: misnwon1 + MissionFailed: misnlst1 + MissionLoaded: load1 + MissionSaved: save1 + MissionTimerInitialised: mtimein1 + NavalUnitLost: navylst1 + NewOptions: newopt1 + NoBuild: nobuild1 + ObjectiveMet: objmet1 + ObjectiveNotMet: objnmet1 + ObjectiveNotReached: objnrch1 + ObjectiveReached: objrch1 + OnHold: onhold1 + OperationControlTerminated: opterm1 + PrimaryBuildingSelected: pribldg1 + ReinforcementsArrived: reinfor1 + Repairing: repair1 + SatelliteLaunched: satlnch1 + SecondObjectiveMet: 2objmet1 + SelectTarget: slcttgt1 + SignalFlare: flare1 + SignalFlareEast: flaree1 + SignalFlareNorth: flaren1 + SignalFlareSouth: flares1 + SignalFlareWest: flarew1 + SilosNeeded: silond1 + SonarPulseReady: pulse1 + SovietEmpireFallen: sovefal1 + SovietEmpireSelected: sovemp1 + SovietForcesApproaching: sovfapp1 + SovietForcesFallen: sovforc1 + SovietReinforcementsArrived: sovrein1 + SpyPlaneReady: spypln1 + StartGame: bctrinit + StructureDestroyed: strckil1 + StructureSold: strusld1 + TanyaFreed: tanyaf1 + TanyaRescued: tanyar1 + TargetFreed: targfre1 + TargetRescued: targres1 + TenMinutesRemaining: 10minr + ThirdObjectiveMet: 3objmet1 + ThirtyMinutesRemaining: 30minr + TimerStarted: timergo1 + TimerStopped: timerno1 + Training: train1 + TwentyMinutesRemaining: 20minr + UnitArmorUpgraded: armorup1 + UnitFirepowerUpgraded: firepo1 + UnitFull: unitful1 + UnitLost: unitlst1 + UnitReady: unitrdy1 + UnitRepaired: unitrep1 + UnitSold: unitsld1 + UnitSpeedUpgraded: unitspd1 + UnitStolen: unitsto + WarningOneMinuteRemaining: 1minr + WarningTwoMinutesRemaining: 2minr + WarningThreeMinutesRemaining: 3minr + WarningFourMinutesRemaining: 4minr + WarningFiveMinutesRemaining: 5minr + Win: misnwon1 + +Sounds: + Notifications: + RadarUp: radaron2 + RadarDown: radardn1 + CashTickUp: cashup1 + CashTickDown:cashdn1 + LevelUp: hydrod1 + DisablePower: bleep11 + EnablePower: bleep12 + ChatLine: rabeep1 + ClickSound: ramenu1 + ClickDisabledSound: + Beacon: beepslct + AlertBuzzer: buzzy1 + AlertBleep: bleep6 + BaseSetup: bleep9 diff --git a/mods/ura/audio/voices.yaml b/mods/ura/audio/voices.yaml new file mode 100644 index 0000000..e57e3c2 --- /dev/null +++ b/mods/ura/audio/voices.yaml @@ -0,0 +1,142 @@ +GenericVoice: + Variants: + allies: .v01,.v03 + england: .v01,.v03 + france: .v01,.v03 + germany: .v01,.v03 + soviet: .r01,.r03 + russia: .r01,.r03 + ukraine: .r01,.r03 + Voices: + Select: await1,ready,report1,yessir1 + Action: ackno,affirm1,noprob,overout,ritaway,roger,ugotit + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 + DisableVariants: Die, Burned, Zapped + +VehicleVoice: + Variants: + allies: .v00,.v02 + england: .v00,.v02 + france: .v00,.v02 + germany: .v00,.v02 + soviet: .r00,.r02 + russia: .r00,.r02 + ukraine: .r00,.r02 + Voices: + Select: vehic1,yessir1,report1,await1 + Action: ackno,affirm1 + +EngineerVoice: + Voices: + Select: eengin1,eyessir1 + Action: eaffirm1,emovout1 + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 + +MedicVoice: + Voices: + Select: mrespon1,myessir1 + Action: maffirm1,mmovout1 + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 + +MechanicVoice: + Voices: + Select: mhuh1,mhowdy1,myes1,mrise1 + Move: mboss1,mhear1 + Action: mhotdig1,mwrench1 + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 + +TanyaVoice: + Voices: + Select: yo1,yes1,yeah1 + Move: onit1,cmon1,rokroll1 + Action: tuffguy1,bombit1 + Die: tandeth1 + Burned: tandeth1 + Zapped: tandeth1 + Build: laugh1 + Kill: gotit1,lefty1 + Demolish: keepem1,tuffguy1 + +DogVoice: + Voices: + Select: dogw3px + Move: dogy1 + Attack: dogg5p + Die: dogw5,dogw7 + Burned: dogw6 + Zapped: dogw6 + +SpyVoice: + Voices: + Select: syessir1,scomnd1 + Move: sonway1,sindeed1 + Action: sking1 + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 + +ThiefVoice: + Voices: + Select: swhat1,syeah1 + Action: saffirm1,smout1,sokay1 + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 + +CivilianMaleVoice: + Voices: + Select: guyyeah1 + Action: guyokay1 + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 + +CivilianFemaleVoice: + Voices: + Select: girlyeah + Action: girlokay + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 + +EinsteinVoice: + Voices: + Select: einah1 + Action: einok1,einyes1 + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 + +ShokVoice: + Voices: + Select: jchrge1,jjuice1,jjump1,jpower1 + Move: jdance1,jyes1 + Attack: jburn1,jcrisp1,jshock1,jlight1 + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 + +AntVoice: + Voices: + Select: antbite + Action: antbite + Die: antdie + Burned: antdie + Zapped: antdie + +StavrosVoice: + Voices: + Select: stavcmdr + Move: stavcrse, stavyes, stavmov + Attack: stavcrse, stavyes + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 diff --git a/mods/ura/bits/2tnkger.shp b/mods/ura/bits/2tnkger.shp new file mode 100644 index 0000000..81e32da Binary files /dev/null and b/mods/ura/bits/2tnkger.shp differ diff --git a/mods/ura/bits/2tnkgericon.shp b/mods/ura/bits/2tnkgericon.shp new file mode 100644 index 0000000..b6907d6 Binary files /dev/null and b/mods/ura/bits/2tnkgericon.shp differ diff --git a/mods/ura/bits/4tnk.kv-8.shp b/mods/ura/bits/4tnk.kv-8.shp new file mode 100644 index 0000000..cba9fa4 Binary files /dev/null and b/mods/ura/bits/4tnk.kv-8.shp differ diff --git a/mods/ura/bits/4tnk.kv-8icon.shp b/mods/ura/bits/4tnk.kv-8icon.shp new file mode 100644 index 0000000..34478e8 Binary files /dev/null and b/mods/ura/bits/4tnk.kv-8icon.shp differ diff --git a/mods/ura/bits/afldidle.shp b/mods/ura/bits/afldidle.shp new file mode 100644 index 0000000..5c338d4 Binary files /dev/null and b/mods/ura/bits/afldidle.shp differ diff --git a/mods/ura/bits/agate.shp b/mods/ura/bits/agate.shp new file mode 100644 index 0000000..853b11c Binary files /dev/null and b/mods/ura/bits/agate.shp differ diff --git a/mods/ura/bits/allyrepair.shp b/mods/ura/bits/allyrepair.shp new file mode 100644 index 0000000..1bcec19 Binary files /dev/null and b/mods/ura/bits/allyrepair.shp differ diff --git a/mods/ura/bits/ammobox1.shp b/mods/ura/bits/ammobox1.shp new file mode 100644 index 0000000..58b4ecb Binary files /dev/null and b/mods/ura/bits/ammobox1.shp differ diff --git a/mods/ura/bits/ammobox2.shp b/mods/ura/bits/ammobox2.shp new file mode 100644 index 0000000..9e3d4ae Binary files /dev/null and b/mods/ura/bits/ammobox2.shp differ diff --git a/mods/ura/bits/ammobox3.shp b/mods/ura/bits/ammobox3.shp new file mode 100644 index 0000000..6a4daf3 Binary files /dev/null and b/mods/ura/bits/ammobox3.shp differ diff --git a/mods/ura/bits/anticon.shp b/mods/ura/bits/anticon.shp new file mode 100644 index 0000000..6e64e1f Binary files /dev/null and b/mods/ura/bits/anticon.shp differ diff --git a/mods/ura/bits/apwrdead.shp b/mods/ura/bits/apwrdead.shp new file mode 100644 index 0000000..71bff5e Binary files /dev/null and b/mods/ura/bits/apwrdead.shp differ diff --git a/mods/ura/bits/asianhut.shp b/mods/ura/bits/asianhut.shp new file mode 100644 index 0000000..11e5656 Binary files /dev/null and b/mods/ura/bits/asianhut.shp differ diff --git a/mods/ura/bits/ateficon.shp b/mods/ura/bits/ateficon.shp new file mode 100644 index 0000000..00eab65 Binary files /dev/null and b/mods/ura/bits/ateficon.shp differ diff --git a/mods/ura/bits/attackmove.shp b/mods/ura/bits/attackmove.shp new file mode 100644 index 0000000..9c47a75 Binary files /dev/null and b/mods/ura/bits/attackmove.shp differ diff --git a/mods/ura/bits/bctrinit.aud b/mods/ura/bits/bctrinit.aud new file mode 100644 index 0000000..bdc233b Binary files /dev/null and b/mods/ura/bits/bctrinit.aud differ diff --git a/mods/ura/bits/beaconclock.shp b/mods/ura/bits/beaconclock.shp new file mode 100644 index 0000000..c18bc3e Binary files /dev/null and b/mods/ura/bits/beaconclock.shp differ diff --git a/mods/ura/bits/bikinitany.shp b/mods/ura/bits/bikinitany.shp new file mode 100644 index 0000000..f0055a6 Binary files /dev/null and b/mods/ura/bits/bikinitany.shp differ diff --git a/mods/ura/bits/bubbles.shp b/mods/ura/bits/bubbles.shp new file mode 100644 index 0000000..e59f7a8 Binary files /dev/null and b/mods/ura/bits/bubbles.shp differ diff --git a/mods/ura/bits/c3.shp b/mods/ura/bits/c3.shp new file mode 100644 index 0000000..1aa5516 Binary files /dev/null and b/mods/ura/bits/c3.shp differ diff --git a/mods/ura/bits/camera.shp b/mods/ura/bits/camera.shp new file mode 100644 index 0000000..f08a4c3 Binary files /dev/null and b/mods/ura/bits/camera.shp differ diff --git a/mods/ura/bits/chan.shp b/mods/ura/bits/chan.shp new file mode 100644 index 0000000..d1f7202 Binary files /dev/null and b/mods/ura/bits/chan.shp differ diff --git a/mods/ura/bits/cliffsl1.sno b/mods/ura/bits/cliffsl1.sno new file mode 100644 index 0000000..0227714 Binary files /dev/null and b/mods/ura/bits/cliffsl1.sno differ diff --git a/mods/ura/bits/cliffsl1.tem b/mods/ura/bits/cliffsl1.tem new file mode 100644 index 0000000..5a825fa Binary files /dev/null and b/mods/ura/bits/cliffsl1.tem differ diff --git a/mods/ura/bits/cliffsl2.sno b/mods/ura/bits/cliffsl2.sno new file mode 100644 index 0000000..203b709 Binary files /dev/null and b/mods/ura/bits/cliffsl2.sno differ diff --git a/mods/ura/bits/cliffsl2.tem b/mods/ura/bits/cliffsl2.tem new file mode 100644 index 0000000..581f5b5 Binary files /dev/null and b/mods/ura/bits/cliffsl2.tem differ diff --git a/mods/ura/bits/cliffsl3.sno b/mods/ura/bits/cliffsl3.sno new file mode 100644 index 0000000..323f447 Binary files /dev/null and b/mods/ura/bits/cliffsl3.sno differ diff --git a/mods/ura/bits/cliffsl3.tem b/mods/ura/bits/cliffsl3.tem new file mode 100644 index 0000000..2289806 Binary files /dev/null and b/mods/ura/bits/cliffsl3.tem differ diff --git a/mods/ura/bits/cliffsl4.sno b/mods/ura/bits/cliffsl4.sno new file mode 100644 index 0000000..e4c2c3f Binary files /dev/null and b/mods/ura/bits/cliffsl4.sno differ diff --git a/mods/ura/bits/cliffsl4.tem b/mods/ura/bits/cliffsl4.tem new file mode 100644 index 0000000..b68cb9a Binary files /dev/null and b/mods/ura/bits/cliffsl4.tem differ diff --git a/mods/ura/bits/cliffsw1.sno b/mods/ura/bits/cliffsw1.sno new file mode 100644 index 0000000..f75d9f4 Binary files /dev/null and b/mods/ura/bits/cliffsw1.sno differ diff --git a/mods/ura/bits/cliffsw1.tem b/mods/ura/bits/cliffsw1.tem new file mode 100644 index 0000000..2f13147 Binary files /dev/null and b/mods/ura/bits/cliffsw1.tem differ diff --git a/mods/ura/bits/cliffsw2.sno b/mods/ura/bits/cliffsw2.sno new file mode 100644 index 0000000..65039f5 Binary files /dev/null and b/mods/ura/bits/cliffsw2.sno differ diff --git a/mods/ura/bits/cliffsw2.tem b/mods/ura/bits/cliffsw2.tem new file mode 100644 index 0000000..046076f Binary files /dev/null and b/mods/ura/bits/cliffsw2.tem differ diff --git a/mods/ura/bits/cliffsw3.sno b/mods/ura/bits/cliffsw3.sno new file mode 100644 index 0000000..98f84d8 Binary files /dev/null and b/mods/ura/bits/cliffsw3.sno differ diff --git a/mods/ura/bits/cliffsw3.tem b/mods/ura/bits/cliffsw3.tem new file mode 100644 index 0000000..b205d01 Binary files /dev/null and b/mods/ura/bits/cliffsw3.tem differ diff --git a/mods/ura/bits/cliffsw4.sno b/mods/ura/bits/cliffsw4.sno new file mode 100644 index 0000000..61fd5f9 Binary files /dev/null and b/mods/ura/bits/cliffsw4.sno differ diff --git a/mods/ura/bits/cliffsw4.tem b/mods/ura/bits/cliffsw4.tem new file mode 100644 index 0000000..ff516d1 Binary files /dev/null and b/mods/ura/bits/cliffsw4.tem differ diff --git a/mods/ura/bits/cr4.sno b/mods/ura/bits/cr4.sno new file mode 100644 index 0000000..4f23207 Binary files /dev/null and b/mods/ura/bits/cr4.sno differ diff --git a/mods/ura/bits/cr5.sno b/mods/ura/bits/cr5.sno new file mode 100644 index 0000000..7ca4946 Binary files /dev/null and b/mods/ura/bits/cr5.sno differ diff --git a/mods/ura/bits/ctflag.shp b/mods/ura/bits/ctflag.shp new file mode 100644 index 0000000..625a2b8 Binary files /dev/null and b/mods/ura/bits/ctflag.shp differ diff --git a/mods/ura/bits/deca.tem b/mods/ura/bits/deca.tem new file mode 100644 index 0000000..5301abb Binary files /dev/null and b/mods/ura/bits/deca.tem differ diff --git a/mods/ura/bits/decb.tem b/mods/ura/bits/decb.tem new file mode 100644 index 0000000..a687d97 Binary files /dev/null and b/mods/ura/bits/decb.tem differ diff --git a/mods/ura/bits/decc.tem b/mods/ura/bits/decc.tem new file mode 100644 index 0000000..0ac2a0c Binary files /dev/null and b/mods/ura/bits/decc.tem differ diff --git a/mods/ura/bits/decd.tem b/mods/ura/bits/decd.tem new file mode 100644 index 0000000..3ba691c Binary files /dev/null and b/mods/ura/bits/decd.tem differ diff --git a/mods/ura/bits/dece.tem b/mods/ura/bits/dece.tem new file mode 100644 index 0000000..cbae5ef Binary files /dev/null and b/mods/ura/bits/dece.tem differ diff --git a/mods/ura/bits/decf.tem b/mods/ura/bits/decf.tem new file mode 100644 index 0000000..79e34f8 Binary files /dev/null and b/mods/ura/bits/decf.tem differ diff --git a/mods/ura/bits/decg.tem b/mods/ura/bits/decg.tem new file mode 100644 index 0000000..8ed1ec3 Binary files /dev/null and b/mods/ura/bits/decg.tem differ diff --git a/mods/ura/bits/dech.tem b/mods/ura/bits/dech.tem new file mode 100644 index 0000000..082ab2d Binary files /dev/null and b/mods/ura/bits/dech.tem differ diff --git a/mods/ura/bits/desert/b01.des b/mods/ura/bits/desert/b01.des new file mode 100644 index 0000000..a6b8aee Binary files /dev/null and b/mods/ura/bits/desert/b01.des differ diff --git a/mods/ura/bits/desert/b02.des b/mods/ura/bits/desert/b02.des new file mode 100644 index 0000000..621c5a2 Binary files /dev/null and b/mods/ura/bits/desert/b02.des differ diff --git a/mods/ura/bits/desert/b03.des b/mods/ura/bits/desert/b03.des new file mode 100644 index 0000000..c96236b Binary files /dev/null and b/mods/ura/bits/desert/b03.des differ diff --git a/mods/ura/bits/desert/b04.des b/mods/ura/bits/desert/b04.des new file mode 100644 index 0000000..504ec97 Binary files /dev/null and b/mods/ura/bits/desert/b04.des differ diff --git a/mods/ura/bits/desert/b05.des b/mods/ura/bits/desert/b05.des new file mode 100644 index 0000000..23832b2 Binary files /dev/null and b/mods/ura/bits/desert/b05.des differ diff --git a/mods/ura/bits/desert/b06.des b/mods/ura/bits/desert/b06.des new file mode 100644 index 0000000..d923da1 Binary files /dev/null and b/mods/ura/bits/desert/b06.des differ diff --git a/mods/ura/bits/desert/br01.des b/mods/ura/bits/desert/br01.des new file mode 100644 index 0000000..45bc9ab Binary files /dev/null and b/mods/ura/bits/desert/br01.des differ diff --git a/mods/ura/bits/desert/br02.des b/mods/ura/bits/desert/br02.des new file mode 100644 index 0000000..bf0d60f Binary files /dev/null and b/mods/ura/bits/desert/br02.des differ diff --git a/mods/ura/bits/desert/br03.des b/mods/ura/bits/desert/br03.des new file mode 100644 index 0000000..26a2ca1 Binary files /dev/null and b/mods/ura/bits/desert/br03.des differ diff --git a/mods/ura/bits/desert/br04.des b/mods/ura/bits/desert/br04.des new file mode 100644 index 0000000..bf09e56 Binary files /dev/null and b/mods/ura/bits/desert/br04.des differ diff --git a/mods/ura/bits/desert/br05.des b/mods/ura/bits/desert/br05.des new file mode 100644 index 0000000..e27edc8 Binary files /dev/null and b/mods/ura/bits/desert/br05.des differ diff --git a/mods/ura/bits/desert/br06.des b/mods/ura/bits/desert/br06.des new file mode 100644 index 0000000..26783b1 Binary files /dev/null and b/mods/ura/bits/desert/br06.des differ diff --git a/mods/ura/bits/desert/br07.des b/mods/ura/bits/desert/br07.des new file mode 100644 index 0000000..3c73158 Binary files /dev/null and b/mods/ura/bits/desert/br07.des differ diff --git a/mods/ura/bits/desert/br08.des b/mods/ura/bits/desert/br08.des new file mode 100644 index 0000000..3414e40 Binary files /dev/null and b/mods/ura/bits/desert/br08.des differ diff --git a/mods/ura/bits/desert/br09.des b/mods/ura/bits/desert/br09.des new file mode 100644 index 0000000..6cf65af Binary files /dev/null and b/mods/ura/bits/desert/br09.des differ diff --git a/mods/ura/bits/desert/br10.des b/mods/ura/bits/desert/br10.des new file mode 100644 index 0000000..021cf3b Binary files /dev/null and b/mods/ura/bits/desert/br10.des differ diff --git a/mods/ura/bits/desert/br1a.des b/mods/ura/bits/desert/br1a.des new file mode 100644 index 0000000..cecb13e Binary files /dev/null and b/mods/ura/bits/desert/br1a.des differ diff --git a/mods/ura/bits/desert/br1b.des b/mods/ura/bits/desert/br1b.des new file mode 100644 index 0000000..ea77231 Binary files /dev/null and b/mods/ura/bits/desert/br1b.des differ diff --git a/mods/ura/bits/desert/br1c.des b/mods/ura/bits/desert/br1c.des new file mode 100644 index 0000000..328ee46 Binary files /dev/null and b/mods/ura/bits/desert/br1c.des differ diff --git a/mods/ura/bits/desert/br1x.des b/mods/ura/bits/desert/br1x.des new file mode 100644 index 0000000..8306a0f Binary files /dev/null and b/mods/ura/bits/desert/br1x.des differ diff --git a/mods/ura/bits/desert/br2a.des b/mods/ura/bits/desert/br2a.des new file mode 100644 index 0000000..59b2bc4 Binary files /dev/null and b/mods/ura/bits/desert/br2a.des differ diff --git a/mods/ura/bits/desert/br2b.des b/mods/ura/bits/desert/br2b.des new file mode 100644 index 0000000..9a8e106 Binary files /dev/null and b/mods/ura/bits/desert/br2b.des differ diff --git a/mods/ura/bits/desert/br2c.des b/mods/ura/bits/desert/br2c.des new file mode 100644 index 0000000..077a079 Binary files /dev/null and b/mods/ura/bits/desert/br2c.des differ diff --git a/mods/ura/bits/desert/br2x.des b/mods/ura/bits/desert/br2x.des new file mode 100644 index 0000000..35573ea Binary files /dev/null and b/mods/ura/bits/desert/br2x.des differ diff --git a/mods/ura/bits/desert/br3a.des b/mods/ura/bits/desert/br3a.des new file mode 100644 index 0000000..d21f749 Binary files /dev/null and b/mods/ura/bits/desert/br3a.des differ diff --git a/mods/ura/bits/desert/br3b.des b/mods/ura/bits/desert/br3b.des new file mode 100644 index 0000000..1ba2b57 Binary files /dev/null and b/mods/ura/bits/desert/br3b.des differ diff --git a/mods/ura/bits/desert/br3c.des b/mods/ura/bits/desert/br3c.des new file mode 100644 index 0000000..ed94dd0 Binary files /dev/null and b/mods/ura/bits/desert/br3c.des differ diff --git a/mods/ura/bits/desert/br3d.des b/mods/ura/bits/desert/br3d.des new file mode 100644 index 0000000..46f6904 Binary files /dev/null and b/mods/ura/bits/desert/br3d.des differ diff --git a/mods/ura/bits/desert/br3e.des b/mods/ura/bits/desert/br3e.des new file mode 100644 index 0000000..b67d450 Binary files /dev/null and b/mods/ura/bits/desert/br3e.des differ diff --git a/mods/ura/bits/desert/br3f.des b/mods/ura/bits/desert/br3f.des new file mode 100644 index 0000000..ba11b06 Binary files /dev/null and b/mods/ura/bits/desert/br3f.des differ diff --git a/mods/ura/bits/desert/bridge1.des b/mods/ura/bits/desert/bridge1.des new file mode 100644 index 0000000..c494130 Binary files /dev/null and b/mods/ura/bits/desert/bridge1.des differ diff --git a/mods/ura/bits/desert/bridge1d.des b/mods/ura/bits/desert/bridge1d.des new file mode 100644 index 0000000..5c4702a Binary files /dev/null and b/mods/ura/bits/desert/bridge1d.des differ diff --git a/mods/ura/bits/desert/bridge1h.des b/mods/ura/bits/desert/bridge1h.des new file mode 100644 index 0000000..79f38f8 Binary files /dev/null and b/mods/ura/bits/desert/bridge1h.des differ diff --git a/mods/ura/bits/desert/bridge1x.des b/mods/ura/bits/desert/bridge1x.des new file mode 100644 index 0000000..1bd7729 Binary files /dev/null and b/mods/ura/bits/desert/bridge1x.des differ diff --git a/mods/ura/bits/desert/bridge2.des b/mods/ura/bits/desert/bridge2.des new file mode 100644 index 0000000..e04f389 Binary files /dev/null and b/mods/ura/bits/desert/bridge2.des differ diff --git a/mods/ura/bits/desert/bridge2d.des b/mods/ura/bits/desert/bridge2d.des new file mode 100644 index 0000000..72753e5 Binary files /dev/null and b/mods/ura/bits/desert/bridge2d.des differ diff --git a/mods/ura/bits/desert/bridge2h.des b/mods/ura/bits/desert/bridge2h.des new file mode 100644 index 0000000..e6275b3 Binary files /dev/null and b/mods/ura/bits/desert/bridge2h.des differ diff --git a/mods/ura/bits/desert/bridge2x.des b/mods/ura/bits/desert/bridge2x.des new file mode 100644 index 0000000..6df8f73 Binary files /dev/null and b/mods/ura/bits/desert/bridge2x.des differ diff --git a/mods/ura/bits/desert/clear1a.des b/mods/ura/bits/desert/clear1a.des new file mode 100644 index 0000000..9642058 Binary files /dev/null and b/mods/ura/bits/desert/clear1a.des differ diff --git a/mods/ura/bits/desert/cliffsl1.des b/mods/ura/bits/desert/cliffsl1.des new file mode 100644 index 0000000..e92a632 Binary files /dev/null and b/mods/ura/bits/desert/cliffsl1.des differ diff --git a/mods/ura/bits/desert/cliffsl2.des b/mods/ura/bits/desert/cliffsl2.des new file mode 100644 index 0000000..bcf80aa Binary files /dev/null and b/mods/ura/bits/desert/cliffsl2.des differ diff --git a/mods/ura/bits/desert/cliffsl3.des b/mods/ura/bits/desert/cliffsl3.des new file mode 100644 index 0000000..89156e8 Binary files /dev/null and b/mods/ura/bits/desert/cliffsl3.des differ diff --git a/mods/ura/bits/desert/cliffsl4.des b/mods/ura/bits/desert/cliffsl4.des new file mode 100644 index 0000000..c9f92f7 Binary files /dev/null and b/mods/ura/bits/desert/cliffsl4.des differ diff --git a/mods/ura/bits/desert/cliffsw1.des b/mods/ura/bits/desert/cliffsw1.des new file mode 100644 index 0000000..3c969ed Binary files /dev/null and b/mods/ura/bits/desert/cliffsw1.des differ diff --git a/mods/ura/bits/desert/cliffsw2.des b/mods/ura/bits/desert/cliffsw2.des new file mode 100644 index 0000000..cfdbc07 Binary files /dev/null and b/mods/ura/bits/desert/cliffsw2.des differ diff --git a/mods/ura/bits/desert/cliffsw3.des b/mods/ura/bits/desert/cliffsw3.des new file mode 100644 index 0000000..9bbe77c Binary files /dev/null and b/mods/ura/bits/desert/cliffsw3.des differ diff --git a/mods/ura/bits/desert/cliffsw4.des b/mods/ura/bits/desert/cliffsw4.des new file mode 100644 index 0000000..7c73aec Binary files /dev/null and b/mods/ura/bits/desert/cliffsw4.des differ diff --git a/mods/ura/bits/desert/d44.des b/mods/ura/bits/desert/d44.des new file mode 100644 index 0000000..39aa63d Binary files /dev/null and b/mods/ura/bits/desert/d44.des differ diff --git a/mods/ura/bits/desert/d45.des b/mods/ura/bits/desert/d45.des new file mode 100644 index 0000000..dab2130 Binary files /dev/null and b/mods/ura/bits/desert/d45.des differ diff --git a/mods/ura/bits/desert/dt01.des b/mods/ura/bits/desert/dt01.des new file mode 100644 index 0000000..ce4090b Binary files /dev/null and b/mods/ura/bits/desert/dt01.des differ diff --git a/mods/ura/bits/desert/dt02.des b/mods/ura/bits/desert/dt02.des new file mode 100644 index 0000000..c460d62 Binary files /dev/null and b/mods/ura/bits/desert/dt02.des differ diff --git a/mods/ura/bits/desert/dt03.des b/mods/ura/bits/desert/dt03.des new file mode 100644 index 0000000..9c5a498 Binary files /dev/null and b/mods/ura/bits/desert/dt03.des differ diff --git a/mods/ura/bits/desert/dt04.des b/mods/ura/bits/desert/dt04.des new file mode 100644 index 0000000..c50c0ec Binary files /dev/null and b/mods/ura/bits/desert/dt04.des differ diff --git a/mods/ura/bits/desert/f01.des b/mods/ura/bits/desert/f01.des new file mode 100644 index 0000000..951b6ca Binary files /dev/null and b/mods/ura/bits/desert/f01.des differ diff --git a/mods/ura/bits/desert/f02.des b/mods/ura/bits/desert/f02.des new file mode 100644 index 0000000..9d4f283 Binary files /dev/null and b/mods/ura/bits/desert/f02.des differ diff --git a/mods/ura/bits/desert/f03.des b/mods/ura/bits/desert/f03.des new file mode 100644 index 0000000..7c50e63 Binary files /dev/null and b/mods/ura/bits/desert/f03.des differ diff --git a/mods/ura/bits/desert/f04.des b/mods/ura/bits/desert/f04.des new file mode 100644 index 0000000..bfdd05b Binary files /dev/null and b/mods/ura/bits/desert/f04.des differ diff --git a/mods/ura/bits/desert/f05.des b/mods/ura/bits/desert/f05.des new file mode 100644 index 0000000..c12293f Binary files /dev/null and b/mods/ura/bits/desert/f05.des differ diff --git a/mods/ura/bits/desert/f06.des b/mods/ura/bits/desert/f06.des new file mode 100644 index 0000000..cbac9a5 Binary files /dev/null and b/mods/ura/bits/desert/f06.des differ diff --git a/mods/ura/bits/desert/falls3.des b/mods/ura/bits/desert/falls3.des new file mode 100644 index 0000000..6383c44 Binary files /dev/null and b/mods/ura/bits/desert/falls3.des differ diff --git a/mods/ura/bits/desert/falls4.des b/mods/ura/bits/desert/falls4.des new file mode 100644 index 0000000..14b4ffc Binary files /dev/null and b/mods/ura/bits/desert/falls4.des differ diff --git a/mods/ura/bits/desert/gmine.des b/mods/ura/bits/desert/gmine.des new file mode 100644 index 0000000..549e484 Binary files /dev/null and b/mods/ura/bits/desert/gmine.des differ diff --git a/mods/ura/bits/desert/hbox.des b/mods/ura/bits/desert/hbox.des new file mode 100644 index 0000000..51749f1 Binary files /dev/null and b/mods/ura/bits/desert/hbox.des differ diff --git a/mods/ura/bits/desert/hboxmake.des b/mods/ura/bits/desert/hboxmake.des new file mode 100644 index 0000000..05d4810 Binary files /dev/null and b/mods/ura/bits/desert/hboxmake.des differ diff --git a/mods/ura/bits/desert/mbAGUN.des b/mods/ura/bits/desert/mbAGUN.des new file mode 100644 index 0000000..c60a4d9 Binary files /dev/null and b/mods/ura/bits/desert/mbAGUN.des differ diff --git a/mods/ura/bits/desert/mbFIX.des b/mods/ura/bits/desert/mbFIX.des new file mode 100644 index 0000000..16372c3 Binary files /dev/null and b/mods/ura/bits/desert/mbFIX.des differ diff --git a/mods/ura/bits/desert/mbFTUR.des b/mods/ura/bits/desert/mbFTUR.des new file mode 100644 index 0000000..cd9aa3e Binary files /dev/null and b/mods/ura/bits/desert/mbFTUR.des differ diff --git a/mods/ura/bits/desert/mbGAP.des b/mods/ura/bits/desert/mbGAP.des new file mode 100644 index 0000000..99b62b2 Binary files /dev/null and b/mods/ura/bits/desert/mbGAP.des differ diff --git a/mods/ura/bits/desert/mbGUN.des b/mods/ura/bits/desert/mbGUN.des new file mode 100644 index 0000000..e50c3fd Binary files /dev/null and b/mods/ura/bits/desert/mbGUN.des differ diff --git a/mods/ura/bits/desert/mbHOSP.des b/mods/ura/bits/desert/mbHOSP.des new file mode 100644 index 0000000..6a7c12c Binary files /dev/null and b/mods/ura/bits/desert/mbHOSP.des differ diff --git a/mods/ura/bits/desert/mbIRON.des b/mods/ura/bits/desert/mbIRON.des new file mode 100644 index 0000000..4bf337b Binary files /dev/null and b/mods/ura/bits/desert/mbIRON.des differ diff --git a/mods/ura/bits/desert/mbPBOX.des b/mods/ura/bits/desert/mbPBOX.des new file mode 100644 index 0000000..e802591 Binary files /dev/null and b/mods/ura/bits/desert/mbPBOX.des differ diff --git a/mods/ura/bits/desert/mbPDOX.des b/mods/ura/bits/desert/mbPDOX.des new file mode 100644 index 0000000..4451c43 Binary files /dev/null and b/mods/ura/bits/desert/mbPDOX.des differ diff --git a/mods/ura/bits/desert/mbSAM.des b/mods/ura/bits/desert/mbSAM.des new file mode 100644 index 0000000..89ad9d8 Binary files /dev/null and b/mods/ura/bits/desert/mbSAM.des differ diff --git a/mods/ura/bits/desert/mbSILO.des b/mods/ura/bits/desert/mbSILO.des new file mode 100644 index 0000000..1d1cb9b Binary files /dev/null and b/mods/ura/bits/desert/mbSILO.des differ diff --git a/mods/ura/bits/desert/mbTSLA.des b/mods/ura/bits/desert/mbTSLA.des new file mode 100644 index 0000000..0324936 Binary files /dev/null and b/mods/ura/bits/desert/mbTSLA.des differ diff --git a/mods/ura/bits/desert/mine.des b/mods/ura/bits/desert/mine.des new file mode 100644 index 0000000..fbdd2e7 Binary files /dev/null and b/mods/ura/bits/desert/mine.des differ diff --git a/mods/ura/bits/desert/mslo.des b/mods/ura/bits/desert/mslo.des new file mode 100644 index 0000000..1db251c Binary files /dev/null and b/mods/ura/bits/desert/mslo.des differ diff --git a/mods/ura/bits/desert/mslomake.des b/mods/ura/bits/desert/mslomake.des new file mode 100644 index 0000000..28724af Binary files /dev/null and b/mods/ura/bits/desert/mslomake.des differ diff --git a/mods/ura/bits/desert/p08.des b/mods/ura/bits/desert/p08.des new file mode 100644 index 0000000..fc67329 Binary files /dev/null and b/mods/ura/bits/desert/p08.des differ diff --git a/mods/ura/bits/desert/p09.des b/mods/ura/bits/desert/p09.des new file mode 100644 index 0000000..6d80670 Binary files /dev/null and b/mods/ura/bits/desert/p09.des differ diff --git a/mods/ura/bits/desert/p10.des b/mods/ura/bits/desert/p10.des new file mode 100644 index 0000000..c9884da Binary files /dev/null and b/mods/ura/bits/desert/p10.des differ diff --git a/mods/ura/bits/desert/railmine.des b/mods/ura/bits/desert/railmine.des new file mode 100644 index 0000000..597f9bd Binary files /dev/null and b/mods/ura/bits/desert/railmine.des differ diff --git a/mods/ura/bits/desert/rc01.des b/mods/ura/bits/desert/rc01.des new file mode 100644 index 0000000..eb42239 Binary files /dev/null and b/mods/ura/bits/desert/rc01.des differ diff --git a/mods/ura/bits/desert/rc02.des b/mods/ura/bits/desert/rc02.des new file mode 100644 index 0000000..3824d44 Binary files /dev/null and b/mods/ura/bits/desert/rc02.des differ diff --git a/mods/ura/bits/desert/rc03.des b/mods/ura/bits/desert/rc03.des new file mode 100644 index 0000000..5e20c03 Binary files /dev/null and b/mods/ura/bits/desert/rc03.des differ diff --git a/mods/ura/bits/desert/rc04.des b/mods/ura/bits/desert/rc04.des new file mode 100644 index 0000000..aa26c21 Binary files /dev/null and b/mods/ura/bits/desert/rc04.des differ diff --git a/mods/ura/bits/desert/rv26.des b/mods/ura/bits/desert/rv26.des new file mode 100644 index 0000000..d1de6ce Binary files /dev/null and b/mods/ura/bits/desert/rv26.des differ diff --git a/mods/ura/bits/desert/rv27.des b/mods/ura/bits/desert/rv27.des new file mode 100644 index 0000000..8a3670c Binary files /dev/null and b/mods/ura/bits/desert/rv27.des differ diff --git a/mods/ura/bits/desert/rvm01.des b/mods/ura/bits/desert/rvm01.des new file mode 100644 index 0000000..3c33fed Binary files /dev/null and b/mods/ura/bits/desert/rvm01.des differ diff --git a/mods/ura/bits/desert/rvm02.des b/mods/ura/bits/desert/rvm02.des new file mode 100644 index 0000000..ee64d3b Binary files /dev/null and b/mods/ura/bits/desert/rvm02.des differ diff --git a/mods/ura/bits/desert/rvm03.des b/mods/ura/bits/desert/rvm03.des new file mode 100644 index 0000000..036bdfe Binary files /dev/null and b/mods/ura/bits/desert/rvm03.des differ diff --git a/mods/ura/bits/desert/rvm04.des b/mods/ura/bits/desert/rvm04.des new file mode 100644 index 0000000..723773a Binary files /dev/null and b/mods/ura/bits/desert/rvm04.des differ diff --git a/mods/ura/bits/desert/sbrd1.des b/mods/ura/bits/desert/sbrd1.des new file mode 100644 index 0000000..f588449 Binary files /dev/null and b/mods/ura/bits/desert/sbrd1.des differ diff --git a/mods/ura/bits/desert/sbrd1d.des b/mods/ura/bits/desert/sbrd1d.des new file mode 100644 index 0000000..0e3a2db Binary files /dev/null and b/mods/ura/bits/desert/sbrd1d.des differ diff --git a/mods/ura/bits/desert/sbrd1h.des b/mods/ura/bits/desert/sbrd1h.des new file mode 100644 index 0000000..0dd2438 Binary files /dev/null and b/mods/ura/bits/desert/sbrd1h.des differ diff --git a/mods/ura/bits/desert/sbrd1x.des b/mods/ura/bits/desert/sbrd1x.des new file mode 100644 index 0000000..01e90b9 Binary files /dev/null and b/mods/ura/bits/desert/sbrd1x.des differ diff --git a/mods/ura/bits/desert/sbrd2.des b/mods/ura/bits/desert/sbrd2.des new file mode 100644 index 0000000..a8980f2 Binary files /dev/null and b/mods/ura/bits/desert/sbrd2.des differ diff --git a/mods/ura/bits/desert/sbrd2d.des b/mods/ura/bits/desert/sbrd2d.des new file mode 100644 index 0000000..6528da5 Binary files /dev/null and b/mods/ura/bits/desert/sbrd2d.des differ diff --git a/mods/ura/bits/desert/sbrd2h.des b/mods/ura/bits/desert/sbrd2h.des new file mode 100644 index 0000000..32ed717 Binary files /dev/null and b/mods/ura/bits/desert/sbrd2h.des differ diff --git a/mods/ura/bits/desert/sbrd2x.des b/mods/ura/bits/desert/sbrd2x.des new file mode 100644 index 0000000..74601f9 Binary files /dev/null and b/mods/ura/bits/desert/sbrd2x.des differ diff --git a/mods/ura/bits/desert/sh64.des b/mods/ura/bits/desert/sh64.des new file mode 100644 index 0000000..4e37fb5 Binary files /dev/null and b/mods/ura/bits/desert/sh64.des differ diff --git a/mods/ura/bits/desert/sh65.des b/mods/ura/bits/desert/sh65.des new file mode 100644 index 0000000..c1b6ace Binary files /dev/null and b/mods/ura/bits/desert/sh65.des differ diff --git a/mods/ura/bits/desert/tc01.des b/mods/ura/bits/desert/tc01.des new file mode 100644 index 0000000..4ea92bf Binary files /dev/null and b/mods/ura/bits/desert/tc01.des differ diff --git a/mods/ura/bits/desert/tent.des b/mods/ura/bits/desert/tent.des new file mode 100644 index 0000000..e736876 Binary files /dev/null and b/mods/ura/bits/desert/tent.des differ diff --git a/mods/ura/bits/desert/tentmake.des b/mods/ura/bits/desert/tentmake.des new file mode 100644 index 0000000..ef676cc Binary files /dev/null and b/mods/ura/bits/desert/tentmake.des differ diff --git a/mods/ura/bits/desert/v19.des b/mods/ura/bits/desert/v19.des new file mode 100644 index 0000000..12cd2c2 Binary files /dev/null and b/mods/ura/bits/desert/v19.des differ diff --git a/mods/ura/bits/desert/w1.des b/mods/ura/bits/desert/w1.des new file mode 100644 index 0000000..7302f3b Binary files /dev/null and b/mods/ura/bits/desert/w1.des differ diff --git a/mods/ura/bits/desert/wc01.des b/mods/ura/bits/desert/wc01.des new file mode 100644 index 0000000..2ee7d1f Binary files /dev/null and b/mods/ura/bits/desert/wc01.des differ diff --git a/mods/ura/bits/desert/wc02.des b/mods/ura/bits/desert/wc02.des new file mode 100644 index 0000000..d1f0d62 Binary files /dev/null and b/mods/ura/bits/desert/wc02.des differ diff --git a/mods/ura/bits/desert/wc03.des b/mods/ura/bits/desert/wc03.des new file mode 100644 index 0000000..c0aecc9 Binary files /dev/null and b/mods/ura/bits/desert/wc03.des differ diff --git a/mods/ura/bits/desert/wc04.des b/mods/ura/bits/desert/wc04.des new file mode 100644 index 0000000..7b71a19 Binary files /dev/null and b/mods/ura/bits/desert/wc04.des differ diff --git a/mods/ura/bits/desert/wc05.des b/mods/ura/bits/desert/wc05.des new file mode 100644 index 0000000..f10403d Binary files /dev/null and b/mods/ura/bits/desert/wc05.des differ diff --git a/mods/ura/bits/desert/wc06.des b/mods/ura/bits/desert/wc06.des new file mode 100644 index 0000000..32bca7a Binary files /dev/null and b/mods/ura/bits/desert/wc06.des differ diff --git a/mods/ura/bits/desert/wc07.des b/mods/ura/bits/desert/wc07.des new file mode 100644 index 0000000..ff3a83f Binary files /dev/null and b/mods/ura/bits/desert/wc07.des differ diff --git a/mods/ura/bits/desert/wc08.des b/mods/ura/bits/desert/wc08.des new file mode 100644 index 0000000..4ceee39 Binary files /dev/null and b/mods/ura/bits/desert/wc08.des differ diff --git a/mods/ura/bits/desert/wc09.des b/mods/ura/bits/desert/wc09.des new file mode 100644 index 0000000..0d8c1fb Binary files /dev/null and b/mods/ura/bits/desert/wc09.des differ diff --git a/mods/ura/bits/desert/wc10.des b/mods/ura/bits/desert/wc10.des new file mode 100644 index 0000000..40df846 Binary files /dev/null and b/mods/ura/bits/desert/wc10.des differ diff --git a/mods/ura/bits/desert/wc11.des b/mods/ura/bits/desert/wc11.des new file mode 100644 index 0000000..5f93a1b Binary files /dev/null and b/mods/ura/bits/desert/wc11.des differ diff --git a/mods/ura/bits/desert/wc12.des b/mods/ura/bits/desert/wc12.des new file mode 100644 index 0000000..9d45939 Binary files /dev/null and b/mods/ura/bits/desert/wc12.des differ diff --git a/mods/ura/bits/desert/wc13.des b/mods/ura/bits/desert/wc13.des new file mode 100644 index 0000000..6c7d81f Binary files /dev/null and b/mods/ura/bits/desert/wc13.des differ diff --git a/mods/ura/bits/desert/wc14.des b/mods/ura/bits/desert/wc14.des new file mode 100644 index 0000000..683bac6 Binary files /dev/null and b/mods/ura/bits/desert/wc14.des differ diff --git a/mods/ura/bits/desert/wc15.des b/mods/ura/bits/desert/wc15.des new file mode 100644 index 0000000..968e220 Binary files /dev/null and b/mods/ura/bits/desert/wc15.des differ diff --git a/mods/ura/bits/desert/wc16.des b/mods/ura/bits/desert/wc16.des new file mode 100644 index 0000000..dfda16a Binary files /dev/null and b/mods/ura/bits/desert/wc16.des differ diff --git a/mods/ura/bits/desert/wc17.des b/mods/ura/bits/desert/wc17.des new file mode 100644 index 0000000..8f349c3 Binary files /dev/null and b/mods/ura/bits/desert/wc17.des differ diff --git a/mods/ura/bits/desert/wc18.des b/mods/ura/bits/desert/wc18.des new file mode 100644 index 0000000..a47c879 Binary files /dev/null and b/mods/ura/bits/desert/wc18.des differ diff --git a/mods/ura/bits/desert/wc19.des b/mods/ura/bits/desert/wc19.des new file mode 100644 index 0000000..d1d43d3 Binary files /dev/null and b/mods/ura/bits/desert/wc19.des differ diff --git a/mods/ura/bits/desert/wc20.des b/mods/ura/bits/desert/wc20.des new file mode 100644 index 0000000..f94cf56 Binary files /dev/null and b/mods/ura/bits/desert/wc20.des differ diff --git a/mods/ura/bits/desert/wc21.des b/mods/ura/bits/desert/wc21.des new file mode 100644 index 0000000..36b3732 Binary files /dev/null and b/mods/ura/bits/desert/wc21.des differ diff --git a/mods/ura/bits/desert/wc22.des b/mods/ura/bits/desert/wc22.des new file mode 100644 index 0000000..c80d162 Binary files /dev/null and b/mods/ura/bits/desert/wc22.des differ diff --git a/mods/ura/bits/desert/wc23.des b/mods/ura/bits/desert/wc23.des new file mode 100644 index 0000000..3ecd8b8 Binary files /dev/null and b/mods/ura/bits/desert/wc23.des differ diff --git a/mods/ura/bits/desert/wc24.des b/mods/ura/bits/desert/wc24.des new file mode 100644 index 0000000..9f396b7 Binary files /dev/null and b/mods/ura/bits/desert/wc24.des differ diff --git a/mods/ura/bits/desert/wc25.des b/mods/ura/bits/desert/wc25.des new file mode 100644 index 0000000..588d467 Binary files /dev/null and b/mods/ura/bits/desert/wc25.des differ diff --git a/mods/ura/bits/desert/wc26.des b/mods/ura/bits/desert/wc26.des new file mode 100644 index 0000000..a621b41 Binary files /dev/null and b/mods/ura/bits/desert/wc26.des differ diff --git a/mods/ura/bits/desert/wc27.des b/mods/ura/bits/desert/wc27.des new file mode 100644 index 0000000..e779703 Binary files /dev/null and b/mods/ura/bits/desert/wc27.des differ diff --git a/mods/ura/bits/desert/wc28.des b/mods/ura/bits/desert/wc28.des new file mode 100644 index 0000000..5633f99 Binary files /dev/null and b/mods/ura/bits/desert/wc28.des differ diff --git a/mods/ura/bits/desert/wc29.des b/mods/ura/bits/desert/wc29.des new file mode 100644 index 0000000..3a7b03e Binary files /dev/null and b/mods/ura/bits/desert/wc29.des differ diff --git a/mods/ura/bits/desert/wc30.des b/mods/ura/bits/desert/wc30.des new file mode 100644 index 0000000..4073697 Binary files /dev/null and b/mods/ura/bits/desert/wc30.des differ diff --git a/mods/ura/bits/desert/wc31.des b/mods/ura/bits/desert/wc31.des new file mode 100644 index 0000000..5baca0d Binary files /dev/null and b/mods/ura/bits/desert/wc31.des differ diff --git a/mods/ura/bits/desert/wc32.des b/mods/ura/bits/desert/wc32.des new file mode 100644 index 0000000..e4ff1bb Binary files /dev/null and b/mods/ura/bits/desert/wc32.des differ diff --git a/mods/ura/bits/desert/wc33.des b/mods/ura/bits/desert/wc33.des new file mode 100644 index 0000000..f6defbf Binary files /dev/null and b/mods/ura/bits/desert/wc33.des differ diff --git a/mods/ura/bits/desert/wc34.des b/mods/ura/bits/desert/wc34.des new file mode 100644 index 0000000..aa72ca8 Binary files /dev/null and b/mods/ura/bits/desert/wc34.des differ diff --git a/mods/ura/bits/desert/wc35.des b/mods/ura/bits/desert/wc35.des new file mode 100644 index 0000000..4ba02de Binary files /dev/null and b/mods/ura/bits/desert/wc35.des differ diff --git a/mods/ura/bits/desert/wc36.des b/mods/ura/bits/desert/wc36.des new file mode 100644 index 0000000..efaa338 Binary files /dev/null and b/mods/ura/bits/desert/wc36.des differ diff --git a/mods/ura/bits/desert/wc37.des b/mods/ura/bits/desert/wc37.des new file mode 100644 index 0000000..79a5bd3 Binary files /dev/null and b/mods/ura/bits/desert/wc37.des differ diff --git a/mods/ura/bits/desert/wc38.des b/mods/ura/bits/desert/wc38.des new file mode 100644 index 0000000..f0403e3 Binary files /dev/null and b/mods/ura/bits/desert/wc38.des differ diff --git a/mods/ura/bits/desert/wc39.des b/mods/ura/bits/desert/wc39.des new file mode 100644 index 0000000..9771295 Binary files /dev/null and b/mods/ura/bits/desert/wc39.des differ diff --git a/mods/ura/bits/desert/wc40.des b/mods/ura/bits/desert/wc40.des new file mode 100644 index 0000000..15bea16 Binary files /dev/null and b/mods/ura/bits/desert/wc40.des differ diff --git a/mods/ura/bits/desert/wc41.des b/mods/ura/bits/desert/wc41.des new file mode 100644 index 0000000..8997359 Binary files /dev/null and b/mods/ura/bits/desert/wc41.des differ diff --git a/mods/ura/bits/desert/wc42.des b/mods/ura/bits/desert/wc42.des new file mode 100644 index 0000000..a013614 Binary files /dev/null and b/mods/ura/bits/desert/wc42.des differ diff --git a/mods/ura/bits/desert/wc43.des b/mods/ura/bits/desert/wc43.des new file mode 100644 index 0000000..2a5e69e Binary files /dev/null and b/mods/ura/bits/desert/wc43.des differ diff --git a/mods/ura/bits/desert/wc44.des b/mods/ura/bits/desert/wc44.des new file mode 100644 index 0000000..c02c6ef Binary files /dev/null and b/mods/ura/bits/desert/wc44.des differ diff --git a/mods/ura/bits/desert/wc45.des b/mods/ura/bits/desert/wc45.des new file mode 100644 index 0000000..8e1ec2f Binary files /dev/null and b/mods/ura/bits/desert/wc45.des differ diff --git a/mods/ura/bits/desert/wc46.des b/mods/ura/bits/desert/wc46.des new file mode 100644 index 0000000..87665b2 Binary files /dev/null and b/mods/ura/bits/desert/wc46.des differ diff --git a/mods/ura/bits/e6.shp b/mods/ura/bits/e6.shp new file mode 100644 index 0000000..34b27d0 Binary files /dev/null and b/mods/ura/bits/e6.shp differ diff --git a/mods/ura/bits/einstein.shp b/mods/ura/bits/einstein.shp new file mode 100644 index 0000000..a8193b6 Binary files /dev/null and b/mods/ura/bits/einstein.shp differ diff --git a/mods/ura/bits/enmydet.aud b/mods/ura/bits/enmydet.aud new file mode 100644 index 0000000..e02b341 Binary files /dev/null and b/mods/ura/bits/enmydet.aud differ diff --git a/mods/ura/bits/fact.shp b/mods/ura/bits/fact.shp new file mode 100644 index 0000000..0dbb262 Binary files /dev/null and b/mods/ura/bits/fact.shp differ diff --git a/mods/ura/bits/factdead.shp b/mods/ura/bits/factdead.shp new file mode 100644 index 0000000..f6ff1dd Binary files /dev/null and b/mods/ura/bits/factdead.shp differ diff --git a/mods/ura/bits/factmake.shp b/mods/ura/bits/factmake.shp new file mode 100644 index 0000000..94bd607 Binary files /dev/null and b/mods/ura/bits/factmake.shp differ diff --git a/mods/ura/bits/fapwicon.shp b/mods/ura/bits/fapwicon.shp new file mode 100644 index 0000000..c4d0cb7 Binary files /dev/null and b/mods/ura/bits/fapwicon.shp differ diff --git a/mods/ura/bits/fb3.shp b/mods/ura/bits/fb3.shp new file mode 100644 index 0000000..a554c40 Binary files /dev/null and b/mods/ura/bits/fb3.shp differ diff --git a/mods/ura/bits/fb4.shp b/mods/ura/bits/fb4.shp new file mode 100644 index 0000000..c6d863e Binary files /dev/null and b/mods/ura/bits/fb4.shp differ diff --git a/mods/ura/bits/fcommake.shp b/mods/ura/bits/fcommake.shp new file mode 100644 index 0000000..10a919a Binary files /dev/null and b/mods/ura/bits/fcommake.shp differ diff --git a/mods/ura/bits/fixficon.shp b/mods/ura/bits/fixficon.shp new file mode 100644 index 0000000..b9aedad Binary files /dev/null and b/mods/ura/bits/fixficon.shp differ diff --git a/mods/ura/bits/fjord1.tem b/mods/ura/bits/fjord1.tem new file mode 100644 index 0000000..027788b Binary files /dev/null and b/mods/ura/bits/fjord1.tem differ diff --git a/mods/ura/bits/fjord2.tem b/mods/ura/bits/fjord2.tem new file mode 100644 index 0000000..e8f3ac0 Binary files /dev/null and b/mods/ura/bits/fjord2.tem differ diff --git a/mods/ura/bits/fpwricon.shp b/mods/ura/bits/fpwricon.shp new file mode 100644 index 0000000..7e3fe88 Binary files /dev/null and b/mods/ura/bits/fpwricon.shp differ diff --git a/mods/ura/bits/ftrk.shp b/mods/ura/bits/ftrk.shp new file mode 100644 index 0000000..01ee723 Binary files /dev/null and b/mods/ura/bits/ftrk.shp differ diff --git a/mods/ura/bits/ftrkicon.shp b/mods/ura/bits/ftrkicon.shp new file mode 100644 index 0000000..fe871d2 Binary files /dev/null and b/mods/ura/bits/ftrkicon.shp differ diff --git a/mods/ura/bits/gap.shp b/mods/ura/bits/gap.shp new file mode 100644 index 0000000..48d0983 Binary files /dev/null and b/mods/ura/bits/gap.shp differ diff --git a/mods/ura/bits/gapmake.shp b/mods/ura/bits/gapmake.shp new file mode 100644 index 0000000..18d89e8 Binary files /dev/null and b/mods/ura/bits/gapmake.shp differ diff --git a/mods/ura/bits/gmine.sno b/mods/ura/bits/gmine.sno new file mode 100644 index 0000000..541ed27 Binary files /dev/null and b/mods/ura/bits/gmine.sno differ diff --git a/mods/ura/bits/gmine.tem b/mods/ura/bits/gmine.tem new file mode 100644 index 0000000..6baab91 Binary files /dev/null and b/mods/ura/bits/gmine.tem differ diff --git a/mods/ura/bits/gpsdot.shp b/mods/ura/bits/gpsdot.shp new file mode 100644 index 0000000..47652d5 Binary files /dev/null and b/mods/ura/bits/gpsdot.shp differ diff --git a/mods/ura/bits/gunfire2.shp b/mods/ura/bits/gunfire2.shp new file mode 100644 index 0000000..1138744 Binary files /dev/null and b/mods/ura/bits/gunfire2.shp differ diff --git a/mods/ura/bits/harv.shp b/mods/ura/bits/harv.shp new file mode 100644 index 0000000..71e17b9 Binary files /dev/null and b/mods/ura/bits/harv.shp differ diff --git a/mods/ura/bits/harvempty.shp b/mods/ura/bits/harvempty.shp new file mode 100644 index 0000000..3a954f8 Binary files /dev/null and b/mods/ura/bits/harvempty.shp differ diff --git a/mods/ura/bits/harvhalf.shp b/mods/ura/bits/harvhalf.shp new file mode 100644 index 0000000..413fbc2 Binary files /dev/null and b/mods/ura/bits/harvhalf.shp differ diff --git a/mods/ura/bits/heli.shp b/mods/ura/bits/heli.shp new file mode 100644 index 0000000..2da63f5 Binary files /dev/null and b/mods/ura/bits/heli.shp differ diff --git a/mods/ura/bits/hhusk.shp b/mods/ura/bits/hhusk.shp new file mode 100644 index 0000000..4236c84 Binary files /dev/null and b/mods/ura/bits/hhusk.shp differ diff --git a/mods/ura/bits/hhusk2.shp b/mods/ura/bits/hhusk2.shp new file mode 100644 index 0000000..57a926d Binary files /dev/null and b/mods/ura/bits/hhusk2.shp differ diff --git a/mods/ura/bits/hijackericon.shp b/mods/ura/bits/hijackericon.shp new file mode 100644 index 0000000..5772b25 Binary files /dev/null and b/mods/ura/bits/hijackericon.shp differ diff --git a/mods/ura/bits/hospicon.shp b/mods/ura/bits/hospicon.shp new file mode 100644 index 0000000..efce8ce Binary files /dev/null and b/mods/ura/bits/hospicon.shp differ diff --git a/mods/ura/bits/iconchevrons.shp b/mods/ura/bits/iconchevrons.shp new file mode 100644 index 0000000..b96fa50 Binary files /dev/null and b/mods/ura/bits/iconchevrons.shp differ diff --git a/mods/ura/bits/invun.shp b/mods/ura/bits/invun.shp new file mode 100644 index 0000000..4796747 Binary files /dev/null and b/mods/ura/bits/invun.shp differ diff --git a/mods/ura/bits/jmin.shp b/mods/ura/bits/jmin.shp new file mode 100644 index 0000000..e889126 Binary files /dev/null and b/mods/ura/bits/jmin.shp differ diff --git a/mods/ura/bits/levelup.shp b/mods/ura/bits/levelup.shp new file mode 100644 index 0000000..eec8a7f Binary files /dev/null and b/mods/ura/bits/levelup.shp differ diff --git a/mods/ura/bits/lhus.shp b/mods/ura/bits/lhus.shp new file mode 100644 index 0000000..82159be Binary files /dev/null and b/mods/ura/bits/lhus.shp differ diff --git a/mods/ura/bits/lrotorlg.shp b/mods/ura/bits/lrotorlg.shp new file mode 100644 index 0000000..524cfa1 Binary files /dev/null and b/mods/ura/bits/lrotorlg.shp differ diff --git a/mods/ura/bits/mbAGUN.int b/mods/ura/bits/mbAGUN.int new file mode 100644 index 0000000..070099c Binary files /dev/null and b/mods/ura/bits/mbAGUN.int differ diff --git a/mods/ura/bits/mbAGUN.sno b/mods/ura/bits/mbAGUN.sno new file mode 100644 index 0000000..0b2242d Binary files /dev/null and b/mods/ura/bits/mbAGUN.sno differ diff --git a/mods/ura/bits/mbAGUN.tem b/mods/ura/bits/mbAGUN.tem new file mode 100644 index 0000000..5e6416d Binary files /dev/null and b/mods/ura/bits/mbAGUN.tem differ diff --git a/mods/ura/bits/mbFIX.int b/mods/ura/bits/mbFIX.int new file mode 100644 index 0000000..a1853ec Binary files /dev/null and b/mods/ura/bits/mbFIX.int differ diff --git a/mods/ura/bits/mbFIX.sno b/mods/ura/bits/mbFIX.sno new file mode 100644 index 0000000..a5019b8 Binary files /dev/null and b/mods/ura/bits/mbFIX.sno differ diff --git a/mods/ura/bits/mbFIX.tem b/mods/ura/bits/mbFIX.tem new file mode 100644 index 0000000..35a2ce5 Binary files /dev/null and b/mods/ura/bits/mbFIX.tem differ diff --git a/mods/ura/bits/mbFTUR.int b/mods/ura/bits/mbFTUR.int new file mode 100644 index 0000000..9571ed7 Binary files /dev/null and b/mods/ura/bits/mbFTUR.int differ diff --git a/mods/ura/bits/mbFTUR.sno b/mods/ura/bits/mbFTUR.sno new file mode 100644 index 0000000..c776644 Binary files /dev/null and b/mods/ura/bits/mbFTUR.sno differ diff --git a/mods/ura/bits/mbFTUR.tem b/mods/ura/bits/mbFTUR.tem new file mode 100644 index 0000000..679c4f5 Binary files /dev/null and b/mods/ura/bits/mbFTUR.tem differ diff --git a/mods/ura/bits/mbGAP.int b/mods/ura/bits/mbGAP.int new file mode 100644 index 0000000..15d3833 Binary files /dev/null and b/mods/ura/bits/mbGAP.int differ diff --git a/mods/ura/bits/mbGAP.sno b/mods/ura/bits/mbGAP.sno new file mode 100644 index 0000000..d4d40ee Binary files /dev/null and b/mods/ura/bits/mbGAP.sno differ diff --git a/mods/ura/bits/mbGAP.tem b/mods/ura/bits/mbGAP.tem new file mode 100644 index 0000000..b722323 Binary files /dev/null and b/mods/ura/bits/mbGAP.tem differ diff --git a/mods/ura/bits/mbGUN.int b/mods/ura/bits/mbGUN.int new file mode 100644 index 0000000..2d955cc Binary files /dev/null and b/mods/ura/bits/mbGUN.int differ diff --git a/mods/ura/bits/mbGUN.sno b/mods/ura/bits/mbGUN.sno new file mode 100644 index 0000000..4944564 Binary files /dev/null and b/mods/ura/bits/mbGUN.sno differ diff --git a/mods/ura/bits/mbGUN.tem b/mods/ura/bits/mbGUN.tem new file mode 100644 index 0000000..dd93e39 Binary files /dev/null and b/mods/ura/bits/mbGUN.tem differ diff --git a/mods/ura/bits/mbHOSP.int b/mods/ura/bits/mbHOSP.int new file mode 100644 index 0000000..0d86416 Binary files /dev/null and b/mods/ura/bits/mbHOSP.int differ diff --git a/mods/ura/bits/mbHOSP.sno b/mods/ura/bits/mbHOSP.sno new file mode 100644 index 0000000..e93160f Binary files /dev/null and b/mods/ura/bits/mbHOSP.sno differ diff --git a/mods/ura/bits/mbHOSP.tem b/mods/ura/bits/mbHOSP.tem new file mode 100644 index 0000000..1828569 Binary files /dev/null and b/mods/ura/bits/mbHOSP.tem differ diff --git a/mods/ura/bits/mbIRON.int b/mods/ura/bits/mbIRON.int new file mode 100644 index 0000000..c5fdd5c Binary files /dev/null and b/mods/ura/bits/mbIRON.int differ diff --git a/mods/ura/bits/mbIRON.sno b/mods/ura/bits/mbIRON.sno new file mode 100644 index 0000000..a81b1be Binary files /dev/null and b/mods/ura/bits/mbIRON.sno differ diff --git a/mods/ura/bits/mbIRON.tem b/mods/ura/bits/mbIRON.tem new file mode 100644 index 0000000..b7db666 Binary files /dev/null and b/mods/ura/bits/mbIRON.tem differ diff --git a/mods/ura/bits/mbPBOX.int b/mods/ura/bits/mbPBOX.int new file mode 100644 index 0000000..7f41e79 Binary files /dev/null and b/mods/ura/bits/mbPBOX.int differ diff --git a/mods/ura/bits/mbPBOX.sno b/mods/ura/bits/mbPBOX.sno new file mode 100644 index 0000000..ef5b31d Binary files /dev/null and b/mods/ura/bits/mbPBOX.sno differ diff --git a/mods/ura/bits/mbPBOX.tem b/mods/ura/bits/mbPBOX.tem new file mode 100644 index 0000000..72f71c6 Binary files /dev/null and b/mods/ura/bits/mbPBOX.tem differ diff --git a/mods/ura/bits/mbPDOX.int b/mods/ura/bits/mbPDOX.int new file mode 100644 index 0000000..18421fe Binary files /dev/null and b/mods/ura/bits/mbPDOX.int differ diff --git a/mods/ura/bits/mbPDOX.sno b/mods/ura/bits/mbPDOX.sno new file mode 100644 index 0000000..9f963fa Binary files /dev/null and b/mods/ura/bits/mbPDOX.sno differ diff --git a/mods/ura/bits/mbPDOX.tem b/mods/ura/bits/mbPDOX.tem new file mode 100644 index 0000000..29b9d4e Binary files /dev/null and b/mods/ura/bits/mbPDOX.tem differ diff --git a/mods/ura/bits/mbSAM.int b/mods/ura/bits/mbSAM.int new file mode 100644 index 0000000..95283a6 Binary files /dev/null and b/mods/ura/bits/mbSAM.int differ diff --git a/mods/ura/bits/mbSAM.sno b/mods/ura/bits/mbSAM.sno new file mode 100644 index 0000000..3adb3a2 Binary files /dev/null and b/mods/ura/bits/mbSAM.sno differ diff --git a/mods/ura/bits/mbSAM.tem b/mods/ura/bits/mbSAM.tem new file mode 100644 index 0000000..dbafbf8 Binary files /dev/null and b/mods/ura/bits/mbSAM.tem differ diff --git a/mods/ura/bits/mbSILO.int b/mods/ura/bits/mbSILO.int new file mode 100644 index 0000000..78dc41c Binary files /dev/null and b/mods/ura/bits/mbSILO.int differ diff --git a/mods/ura/bits/mbSILO.sno b/mods/ura/bits/mbSILO.sno new file mode 100644 index 0000000..9f7c657 Binary files /dev/null and b/mods/ura/bits/mbSILO.sno differ diff --git a/mods/ura/bits/mbSILO.tem b/mods/ura/bits/mbSILO.tem new file mode 100644 index 0000000..78699ff Binary files /dev/null and b/mods/ura/bits/mbSILO.tem differ diff --git a/mods/ura/bits/mbTSLA.int b/mods/ura/bits/mbTSLA.int new file mode 100644 index 0000000..40ae610 Binary files /dev/null and b/mods/ura/bits/mbTSLA.int differ diff --git a/mods/ura/bits/mbTSLA.sno b/mods/ura/bits/mbTSLA.sno new file mode 100644 index 0000000..3553774 Binary files /dev/null and b/mods/ura/bits/mbTSLA.sno differ diff --git a/mods/ura/bits/mbTSLA.tem b/mods/ura/bits/mbTSLA.tem new file mode 100644 index 0000000..c8cae5e Binary files /dev/null and b/mods/ura/bits/mbTSLA.tem differ diff --git a/mods/ura/bits/mcvhusk.shp b/mods/ura/bits/mcvhusk.shp new file mode 100644 index 0000000..c88bf40 Binary files /dev/null and b/mods/ura/bits/mcvhusk.shp differ diff --git a/mods/ura/bits/mgg.shp b/mods/ura/bits/mgg.shp new file mode 100644 index 0000000..03d049f Binary files /dev/null and b/mods/ura/bits/mgg.shp differ diff --git a/mods/ura/bits/mine.int b/mods/ura/bits/mine.int new file mode 100644 index 0000000..f174688 Binary files /dev/null and b/mods/ura/bits/mine.int differ diff --git a/mods/ura/bits/missmake.shp b/mods/ura/bits/missmake.shp new file mode 100644 index 0000000..cf8b67c Binary files /dev/null and b/mods/ura/bits/missmake.shp differ diff --git a/mods/ura/bits/mpspawn.shp b/mods/ura/bits/mpspawn.shp new file mode 100644 index 0000000..7b9e9e7 Binary files /dev/null and b/mods/ura/bits/mpspawn.shp differ diff --git a/mods/ura/bits/mslficon.shp b/mods/ura/bits/mslficon.shp new file mode 100644 index 0000000..1599d05 Binary files /dev/null and b/mods/ura/bits/mslficon.shp differ diff --git a/mods/ura/bits/msloicon2.shp b/mods/ura/bits/msloicon2.shp new file mode 100644 index 0000000..e764afe Binary files /dev/null and b/mods/ura/bits/msloicon2.shp differ diff --git a/mods/ura/bits/napalm1.shp b/mods/ura/bits/napalm1.shp new file mode 100644 index 0000000..f880d8a Binary files /dev/null and b/mods/ura/bits/napalm1.shp differ diff --git a/mods/ura/bits/nopower.shp b/mods/ura/bits/nopower.shp new file mode 100644 index 0000000..49792f8 Binary files /dev/null and b/mods/ura/bits/nopower.shp differ diff --git a/mods/ura/bits/oilb.shp b/mods/ura/bits/oilb.shp new file mode 100644 index 0000000..b0df3be Binary files /dev/null and b/mods/ura/bits/oilb.shp differ diff --git a/mods/ura/bits/overlay.shp b/mods/ura/bits/overlay.shp new file mode 100644 index 0000000..fd5dc18 Binary files /dev/null and b/mods/ura/bits/overlay.shp differ diff --git a/mods/ura/bits/parach-shadow.shp b/mods/ura/bits/parach-shadow.shp new file mode 100644 index 0000000..7d848c8 Binary files /dev/null and b/mods/ura/bits/parach-shadow.shp differ diff --git a/mods/ura/bits/pdoficon.shp b/mods/ura/bits/pdoficon.shp new file mode 100644 index 0000000..463b90f Binary files /dev/null and b/mods/ura/bits/pdoficon.shp differ diff --git a/mods/ura/bits/pip-disguise.shp b/mods/ura/bits/pip-disguise.shp new file mode 100644 index 0000000..95ecd66 Binary files /dev/null and b/mods/ura/bits/pip-disguise.shp differ diff --git a/mods/ura/bits/pips2.shp b/mods/ura/bits/pips2.shp new file mode 100644 index 0000000..c6f99ce Binary files /dev/null and b/mods/ura/bits/pips2.shp differ diff --git a/mods/ura/bits/playersmoke.shp b/mods/ura/bits/playersmoke.shp new file mode 100644 index 0000000..36acc68 Binary files /dev/null and b/mods/ura/bits/playersmoke.shp differ diff --git a/mods/ura/bits/poweroff.shp b/mods/ura/bits/poweroff.shp new file mode 100644 index 0000000..47da2b0 Binary files /dev/null and b/mods/ura/bits/poweroff.shp differ diff --git a/mods/ura/bits/powrdead.shp b/mods/ura/bits/powrdead.shp new file mode 100644 index 0000000..6f52493 Binary files /dev/null and b/mods/ura/bits/powrdead.shp differ diff --git a/mods/ura/bits/procdead.shp b/mods/ura/bits/procdead.shp new file mode 100644 index 0000000..c394806 Binary files /dev/null and b/mods/ura/bits/procdead.shp differ diff --git a/mods/ura/bits/proctop.shp b/mods/ura/bits/proctop.shp new file mode 100644 index 0000000..99b5c6a Binary files /dev/null and b/mods/ura/bits/proctop.shp differ diff --git a/mods/ura/bits/railmine.sno b/mods/ura/bits/railmine.sno new file mode 100644 index 0000000..ae1da6d Binary files /dev/null and b/mods/ura/bits/railmine.sno differ diff --git a/mods/ura/bits/railmine.tem b/mods/ura/bits/railmine.tem new file mode 100644 index 0000000..5f650d4 Binary files /dev/null and b/mods/ura/bits/railmine.tem differ diff --git a/mods/ura/bits/rank.shp b/mods/ura/bits/rank.shp new file mode 100644 index 0000000..958aba6 Binary files /dev/null and b/mods/ura/bits/rank.shp differ diff --git a/mods/ura/bits/rice.tem b/mods/ura/bits/rice.tem new file mode 100644 index 0000000..1e8af21 Binary files /dev/null and b/mods/ura/bits/rice.tem differ diff --git a/mods/ura/bits/rushouse.shp b/mods/ura/bits/rushouse.shp new file mode 100644 index 0000000..1164a4b Binary files /dev/null and b/mods/ura/bits/rushouse.shp differ diff --git a/mods/ura/bits/sam2.shp b/mods/ura/bits/sam2.shp new file mode 100644 index 0000000..dacb3b9 Binary files /dev/null and b/mods/ura/bits/sam2.shp differ diff --git a/mods/ura/bits/sbridge1.tem b/mods/ura/bits/sbridge1.tem new file mode 100644 index 0000000..2c17c01 Binary files /dev/null and b/mods/ura/bits/sbridge1.tem differ diff --git a/mods/ura/bits/sbridge1d.tem b/mods/ura/bits/sbridge1d.tem new file mode 100644 index 0000000..29891fb Binary files /dev/null and b/mods/ura/bits/sbridge1d.tem differ diff --git a/mods/ura/bits/sbridge1h.tem b/mods/ura/bits/sbridge1h.tem new file mode 100644 index 0000000..7f81df1 Binary files /dev/null and b/mods/ura/bits/sbridge1h.tem differ diff --git a/mods/ura/bits/sbridge1x.tem b/mods/ura/bits/sbridge1x.tem new file mode 100644 index 0000000..a73a297 Binary files /dev/null and b/mods/ura/bits/sbridge1x.tem differ diff --git a/mods/ura/bits/sbridge2.tem b/mods/ura/bits/sbridge2.tem new file mode 100644 index 0000000..6b98758 Binary files /dev/null and b/mods/ura/bits/sbridge2.tem differ diff --git a/mods/ura/bits/sbridge2d.tem b/mods/ura/bits/sbridge2d.tem new file mode 100644 index 0000000..4298aeb Binary files /dev/null and b/mods/ura/bits/sbridge2d.tem differ diff --git a/mods/ura/bits/sbridge2h.tem b/mods/ura/bits/sbridge2h.tem new file mode 100644 index 0000000..fb0e4bb Binary files /dev/null and b/mods/ura/bits/sbridge2h.tem differ diff --git a/mods/ura/bits/sbridge2x.tem b/mods/ura/bits/sbridge2x.tem new file mode 100644 index 0000000..cb3bdb7 Binary files /dev/null and b/mods/ura/bits/sbridge2x.tem differ diff --git a/mods/ura/bits/sbridge3.tem b/mods/ura/bits/sbridge3.tem new file mode 100644 index 0000000..bc1dfad Binary files /dev/null and b/mods/ura/bits/sbridge3.tem differ diff --git a/mods/ura/bits/sbridge3d.tem b/mods/ura/bits/sbridge3d.tem new file mode 100644 index 0000000..42ce99c Binary files /dev/null and b/mods/ura/bits/sbridge3d.tem differ diff --git a/mods/ura/bits/sbridge3h.tem b/mods/ura/bits/sbridge3h.tem new file mode 100644 index 0000000..0e2f554 Binary files /dev/null and b/mods/ura/bits/sbridge3h.tem differ diff --git a/mods/ura/bits/sbridge3x.tem b/mods/ura/bits/sbridge3x.tem new file mode 100644 index 0000000..d3585df Binary files /dev/null and b/mods/ura/bits/sbridge3x.tem differ diff --git a/mods/ura/bits/sbridge4.tem b/mods/ura/bits/sbridge4.tem new file mode 100644 index 0000000..d55100b Binary files /dev/null and b/mods/ura/bits/sbridge4.tem differ diff --git a/mods/ura/bits/sbridge4d.tem b/mods/ura/bits/sbridge4d.tem new file mode 100644 index 0000000..56a0eb8 Binary files /dev/null and b/mods/ura/bits/sbridge4d.tem differ diff --git a/mods/ura/bits/sbridge4h.tem b/mods/ura/bits/sbridge4h.tem new file mode 100644 index 0000000..8b338e5 Binary files /dev/null and b/mods/ura/bits/sbridge4h.tem differ diff --git a/mods/ura/bits/sbridge4x.tem b/mods/ura/bits/sbridge4x.tem new file mode 100644 index 0000000..f252304 Binary files /dev/null and b/mods/ura/bits/sbridge4x.tem differ diff --git a/mods/ura/bits/sc4.sno b/mods/ura/bits/sc4.sno new file mode 100644 index 0000000..f8c06d4 Binary files /dev/null and b/mods/ura/bits/sc4.sno differ diff --git a/mods/ura/bits/sccln.tem b/mods/ura/bits/sccln.tem new file mode 100644 index 0000000..48fb942 Binary files /dev/null and b/mods/ura/bits/sccln.tem differ diff --git a/mods/ura/bits/sccls.tem b/mods/ura/bits/sccls.tem new file mode 100644 index 0000000..dc93299 Binary files /dev/null and b/mods/ura/bits/sccls.tem differ diff --git a/mods/ura/bits/sccnl.tem b/mods/ura/bits/sccnl.tem new file mode 100644 index 0000000..0777e20 Binary files /dev/null and b/mods/ura/bits/sccnl.tem differ diff --git a/mods/ura/bits/sccnr.tem b/mods/ura/bits/sccnr.tem new file mode 100644 index 0000000..015c938 Binary files /dev/null and b/mods/ura/bits/sccnr.tem differ diff --git a/mods/ura/bits/sccrn.tem b/mods/ura/bits/sccrn.tem new file mode 100644 index 0000000..1a7dfaa Binary files /dev/null and b/mods/ura/bits/sccrn.tem differ diff --git a/mods/ura/bits/sccrs.tem b/mods/ura/bits/sccrs.tem new file mode 100644 index 0000000..2f2acab Binary files /dev/null and b/mods/ura/bits/sccrs.tem differ diff --git a/mods/ura/bits/sccsl.tem b/mods/ura/bits/sccsl.tem new file mode 100644 index 0000000..0080811 Binary files /dev/null and b/mods/ura/bits/sccsl.tem differ diff --git a/mods/ura/bits/sccsr.tem b/mods/ura/bits/sccsr.tem new file mode 100644 index 0000000..991ac2e Binary files /dev/null and b/mods/ura/bits/sccsr.tem differ diff --git a/mods/ura/bits/scrate.shp b/mods/ura/bits/scrate.shp new file mode 100644 index 0000000..15fe8f3 Binary files /dev/null and b/mods/ura/bits/scrate.shp differ diff --git a/mods/ura/bits/sgate.shp b/mods/ura/bits/sgate.shp new file mode 100644 index 0000000..39323e6 Binary files /dev/null and b/mods/ura/bits/sgate.shp differ diff --git a/mods/ura/bits/sh57.tem b/mods/ura/bits/sh57.tem new file mode 100644 index 0000000..7bd24f4 Binary files /dev/null and b/mods/ura/bits/sh57.tem differ diff --git a/mods/ura/bits/sh58.tem b/mods/ura/bits/sh58.tem new file mode 100644 index 0000000..b6ea0b0 Binary files /dev/null and b/mods/ura/bits/sh58.tem differ diff --git a/mods/ura/bits/sh59.tem b/mods/ura/bits/sh59.tem new file mode 100644 index 0000000..30b03da Binary files /dev/null and b/mods/ura/bits/sh59.tem differ diff --git a/mods/ura/bits/sh60.tem b/mods/ura/bits/sh60.tem new file mode 100644 index 0000000..7b1196d Binary files /dev/null and b/mods/ura/bits/sh60.tem differ diff --git a/mods/ura/bits/sh61.tem b/mods/ura/bits/sh61.tem new file mode 100644 index 0000000..9ac5223 Binary files /dev/null and b/mods/ura/bits/sh61.tem differ diff --git a/mods/ura/bits/sh62.tem b/mods/ura/bits/sh62.tem new file mode 100644 index 0000000..6fb2d17 Binary files /dev/null and b/mods/ura/bits/sh62.tem differ diff --git a/mods/ura/bits/sh63.tem b/mods/ura/bits/sh63.tem new file mode 100644 index 0000000..727f13a Binary files /dev/null and b/mods/ura/bits/sh63.tem differ diff --git a/mods/ura/bits/sh64.tem b/mods/ura/bits/sh64.tem new file mode 100644 index 0000000..b2cac77 Binary files /dev/null and b/mods/ura/bits/sh64.tem differ diff --git a/mods/ura/bits/silo2.shp b/mods/ura/bits/silo2.shp new file mode 100644 index 0000000..13cc571 Binary files /dev/null and b/mods/ura/bits/silo2.shp differ diff --git a/mods/ura/bits/silomake.shp b/mods/ura/bits/silomake.shp new file mode 100644 index 0000000..f462cb6 Binary files /dev/null and b/mods/ura/bits/silomake.shp differ diff --git a/mods/ura/bits/silppk.aud b/mods/ura/bits/silppk.aud new file mode 100644 index 0000000..cffa1e3 Binary files /dev/null and b/mods/ura/bits/silppk.aud differ diff --git a/mods/ura/bits/sniper.shp b/mods/ura/bits/sniper.shp new file mode 100644 index 0000000..da5c10e Binary files /dev/null and b/mods/ura/bits/sniper.shp differ diff --git a/mods/ura/bits/sniperdropicon.shp b/mods/ura/bits/sniperdropicon.shp new file mode 100644 index 0000000..c183907 Binary files /dev/null and b/mods/ura/bits/sniperdropicon.shp differ diff --git a/mods/ura/bits/snipericon.shp b/mods/ura/bits/snipericon.shp new file mode 100644 index 0000000..e7537e0 Binary files /dev/null and b/mods/ura/bits/snipericon.shp differ diff --git a/mods/ura/bits/snowhut.shp b/mods/ura/bits/snowhut.shp new file mode 100644 index 0000000..f2559e1 Binary files /dev/null and b/mods/ura/bits/snowhut.shp differ diff --git a/mods/ura/bits/stnkicon.shp b/mods/ura/bits/stnkicon.shp new file mode 100644 index 0000000..050c82b Binary files /dev/null and b/mods/ura/bits/stnkicon.shp differ diff --git a/mods/ura/bits/tanktrap1.shp b/mods/ura/bits/tanktrap1.shp new file mode 100644 index 0000000..65978f8 Binary files /dev/null and b/mods/ura/bits/tanktrap1.shp differ diff --git a/mods/ura/bits/tanktrap2.shp b/mods/ura/bits/tanktrap2.shp new file mode 100644 index 0000000..44d151b Binary files /dev/null and b/mods/ura/bits/tanktrap2.shp differ diff --git a/mods/ura/bits/tenficon.shp b/mods/ura/bits/tenficon.shp new file mode 100644 index 0000000..1afb8bb Binary files /dev/null and b/mods/ura/bits/tenficon.shp differ diff --git a/mods/ura/bits/tent.sno b/mods/ura/bits/tent.sno new file mode 100644 index 0000000..d70de72 Binary files /dev/null and b/mods/ura/bits/tent.sno differ diff --git a/mods/ura/bits/tent.tem b/mods/ura/bits/tent.tem new file mode 100644 index 0000000..1c02381 Binary files /dev/null and b/mods/ura/bits/tent.tem differ diff --git a/mods/ura/bits/tentmake.sno b/mods/ura/bits/tentmake.sno new file mode 100644 index 0000000..f9319f8 Binary files /dev/null and b/mods/ura/bits/tentmake.sno differ diff --git a/mods/ura/bits/tentmake.tem b/mods/ura/bits/tentmake.tem new file mode 100644 index 0000000..fbb33d3 Binary files /dev/null and b/mods/ura/bits/tentmake.tem differ diff --git a/mods/ura/bits/tire.shp b/mods/ura/bits/tire.shp new file mode 100644 index 0000000..da9493c Binary files /dev/null and b/mods/ura/bits/tire.shp differ diff --git a/mods/ura/bits/tran1husk.shp b/mods/ura/bits/tran1husk.shp new file mode 100644 index 0000000..105d01c Binary files /dev/null and b/mods/ura/bits/tran1husk.shp differ diff --git a/mods/ura/bits/tran2.shp b/mods/ura/bits/tran2.shp new file mode 100644 index 0000000..2e6a6e2 Binary files /dev/null and b/mods/ura/bits/tran2.shp differ diff --git a/mods/ura/bits/tran2husk.shp b/mods/ura/bits/tran2husk.shp new file mode 100644 index 0000000..12200f2 Binary files /dev/null and b/mods/ura/bits/tran2husk.shp differ diff --git a/mods/ura/bits/truk.shp b/mods/ura/bits/truk.shp new file mode 100644 index 0000000..bd4f3c7 Binary files /dev/null and b/mods/ura/bits/truk.shp differ diff --git a/mods/ura/bits/unitsto.aud b/mods/ura/bits/unitsto.aud new file mode 100644 index 0000000..7c53219 Binary files /dev/null and b/mods/ura/bits/unitsto.aud differ diff --git a/mods/ura/bits/utilpol1.shp b/mods/ura/bits/utilpol1.shp new file mode 100644 index 0000000..20a9bf4 Binary files /dev/null and b/mods/ura/bits/utilpol1.shp differ diff --git a/mods/ura/bits/utilpol2.shp b/mods/ura/bits/utilpol2.shp new file mode 100644 index 0000000..d0bac93 Binary files /dev/null and b/mods/ura/bits/utilpol2.shp differ diff --git a/mods/ura/bits/vgate.shp b/mods/ura/bits/vgate.shp new file mode 100644 index 0000000..ae020c1 Binary files /dev/null and b/mods/ura/bits/vgate.shp differ diff --git a/mods/ura/bits/waypoint.shp b/mods/ura/bits/waypoint.shp new file mode 100644 index 0000000..8a29fc1 Binary files /dev/null and b/mods/ura/bits/waypoint.shp differ diff --git a/mods/ura/bits/wcrate.shp b/mods/ura/bits/wcrate.shp new file mode 100644 index 0000000..d3fd3b9 Binary files /dev/null and b/mods/ura/bits/wcrate.shp differ diff --git a/mods/ura/bits/weap3.shp b/mods/ura/bits/weap3.shp new file mode 100644 index 0000000..d8573e1 Binary files /dev/null and b/mods/ura/bits/weap3.shp differ diff --git a/mods/ura/bits/windmill.shp b/mods/ura/bits/windmill.shp new file mode 100644 index 0000000..fc33683 Binary files /dev/null and b/mods/ura/bits/windmill.shp differ diff --git a/mods/ura/bits/wpiff.shp b/mods/ura/bits/wpiff.shp new file mode 100644 index 0000000..7c26dd1 Binary files /dev/null and b/mods/ura/bits/wpiff.shp differ diff --git a/mods/ura/bits/wpifpif.shp b/mods/ura/bits/wpifpif.shp new file mode 100644 index 0000000..8496a48 Binary files /dev/null and b/mods/ura/bits/wpifpif.shp differ diff --git a/mods/ura/bits/xcratea.shp b/mods/ura/bits/xcratea.shp new file mode 100644 index 0000000..0f3c7e9 Binary files /dev/null and b/mods/ura/bits/xcratea.shp differ diff --git a/mods/ura/bits/xcrateb.shp b/mods/ura/bits/xcrateb.shp new file mode 100644 index 0000000..c05cb48 Binary files /dev/null and b/mods/ura/bits/xcrateb.shp differ diff --git a/mods/ura/bits/xcratec.shp b/mods/ura/bits/xcratec.shp new file mode 100644 index 0000000..746e2a1 Binary files /dev/null and b/mods/ura/bits/xcratec.shp differ diff --git a/mods/ura/bits/xcrated.shp b/mods/ura/bits/xcrated.shp new file mode 100644 index 0000000..75b44d9 Binary files /dev/null and b/mods/ura/bits/xcrated.shp differ diff --git a/mods/ura/bits/yak.shp b/mods/ura/bits/yak.shp new file mode 100644 index 0000000..c760b4e Binary files /dev/null and b/mods/ura/bits/yak.shp differ diff --git a/mods/ura/bits/zombicon.shp b/mods/ura/bits/zombicon.shp new file mode 100644 index 0000000..501542a Binary files /dev/null and b/mods/ura/bits/zombicon.shp differ diff --git a/mods/ura/bits/zombie.shp b/mods/ura/bits/zombie.shp new file mode 100644 index 0000000..5342f57 Binary files /dev/null and b/mods/ura/bits/zombie.shp differ diff --git a/mods/ura/chrome.yaml b/mods/ura/chrome.yaml new file mode 100644 index 0000000..988579f --- /dev/null +++ b/mods/ura/chrome.yaml @@ -0,0 +1,1052 @@ +sidebar-allies: chrome.png + background-top: 0,167,238,290 + background-iconrow: 0,457,238,47 + background-bottom: 0,504,238,8 + background-supportoverlay: 0,75,64,48 + +sidebar-button-allies: chrome.png + background: 59,31,22,22 + border-r: 81,31,3,22 + border-l: 56,31,3,22 + border-b: 59,53,22,3 + border-t: 59,28,22,3 + corner-tl: 56,28,3,3 + corner-tr: 81,28,3,3 + corner-bl: 56,53,3,3 + corner-br: 81,53,3,3 +sidebar-button-allies-hover: chrome.png + background: 59,3,22,22 + border-r: 81,3,3,22 + border-l: 56,3,3,22 + border-b: 59,25,22,3 + border-t: 59,0,22,3 + corner-tl: 56,0,3,3 + corner-tr: 81,0,3,3 + corner-bl: 56,25,3,3 + corner-br: 81,25,3,3 +sidebar-button-allies-pressed: chrome.png + background: 59,31,22,22 + border-r: 81,31,3,22 + border-l: 56,31,3,22 + border-b: 59,53,22,3 + border-t: 59,28,22,3 + corner-tl: 56,28,3,3 + corner-tr: 81,28,3,3 + corner-bl: 56,53,3,3 + corner-br: 81,53,3,3 +sidebar-button-allies-highlighted: chrome.png + background: 87,31,22,22 + border-r: 109,31,3,22 + border-l: 84,31,3,22 + border-b: 87,53,22,3 + border-t: 87,28,22,3 + corner-tl: 84,28,3,3 + corner-tr: 109,28,3,3 + corner-bl: 84,53,3,3 + corner-br: 109,53,3,3 +sidebar-button-allies-highlighted-hover: chrome.png + background: 87,3,22,22 + border-r: 109,3,3,22 + border-l: 84,3,3,22 + border-b: 87,25,22,3 + border-t: 87,0,22,3 + corner-tl: 84,0,3,3 + corner-tr: 109,0,3,3 + corner-bl: 84,25,3,3 + corner-br: 109,25,3,3 +sidebar-button-allies-highlighted-pressed: chrome.png + background: 87,31,22,22 + border-r: 109,31,3,22 + border-l: 84,31,3,22 + border-b: 87,53,22,3 + border-t: 87,28,22,3 + corner-tl: 84,28,3,3 + corner-tr: 109,28,3,3 + corner-bl: 84,53,3,3 + corner-br: 109,53,3,3 +sidebar-button-allies-disabled: chrome.png + background: 171,3,22,22 + border-r: 193,3,3,22 + border-l: 168,3,3,22 + border-b: 171,25,22,3 + border-t: 171,0,22,3 + corner-tl: 168,0,3,3 + corner-tr: 193,0,3,3 + corner-bl: 168,25,3,3 + corner-br: 193,25,3,3 +sidebar-button-allies-highlighted-disabled: chrome.png + background: 171,3,22,22 + border-r: 193,3,3,22 + border-l: 168,3,3,22 + border-b: 171,25,22,3 + border-t: 171,0,22,3 + corner-tl: 168,0,3,3 + corner-tr: 193,0,3,3 + corner-bl: 168,25,3,3 + corner-br: 193,25,3,3 + +command-button-allies: chrome.png + background: 59,31,22,22 +command-button-allies-hover: chrome.png + background: 59,3,22,22 +command-button-allies-pressed: chrome.png + background: 59,31,22,22 +command-button-allies-highlighted: chrome.png + background: 87,31,22,22 +command-button-allies-highlighted-hover: chrome.png + background: 87,3,22,22 +command-button-allies-highlighted-pressed: chrome.png + background: 87,31,22,22 +command-button-allies-disabled: chrome.png + background: 59,31,22,22 +command-button-allies-highlighted-disabled: chrome.png + background: 87,31,22,22 + +sidebar-soviet: chrome.png + background-top: 274,167,238,290 + background-iconrow: 274,457,238,47 + background-bottom: 274,504,238,8 + background-supportoverlay: 64,75,64,48 + +sidebar-button-soviet: chrome.png + background: 3,31,22,22 + border-r: 25,31,3,22 + border-l: 0,31,3,22 + border-b: 3,53,22,3 + border-t: 3,28,22,3 + corner-tl: 0,28,3,3 + corner-tr: 25,28,3,3 + corner-bl: 0,53,3,3 + corner-br: 25,53,3,3 +sidebar-button-soviet-hover: chrome.png + background: 3,3,22,22 + border-r: 25,3,3,22 + border-l: 0,3,3,22 + border-b: 3,25,22,3 + border-t: 3,0,22,3 + corner-tl: 0,0,3,3 + corner-tr: 25,0,3,3 + corner-bl: 0,25,3,3 + corner-br: 25,25,3,3 +sidebar-button-soviet-pressed: chrome.png + background: 3,31,22,22 + border-r: 25,31,3,22 + border-l: 0,31,3,22 + border-b: 3,53,22,3 + border-t: 3,28,22,3 + corner-tl: 0,28,3,3 + corner-tr: 25,28,3,3 + corner-bl: 0,53,3,3 + corner-br: 25,53,3,3 +sidebar-button-soviet-highlighted: chrome.png + background: 31,31,22,22 + border-r: 53,31,3,22 + border-l: 28,31,3,22 + border-b: 31,53,22,3 + border-t: 31,28,22,3 + corner-tl: 28,28,3,3 + corner-tr: 53,28,3,3 + corner-bl: 28,53,3,3 + corner-br: 53,53,3,3 +sidebar-button-soviet-highlighted-hover: chrome.png + background: 31,3,22,22 + border-r: 53,3,3,22 + border-l: 28,3,3,22 + border-b: 31,25,22,3 + border-t: 31,0,22,3 + corner-tl: 28,0,3,3 + corner-tr: 53,0,3,3 + corner-bl: 28,25,3,3 + corner-br: 53,25,3,3 +sidebar-button-soviet-highlighted-pressed: chrome.png + background: 31,31,22,22 + border-r: 53,31,3,22 + border-l: 28,31,3,22 + border-b: 31,53,22,3 + border-t: 31,28,22,3 + corner-tl: 28,28,3,3 + corner-tr: 53,28,3,3 + corner-bl: 28,53,3,3 + corner-br: 53,53,3,3 +sidebar-button-soviet-disabled: chrome.png + background: 171,3,22,22 + border-r: 193,3,3,22 + border-l: 168,3,3,22 + border-b: 171,25,22,3 + border-t: 171,0,22,3 + corner-tl: 168,0,3,3 + corner-tr: 193,0,3,3 + corner-bl: 168,25,3,3 + corner-br: 193,25,3,3 +sidebar-button-soviet-highlighted-disabled: chrome.png + background: 171,3,22,22 + border-r: 193,3,3,22 + border-l: 168,3,3,22 + border-b: 171,25,22,3 + border-t: 171,0,22,3 + corner-tl: 168,0,3,3 + corner-tr: 193,0,3,3 + corner-bl: 168,25,3,3 + corner-br: 193,25,3,3 + +command-button-soviet: chrome.png + background: 3,31,22,22 +command-button-soviet-hover: chrome.png + background: 3,3,22,22 +command-button-soviet-pressed: chrome.png + background: 3,31,22,22 +command-button-soviet-highlighted: chrome.png + background: 31,31,22,22 +command-button-soviet-highlighted-hover: chrome.png + background: 31,3,22,22 +command-button-soviet-highlighted-pressed: chrome.png + background: 31,31,22,22 +command-button-soviet-disabled: chrome.png + background: 3,31,22,22 +command-button-soviet-highlighted-disabled: chrome.png + background: 31,31,22,22 + +sidebar-bits: chrome.png + production-tooltip-time: 416, 80, 16, 16 + production-tooltip-power: 432, 80, 16, 16 + production-tooltip-cost: 448, 80, 16, 16 + production-iconoverlay: 128,75,238,48 + commandbar-background: 0,123,434,44 + +power-icons: chrome.png + power-normal: 350,0,12,18 + power-critical: 363,0,12,18 + +production-icons: chrome.png + building: 384,0,16,16 + building-disabled: 384,16,16,16 + building-alert: 384,32,16,16 + defense: 400,0,16,16 + defense-disabled: 400,16,16,16 + defense-alert: 400,32,16,16 + infantry: 416,0,16,16 + infantry-disabled: 416,16,16,16 + infantry-alert: 416,32,16,16 + vehicle: 432,0,16,16 + vehicle-disabled: 432,16,16,16 + vehicle-alert: 432,32,16,16 + aircraft: 448,0,16,16 + aircraft-disabled: 448,16,16,16 + aircraft-alert: 448,32,16,16 + ship: 496,48,16,16 + ship-disabled: 496,64,16,16 + ship-alert: 496,80,16,16 + +order-icons: chrome.png + options: 480,0,16,16 + options-disabled: 480,16,16,16 + options-active: 480,32,16,16 + debug: 351,48,16,16 + debug-disabled: 351,64,16,16 + debug-active: 351,80,16,16 + diplomacy: 464,48,16,16 + diplomacy-disabled: 464,64,16,16 + diplomacy-active: 464,80,16,16 + sell: 496,0,16,16 + sell-disabled: 496,16,16,16 + sell-active: 496,32,16,16 + repair: 384,48,16,16 + repair-disabled: 384,64,16,16 + repair-active: 384,80,16,16 + beacon: 400,48,16,16 + beacon-disabled: 400,64,16,16 + beacon-active: 400,80,16,16 + power: 480,48,16,16 + power-disabled: 480,64,16,16 + power-active: 480,80,16,16 + stats: 368,48,16,16 + stats-disabled: 368,64,16,16 + stats-active: 368,80,16,16 + +command-icons: chrome.png + attack-move: 512,0,24,24 + attack-move-disabled: 512,24,24,24 + force-move: 536,0,24,24 + force-move-disabled: 536,24,24,24 + force-attack: 560,0,24,24 + force-attack-disabled: 560,24,24,24 + guard: 584,0,24,24 + guard-disabled: 584,24,24,24 + deploy: 608,0,24,24 + deploy-disabled: 608,24,24,24 + scatter: 632,0,24,24 + scatter-disabled: 632,24,24,24 + stop: 656,0,24,24 + stop-disabled: 656,24,24,24 + queue-orders: 680,0,24,24 + queue-orders-disabled: 680,24,24,24 + +stance-icons: chrome.png + attack-anything: 512,48,16,16 + attack-anything-disabled: 528,48,16,16 + attack-anything-active: 544,48,16,16 + defend: 560,48,16,16 + defend-disabled: 576,48,16,16 + defend-active: 592,48,16,16 + return-fire: 608,48,16,16 + return-fire-disabled: 624,48,16,16 + return-fire-active: 640,48,16,16 + hold-fire: 656,48,16,16 + hold-fire-disabled: 672,48,16,16 + hold-fire-active: 688,48,16,16 + +sidebar-observer: chrome.png + background: 512,167,238,287 + replay-bottom: 512,454,238,40 + observer-bottom: 512,495,238,8 + +sidebar-button-observershroud: chrome.png +sidebar-button-observershroud-pressed: chrome.png +sidebar-button-observershroud-hover: chrome.png + +sidebar-button-observer: chrome.png + background: 117,33,18,18 + border-r: 135,33,5,18 + border-l: 112,33,5,18 + border-b: 117,51,18,5 + border-t: 117,28,18,5 + corner-tl: 112,28,5,5 + corner-tr: 135,28,5,5 + corner-bl: 112,51,5,5 + corner-br: 135,51,5,5 +sidebar-button-observer-hover: chrome.png + background: 117,5,18,18 + border-r: 135,5,5,18 + border-l: 112,5,5,18 + border-b: 117,23,18,5 + border-t: 117,0,18,5 + corner-tl: 112,0,5,5 + corner-tr: 135,0,5,5 + corner-bl: 112,23,5,5 + corner-br: 135,23,5,5 +sidebar-button-observer-pressed: chrome.png + background: 117,33,18,18 + border-r: 135,33,5,18 + border-l: 112,33,5,18 + border-b: 117,51,18,5 + border-t: 117,28,18,5 + corner-tl: 112,28,5,5 + corner-tr: 135,28,5,5 + corner-bl: 112,51,5,5 + corner-br: 135,51,5,5 +sidebar-button-observer-highlighted: chrome.png + background: 145,33,18,18 + border-r: 163,33,5,18 + border-l: 140,33,5,18 + border-b: 145,51,18,5 + border-t: 145,28,18,5 + corner-tl: 140,28,5,5 + corner-tr: 163,28,5,5 + corner-bl: 140,51,5,5 + corner-br: 163,51,5,5 +sidebar-button-observer-highlighted-hover: chrome.png + background: 145,5,18,18 + border-r: 163,5,5,18 + border-l: 140,5,5,18 + border-b: 145,23,18,5 + border-t: 145,0,18,5 + corner-tl: 140,0,5,5 + corner-tr: 163,0,5,5 + corner-bl: 140,23,5,5 + corner-br: 163,23,5,5 +sidebar-button-observer-highlighted-pressed: chrome.png + background: 33,33,18,18 + border-r: 51,33,5,18 + border-l: 28,33,5,18 + border-b: 33,51,18,5 + border-t: 33,28,18,5 + corner-tl: 28,28,5,5 + corner-tr: 51,28,5,5 + corner-bl: 28,51,5,5 + corner-br: 51,51,5,5 +sidebar-button-observer-disabled: chrome.png + background: 173,5,18,18 + border-r: 191,5,5,18 + border-l: 168,5,5,18 + border-b: 173,23,18,5 + border-t: 173,0,18,5 + corner-tl: 168,0,5,5 + corner-tr: 191,0,5,5 + corner-bl: 168,23,5,5 + corner-br: 191,23,5,5 +sidebar-button-observer-highlighted-disabled: chrome.png + background: 173,5,18,18 + border-r: 191,5,5,18 + border-l: 168,5,5,18 + border-b: 173,23,18,5 + border-t: 173,0,18,5 + corner-tl: 168,0,5,5 + corner-tr: 191,0,5,5 + corner-bl: 168,23,5,5 + corner-br: 191,23,5,5 + +observer-scrollpanel-button: dialog.png + background: 769,257,126,126 + border-r: 895,257,1,126 + border-l: 768,257,1,126 + border-b: 769,383,126,1 + border-t: 769,256,126,1 + corner-tl: 768,256,1,1 + corner-tr: 895,256,1,1 + corner-bl: 768,383,1,1 + corner-br: 895,383,1,1 + +observer-scrollpanel-button-hover: dialog.png + background: 769,257,126,126 + border-r: 895,257,1,126 + border-l: 768,257,1,126 + border-b: 769,383,126,1 + border-t: 769,256,126,1 + corner-tl: 768,256,1,1 + corner-tr: 895,256,1,1 + corner-bl: 768,383,1,1 + corner-br: 895,383,1,1 + +observer-scrollpanel-button-pressed: dialog.png + background: 897,257,126,126 + border-r: 1023,257,1,126 + border-l: 896,257,1,126 + border-b: 897,383,126,1 + border-t: 897,256,126,1 + corner-tl: 896,256,1,1 + corner-tr: 1023,256,1,1 + corner-bl: 896,383,1,1 + corner-br: 1023,383,1,1 + +observer-scrollpanel-button-disabled: dialog.png + background: 769,385,126,126 + border-r: 895,385,1,126 + border-l: 768,385,1,126 + border-b: 769,511,126,1 + border-t: 769,384,126,1 + corner-tl: 768,384,1,1 + corner-tr: 895,384,1,1 + corner-bl: 768,511,1,1 + corner-br: 895,511,1,1 + +observer-scrollheader-selected: dialog.png + background: 769,385,126,126 + border-r: 895,385,1,126 + border-l: 768,385,1,126 + border-b: 769,511,126,1 + border-t: 769,384,126,1 + corner-tl: 768,384,1,1 + corner-tr: 895,384,1,1 + corner-bl: 768,511,1,1 + corner-br: 895,511,1,1 + +observer-scrollitem-selected: dialog.png + background: 897,257,126,126 + border-r: 1023,257,1,126 + border-l: 896,257,1,126 + border-b: 897,383,126,1 + border-t: 897,256,126,1 + corner-tl: 896,256,1,1 + corner-tr: 1023,256,1,1 + corner-bl: 896,383,1,1 + corner-br: 1023,383,1,1 + +observer-scrollitem-hover: dialog.png + background: 769,257,126,126 + border-r: 895,257,1,126 + border-l: 768,257,1,126 + border-b: 769,383,126,1 + border-t: 769,256,126,1 + corner-tl: 768,256,1,1 + corner-tr: 895,256,1,1 + corner-bl: 768,383,1,1 + corner-br: 895,383,1,1 + +# Used for the main menu frame +dialog: dialog.png + background: 0,0,480,480 + border-r: 489,0,9,192 + border-l: 480,0,9,192 + border-b: 0,489,191,9 + border-t: 0,480,191,9 + corner-tl: 191,480,9,9 + corner-tr: 200,480,9,9 + corner-bl: 191,489,9,9 + corner-br: 200,489,9,9 + +# Used for Music and Map selection (normal button) +dialog2: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +# It's a Container, used in various places, like Hotkeys, ColorPicker, Asset Browser frames (looks like a pressed button) +dialog3: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + +# Used for tooltips and the video player +dialog4: dialog.png + background: 517,392,54,54 + border-t: 517,387,54,6 + border-b: 517,446,54,6 + border-l: 512,392,6,54 + border-r: 571,392,6,54 + corner-tl: 512,387,6,6 + corner-tr: 571,387,6,6 + corner-bl: 512,446,6,6 + corner-br: 571,446,6,6 + +# completely black tile +dialog5: dialog.png + background: 579,387,64,64 + border-t: 579,387,64,1 + border-b: 579,451,64,1 + border-l: 579,387,1,64 + border-r: 643,387,1,64 + corner-tl: 579,387,1,1 + corner-tr: 643,387,1,1 + corner-bl: 579,446,1,1 + corner-br: 643,446,1,1 + +lobby-bits: buttons.png + spawn-unclaimed: 159,5,23,22 + spawn-claimed: 127,5,23,22 + admin: 187,5,7,5 + colorpicker: 127,5,23,22 + huepicker: 194,0,7,15 + protected: 202,0,10,13 + protected-disabled: 213,0,10,13 + +reload-icon: chrome.png + enabled: 512,80,16,16 + disabled-0: 512,64,16,16 + disabled-1: 528,64,16,16 + disabled-2: 544,64,16,16 + disabled-3: 560,64,16,16 + disabled-4: 576,64,16,16 + disabled-5: 592,64,16,16 + disabled-6: 608,64,16,16 + disabled-7: 624,64,16,16 + disabled-8: 640,64,16,16 + disabled-9: 656,64,16,16 + disabled-10: 672,64,16,16 + disabled-11: 688,64,16,16 + +strategic: buttons.png + unowned: 127,5,23,22 + critical_unowned: 127,27,23,22 + enemy_owned: 159,27,23,22 + player_owned: 159,49,23,22 + +flags: buttons.png + soviet: 0,112,30,15 + allies: 30,112,30,15 + Random: 60,112,30,15 + RandomAllies: 30,172,30,15 + RandomSoviet: 0,172,30,15 + spectator: 60,112,30,15 + + russia: 0,127,30,15 + ukraine: 30,127,30,15 + england: 60,127,30,15 + + germany: 0,142,30,15 + spain: 30,142,30,15 + france: 60,142,30,15 + + turkey: 0,157,30,15 + greece: 30,157,30,15 + +music: buttons.png + pause: 0,193,25,25 + stop: 25,193,25,25 + play: 55,193,25,25 + next: 82,193,25,25 + prev: 110,193,25,25 + fastforward: 131,193,25,25 + slowmo: 159,193,25,25 + +scrollbar: buttons.png + down_arrow: 116,140,16,16 + down_pressed: 116,140,16,16 + up_arrow: 132,140,16,16 + up_pressed: 132,140,16,16 + +# A copy of dialog3 (pressed button) +progressbar-bg: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + +# A copy of dialog2 (normal button) +progressbar-thumb: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +# A copy of dialog2 (normal button) +button: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +# 5% lighter than a normal button (mouseover) +button-hover: dialog.png + background: 513,129,126,126 + border-r: 639,129,1,126 + border-l: 512,129,1,126 + border-b: 513,255,126,1 + border-t: 513,128,126,1 + corner-tl: 512,128,1,1 + corner-tr: 639,128,1,1 + corner-bl: 512,255,1,1 + corner-br: 639,255,1,1 + +# A copy of dialog3 (pressed button) +button-pressed: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + +# 50% grey (disabled button) +button-disabled: dialog.png + background: 513,257,126,126 + border-r: 639,257,1,126 + border-l: 512,257,1,126 + border-b: 513,383,126,1 + border-t: 513,256,126,1 + corner-tl: 512,256,1,1 + corner-tr: 639,256,1,1 + corner-bl: 512,383,1,1 + corner-br: 639,383,1,1 + +# 10% darker than a normal button - Used in Settings when you select Display Audio Input or Advanced +button-highlighted: dialog.png + background: 769,129,126,126 + border-r: 895,129,1,126 + border-l: 768,129,1,126 + border-b: 769,255,126,1 + border-t: 769,128,126,1 + corner-tl: 768,128,1,1 + corner-tr: 895,128,1,1 + corner-bl: 768,255,1,1 + corner-br: 895,255,1,1 + +# A copy of button-highlighted - Used in Settings when you select Display Audio Input or Advanced +button-highlighted-hover: dialog.png + background: 769,129,126,126 + border-r: 895,129,1,126 + border-l: 768,129,1,126 + border-b: 769,255,126,1 + border-t: 769,128,126,1 + corner-tl: 768,128,1,1 + corner-tr: 895,128,1,1 + corner-bl: 768,255,1,1 + corner-br: 895,255,1,1 + +# Used in Settings when you select Display Audio Input or Advanced +button-highlighted-pressed: dialog.png + background: 897,129,126,126 + border-r: 1023,129,1,126 + border-l: 896,129,1,126 + border-b: 897,255,126,1 + border-t: 897,128,126,1 + corner-tl: 896,128,1,1 + corner-tr: 1023,128,1,1 + corner-bl: 896,255,1,1 + corner-br: 1023,255,1,1 + +# A copy of button-highlighted - Used in Settings when you select Display Audio Input or Advanced +button-highlighted-disabled: dialog.png + background: 769,129,126,126 + border-r: 895,129,1,126 + border-l: 768,129,1,126 + border-b: 769,255,126,1 + border-t: 769,128,126,1 + corner-tl: 768,128,1,1 + corner-tr: 895,128,1,1 + corner-bl: 768,255,1,1 + corner-br: 895,255,1,1 + +# vivid red - Used for the Battlefields News button +newsbutton: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +newsbutton-hover: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +newsbutton-highlighted: dialog.png + background: 769,1,126,126 + border-r: 895,1,1,126 + border-l: 768,1,1,126 + border-b: 769,127,126,1 + border-t: 769,0,126,1 + corner-tl: 768,0,1,1 + corner-tr: 895,0,1,1 + corner-bl: 768,127,1,1 + corner-br: 895,127,1,1 + +newsbutton-highlighted-hover: dialog.png + background: 769,1,126,126 + border-r: 895,1,1,126 + border-l: 768,1,1,126 + border-b: 769,127,126,1 + border-t: 769,0,126,1 + corner-tl: 768,0,1,1 + corner-tr: 895,0,1,1 + corner-bl: 768,127,1,1 + corner-br: 895,127,1,1 + +newsbutton-highlighted-pressed: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + +newsbutton-pressed: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + +# A copy of dialog3 (pressed button) +textfield: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + +# A copy of checkbox-hover +textfield-hover: dialog.png + background: 641,129,126,126 + border-r: 767,129,1,126 + border-l: 640,129,1,126 + border-b: 641,255,126,1 + border-t: 641,128,126,1 + corner-tl: 640,128,1,1 + corner-tr: 767,128,1,1 + corner-bl: 640,255,1,1 + corner-br: 767,255,1,1 + +# Same as button-disabled-pressed +textfield-disabled: dialog.png + background: 641,257,126,126 + border-r: 767,257,1,126 + border-l: 640,257,1,126 + border-b: 641,383,126,1 + border-t: 641,256,126,1 + corner-tl: 640,256,1,1 + corner-tr: 767,256,1,1 + corner-bl: 640,383,1,1 + corner-br: 767,383,1,1 + +# A copy of dialog3 (pressed button) +textfield-focused: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + +# A copy of dialog3 (pressed button) +scrollpanel-bg: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + + +# A copy of dialog2 (normal button) +scrollpanel-button: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +# A copy of button-hover +scrollpanel-button-hover: dialog.png + background: 513,129,126,126 + border-r: 639,129,1,126 + border-l: 512,129,1,126 + border-b: 513,255,126,1 + border-t: 513,128,126,1 + corner-tl: 512,128,1,1 + corner-tr: 639,128,1,1 + corner-bl: 512,255,1,1 + corner-br: 639,255,1,1 + +# A copy of dialog3 (pressed button) +scrollpanel-button-pressed: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + +# A copy of dialog2 (normal button) +scrollpanel-button-disabled: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +slider: dialog.png + tick: 512,1,2,4 + +# A copy of dialog3 (pressed button) +slider-track: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +# A copy of dialog2 (normal button) +slider-thumb: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +# A copy of button-hover +slider-thumb-hover: dialog.png + background: 513,129,126,126 + border-r: 639,129,1,126 + border-l: 512,129,1,126 + border-b: 513,255,126,1 + border-t: 513,128,126,1 + corner-tl: 512,128,1,1 + corner-tr: 639,128,1,1 + corner-bl: 512,255,1,1 + corner-br: 639,255,1,1 + +# A copy of dialog3 (pressed button) +slider-thumb-pressed: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + +# A copy of dialog2 (normal button) +slider-thumb-disabled: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +# A copy of dialog3 (pressed button) +checkbox: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + +checkbox-bits: buttons.png + checked: 100,157,16,16 + checked-disabled: 100,173,16,16 + crossed: 116,157,16,16 + crossed-disabled: 116,173,16,16 + +checkbox-hover: dialog.png + background: 641,129,126,126 + border-r: 767,129,1,126 + border-l: 640,129,1,126 + border-b: 641,255,126,1 + border-t: 641,128,126,1 + corner-tl: 640,128,1,1 + corner-tr: 767,128,1,1 + corner-bl: 640,255,1,1 + corner-br: 767,255,1,1 + +# Same as button-disabled-pressed +checkbox-disabled: dialog.png + background: 641,257,126,126 + border-r: 767,257,1,126 + border-l: 640,257,1,126 + border-b: 641,383,126,1 + border-t: 641,256,126,1 + corner-tl: 640,256,1,1 + corner-tr: 767,256,1,1 + corner-bl: 640,383,1,1 + corner-br: 767,383,1,1 + +# Same as button-highlighted-pressed +checkbox-highlighted: dialog.png + background: 897,1,126,126 + border-r: 1023,1,1,126 + border-l: 896,1,1,126 + border-b: 897,127,126,1 + border-t: 897,0,126,1 + corner-tl: 896,0,1,1 + corner-tr: 1023,0,1,1 + corner-bl: 896,127,1,1 + corner-br: 1023,127,1,1 + +# A copy of dialog3 (pressed button) +scrollitem-selected: dialog.png + background: 641,1,126,126 + border-r: 767,1,1,126 + border-l: 640,1,1,126 + border-b: 641,127,126,1 + border-t: 641,0,126,1 + corner-tl: 640,0,1,1 + corner-tr: 767,0,1,1 + corner-bl: 640,127,1,1 + corner-br: 767,127,1,1 + +# A copy of dialog2 (normal button) +scrollitem-hover: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +# A copy of dialog2 (normal button) +scrollheader-selected: dialog.png + background: 513,1,126,126 + border-r: 639,1,1,126 + border-l: 512,1,1,126 + border-b: 513,127,126,1 + border-t: 513,0,126,1 + corner-tl: 512,0,1,1 + corner-tr: 639,0,1,1 + corner-bl: 512,127,1,1 + corner-br: 639,127,1,1 + +logos: loadscreen.png + logo: 0,0,256,256 + +mainmenu-border: dialog.png + border-r: 728,427,40,40 + border-l: 648,427,40,40 + border-b: 688,467,40,40 + border-t: 688,387,40,40 + corner-tl: 648,387,40,40 + corner-tr: 728,387,40,40 + corner-bl: 648,467,40,40 + corner-br: 728,467,40,40 + +dropdown: dialog.png + separator: 512,1,1,19 + observer-separator: 768,256,1,19 \ No newline at end of file diff --git a/mods/ura/chrome/ingame-observer.yaml b/mods/ura/chrome/ingame-observer.yaml new file mode 100644 index 0000000..e72c558 --- /dev/null +++ b/mods/ura/chrome/ingame-observer.yaml @@ -0,0 +1,216 @@ +Container@OBSERVER_WIDGETS: + Children: + SupportPowerTimer@SUPPORT_POWER_TIMER: + X: 10 + Y: 10 + Order: Descending + Image@SIDEBAR_BACKGROUND_TOP: + X: WINDOW_RIGHT - 250 + Y: 10 + Width: 238 + Height: 287 + ImageCollection: sidebar-observer + ImageName: background + ClickThrough: false + Children: + Background@GAME_TIMER_BLOCK: + Logic: GameTimerLogic + X: 26 + Y: 10 + Width: 120 + Height: 22 + Background: sidebar-button-observer + Children: + LabelWithTooltip@GAME_TIMER: + Y: 0 - 1 + Width: PARENT_RIGHT + Height: PARENT_BOTTOM + Align: Center + Font: TinyBold + TooltipContainer: TOOLTIP_CONTAINER + TooltipTemplate: SIMPLE_TOOLTIP + Container@TOP_BUTTONS: + Logic: MenuButtonsChromeLogic + StatisticsBasicKey: StatisticsBasic + StatisticsEconomyKey: StatisticsEconomy + StatisticsProductionKey: StatisticsProduction + StatisticsCombatKey: StatisticsCombat + StatisticsGraphKey: StatisticsGraph + X: 9 + Y: 7 + Children: + LogicKeyListener@OBSERVER_KEY_LISTENER: + MenuButton@OBSERVER_STATS_BUTTON: + Key: StatisticsBasic + MenuContainer: INGAME_OBSERVERSTATS_BG + HideIngameUI: false + Pause: false + X: 160 + Width: 28 + Height: 28 + Background: sidebar-button-observer + TooltipText: Statistics + TooltipContainer: TOOLTIP_CONTAINER + VisualHeight: 0 + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: order-icons + ImageName: stats + MenuButton@OPTIONS_BUTTON: + Key: escape + X: 192 + Width: 28 + Height: 28 + Background: sidebar-button-observer + TooltipText: Options + TooltipContainer: TOOLTIP_CONTAINER + DisableWorldSounds: true + VisualHeight: 0 + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: order-icons + ImageName: options + Container@RADAR: + Children: + Radar@INGAME_RADAR: + WorldInteractionController: INTERACTION_CONTROLLER + X: 9 + Y: 41 + Width: 220 + Height: 220 + DropDownButton@SHROUD_SELECTOR: + Logic: ObserverShroudSelectorLogic + CombinedViewKey: ObserverCombinedView + WorldViewKey: ObserverWorldView + X: 6 + Y: 262 + Width: 226 + Height: 25 + Font: Bold + VisualHeight: 0 + Background: sidebar-button-observershroud + SeparatorImage: observer-separator + Children: + LogicKeyListener@SHROUD_KEYHANDLER: + Image@FLAG: + X: 4 + Y: 6 + Width: 32 + Height: 16 + Label@LABEL: + X: 40 + Width: 60 + Height: 25 + Shadow: True + Label@NOFLAG_LABEL: + X: 5 + Width: PARENT_RIGHT + Height: 25 + Shadow: True + Image@SIDEBAR_BACKGROUND_BOTTOM: + X: WINDOW_RIGHT - 250 + Y: 297 + Width: 238 + Height: 8 + ImageCollection: sidebar-observer + ImageName: observer-bottom + Image@REPLAY_PLAYER: + Logic: ReplayControlBarLogic + X: WINDOW_RIGHT - 250 + Y: 297 + Width: 238 + Height: 40 + Visible: false + ImageCollection: sidebar-observer + ImageName: replay-bottom + ClickThrough: false + Visible: false + Children: + Button@BUTTON_PAUSE: + X: 9 + Y: 5 + Width: 28 + Height: 28 + Background: sidebar-button-observer + Key: Pause + TooltipText: Pause + TooltipContainer: TOOLTIP_CONTAINER + VisualHeight: 0 + Children: + Image@IMAGE_PAUSE: + X: 2 + Y: 2 + ImageCollection: music + ImageName: pause + Button@BUTTON_PLAY: + X: 9 + Y: 5 + Width: 28 + Height: 28 + Background: sidebar-button-observer + Key: Pause + TooltipText: Play + TooltipContainer: TOOLTIP_CONTAINER + VisualHeight: 0 + Children: + Image@IMAGE_PLAY: + X: 2 + Y: 1 + ImageCollection: music + ImageName: play + Button@BUTTON_SLOW: + X: 49 + Y: 8 + Width: 42 + Height: 22 + BaseLine: 1 + Background: sidebar-button-observer + Key: ReplaySpeedSlow + TooltipText: Slow speed + TooltipContainer: TOOLTIP_CONTAINER + VisualHeight: 0 + Text: 50% + Font: TinyBold + Button@BUTTON_REGULAR: + X: 95 + Y: 8 + Width: 42 + Height: 22 + BaseLine: 1 + Background: sidebar-button-observer + Key: ReplaySpeedRegular + TooltipText: Regular speed + TooltipContainer: TOOLTIP_CONTAINER + VisualHeight: 0 + Text: 100% + Font: TinyBold + Button@BUTTON_FAST: + X: 141 + Y: 8 + Width: 42 + Height: 22 + BaseLine: 1 + Background: sidebar-button-observer + Key: ReplaySpeedFast + TooltipText: Fast speed + TooltipContainer: TOOLTIP_CONTAINER + VisualHeight: 0 + Text: 200% + Font: TinyBold + Button@BUTTON_MAXIMUM: + X: 187 + Y: 8 + Width: 42 + Height: 22 + BaseLine: 1 + Background: sidebar-button-observer + Key: ReplaySpeedMax + TooltipText: Maximum speed + TooltipContainer: TOOLTIP_CONTAINER + VisualHeight: 0 + Text: MAX + Font: TinyBold diff --git a/mods/ura/chrome/ingame-player.yaml b/mods/ura/chrome/ingame-player.yaml new file mode 100644 index 0000000..e1c6630 --- /dev/null +++ b/mods/ura/chrome/ingame-player.yaml @@ -0,0 +1,618 @@ +Container@PLAYER_WIDGETS: + Children: + LogicKeyListener@CONTROLGROUP_KEYHANDLER: + Logic: ControlGroupLogic + LogicTicker@SIDEBAR_TICKER: + Container@SUPPORT_POWERS: + Logic: SupportPowerBinLogic + X: 10 + Y: 10 + Children: + SupportPowers@SUPPORT_PALETTE: + IconSize: 62, 46 + IconSpriteOffset: -1, -1 + TooltipContainer: TOOLTIP_CONTAINER + ReadyText: READY + HoldText: ON HOLD + HotkeyPrefix: SupportPower + HotkeyCount: 6 + Container@PALETTE_FOREGROUND: + Children: + Image@ICON_TEMPLATE: + Logic: AddFactionSuffixLogic + X: 0 - 2 + Y: 0 - 2 + Width: 62 + Height: 46 + IgnoreMouseOver: true + ImageCollection: sidebar + ImageName: background-supportoverlay + SupportPowerTimer@SUPPORT_POWER_TIMER: + X: 80 + Y: 10 + Order: Descending + Image@COMMAND_BAR_BACKGROUND: + X: 5 + Y: WINDOW_BOTTOM - HEIGHT - 5 + Width: 416 + Height: 44 + ImageCollection: sidebar-bits + ImageName: commandbar-background + Container@COMMAND_BAR: + Logic: CommandBarLogic + X: 14 + Y: WINDOW_BOTTOM - HEIGHT - 14 + Width: 275 + Height: 26 + Children: + LogicKeyListener@MODIFIER_OVERRIDES: + Button@ATTACK_MOVE: + Logic: AddFactionSuffixLogic + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + Key: AttackMove + DisableKeySound: true + TooltipText: Attack Move + TooltipDesc: Selected units will move to the desired location\nand attack any enemies they encounter en route.\n\nHold {(Ctrl)} while targeting to order an Assault Move\nthat attacks any units or structures encountered en route.\n\nLeft-click icon then right-click on target location. + TooltipContainer: TOOLTIP_CONTAINER + TooltipTemplate: BUTTON_WITH_DESC_HIGHLIGHT_TOOLTIP + Children: + Image@ICON: + X: 5 + Y: 1 + ImageCollection: command-icons + ImageName: attack-move + Button@FORCE_MOVE: + Logic: AddFactionSuffixLogic + X: 34 + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + DisableKeySound: true + TooltipText: Force Move + TooltipDesc: Selected units will move to the desired location\n - Default activity for the target is suppressed\n - Vehicles will attempt to crush enemies at the target location\n - Units entering transports will consider nearby alternatives\n - Chrono Tanks will teleport towards the target location\n\nLeft-click icon then right-click on target.\nHold {(Alt)} to activate temporarily while commanding units. + TooltipContainer: TOOLTIP_CONTAINER + TooltipTemplate: BUTTON_WITH_DESC_HIGHLIGHT_TOOLTIP + Children: + Image@ICON: + X: 5 + Y: 1 + ImageCollection: command-icons + ImageName: force-move + Button@FORCE_ATTACK: + Logic: AddFactionSuffixLogic + X: 68 + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + DisableKeySound: true + TooltipText: Force Attack + TooltipDesc: Selected units will attack the targeted unit or location\nignoring their default activity for the target.\n\nLeft-click icon then right-click on target.\nHold {(Ctrl)} to activate temporarily while commanding units. + TooltipContainer: TOOLTIP_CONTAINER + TooltipTemplate: BUTTON_WITH_DESC_HIGHLIGHT_TOOLTIP + Children: + Image@ICON: + X: 5 + Y: 1 + ImageCollection: command-icons + ImageName: force-attack + Button@GUARD: + Logic: AddFactionSuffixLogic + X: 102 + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + Key: Guard + DisableKeySound: true + TooltipText: Guard + TooltipDesc: Selected units will follow the targeted unit.\n\nLeft-click icon then right-click on target unit. + TooltipContainer: TOOLTIP_CONTAINER + Children: + Image@ICON: + X: 5 + Y: 1 + ImageCollection: command-icons + ImageName: guard + Button@DEPLOY: + Logic: AddFactionSuffixLogic + X: 136 + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + Key: Deploy + DisableKeyRepeat: true + DisableKeySound: true + TooltipText: Deploy + TooltipDesc: Selected units will perform their default deploy activity\n - MCVs will unpack into a Construction Yard\n - Construction Yards will re-pack into a MCV\n - Transports will unload their passengers\n - Demolition Trucks and MAD Tanks will self-destruct\n - Minelayers will deploy a mine\n - Aircraft will return to base\n\nActs immediately on selected units. + TooltipContainer: TOOLTIP_CONTAINER + Children: + Image@ICON: + X: 5 + Y: 1 + ImageCollection: command-icons + ImageName: deploy + Button@SCATTER: + Logic: AddFactionSuffixLogic + X: 170 + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + Key: Scatter + DisableKeyRepeat: true + DisableKeySound: true + TooltipText: Scatter + TooltipDesc: Selected units will stop their current activity\nand move to a nearby location.\n\nActs immediately on selected units. + TooltipContainer: TOOLTIP_CONTAINER + Children: + Image@ICON: + X: 5 + Y: 1 + ImageCollection: command-icons + ImageName: scatter + Button@STOP: + Logic: AddFactionSuffixLogic + X: 204 + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + Key: Stop + DisableKeyRepeat: true + DisableKeySound: true + TooltipText: Stop + TooltipDesc: Selected units will stop their current activity.\n\nActs immediately on selected units. + TooltipContainer: TOOLTIP_CONTAINER + Children: + Image@ICON: + X: 5 + Y: 1 + ImageCollection: command-icons + ImageName: stop + Button@QUEUE_ORDERS: + Logic: AddFactionSuffixLogic + X: 238 + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + DisableKeySound: true + TooltipText: Waypoint Mode + TooltipDesc: Use Waypoint Mode to give multiple linking commands\nto the selected units. Units will execute the commands\nimmediately upon receiving them.\n\nLeft-click icon then give commands in the game world.\nHold {(Shift)} to activate temporarily while commanding units. + TooltipContainer: TOOLTIP_CONTAINER + TooltipTemplate: BUTTON_WITH_DESC_HIGHLIGHT_TOOLTIP + Children: + Image@ICON: + X: 5 + Y: 1 + ImageCollection: command-icons + ImageName: queue-orders + Container@STANCE_BAR: + Logic: StanceSelectorLogic + X: 294 + Y: WINDOW_BOTTOM - HEIGHT - 14 + Width: 138 + Height: 26 + Children: + Button@STANCE_ATTACKANYTHING: + Logic: AddFactionSuffixLogic + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + Key: StanceAttackAnything + DisableKeyRepeat: true + DisableKeySound: true + TooltipText: Attack Anything Stance + TooltipDesc: Set the selected units to Attack Anything stance:\n - Units will attack enemy units and structures on sight\n - Units will pursue attackers across the battlefield + TooltipContainer: TOOLTIP_CONTAINER + Children: + Image@ICON: + X: 9 + Y: 5 + ImageCollection: stance-icons + ImageName: attack-anything + Button@STANCE_DEFEND: + Logic: AddFactionSuffixLogic + X: 34 + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + Key: StanceDefend + DisableKeyRepeat: true + DisableKeySound: true + TooltipText: Defend Stance + TooltipDesc: Set the selected units to Defend stance:\n - Units will attack enemy units on sight\n - Units will not move or pursue enemies + TooltipContainer: TOOLTIP_CONTAINER + Children: + Image@ICON: + X: 9 + Y: 5 + ImageCollection: stance-icons + ImageName: defend + Button@STANCE_RETURNFIRE: + Logic: AddFactionSuffixLogic + X: 68 + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + Key: StanceReturnFire + DisableKeyRepeat: true + DisableKeySound: true + TooltipText: Return Fire Stance + TooltipDesc: Set the selected units to Return Fire stance:\n - Units will retaliate against enemies that attack them\n - Units will not move or pursue enemies + TooltipContainer: TOOLTIP_CONTAINER + Children: + Image@ICON: + X: 9 + Y: 5 + ImageCollection: stance-icons + ImageName: return-fire + Button@STANCE_HOLDFIRE: + Logic: AddFactionSuffixLogic + X: 102 + Width: 34 + Height: 26 + VisualHeight: 0 + Background: command-button + Key: StanceHoldFire + DisableKeyRepeat: true + DisableKeySound: true + TooltipText: Hold Fire Stance + TooltipDesc: Set the selected units to Hold Fire stance:\n - Units will not fire upon enemies\n - Units will not move or pursue enemies + TooltipContainer: TOOLTIP_CONTAINER + Children: + Image@ICON: + X: 9 + Y: 5 + ImageCollection: stance-icons + ImageName: hold-fire + Image@SIDEBAR_BACKGROUND_TOP: + Logic: AddFactionSuffixLogic + X: WINDOW_RIGHT - 250 + Y: 10 + Width: 238 + Height: 291 + ImageCollection: sidebar + ImageName: background-top + ClickThrough: false + Children: + Container@TOP_BUTTONS: + Logic: MenuButtonsChromeLogic + X: 9 + Y: 7 + Children: + Button@BEACON_BUTTON: + Logic: BeaconOrderButtonLogic, AddFactionSuffixLogic + Width: 28 + Height: 28 + Background: sidebar-button + Key: PlaceBeacon + TooltipText: Place Beacon + TooltipContainer: TOOLTIP_CONTAINER + VisualHeight: 0 + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: order-icons + Button@SELL_BUTTON: + Logic: SellOrderButtonLogic, AddFactionSuffixLogic + X: 32 + Width: 28 + Height: 28 + Background: sidebar-button + Key: Sell + TooltipText: Sell + TooltipContainer: TOOLTIP_CONTAINER + VisualHeight: 0 + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: order-icons + Button@POWER_BUTTON: + Logic: PowerdownOrderButtonLogic, AddFactionSuffixLogic + X: 64 + Width: 28 + Height: 28 + Background: sidebar-button + Key: PowerDown + TooltipText: Power Down + TooltipContainer: TOOLTIP_CONTAINER + VisualHeight: 0 + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: order-icons + Button@REPAIR_BUTTON: + Logic: RepairOrderButtonLogic, AddFactionSuffixLogic + X: 96 + Width: 28 + Height: 28 + Background: sidebar-button + Key: Repair + TooltipText: Repair + TooltipContainer: TOOLTIP_CONTAINER + VisualHeight: 0 + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: order-icons + MenuButton@DEBUG_BUTTON: + Logic: AddFactionSuffixLogic + X: 128 + Width: 28 + Height: 28 + Background: sidebar-button + Key: escape Shift + TooltipText: Debug Menu + TooltipContainer: TOOLTIP_CONTAINER + DisableWorldSounds: true + VisualHeight: 0 + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: order-icons + ImageName: debug + MenuButton@OPTIONS_BUTTON: + Logic: AddFactionSuffixLogic + X: 192 + Width: 28 + Height: 28 + Background: sidebar-button + Key: escape + TooltipText: Options + TooltipContainer: TOOLTIP_CONTAINER + DisableWorldSounds: true + VisualHeight: 0 + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: order-icons + ImageName: options + Container@RADAR: + Logic: IngameRadarDisplayLogic + Children: + LogicTicker@RADAR_TICKER: + ColorBlock@RADAR_FADETOBLACK: + X: 8 + Y: 40 + Width: 222 + Height: 222 + Radar@RADAR_MINIMAP: + WorldInteractionController: INTERACTION_CONTROLLER + X: 9 + Y: 41 + Width: 220 + Height: 220 + Children: + VqaPlayer@PLAYER: + X: 8 + Y: 40 + Width: 220 + Height: 220 + Skippable: false + Label@GAME_TIMER: + Logic: GameTimerLogic + X: 3 + Y: 263 + Width: PARENT_RIGHT + Height: 22 + Align: Center + Font: TinyBold + LabelWithTooltip@CASH: + Logic: IngameCashCounterLogic + X: 35 + Y: 262 + Width: 50 + Height: 22 + Font: Bold + Text: {0} + TooltipContainer: TOOLTIP_CONTAINER + TooltipTemplate: SIMPLE_TOOLTIP + LabelWithTooltip@POWER: + Logic: IngamePowerCounterLogic + X: PARENT_RIGHT - WIDTH - 30 + Y: 262 + Width: 50 + Height: 22 + Align: Right + Font: Bold + Text: {0} + TooltipContainer: TOOLTIP_CONTAINER + TooltipTemplate: SIMPLE_TOOLTIP + Children: + Image@POWER_ICON: + X: PARENT_RIGHT + 4 + Y: 5 + ImageCollection: power-icons + ImageName: power-normal + Container@SIDEBAR_PRODUCTION: + Logic: ClassicProductionLogic + X: WINDOW_RIGHT - 250 + Y: 300 + Width: 238 + Height: 250 + Children: + Container@PALETTE_BACKGROUND: + Children: + Image@ROW_TEMPLATE: + Logic: AddFactionSuffixLogic + Width: 238 + Height: 47 + ClickThrough: false + ImageCollection: sidebar + ImageName: background-iconrow + Image@BOTTOM_CAP: + Logic: AddFactionSuffixLogic + Width: 238 + Height: 8 + ClickThrough: false + ImageCollection: sidebar + ImageName: background-bottom + LogicTicker@PRODUCTION_TICKER: + ProductionPalette@PRODUCTION_PALETTE: + X: 42 + Y: 1 + TooltipContainer: TOOLTIP_CONTAINER + ReadyText: READY + HoldText: ON HOLD + IconSize: 62, 46 + IconMargin: 1, 1 + IconSpriteOffset: -1, -1 + HotkeyPrefix: Production + HotkeyCount: 24 + Container@PALETTE_FOREGROUND: + X: 40 + Y: 0 - 1 + Children: + Image@ROW_TEMPLATE: + Width: 238 + Height: 47 + IgnoreMouseOver: true + ImageCollection: sidebar-bits + ImageName: production-iconoverlay + Container@PRODUCTION_TYPES: + X: 7 + Y: 2 + Width: 29 + Height: 240 + Children: + ProductionTypeButton@BUILDING: + Logic: AddFactionSuffixLogic + Width: 28 + Height: 28 + VisualHeight: 0 + Background: sidebar-button + TooltipText: Buildings + TooltipContainer: TOOLTIP_CONTAINER + ProductionGroup: Building + Key: ProductionTypeBuilding + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: production-icons + ProductionTypeButton@DEFENSE: + Logic: AddFactionSuffixLogic + Y: 31 + Width: 28 + Height: 28 + VisualHeight: 0 + Background: sidebar-button + TooltipText: Defense + TooltipContainer: TOOLTIP_CONTAINER + ProductionGroup: Defense + Key: ProductionTypeDefense + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: production-icons + ProductionTypeButton@INFANTRY: + Logic: AddFactionSuffixLogic + Y: 62 + Width: 28 + Height: 28 + VisualHeight: 0 + Background: sidebar-button + TooltipText: Infantry + TooltipContainer: TOOLTIP_CONTAINER + ProductionGroup: Infantry + Key: ProductionTypeInfantry + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: production-icons + ProductionTypeButton@VEHICLE: + Logic: AddFactionSuffixLogic + Y: 93 + Width: 28 + Height: 28 + VisualHeight: 0 + Background: sidebar-button + TooltipText: Vehicles + TooltipContainer: TOOLTIP_CONTAINER + ProductionGroup: Vehicle + Key: ProductionTypeVehicle + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: production-icons + ProductionTypeButton@AIRCRAFT: + Logic: AddFactionSuffixLogic + Y: 124 + Width: 28 + Height: 28 + VisualHeight: 0 + Background: sidebar-button + TooltipText: Aircraft + TooltipContainer: TOOLTIP_CONTAINER + ProductionGroup: Aircraft + Key: ProductionTypeAircraft + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: production-icons + ProductionTypeButton@NAVAL: + Logic: AddFactionSuffixLogic + Y: 155 + Width: 28 + Height: 28 + VisualHeight: 0 + Background: sidebar-button + TooltipText: Naval + TooltipContainer: TOOLTIP_CONTAINER + ProductionGroup: Ship + Key: ProductionTypeNaval + Children: + Image@ICON: + X: 6 + Y: 6 + ImageCollection: production-icons + Button@SCROLL_UP_BUTTON: + Logic: AddFactionSuffixLogic + Y: 186 + Width: 28 + Height: 22 + VisualHeight: 0 + Background: sidebar-button + TooltipText: Scroll up + TooltipContainer: TOOLTIP_CONTAINER + Children: + Image@ICON: + X: 6 + Y: 3 + ImageCollection: scrollbar + ImageName: up_arrow + Button@SCROLL_DOWN_BUTTON: + Logic: AddFactionSuffixLogic + Y: 211 + Width: 28 + Height: 22 + VisualHeight: 0 + Background: sidebar-button + TooltipText: Scroll down + TooltipContainer: TOOLTIP_CONTAINER + Children: + Image@ICON: + X: 6 + Y: 3 + ImageCollection: scrollbar + ImageName: down_arrow diff --git a/mods/ura/cursors.yaml b/mods/ura/cursors.yaml new file mode 100644 index 0000000..ebc8e9f --- /dev/null +++ b/mods/ura/cursors.yaml @@ -0,0 +1,233 @@ +Palettes: + cursor: temperat.pal + +Cursors: + mouse.shp: cursor + scroll-t: + Start: 1 + Y: -7 + scroll-tr: + Start: 2 + X: 6 + Y: -5 + scroll-r: + Start: 3 + X: 7 + scroll-br: + Start: 4 + X: 6 + Y: 5 + scroll-b: + Start: 5 + Y: 7 + scroll-bl: + Start: 6 + X: -6 + Y: 5 + scroll-l: + Start: 7 + X: -8 + scroll-tl: + Start: 8 + X: -6 + y: 5 + scroll-t-blocked: + Start: 124 + Y: -7 + scroll-tr-blocked: + Start: 125 + X: 6 + Y: -5 + scroll-r-blocked: + Start: 126 + X: 7 + scroll-br-blocked: + Start: 127 + X: 6 + Y: 5 + scroll-b-blocked: + Start: 128 + Y: 7 + scroll-bl-blocked: + Start: 129 + X: -6 + Y: 5 + scroll-l-blocked: + Start: 130 + X: -8 + scroll-tl-blocked: + Start: 131 + X: -6 + Y: 5 + select: + Start: 15 + Length: 6 + default: + Start: 0 + X: -16 + Y: -12 + default-minimap: + Start: 80 + X: -16 + Y: -12 + generic-blocked: + Start: 9 + generic-blocked-minimap: + Start: 33 + move: + Start: 10 + Length: 4 + move-minimap: + Start: 29 + Length: 4 + move-rough: + Start: 10 + Length: 4 + move-blocked: + Start: 14 + move-blocked-minimap: + Start: 33 + attack: + Start: 195 + Length: 8 + attack-minimap: + Start: 203 + Length: 8 + attackoutsiderange: + Start: 21 + Length: 8 + attackoutsiderange-minimap: + Start: 134 + Length: 8 + harvest: + Start: 21 + Length: 8 + harvest-minimap: + Start: 134 + Length: 8 + enter: + Start: 113 + Length: 3 + enter-minimap: + Start: 139 + Length: 3 + enter-blocked: + Start: 212 + Length: 1 + enter-blocked-minimap: + Start: 33 + c4: + Start: 116 + Length: 3 + c4-minimap: + Start: 121 + Length: 3 + guard: + Start: 147 + Length: 1 + guard-minimap: + Start: 146 + Length: 1 + capture: + Start: 164 + Length: 3 + capture-minimap: + Start: 167 + Length: 3 + heal: + Start: 160 + Length: 4 + heal-minimap: + Start: 194 + Length: 1 + ability: + Start: 82 + Length: 8 + ability-minimap: + Start: 214 + Length: 8 + joystick-all: + Start: 0 + X: -16 + Y: -12 + joystick-t-blocked: + Start: 124 + joystick-tr-blocked: + Start: 125 + joystick-r-blocked: + Start: 126 + joystick-br-blocked: + Start: 127 + joystick-b-blocked: + Start: 128 + joystick-bl-blocked: + Start: 129 + joystick-l-blocked: + Start: 130 + joystick-tl-blocked: + Start: 131 +# Cursors that need minimap variants + deploy: + Start: 59 + Length: 9 + deploy-blocked: + Start: 211 + Length: 1 + goldwrench: + Start: 170 + Length: 24 + goldwrench-blocked: + Start: 213 + Length: 1 + nuke: + Start: 90 + Length: 7 + chrono-select: + Start: 97 + Length: 8 + chrono-target: + Start: 105 + Length: 8 + sell: + Start: 68 + Length: 12 + sell-blocked: + Start: 119 + Length: 1 + repair: + Start: 35 + Length: 24 + repair-blocked: + Start: 120 + Length: 1 + sell2: + Start: 148 + Length: 12 + nopower.shp: cursor + powerdown-blocked: + Start: 0 + Length: 1 + powerdown: + Start: 1 + Length: 3 + attackmove.shp: cursor + attackmove: + Start: 0 + Length: 4 + attackmove-minimap: + Start: 4 + Length: 4 + attackmove-blocked: + Start: 16 + attackmove-blocked-minimap: + Start: 18 + assaultmove: + Start: 8 + Length: 4 + assaultmove-minimap: + Start: 12 + Length: 4 + assaultmove-blocked: + Start: 17 + assaultmove-blocked-minimap: + Start: 19 diff --git a/mods/ura/hotkeys.yaml b/mods/ura/hotkeys.yaml new file mode 100644 index 0000000..f8da28a --- /dev/null +++ b/mods/ura/hotkeys.yaml @@ -0,0 +1,27 @@ +ProductionTypeBuilding: E + Description: Building Tab + Types: Production + +ProductionTypeDefense: R + Description: Defense Tab + Types: Production + +ProductionTypeInfantry: T + Description: Infantry Tab + Types: Production + +ProductionTypeVehicle: Y + Description: Vehicle Tab + Types: Production + +ProductionTypeAircraft: U + Description: Aircraft Tab + Types: Production + +ProductionTypeNaval: I + Description: Naval Tab + Types: Production + +PowerDown: X + Description: Power-down mode + Types: OrderGenerator diff --git a/mods/ura/icon.png b/mods/ura/icon.png new file mode 100644 index 0000000..220da01 Binary files /dev/null and b/mods/ura/icon.png differ diff --git a/mods/ura/installer/aftermath.yaml b/mods/ura/installer/aftermath.yaml new file mode 100644 index 0000000..dadbb5e --- /dev/null +++ b/mods/ura/installer/aftermath.yaml @@ -0,0 +1,230 @@ +aftermath: Aftermath Expansion Disc (English) + IDFiles: + README.TXT: 9902fb74c019df1b76ff5634e68f0371d790b5e0 + SETUP/INSTALL/PATCH.RTP: 5bce93f834f9322ddaa7233242e5b6c7fea0bf17 + Install: + extract-raw: SETUP/INSTALL/PATCH.RTP + ^Content/ra/v2/expand/expand2.mix: + Offset: 4712984 + Length: 469922 + ^Content/ra/v2/expand/hires1.mix: + Offset: 5182981 + Length: 90264 + ^Content/ra/v2/expand/lores1.mix: + Offset: 5273320 + Length: 57076 + extract-raw: MAIN.MIX + ^Content/ra/v2/expand/await.aud: + Offset: 158698809 + Length: 2972788 + ^Content/ra/v2/expand/bog.aud: + Offset: 244351833 + Length: 2386955 + ^Content/ra/v2/expand/float_v2.aud: + Offset: 246738788 + Length: 3090115 + ^Content/ra/v2/expand/gloom.aud: + Offset: 249828903 + Length: 2662851 + ^Content/ra/v2/expand/grndwire.aud: + Offset: 252491754 + Length: 2573611 + ^Content/ra/v2/expand/rpt.aud: + Offset: 255065365 + Length: 3092259 + ^Content/ra/v2/expand/search.aud: + Offset: 258157624 + Length: 3104091 + ^Content/ra/v2/expand/traction.aud: + Offset: 261261715 + Length: 2668003 + ^Content/ra/v2/expand/wastelnd.aud: + Offset: 263929718 + Length: 2721563 + ^Content/ra/v2/expand/chrotnk1.aud: + Offset: 267714446 + Length: 22900 + ^Content/ra/v2/expand/fixit1.aud: + Offset: 267959424 + Length: 10707 + ^Content/ra/v2/expand/jburn1.aud: + Offset: 268105462 + Length: 23091 + ^Content/ra/v2/expand/jchrge1.aud: + Offset: 268128553 + Length: 14219 + ^Content/ra/v2/expand/jcrisp1.aud: + Offset: 268142772 + Length: 18211 + ^Content/ra/v2/expand/jdance1.aud: + Offset: 268160983 + Length: 14315 + ^Content/ra/v2/expand/jjuice1.aud: + Offset: 268175298 + Length: 9699 + ^Content/ra/v2/expand/jjump1.aud: + Offset: 268184997 + Length: 8219 + ^Content/ra/v2/expand/jlight1.aud: + Offset: 268193216 + Length: 9875 + ^Content/ra/v2/expand/jpower1.aud: + Offset: 268203091 + Length: 13571 + ^Content/ra/v2/expand/jshock1.aud: + Offset: 268216662 + Length: 14771 + ^Content/ra/v2/expand/jyes1.aud: + Offset: 268231433 + Length: 13795 + ^Content/ra/v2/expand/madchrg2.aud: + Offset: 268361344 + Length: 19782 + ^Content/ra/v2/expand/madexplo.aud: + Offset: 268381126 + Length: 26572 + ^Content/ra/v2/expand/mboss1.aud: + Offset: 268413174 + Length: 20147 + ^Content/ra/v2/expand/mhear1.aud: + Offset: 268438509 + Length: 6714 + ^Content/ra/v2/expand/mhotdig1.aud: + Offset: 268445223 + Length: 10674 + ^Content/ra/v2/expand/mhowdy1.aud: + Offset: 268455897 + Length: 6714 + ^Content/ra/v2/expand/mhuh1.aud: + Offset: 268462611 + Length: 4117 + ^Content/ra/v2/expand/mlaff1.aud: + Offset: 268527415 + Length: 24133 + ^Content/ra/v2/expand/mrise1.aud: + Offset: 268564948 + Length: 13523 + ^Content/ra/v2/expand/mwrench1.aud: + Offset: 268578471 + Length: 10780 + ^Content/ra/v2/expand/myeehaw1.aud: + Offset: 268589251 + Length: 18912 + ^Content/ra/v2/expand/myes1.aud: + Offset: 268608163 + Length: 9073 +aftermath-linux: Aftermath Expansion Disc (English) + IDFiles: + readme.txt: 9902fb74c019df1b76ff5634e68f0371d790b5e0 + setup/install/patch.rtp: 5bce93f834f9322ddaa7233242e5b6c7fea0bf17 + Install: + extract-raw: setup/install/patch.rtp + ^Content/ra/v2/expand/expand2.mix: + Offset: 4712984 + Length: 469922 + ^Content/ra/v2/expand/hires1.mix: + Offset: 5182981 + Length: 90264 + ^Content/ra/v2/expand/lores1.mix: + Offset: 5273320 + Length: 57076 + extract-raw: main.mix + ^Content/ra/v2/expand/await.aud: + Offset: 158698809 + Length: 2972788 + ^Content/ra/v2/expand/bog.aud: + Offset: 244351833 + Length: 2386955 + ^Content/ra/v2/expand/float_v2.aud: + Offset: 246738788 + Length: 3090115 + ^Content/ra/v2/expand/gloom.aud: + Offset: 249828903 + Length: 2662851 + ^Content/ra/v2/expand/grndwire.aud: + Offset: 252491754 + Length: 2573611 + ^Content/ra/v2/expand/rpt.aud: + Offset: 255065365 + Length: 3092259 + ^Content/ra/v2/expand/search.aud: + Offset: 258157624 + Length: 3104091 + ^Content/ra/v2/expand/traction.aud: + Offset: 261261715 + Length: 2668003 + ^Content/ra/v2/expand/wastelnd.aud: + Offset: 263929718 + Length: 2721563 + ^Content/ra/v2/expand/chrotnk1.aud: + Offset: 267714446 + Length: 22900 + ^Content/ra/v2/expand/fixit1.aud: + Offset: 267959424 + Length: 10707 + ^Content/ra/v2/expand/jburn1.aud: + Offset: 268105462 + Length: 23091 + ^Content/ra/v2/expand/jchrge1.aud: + Offset: 268128553 + Length: 14219 + ^Content/ra/v2/expand/jcrisp1.aud: + Offset: 268142772 + Length: 18211 + ^Content/ra/v2/expand/jdance1.aud: + Offset: 268160983 + Length: 14315 + ^Content/ra/v2/expand/jjuice1.aud: + Offset: 268175298 + Length: 9699 + ^Content/ra/v2/expand/jjump1.aud: + Offset: 268184997 + Length: 8219 + ^Content/ra/v2/expand/jlight1.aud: + Offset: 268193216 + Length: 9875 + ^Content/ra/v2/expand/jpower1.aud: + Offset: 268203091 + Length: 13571 + ^Content/ra/v2/expand/jshock1.aud: + Offset: 268216662 + Length: 14771 + ^Content/ra/v2/expand/jyes1.aud: + Offset: 268231433 + Length: 13795 + ^Content/ra/v2/expand/madchrg2.aud: + Offset: 268361344 + Length: 19782 + ^Content/ra/v2/expand/madexplo.aud: + Offset: 268381126 + Length: 26572 + ^Content/ra/v2/expand/mboss1.aud: + Offset: 268413174 + Length: 20147 + ^Content/ra/v2/expand/mhear1.aud: + Offset: 268438509 + Length: 6714 + ^Content/ra/v2/expand/mhotdig1.aud: + Offset: 268445223 + Length: 10674 + ^Content/ra/v2/expand/mhowdy1.aud: + Offset: 268455897 + Length: 6714 + ^Content/ra/v2/expand/mhuh1.aud: + Offset: 268462611 + Length: 4117 + ^Content/ra/v2/expand/mlaff1.aud: + Offset: 268527415 + Length: 24133 + ^Content/ra/v2/expand/mrise1.aud: + Offset: 268564948 + Length: 13523 + ^Content/ra/v2/expand/mwrench1.aud: + Offset: 268578471 + Length: 10780 + ^Content/ra/v2/expand/myeehaw1.aud: + Offset: 268589251 + Length: 18912 + ^Content/ra/v2/expand/myes1.aud: + Offset: 268608163 + Length: 9073 \ No newline at end of file diff --git a/mods/ura/installer/allies95.yaml b/mods/ura/installer/allies95.yaml new file mode 100644 index 0000000..7a2bb22 --- /dev/null +++ b/mods/ura/installer/allies95.yaml @@ -0,0 +1,394 @@ +allied: Red Alert 95 (Allied Disc, English) + IDFiles: + MAIN.MIX: 20ebe16f91ff79be2d672f1db5bae9048ff9357c + Length: 4096 + INSTALL/REDALERT.MIX: 0e58f4b54f44f6cd29fecf8cf379d33cf2d4caef + Install: + extract-raw: INSTALL/REDALERT.MIX + ^Content/ra/v2/hires.mix: + Offset: 650612 + Length: 5817417 + ^Content/ra/v2/local.mix: + Offset: 6468029 + Length: 3829837 + ^Content/ra/v2/lores.mix: + Offset: 10297866 + Length: 754800 + ^Content/ra/v2/speech.mix: + Offset: 23042864 + Length: 2003464 + extract-raw: MAIN.MIX + ^Content/ra/v2/conquer.mix: + Offset: 236 + Length: 2177047 + ^Content/ra/v2/interior.mix: + Offset: 17172192 + Length: 247425 + ^Content/ra/v2/movies/aagun.vqa: + Offset: 37694331 + Length: 3295512 + ^Content/ra/v2/movies/aftrmath.vqa: + Offset: 40989843 + Length: 2455774 + ^Content/ra/v2/movies/ally1.vqa: + Offset: 43445617 + Length: 13536324 + ^Content/ra/v2/movies/ally10.vqa: + Offset: 56981941 + Length: 21506358 + ^Content/ra/v2/movies/ally10b.vqa: + Offset: 78488299 + Length: 2565152 + ^Content/ra/v2/movies/ally11.vqa: + Offset: 81053451 + Length: 13600398 + ^Content/ra/v2/movies/ally12.vqa: + Offset: 94653849 + Length: 7719544 + ^Content/ra/v2/movies/ally14.vqa: + Offset: 102373393 + Length: 11659080 + ^Content/ra/v2/movies/ally2.vqa: + Offset: 114032473 + Length: 8014018 + ^Content/ra/v2/movies/ally4.vqa: + Offset: 122046491 + Length: 9441906 + ^Content/ra/v2/movies/ally5.vqa: + Offset: 131488397 + Length: 21900328 + ^Content/ra/v2/movies/ally6.vqa: + Offset: 153388725 + Length: 26454212 + ^Content/ra/v2/movies/ally8.vqa: + Offset: 179842937 + Length: 15401062 + ^Content/ra/v2/movies/ally9.vqa: + Offset: 195243999 + Length: 14901460 + ^Content/ra/v2/movies/allyend.vqa: + Offset: 210145459 + Length: 27285692 + ^Content/ra/v2/movies/allymorf.vqa: + Offset: 237431151 + Length: 916964 + ^Content/ra/v2/movies/apcescpe.vqa: + Offset: 238348115 + Length: 1627564 + ^Content/ra/v2/movies/assess.vqa: + Offset: 239975679 + Length: 2929218 + ^Content/ra/v2/movies/battle.vqa: + Offset: 242904897 + Length: 2881110 + ^Content/ra/v2/movies/binoc.vqa: + Offset: 245786007 + Length: 4045856 + ^Content/ra/v2/movies/bmap.vqa: + Offset: 249831863 + Length: 2414312 + ^Content/ra/v2/movies/brdgtilt.vqa: + Offset: 252246175 + Length: 1581318 + ^Content/ra/v2/movies/crontest.vqa: + Offset: 253827493 + Length: 2036620 + ^Content/ra/v2/movies/cronfail.vqa: + Offset: 255864113 + Length: 1717214 + ^Content/ra/v2/movies/destroyr.vqa: + Offset: 257581327 + Length: 2178828 + ^Content/ra/v2/movies/dud.vqa: + Offset: 259760155 + Length: 3110418 + ^Content/ra/v2/movies/elevator.vqa: + Offset: 262870573 + Length: 1741894 + ^Content/ra/v2/movies/flare.vqa: + Offset: 264612467 + Length: 1731744 + ^Content/ra/v2/movies/frozen.vqa: + Offset: 266344211 + Length: 1836994 + ^Content/ra/v2/movies/grvestne.vqa: + Offset: 268181205 + Length: 3155668 + ^Content/ra/v2/movies/landing.vqa: + Offset: 271336873 + Length: 2374106 + ^Content/ra/v2/movies/masasslt.vqa: + Offset: 273710979 + Length: 5354700 + ^Content/ra/v2/movies/mcv.vqa: + Offset: 279065679 + Length: 1296036 + ^Content/ra/v2/movies/mcv_land.vqa: + Offset: 280361715 + Length: 1424358 + ^Content/ra/v2/movies/montpass.vqa: + Offset: 281786073 + Length: 1701852 + ^Content/ra/v2/movies/oildrum.vqa: + Offset: 283487925 + Length: 2430792 + ^Content/ra/v2/movies/overrun.vqa: + Offset: 285918717 + Length: 2174548 + ^Content/ra/v2/movies/prolog.vqa: + Offset: 288093265 + Length: 28658198 + ^Content/ra/v2/movies/redintro.vqa: + Offset: 316751463 + Length: 2269452 + ^Content/ra/v2/movies/shipsink.vqa: + Offset: 319020915 + Length: 3150030 + ^Content/ra/v2/movies/shorbom1.vqa: + Offset: 322170945 + Length: 4046650 + ^Content/ra/v2/movies/shorbom2.vqa: + Offset: 326217595 + Length: 2150364 + ^Content/ra/v2/movies/shorbomb.vqa: + Offset: 328367959 + Length: 6111616 + ^Content/ra/v2/movies/snowbomb.vqa: + Offset: 334479575 + Length: 2465762 + ^Content/ra/v2/movies/soviet1.vqa: + Offset: 336945337 + Length: 24112060 + ^Content/ra/v2/movies/sovtstar.vqa: + Offset: 361057397 + Length: 670794 + ^Content/ra/v2/movies/spy.vqa: + Offset: 361728191 + Length: 1646808 + ^Content/ra/v2/movies/tanya1.vqa: + Offset: 363374999 + Length: 13389684 + ^Content/ra/v2/movies/tanya2.vqa: + Offset: 376764683 + Length: 4103388 + ^Content/ra/v2/movies/toofar.vqa: + Offset: 380868071 + Length: 4244572 + ^Content/ra/v2/movies/trinity.vqa: + Offset: 385112643 + Length: 1669310 + ^Content/ra/v2/scores.mix: + Offset: 386781953 + Length: 64171360 + ^Content/ra/v2/snow.mix: + Offset: 450953313 + Length: 1030861 + ^Content/ra/v2/sounds.mix: + Offset: 451984174 + Length: 1006778 + ^Content/ra/v2/russian.mix: + Offset: 452990952 + Length: 266077 + ^Content/ra/v2/allies.mix: + Offset: 453257029 + Length: 309406 + ^Content/ra/v2/temperat.mix: + Offset: 453566435 + Length: 1038859 + +allied-linux: Red Alert 95 (Allied Disc, English) + IDFiles: + eahelp.gid: 13a8a4a1e7d9d6d893c38df5a39262c4689aeba5 + install/redalert.mix: 0e58f4b54f44f6cd29fecf8cf379d33cf2d4caef + Install: + extract-raw: install/redalert.mix + ^Content/ra/v2/hires.mix: + Offset: 650612 + Length: 5817417 + ^Content/ra/v2/local.mix: + Offset: 6468029 + Length: 3829837 + ^Content/ra/v2/lores.mix: + Offset: 10297866 + Length: 754800 + ^Content/ra/v2/speech.mix: + Offset: 23042864 + Length: 2003464 + extract-raw: main.mix + ^Content/ra/v2/conquer.mix: + Offset: 236 + Length: 2177047 + ^Content/ra/v2/interior.mix: + Offset: 17172192 + Length: 247425 + ^Content/ra/v2/movies/aagun.vqa: + Offset: 37694331 + Length: 3295512 + ^Content/ra/v2/movies/aftrmath.vqa: + Offset: 40989843 + Length: 2455774 + ^Content/ra/v2/movies/ally1.vqa: + Offset: 43445617 + Length: 13536324 + ^Content/ra/v2/movies/ally10.vqa: + Offset: 56981941 + Length: 21506358 + ^Content/ra/v2/movies/ally10b.vqa: + Offset: 78488299 + Length: 2565152 + ^Content/ra/v2/movies/ally11.vqa: + Offset: 81053451 + Length: 13600398 + ^Content/ra/v2/movies/ally12.vqa: + Offset: 94653849 + Length: 7719544 + ^Content/ra/v2/movies/ally14.vqa: + Offset: 102373393 + Length: 11659080 + ^Content/ra/v2/movies/ally2.vqa: + Offset: 114032473 + Length: 8014018 + ^Content/ra/v2/movies/ally4.vqa: + Offset: 122046491 + Length: 9441906 + ^Content/ra/v2/movies/ally5.vqa: + Offset: 131488397 + Length: 21900328 + ^Content/ra/v2/movies/ally6.vqa: + Offset: 153388725 + Length: 26454212 + ^Content/ra/v2/movies/ally8.vqa: + Offset: 179842937 + Length: 15401062 + ^Content/ra/v2/movies/ally9.vqa: + Offset: 195243999 + Length: 14901460 + ^Content/ra/v2/movies/allyend.vqa: + Offset: 210145459 + Length: 27285692 + ^Content/ra/v2/movies/allymorf.vqa: + Offset: 237431151 + Length: 916964 + ^Content/ra/v2/movies/apcescpe.vqa: + Offset: 238348115 + Length: 1627564 + ^Content/ra/v2/movies/assess.vqa: + Offset: 239975679 + Length: 2929218 + ^Content/ra/v2/movies/battle.vqa: + Offset: 242904897 + Length: 2881110 + ^Content/ra/v2/movies/binoc.vqa: + Offset: 245786007 + Length: 4045856 + ^Content/ra/v2/movies/bmap.vqa: + Offset: 249831863 + Length: 2414312 + ^Content/ra/v2/movies/brdgtilt.vqa: + Offset: 252246175 + Length: 1581318 + ^Content/ra/v2/movies/crontest.vqa: + Offset: 253827493 + Length: 2036620 + ^Content/ra/v2/movies/cronfail.vqa: + Offset: 255864113 + Length: 1717214 + ^Content/ra/v2/movies/destroyr.vqa: + Offset: 257581327 + Length: 2178828 + ^Content/ra/v2/movies/dud.vqa: + Offset: 259760155 + Length: 3110418 + ^Content/ra/v2/movies/elevator.vqa: + Offset: 262870573 + Length: 1741894 + ^Content/ra/v2/movies/flare.vqa: + Offset: 264612467 + Length: 1731744 + ^Content/ra/v2/movies/frozen.vqa: + Offset: 266344211 + Length: 1836994 + ^Content/ra/v2/movies/grvestne.vqa: + Offset: 268181205 + Length: 3155668 + ^Content/ra/v2/movies/landing.vqa: + Offset: 271336873 + Length: 2374106 + ^Content/ra/v2/movies/masasslt.vqa: + Offset: 273710979 + Length: 5354700 + ^Content/ra/v2/movies/mcv.vqa: + Offset: 279065679 + Length: 1296036 + ^Content/ra/v2/movies/mcv_land.vqa: + Offset: 280361715 + Length: 1424358 + ^Content/ra/v2/movies/montpass.vqa: + Offset: 281786073 + Length: 1701852 + ^Content/ra/v2/movies/oildrum.vqa: + Offset: 283487925 + Length: 2430792 + ^Content/ra/v2/movies/overrun.vqa: + Offset: 285918717 + Length: 2174548 + ^Content/ra/v2/movies/prolog.vqa: + Offset: 288093265 + Length: 28658198 + ^Content/ra/v2/movies/redintro.vqa: + Offset: 316751463 + Length: 2269452 + ^Content/ra/v2/movies/shipsink.vqa: + Offset: 319020915 + Length: 3150030 + ^Content/ra/v2/movies/shorbom1.vqa: + Offset: 322170945 + Length: 4046650 + ^Content/ra/v2/movies/shorbom2.vqa: + Offset: 326217595 + Length: 2150364 + ^Content/ra/v2/movies/shorbomb.vqa: + Offset: 328367959 + Length: 6111616 + ^Content/ra/v2/movies/snowbomb.vqa: + Offset: 334479575 + Length: 2465762 + ^Content/ra/v2/movies/soviet1.vqa: + Offset: 336945337 + Length: 24112060 + ^Content/ra/v2/movies/sovtstar.vqa: + Offset: 361057397 + Length: 670794 + ^Content/ra/v2/movies/spy.vqa: + Offset: 361728191 + Length: 1646808 + ^Content/ra/v2/movies/tanya1.vqa: + Offset: 363374999 + Length: 13389684 + ^Content/ra/v2/movies/tanya2.vqa: + Offset: 376764683 + Length: 4103388 + ^Content/ra/v2/movies/toofar.vqa: + Offset: 380868071 + Length: 4244572 + ^Content/ra/v2/movies/trinity.vqa: + Offset: 385112643 + Length: 1669310 + ^Content/ra/v2/scores.mix: + Offset: 386781953 + Length: 64171360 + ^Content/ra/v2/snow.mix: + Offset: 450953313 + Length: 1030861 + ^Content/ra/v2/sounds.mix: + Offset: 451984174 + Length: 1006778 + ^Content/ra/v2/russian.mix: + Offset: 452990952 + Length: 266077 + ^Content/ra/v2/allies.mix: + Offset: 453257029 + Length: 309406 + ^Content/ra/v2/temperat.mix: + Offset: 453566435 + Length: 1038859 \ No newline at end of file diff --git a/mods/ura/installer/cnc95.yaml b/mods/ura/installer/cnc95.yaml new file mode 100644 index 0000000..344dd4e --- /dev/null +++ b/mods/ura/installer/cnc95.yaml @@ -0,0 +1,12 @@ +cnc95: C&C Gold (GDI or Nod Disc, English) + IDFiles: + CONQUER.MIX: 833e02a09aae694659eb312d3838367f681d1b30 + Install: + copy: . + ^Content/ra/v2/cnc/desert.mix: DESERT.MIX +cnc95-linux: C&C Gold (GDI or Nod Disc, English) + IDFiles: + conquer.mix: 833e02a09aae694659eb312d3838367f681d1b30 + Install: + copy: . + ^Content/ra/v2/cnc/desert.mix: desert.mix \ No newline at end of file diff --git a/mods/ura/installer/counterstrike.yaml b/mods/ura/installer/counterstrike.yaml new file mode 100644 index 0000000..299dcd5 --- /dev/null +++ b/mods/ura/installer/counterstrike.yaml @@ -0,0 +1,60 @@ +counterstrike: Counterstrike Expansion Disc (English) + IDFiles: + README.TXT: 0efe8087383f0b159a9633f891fb5f53c6097cd4 + SETUP/INSTALL/CSTRIKE.RTP: fae8ba82db71574f6ecd8fb4ff4026fcb65d2adc + Install: + extract-raw: MAIN.MIX + ^Content/ra/v2/expand/2nd_hand.aud: + Offset: 209070947 + Length: 3070092 + ^Content/ra/v2/expand/araziod.aud: + Offset: 212141039 + Length: 2941132 + ^Content/ra/v2/expand/backstab.aud: + Offset: 215082171 + Length: 3178252 + ^Content/ra/v2/expand/chaos2.aud: + Offset: 218260423 + Length: 2860068 + ^Content/ra/v2/expand/shut_it.aud: + Offset: 221120491 + Length: 2991979 + ^Content/ra/v2/expand/twinmix1.aud: + Offset: 224112470 + Length: 2536972 + ^Content/ra/v2/expand/under3.aud: + Offset: 226649442 + Length: 2812788 + ^Content/ra/v2/expand/vr2.aud: + Offset: 229462230 + Length: 2920396 +counterstrike-linux: Counterstrike Expansion Disc (English) + IDFiles: + readme.txt: 0efe8087383f0b159a9633f891fb5f53c6097cd4 + setup/install/cstrike.rtp: fae8ba82db71574f6ecd8fb4ff4026fcb65d2adc + Install: + extract-raw: main.mix + ^Content/ra/v2/expand/2nd_hand.aud: + Offset: 209070947 + Length: 3070092 + ^Content/ra/v2/expand/araziod.aud: + Offset: 212141039 + Length: 2941132 + ^Content/ra/v2/expand/backstab.aud: + Offset: 215082171 + Length: 3178252 + ^Content/ra/v2/expand/chaos2.aud: + Offset: 218260423 + Length: 2860068 + ^Content/ra/v2/expand/shut_it.aud: + Offset: 221120491 + Length: 2991979 + ^Content/ra/v2/expand/twinmix1.aud: + Offset: 224112470 + Length: 2536972 + ^Content/ra/v2/expand/under3.aud: + Offset: 226649442 + Length: 2812788 + ^Content/ra/v2/expand/vr2.aud: + Offset: 229462230 + Length: 2920396 \ No newline at end of file diff --git a/mods/ura/installer/downloads.yaml b/mods/ura/installer/downloads.yaml new file mode 100644 index 0000000..3a03201 --- /dev/null +++ b/mods/ura/installer/downloads.yaml @@ -0,0 +1,94 @@ +quickinstall: Quick Install Package + MirrorList: http://www.openra.net/packages/ra-quickinstall-mirrors.txt + Extract: + ^Content/ra/v2/allies.mix: allies.mix + ^Content/ra/v2/conquer.mix: conquer.mix + ^Content/ra/v2/hires.mix: hires.mix + ^Content/ra/v2/interior.mix: interior.mix + ^Content/ra/v2/local.mix: local.mix + ^Content/ra/v2/lores.mix: lores.mix + ^Content/ra/v2/russian.mix: russian.mix + ^Content/ra/v2/snow.mix: snow.mix + ^Content/ra/v2/sounds.mix: sounds.mix + ^Content/ra/v2/speech.mix: speech.mix + ^Content/ra/v2/temperat.mix: temperat.mix + ^Content/ra/v2/expand/chrotnk1.aud: expand/chrotnk1.aud + ^Content/ra/v2/expand/expand2.mix: expand/expand2.mix + ^Content/ra/v2/expand/fixit1.aud: expand/fixit1.aud + ^Content/ra/v2/expand/hires1.mix: expand/hires1.mix + ^Content/ra/v2/expand/jburn1.aud: expand/jburn1.aud + ^Content/ra/v2/expand/jchrge1.aud: expand/jchrge1.aud + ^Content/ra/v2/expand/jcrisp1.aud: expand/jcrisp1.aud + ^Content/ra/v2/expand/jdance1.aud: expand/jdance1.aud + ^Content/ra/v2/expand/jjuice1.aud: expand/jjuice1.aud + ^Content/ra/v2/expand/jjump1.aud: expand/jjump1.aud + ^Content/ra/v2/expand/jlight1.aud: expand/jlight1.aud + ^Content/ra/v2/expand/jpower1.aud: expand/jpower1.aud + ^Content/ra/v2/expand/jshock1.aud: expand/jshock1.aud + ^Content/ra/v2/expand/jyes1.aud: expand/jyes1.aud + ^Content/ra/v2/expand/lores1.mix: expand/lores1.mix + ^Content/ra/v2/expand/madchrg2.aud: expand/madchrg2.aud + ^Content/ra/v2/expand/madexplo.aud: expand/madexplo.aud + ^Content/ra/v2/expand/mboss1.aud: expand/mboss1.aud + ^Content/ra/v2/expand/mhear1.aud: expand/mhear1.aud + ^Content/ra/v2/expand/mhotdig1.aud: expand/mhotdig1.aud + ^Content/ra/v2/expand/mhowdy1.aud: expand/mhowdy1.aud + ^Content/ra/v2/expand/mhuh1.aud: expand/mhuh1.aud + ^Content/ra/v2/expand/mlaff1.aud: expand/mlaff1.aud + ^Content/ra/v2/expand/mrise1.aud: expand/mrise1.aud + ^Content/ra/v2/expand/mwrench1.aud: expand/mwrench1.aud + ^Content/ra/v2/expand/myeehaw1.aud: expand/myeehaw1.aud + ^Content/ra/v2/expand/myes1.aud: expand/myes1.aud + ^Content/ra/v2/cnc/desert.mix: cnc/desert.mix +basefiles: Base Freeware Content + MirrorList: http://www.openra.net/packages/ra-base-mirrors.txt + Extract: + ^Content/ra/v2/allies.mix: allies.mix + ^Content/ra/v2/conquer.mix: conquer.mix + ^Content/ra/v2/hires.mix: hires.mix + ^Content/ra/v2/interior.mix: interior.mix + ^Content/ra/v2/local.mix: local.mix + ^Content/ra/v2/lores.mix: lores.mix + ^Content/ra/v2/russian.mix: russian.mix + ^Content/ra/v2/snow.mix: snow.mix + ^Content/ra/v2/sounds.mix: sounds.mix + ^Content/ra/v2/speech.mix: speech.mix + ^Content/ra/v2/temperat.mix: temperat.mix +aftermath: Aftermath Expansion Files + MirrorList: http://www.openra.net/packages/ra-aftermath-mirrors.txt + Extract: + ^Content/ra/v2/expand/chrotnk1.aud: expand/chrotnk1.aud + ^Content/ra/v2/expand/expand2.mix: expand/expand2.mix + ^Content/ra/v2/expand/fixit1.aud: expand/fixit1.aud + ^Content/ra/v2/expand/hires1.mix: expand/hires1.mix + ^Content/ra/v2/expand/jburn1.aud: expand/jburn1.aud + ^Content/ra/v2/expand/jchrge1.aud: expand/jchrge1.aud + ^Content/ra/v2/expand/jcrisp1.aud: expand/jcrisp1.aud + ^Content/ra/v2/expand/jdance1.aud: expand/jdance1.aud + ^Content/ra/v2/expand/jjuice1.aud: expand/jjuice1.aud + ^Content/ra/v2/expand/jjump1.aud: expand/jjump1.aud + ^Content/ra/v2/expand/jlight1.aud: expand/jlight1.aud + ^Content/ra/v2/expand/jpower1.aud: expand/jpower1.aud + ^Content/ra/v2/expand/jshock1.aud: expand/jshock1.aud + ^Content/ra/v2/expand/jyes1.aud: expand/jyes1.aud + ^Content/ra/v2/expand/lores1.mix: expand/lores1.mix + ^Content/ra/v2/expand/madchrg2.aud: expand/madchrg2.aud + ^Content/ra/v2/expand/madexplo.aud: expand/madexplo.aud + ^Content/ra/v2/expand/mboss1.aud: expand/mboss1.aud + ^Content/ra/v2/expand/mhear1.aud: expand/mhear1.aud + ^Content/ra/v2/expand/mhotdig1.aud: expand/mhotdig1.aud + ^Content/ra/v2/expand/mhowdy1.aud: expand/mhowdy1.aud + ^Content/ra/v2/expand/mhuh1.aud: expand/mhuh1.aud + ^Content/ra/v2/expand/mlaff1.aud: expand/mlaff1.aud + ^Content/ra/v2/expand/mrise1.aud: expand/mrise1.aud + ^Content/ra/v2/expand/mwrench1.aud: expand/mwrench1.aud + ^Content/ra/v2/expand/myeehaw1.aud: expand/myeehaw1.aud + ^Content/ra/v2/expand/myes1.aud: expand/myes1.aud +cncdesert: C&C Desert Tileset + MirrorList: http://www.openra.net/packages/ra-cncdesert-mirrors.txt + Extract: + ^Content/ra/v2/cnc/desert.mix: cnc/desert.mix +music: Freeware Music + MirrorList: http://www.openra.net/packages/ra-scores-mirrors.txt + Extract: + ^Content/ra/v2/scores.mix: scores.mix \ No newline at end of file diff --git a/mods/ura/installer/firstdecade.yaml b/mods/ura/installer/firstdecade.yaml new file mode 100644 index 0000000..622f787 --- /dev/null +++ b/mods/ura/installer/firstdecade.yaml @@ -0,0 +1,448 @@ +tfd: C&C The First Decade (English) + IDFiles: + data1.hdr: bef3a08c3fc1b1caf28ca0dbb97c1f900005930e + data1.cab: 12ad6113a6890a1b4d5651a75378c963eaf513b9 + Install: + extract-iscab: data1.hdr + Volumes: + 2: data2.cab + 3: data3.cab + 4: data4.cab + 5: data5.cab + Extract: + ^Content/ra/v2/main.mix: Red Alert\\MAIN.MIX + ^Content/ra/v2/redalert.mix: Red Alert\\REDALERT.MIX + ^Content/ra/v2/expand/hires1.mix: Red Alert\\HIRES1.MIX + ^Content/ra/v2/expand/lores1.mix: Red Alert\\LORES1.MIX + ^Content/ra/v2/expand/expand2.mix: Red Alert\\EXPAND2.MIX + ^Content/ra/v2/cnc/desert.mix: CnC\\DESERT.MIX + extract-raw: ^Content/ra/v2/redalert.mix + ^Content/ra/v2/hires.mix: + Offset: 650612 + Length: 5817417 + ^Content/ra/v2/local.mix: + Offset: 6468029 + Length: 3829837 + ^Content/ra/v2/lores.mix: + Offset: 10297866 + Length: 754800 + ^Content/ra/v2/speech.mix: + Offset: 23042864 + Length: 2003464 + delete: ^Content/ra/v2/redalert.mix + extract-raw: ^Content/ra/v2/main.mix + ^Content/ra/v2/movies/aagun.vqa: + Offset: 668669829 + Length: 3295512 + ^Content/ra/v2/movies/aftrmath.vqa: + Offset: 671965341 + Length: 2455774 + ^Content/ra/v2/movies/ally12.vqa: + Offset: 430652277 + Length: 7719544 + ^Content/ra/v2/movies/ally14.vqa: + Offset: 438371821 + Length: 11659080 + ^Content/ra/v2/movies/allyend.vqa: + Offset: 450030901 + Length: 27285692 + ^Content/ra/v2/movies/allymorf.vqa: + Offset: 477316593 + Length: 916964 + ^Content/ra/v2/movies/apcescpe.vqa: + Offset: 483950063 + Length: 1627564 + ^Content/ra/v2/movies/assess.vqa: + Offset: 485577627 + Length: 2929218 + ^Content/ra/v2/movies/battle.vqa: + Offset: 488506845 + Length: 2881110 + ^Content/ra/v2/movies/binoc.vqa: + Offset: 491387955 + Length: 4045856 + ^Content/ra/v2/movies/bmap.vqa: + Offset: 495433811 + Length: 2411294 + ^Content/ra/v2/movies/brdgtilt.vqa: + Offset: 497845105 + Length: 1581318 + ^Content/ra/v2/movies/cronfail.vqa: + Offset: 499426423 + Length: 1717214 + ^Content/ra/v2/movies/crontest.vqa: + Offset: 501143637 + Length: 2036620 + ^Content/ra/v2/movies/destroyr.vqa: + Offset: 503180257 + Length: 2178828 + ^Content/ra/v2/movies/dud.vqa: + Offset: 505359085 + Length: 3110418 + ^Content/ra/v2/movies/elevator.vqa: + Offset: 508469503 + Length: 1741894 + ^Content/ra/v2/movies/flare.vqa: + Offset: 511722609 + Length: 1731744 + ^Content/ra/v2/movies/frozen.vqa: + Offset: 513454353 + Length: 1836994 + ^Content/ra/v2/movies/grvestne.vqa: + Offset: 515291347 + Length: 3155668 + ^Content/ra/v2/movies/landing.vqa: + Offset: 518447015 + Length: 2374106 + ^Content/ra/v2/movies/masasslt.vqa: + Offset: 520821121 + Length: 5354700 + ^Content/ra/v2/movies/mcv.vqa: + Offset: 526175821 + Length: 1296036 + ^Content/ra/v2/movies/mcv_land.vqa: + Offset: 527471857 + Length: 1424358 + ^Content/ra/v2/movies/montpass.vqa: + Offset: 528896215 + Length: 1701852 + ^Content/ra/v2/movies/oildrum.vqa: + Offset: 530598067 + Length: 2430792 + ^Content/ra/v2/movies/overrun.vqa: + Offset: 533028859 + Length: 2174548 + ^Content/ra/v2/movies/prolog.vqa: + Offset: 535203407 + Length: 28658198 + ^Content/ra/v2/movies/redintro.vqa: + Offset: 563861605 + Length: 2269452 + ^Content/ra/v2/movies/shipsink.vqa: + Offset: 567961011 + Length: 3150030 + ^Content/ra/v2/movies/shorbom1.vqa: + Offset: 571111041 + Length: 4046650 + ^Content/ra/v2/movies/shorbom2.vqa: + Offset: 575157691 + Length: 2150364 + ^Content/ra/v2/movies/shorbomb.vqa: + Offset: 577308055 + Length: 6111616 + ^Content/ra/v2/movies/snowbomb.vqa: + Offset: 583419671 + Length: 2465762 + ^Content/ra/v2/movies/soviet1.vqa: + Offset: 594906599 + Length: 24112060 + ^Content/ra/v2/movies/sovtstar.vqa: + Offset: 619018659 + Length: 670794 + ^Content/ra/v2/movies/spy.vqa: + Offset: 619689453 + Length: 1646808 + ^Content/ra/v2/movies/tanya1.vqa: + Offset: 621336261 + Length: 13389684 + ^Content/ra/v2/movies/tanya2.vqa: + Offset: 634725945 + Length: 4103388 + ^Content/ra/v2/movies/toofar.vqa: + Offset: 640625425 + Length: 4244572 + ^Content/ra/v2/movies/trinity.vqa: + Offset: 644869997 + Length: 1669310 + ^Content/ra/v2/movies/ally1.vqa: + Offset: 674421115 + Length: 13536324 + ^Content/ra/v2/movies/ally2.vqa: + Offset: 687957439 + Length: 8014018 + ^Content/ra/v2/movies/ally4.vqa: + Offset: 695971457 + Length: 9441906 + ^Content/ra/v2/movies/ally5.vqa: + Offset: 705413363 + Length: 21900328 + ^Content/ra/v2/movies/ally6.vqa: + Offset: 727313691 + Length: 26454212 + ^Content/ra/v2/movies/ally8.vqa: + Offset: 753767903 + Length: 15401062 + ^Content/ra/v2/movies/ally9.vqa: + Offset: 769168965 + Length: 14901460 + ^Content/ra/v2/movies/ally10.vqa: + Offset: 784070425 + Length: 21506358 + ^Content/ra/v2/movies/ally10b.vqa: + Offset: 805576783 + Length: 2565152 + ^Content/ra/v2/movies/ally11.vqa: + Offset: 808142713 + Length: 13600398 + ^Content/ra/v2/interior.mix: + Offset: 821743111 + Length: 249490 + ^Content/ra/v2/conquer.mix: + Offset: 840028549 + Length: 2192279 + ^Content/ra/v2/allies.mix: + Offset: 842220828 + Length: 319181 + ^Content/ra/v2/temperat.mix: + Offset: 842540009 + Length: 1043672 + ^Content/ra/v2/sounds.mix: + Offset: 843583681 + Length: 1385637 + ^Content/ra/v2/snow.mix: + Offset: 844969318 + Length: 1035716 + ^Content/ra/v2/scores.mix: + Offset: 846005034 + Length: 67742203 + ^Content/ra/v2/russian.mix: + Offset: 913747237 + Length: 274732 + ^Content/ra/v2/movies/double.vqa: + Offset: 915739478 + Length: 1608508 + ^Content/ra/v2/movies/dpthchrg.vqa: + Offset: 917347986 + Length: 3048762 + ^Content/ra/v2/movies/execute.vqa: + Offset: 920396748 + Length: 1511212 + ^Content/ra/v2/movies/flare.vqa: + Offset: 921907960 + Length: 1731744 + ^Content/ra/v2/movies/landing.vqa: + Offset: 923639704 + Length: 2374106 + ^Content/ra/v2/movies/mcvbrdge.vqa: + Offset: 926013810 + Length: 2124412 + ^Content/ra/v2/movies/mig.vqa: + Offset: 928138222 + Length: 6745398 + ^Content/ra/v2/movies/movingin.vqa: + Offset: 934883620 + Length: 1185550 + ^Content/ra/v2/movies/mtnkfact.vqa: + Offset: 936069170 + Length: 3168076 + ^Content/ra/v2/movies/nukestok.vqa: + Offset: 939237246 + Length: 1877536 + ^Content/ra/v2/movies/onthprwl.vqa: + Offset: 941114782 + Length: 2648948 + ^Content/ra/v2/movies/periscop.vqa: + Offset: 943763730 + Length: 2099110 + ^Content/ra/v2/movies/prolog.vqa: + Offset: 945862840 + Length: 28658198 + ^Content/ra/v2/movies/radrraid.vqa: + Offset: 974521038 + Length: 1561740 + ^Content/ra/v2/movies/redintro.vqa: + Offset: 976082778 + Length: 2269452 + ^Content/ra/v2/movies/search.vqa: + Offset: 978352230 + Length: 2298940 + ^Content/ra/v2/movies/sfrozen.vqa: + Offset: 980651170 + Length: 1829954 + ^Content/ra/v2/movies/sitduck.vqa: + Offset: 982481124 + Length: 3650212 + ^Content/ra/v2/movies/slntsrvc.vqa: + Offset: 986131336 + Length: 1774986 + ^Content/ra/v2/movies/snowbomb.vqa: + Offset: 987906322 + Length: 2465762 + ^Content/ra/v2/movies/snstrafe.vqa: + Offset: 990372084 + Length: 2473362 + ^Content/ra/v2/movies/sovbatl.vqa: + Offset: 992845446 + Length: 3439876 + ^Content/ra/v2/movies/sovcemet.vqa: + Offset: 996285322 + Length: 3107928 + ^Content/ra/v2/movies/sovfinal.vqa: + Offset: 999393250 + Length: 35169890 + ^Content/ra/v2/movies/soviet1.vqa: + Offset: 1034563140 + Length: 24112060 + ^Content/ra/v2/movies/soviet2.vqa: + Offset: 1058675200 + Length: 9494814 + ^Content/ra/v2/movies/soviet3.vqa: + Offset: 1068170014 + Length: 17229910 + ^Content/ra/v2/movies/soviet4.vqa: + Offset: 1085399924 + Length: 7236290 + ^Content/ra/v2/movies/soviet5.vqa: + Offset: 1092636214 + Length: 18986154 + ^Content/ra/v2/movies/soviet6.vqa: + Offset: 1111622368 + Length: 6782016 + ^Content/ra/v2/movies/soviet7.vqa: + Offset: 1118404384 + Length: 5637552 + ^Content/ra/v2/movies/soviet8.vqa: + Offset: 1124041936 + Length: 28905880 + ^Content/ra/v2/movies/soviet9.vqa: + Offset: 1152947816 + Length: 31809450 + ^Content/ra/v2/movies/soviet10.vqa: + Offset: 1184757266 + Length: 10102944 + ^Content/ra/v2/movies/soviet11.vqa: + Offset: 1194860210 + Length: 16685840 + ^Content/ra/v2/movies/soviet12.vqa: + Offset: 1211546050 + Length: 11532038 + ^Content/ra/v2/movies/soviet13.vqa: + Offset: 1223078088 + Length: 15210482 + ^Content/ra/v2/movies/soviet14.vqa: + Offset: 1238288570 + Length: 24358232 + ^Content/ra/v2/movies/sovmcv.vqa: + Offset: 1262646802 + Length: 1292126 + ^Content/ra/v2/movies/sovtstar.vqa: + Offset: 1263938928 + Length: 670794 + ^Content/ra/v2/movies/spotter.vqa: + Offset: 1264609722 + Length: 1346422 + ^Content/ra/v2/movies/strafe.vqa: + Offset: 1265956144 + Length: 1226956 + ^Content/ra/v2/movies/take_off.vqa: + Offset: 1267183100 + Length: 1419370 + ^Content/ra/v2/movies/tesla.vqa: + Offset: 1268602470 + Length: 1796092 + ^Content/ra/v2/movies/v2rocket.vqa: + Offset: 1270398562 + Length: 1856524 + ^Content/ra/v2/movies/aagun.vqa: + Offset: 1292529084 + Length: 3295512 + ^Content/ra/v2/movies/airfield.vqa: + Offset: 1295824596 + Length: 2696058 + ^Content/ra/v2/movies/ally1.vqa: + Offset: 1298520654 + Length: 13536324 + ^Content/ra/v2/movies/allymorf.vqa: + Offset: 1312056978 + Length: 916964 + ^Content/ra/v2/movies/averted.vqa: + Offset: 1312973942 + Length: 1902556 + ^Content/ra/v2/movies/beachead.vqa: + Offset: 1314876498 + Length: 4891790 + ^Content/ra/v2/movies/bmap.vqa: + Offset: 1319768288 + Length: 2414312 + ^Content/ra/v2/movies/bombrun.vqa: + Offset: 1322182600 + Length: 5167450 + ^Content/ra/v2/movies/countdwn.vqa: + Offset: 1327350050 + Length: 2005906 + ^Content/ra/v2/movies/cronfail.vqa: + Offset: 1329356707 + Length: 1717214 + ^Content/ra/v2/expand/chrotnk1.aud: + Offset: 843615985 + Length: 22900 + ^Content/ra/v2/expand/fixit1.aud: + Offset: 843860963 + Length: 10707 + ^Content/ra/v2/expand/jburn1.aud: + Offset: 844007001 + Length: 23091 + ^Content/ra/v2/expand/jchrge1.aud: + Offset: 844030092 + Length: 14219 + ^Content/ra/v2/expand/jcrisp1.aud: + Offset: 844044311 + Length: 18211 + ^Content/ra/v2/expand/jdance1.aud: + Offset: 844062522 + Length: 14315 + ^Content/ra/v2/expand/jjuice1.aud: + Offset: 844076837 + Length: 9699 + ^Content/ra/v2/expand/jjump1.aud: + Offset: 844086536 + Length: 8219 + ^Content/ra/v2/expand/jlight1.aud: + Offset: 844094755 + Length: 9875 + ^Content/ra/v2/expand/jpower1.aud: + Offset: 844104630 + Length: 13571 + ^Content/ra/v2/expand/jshock1.aud: + Offset: 844118201 + Length: 14771 + ^Content/ra/v2/expand/jyes1.aud: + Offset: 844132972 + Length: 13795 + ^Content/ra/v2/expand/madchrg2.aud: + Offset: 844262883 + Length: 19782 + ^Content/ra/v2/expand/madexplo.aud: + Offset: 844282665 + Length: 26572 + ^Content/ra/v2/expand/mboss1.aud: + Offset: 844314713 + Length: 20147 + ^Content/ra/v2/expand/mhear1.aud: + Offset: 844340048 + Length: 6714 + ^Content/ra/v2/expand/mhotdig1.aud: + Offset: 844346762 + Length: 10674 + ^Content/ra/v2/expand/mhowdy1.aud: + Offset: 844357436 + Length: 6714 + ^Content/ra/v2/expand/mhuh1.aud: + Offset: 844364150 + Length: 4117 + ^Content/ra/v2/expand/mlaff1.aud: + Offset: 844428954 + Length: 24133 + ^Content/ra/v2/expand/mrise1.aud: + Offset: 844466487 + Length: 13523 + ^Content/ra/v2/expand/mwrench1.aud: + Offset: 844480010 + Length: 10780 + ^Content/ra/v2/expand/myeehaw1.aud: + Offset: 844490790 + Length: 18912 + ^Content/ra/v2/expand/myes1.aud: + Offset: 844509702 + Length: 9073 + delete: ^Content/ra/v2/main.mix \ No newline at end of file diff --git a/mods/ura/installer/origin.yaml b/mods/ura/installer/origin.yaml new file mode 100644 index 0000000..a9ff9f1 --- /dev/null +++ b/mods/ura/installer/origin.yaml @@ -0,0 +1,470 @@ +ra-origin: C&C The Ultimate Collection (Origin version, English) + Type: Install + RegistryPrefixes: HKEY_LOCAL_MACHINE\Software\, HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ + RegistryKey: EA Games\Command and Conquer Red Alert + RegistryValue: Install Dir + IDFiles: + RA95Launcher.exe: 22bf7a1f9f1c2498823e3216541e6012f291c2c0 + REDALERT.MIX: 0e58f4b54f44f6cd29fecf8cf379d33cf2d4caef + Install: + copy: . + ^Content/ra/v2/expand/2nd_hand.aud: 2nd_hand.aud + ^Content/ra/v2/expand/araziod.aud: araziod.aud + ^Content/ra/v2/expand/await.aud: await.aud + ^Content/ra/v2/expand/backstab.aud: backstab.aud + ^Content/ra/v2/expand/bog.aud: bog.aud + ^Content/ra/v2/expand/chaos2.aud: chaos2.aud + ^Content/ra/v2/expand/float_v2.aud: float_v2.aud + ^Content/ra/v2/expand/gloom.aud: gloom.aud + ^Content/ra/v2/expand/grndwire.aud: grndwire.aud + ^Content/ra/v2/expand/rpt.aud: rpt.aud + ^Content/ra/v2/expand/search.aud: search.aud + ^Content/ra/v2/expand/shut_it.aud: shut_it.aud + ^Content/ra/v2/expand/traction.aud: traction.aud + ^Content/ra/v2/expand/twinmix1.aud: twinmix1.aud + ^Content/ra/v2/expand/under3.aud: under3.aud + ^Content/ra/v2/expand/vr2.aud: vr2.aud + ^Content/ra/v2/expand/wastelnd.aud: wastelnd.aud + ^Content/ra/v2/expand/expand2.mix: EXPAND2.MIX + ^Content/ra/v2/expand/hires1.mix: HIRES1.MIX + ^Content/ra/v2/expand/lores1.mix: LORES1.MIX + extract-raw: REDALERT.MIX + ^Content/ra/v2/hires.mix: + Offset: 650612 + Length: 5817417 + ^Content/ra/v2/local.mix: + Offset: 6468029 + Length: 3829837 + ^Content/ra/v2/lores.mix: + Offset: 10297866 + Length: 754800 + ^Content/ra/v2/speech.mix: + Offset: 23042864 + Length: 2003464 + extract-raw: MAIN.MIX + ^Content/ra/v2/movies/aagun.vqa: + Offset: 668669829 + Length: 3295512 + ^Content/ra/v2/movies/aftrmath.vqa: + Offset: 671965341 + Length: 2455774 + ^Content/ra/v2/movies/ally12.vqa: + Offset: 430652277 + Length: 7719544 + ^Content/ra/v2/movies/ally14.vqa: + Offset: 438371821 + Length: 11659080 + ^Content/ra/v2/movies/allyend.vqa: + Offset: 450030901 + Length: 27285692 + ^Content/ra/v2/movies/allymorf.vqa: + Offset: 477316593 + Length: 916964 + ^Content/ra/v2/movies/apcescpe.vqa: + Offset: 483950063 + Length: 1627564 + ^Content/ra/v2/movies/assess.vqa: + Offset: 485577627 + Length: 2929218 + ^Content/ra/v2/movies/battle.vqa: + Offset: 488506845 + Length: 2881110 + ^Content/ra/v2/movies/binoc.vqa: + Offset: 491387955 + Length: 4045856 + ^Content/ra/v2/movies/bmap.vqa: + Offset: 495433811 + Length: 2411294 + ^Content/ra/v2/movies/brdgtilt.vqa: + Offset: 497845105 + Length: 1581318 + ^Content/ra/v2/movies/cronfail.vqa: + Offset: 499426423 + Length: 1717214 + ^Content/ra/v2/movies/crontest.vqa: + Offset: 501143637 + Length: 2036620 + ^Content/ra/v2/movies/destroyr.vqa: + Offset: 503180257 + Length: 2178828 + ^Content/ra/v2/movies/dud.vqa: + Offset: 505359085 + Length: 3110418 + ^Content/ra/v2/movies/elevator.vqa: + Offset: 508469503 + Length: 1741894 + ^Content/ra/v2/movies/flare.vqa: + Offset: 511722609 + Length: 1731744 + ^Content/ra/v2/movies/frozen.vqa: + Offset: 513454353 + Length: 1836994 + ^Content/ra/v2/movies/grvestne.vqa: + Offset: 515291347 + Length: 3155668 + ^Content/ra/v2/movies/landing.vqa: + Offset: 518447015 + Length: 2374106 + ^Content/ra/v2/movies/masasslt.vqa: + Offset: 520821121 + Length: 5354700 + ^Content/ra/v2/movies/mcv.vqa: + Offset: 526175821 + Length: 1296036 + ^Content/ra/v2/movies/mcv_land.vqa: + Offset: 527471857 + Length: 1424358 + ^Content/ra/v2/movies/montpass.vqa: + Offset: 528896215 + Length: 1701852 + ^Content/ra/v2/movies/oildrum.vqa: + Offset: 530598067 + Length: 2430792 + ^Content/ra/v2/movies/overrun.vqa: + Offset: 533028859 + Length: 2174548 + ^Content/ra/v2/movies/prolog.vqa: + Offset: 535203407 + Length: 28658198 + ^Content/ra/v2/movies/redintro.vqa: + Offset: 563861605 + Length: 2269452 + ^Content/ra/v2/movies/shipsink.vqa: + Offset: 567961011 + Length: 3150030 + ^Content/ra/v2/movies/shorbom1.vqa: + Offset: 571111041 + Length: 4046650 + ^Content/ra/v2/movies/shorbom2.vqa: + Offset: 575157691 + Length: 2150364 + ^Content/ra/v2/movies/shorbomb.vqa: + Offset: 577308055 + Length: 6111616 + ^Content/ra/v2/movies/snowbomb.vqa: + Offset: 583419671 + Length: 2465762 + ^Content/ra/v2/movies/soviet1.vqa: + Offset: 594906599 + Length: 24112060 + ^Content/ra/v2/movies/sovtstar.vqa: + Offset: 619018659 + Length: 670794 + ^Content/ra/v2/movies/spy.vqa: + Offset: 619689453 + Length: 1646808 + ^Content/ra/v2/movies/tanya1.vqa: + Offset: 621336261 + Length: 13389684 + ^Content/ra/v2/movies/tanya2.vqa: + Offset: 634725945 + Length: 4103388 + ^Content/ra/v2/movies/toofar.vqa: + Offset: 640625425 + Length: 4244572 + ^Content/ra/v2/movies/trinity.vqa: + Offset: 644869997 + Length: 1669310 + ^Content/ra/v2/movies/ally1.vqa: + Offset: 674421115 + Length: 13536324 + ^Content/ra/v2/movies/ally2.vqa: + Offset: 687957439 + Length: 8014018 + ^Content/ra/v2/movies/ally4.vqa: + Offset: 695971457 + Length: 9441906 + ^Content/ra/v2/movies/ally5.vqa: + Offset: 705413363 + Length: 21900328 + ^Content/ra/v2/movies/ally6.vqa: + Offset: 727313691 + Length: 26454212 + ^Content/ra/v2/movies/ally8.vqa: + Offset: 753767903 + Length: 15401062 + ^Content/ra/v2/movies/ally9.vqa: + Offset: 769168965 + Length: 14901460 + ^Content/ra/v2/movies/ally10.vqa: + Offset: 784070425 + Length: 21506358 + ^Content/ra/v2/movies/ally10b.vqa: + Offset: 805576783 + Length: 2565152 + ^Content/ra/v2/movies/ally11.vqa: + Offset: 808142713 + Length: 13600398 + ^Content/ra/v2/interior.mix: + Offset: 821743111 + Length: 249490 + ^Content/ra/v2/conquer.mix: + Offset: 840028549 + Length: 2192279 + ^Content/ra/v2/allies.mix: + Offset: 842220828 + Length: 319181 + ^Content/ra/v2/temperat.mix: + Offset: 842540009 + Length: 1043672 + ^Content/ra/v2/sounds.mix: + Offset: 843583681 + Length: 1385637 + ^Content/ra/v2/snow.mix: + Offset: 844969318 + Length: 1035716 + ^Content/ra/v2/scores.mix: + Offset: 846005034 + Length: 67742203 + ^Content/ra/v2/russian.mix: + Offset: 913747237 + Length: 274732 + ^Content/ra/v2/movies/double.vqa: + Offset: 915739478 + Length: 1608508 + ^Content/ra/v2/movies/dpthchrg.vqa: + Offset: 917347986 + Length: 3048762 + ^Content/ra/v2/movies/execute.vqa: + Offset: 920396748 + Length: 1511212 + ^Content/ra/v2/movies/flare.vqa: + Offset: 921907960 + Length: 1731744 + ^Content/ra/v2/movies/landing.vqa: + Offset: 923639704 + Length: 2374106 + ^Content/ra/v2/movies/mcvbrdge.vqa: + Offset: 926013810 + Length: 2124412 + ^Content/ra/v2/movies/mig.vqa: + Offset: 928138222 + Length: 6745398 + ^Content/ra/v2/movies/movingin.vqa: + Offset: 934883620 + Length: 1185550 + ^Content/ra/v2/movies/mtnkfact.vqa: + Offset: 936069170 + Length: 3168076 + ^Content/ra/v2/movies/nukestok.vqa: + Offset: 939237246 + Length: 1877536 + ^Content/ra/v2/movies/onthprwl.vqa: + Offset: 941114782 + Length: 2648948 + ^Content/ra/v2/movies/periscop.vqa: + Offset: 943763730 + Length: 2099110 + ^Content/ra/v2/movies/prolog.vqa: + Offset: 945862840 + Length: 28658198 + ^Content/ra/v2/movies/radrraid.vqa: + Offset: 974521038 + Length: 1561740 + ^Content/ra/v2/movies/redintro.vqa: + Offset: 976082778 + Length: 2269452 + ^Content/ra/v2/movies/search.vqa: + Offset: 978352230 + Length: 2298940 + ^Content/ra/v2/movies/sfrozen.vqa: + Offset: 980651170 + Length: 1829954 + ^Content/ra/v2/movies/sitduck.vqa: + Offset: 982481124 + Length: 3650212 + ^Content/ra/v2/movies/slntsrvc.vqa: + Offset: 986131336 + Length: 1774986 + ^Content/ra/v2/movies/snowbomb.vqa: + Offset: 987906322 + Length: 2465762 + ^Content/ra/v2/movies/snstrafe.vqa: + Offset: 990372084 + Length: 2473362 + ^Content/ra/v2/movies/sovbatl.vqa: + Offset: 992845446 + Length: 3439876 + ^Content/ra/v2/movies/sovcemet.vqa: + Offset: 996285322 + Length: 3107928 + ^Content/ra/v2/movies/sovfinal.vqa: + Offset: 999393250 + Length: 35169890 + ^Content/ra/v2/movies/soviet1.vqa: + Offset: 1034563140 + Length: 24112060 + ^Content/ra/v2/movies/soviet2.vqa: + Offset: 1058675200 + Length: 9494814 + ^Content/ra/v2/movies/soviet3.vqa: + Offset: 1068170014 + Length: 17229910 + ^Content/ra/v2/movies/soviet4.vqa: + Offset: 1085399924 + Length: 7236290 + ^Content/ra/v2/movies/soviet5.vqa: + Offset: 1092636214 + Length: 18986154 + ^Content/ra/v2/movies/soviet6.vqa: + Offset: 1111622368 + Length: 6782016 + ^Content/ra/v2/movies/soviet7.vqa: + Offset: 1118404384 + Length: 5637552 + ^Content/ra/v2/movies/soviet8.vqa: + Offset: 1124041936 + Length: 28905880 + ^Content/ra/v2/movies/soviet9.vqa: + Offset: 1152947816 + Length: 31809450 + ^Content/ra/v2/movies/soviet10.vqa: + Offset: 1184757266 + Length: 10102944 + ^Content/ra/v2/movies/soviet11.vqa: + Offset: 1194860210 + Length: 16685840 + ^Content/ra/v2/movies/soviet12.vqa: + Offset: 1211546050 + Length: 11532038 + ^Content/ra/v2/movies/soviet13.vqa: + Offset: 1223078088 + Length: 15210482 + ^Content/ra/v2/movies/soviet14.vqa: + Offset: 1238288570 + Length: 24358232 + ^Content/ra/v2/movies/sovmcv.vqa: + Offset: 1262646802 + Length: 1292126 + ^Content/ra/v2/movies/sovtstar.vqa: + Offset: 1263938928 + Length: 670794 + ^Content/ra/v2/movies/spotter.vqa: + Offset: 1264609722 + Length: 1346422 + ^Content/ra/v2/movies/strafe.vqa: + Offset: 1265956144 + Length: 1226956 + ^Content/ra/v2/movies/take_off.vqa: + Offset: 1267183100 + Length: 1419370 + ^Content/ra/v2/movies/tesla.vqa: + Offset: 1268602470 + Length: 1796092 + ^Content/ra/v2/movies/v2rocket.vqa: + Offset: 1270398562 + Length: 1856524 + ^Content/ra/v2/movies/aagun.vqa: + Offset: 1292529084 + Length: 3295512 + ^Content/ra/v2/movies/airfield.vqa: + Offset: 1295824596 + Length: 2696058 + ^Content/ra/v2/movies/ally1.vqa: + Offset: 1298520654 + Length: 13536324 + ^Content/ra/v2/movies/allymorf.vqa: + Offset: 1312056978 + Length: 916964 + ^Content/ra/v2/movies/averted.vqa: + Offset: 1312973942 + Length: 1902556 + ^Content/ra/v2/movies/beachead.vqa: + Offset: 1314876498 + Length: 4891790 + ^Content/ra/v2/movies/bmap.vqa: + Offset: 1319768288 + Length: 2414312 + ^Content/ra/v2/movies/bombrun.vqa: + Offset: 1322182600 + Length: 5167450 + ^Content/ra/v2/movies/countdwn.vqa: + Offset: 1327350050 + Length: 2005906 + ^Content/ra/v2/movies/cronfail.vqa: + Offset: 1329356707 + Length: 1717214 + ^Content/ra/v2/expand/chrotnk1.aud: + Offset: 843615985 + Length: 22900 + ^Content/ra/v2/expand/fixit1.aud: + Offset: 843860963 + Length: 10707 + ^Content/ra/v2/expand/jburn1.aud: + Offset: 844007001 + Length: 23091 + ^Content/ra/v2/expand/jchrge1.aud: + Offset: 844030092 + Length: 14219 + ^Content/ra/v2/expand/jcrisp1.aud: + Offset: 844044311 + Length: 18211 + ^Content/ra/v2/expand/jdance1.aud: + Offset: 844062522 + Length: 14315 + ^Content/ra/v2/expand/jjuice1.aud: + Offset: 844076837 + Length: 9699 + ^Content/ra/v2/expand/jjump1.aud: + Offset: 844086536 + Length: 8219 + ^Content/ra/v2/expand/jlight1.aud: + Offset: 844094755 + Length: 9875 + ^Content/ra/v2/expand/jpower1.aud: + Offset: 844104630 + Length: 13571 + ^Content/ra/v2/expand/jshock1.aud: + Offset: 844118201 + Length: 14771 + ^Content/ra/v2/expand/jyes1.aud: + Offset: 844132972 + Length: 13795 + ^Content/ra/v2/expand/madchrg2.aud: + Offset: 844262883 + Length: 19782 + ^Content/ra/v2/expand/madexplo.aud: + Offset: 844282665 + Length: 26572 + ^Content/ra/v2/expand/mboss1.aud: + Offset: 844314713 + Length: 20147 + ^Content/ra/v2/expand/mhear1.aud: + Offset: 844340048 + Length: 6714 + ^Content/ra/v2/expand/mhotdig1.aud: + Offset: 844346762 + Length: 10674 + ^Content/ra/v2/expand/mhowdy1.aud: + Offset: 844357436 + Length: 6714 + ^Content/ra/v2/expand/mhuh1.aud: + Offset: 844364150 + Length: 4117 + ^Content/ra/v2/expand/mlaff1.aud: + Offset: 844428954 + Length: 24133 + ^Content/ra/v2/expand/mrise1.aud: + Offset: 844466487 + Length: 13523 + ^Content/ra/v2/expand/mwrench1.aud: + Offset: 844480010 + Length: 10780 + ^Content/ra/v2/expand/myeehaw1.aud: + Offset: 844490790 + Length: 18912 + ^Content/ra/v2/expand/myes1.aud: + Offset: 844509702 + Length: 9073 + +cnc-origin: Command & Conquer (Origin version, English) + Type: Install + RegistryPrefixes: HKEY_LOCAL_MACHINE\Software\, HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ + RegistryKey: EA Games\CNC and The Covert Operations + RegistryValue: Install Dir + IDFiles: + CNC95Launcher.exe: 1d711adf09ac08738b2599b3092a1b448169b32a + CONQUER.MIX: 833e02a09aae694659eb312d3838367f681d1b30 + Install: + copy: . + ^Content/ra/v2/cnc/desert.mix: DESERT.MIX \ No newline at end of file diff --git a/mods/ura/installer/soviet95.yaml b/mods/ura/installer/soviet95.yaml new file mode 100644 index 0000000..5d4182b --- /dev/null +++ b/mods/ura/installer/soviet95.yaml @@ -0,0 +1,417 @@ +soviet: Red Alert 95 (Soviet Disc, English) + IDFiles: + MAIN.MIX: 9d108f18560716b684ab8b1da42cc7f3d1b52519 + Length: 4096 + INSTALL/REDALERT.MIX: 0e58f4b54f44f6cd29fecf8cf379d33cf2d4caef + Install: + extract-raw: INSTALL/REDALERT.MIX + ^Content/ra/v2/hires.mix: + Offset: 650612 + Length: 5817417 + ^Content/ra/v2/local.mix: + Offset: 6468029 + Length: 3829837 + ^Content/ra/v2/lores.mix: + Offset: 10297866 + Length: 754800 + ^Content/ra/v2/speech.mix: + Offset: 23042864 + Length: 2003464 + extract-raw: MAIN.MIX + ^Content/ra/v2/conquer.mix: + Offset: 236 + Length: 2177047 + ^Content/ra/v2/interior.mix: + Offset: 17172192 + Length: 247425 + ^Content/ra/v2/movies/aagun.vqa: + Offset: 37694379 + Length: 3295512 + ^Content/ra/v2/movies/cronfail.vqa: + Offset: 40989891 + Length: 1717214 + ^Content/ra/v2/movies/airfield.vqa: + Offset: 42707105 + Length: 2696058 + ^Content/ra/v2/movies/ally1.vqa: + Offset: 45403163 + Length: 13536324 + ^Content/ra/v2/movies/allymorf.vqa: + Offset: 58939487 + Length: 916964 + ^Content/ra/v2/movies/averted.vqa: + Offset: 59856451 + Length: 1902556 + ^Content/ra/v2/movies/beachead.vqa: + Offset: 61759007 + Length: 4891790 + ^Content/ra/v2/movies/bmap.vqa: + Offset: 66650797 + Length: 2414312 + ^Content/ra/v2/movies/bombrun.vqa: + Offset: 69065109 + Length: 5167450 + ^Content/ra/v2/movies/countdwn.vqa: + Offset: 74232559 + Length: 2005906 + ^Content/ra/v2/movies/double.vqa: + Offset: 76238465 + Length: 1608508 + ^Content/ra/v2/movies/dpthchrg.vqa: + Offset: 77846973 + Length: 3048762 + ^Content/ra/v2/movies/execute.vqa: + Offset: 80895735 + Length: 1511212 + ^Content/ra/v2/movies/flare.vqa: + Offset: 82406947 + Length: 1731744 + ^Content/ra/v2/movies/landing.vqa: + Offset: 84138691 + Length: 2374106 + ^Content/ra/v2/movies/mcvbrdge.vqa: + Offset: 86512797 + Length: 2124412 + ^Content/ra/v2/movies/mig.vqa: + Offset: 88637209 + Length: 6745398 + ^Content/ra/v2/movies/movingin.vqa: + Offset: 95382607 + Length: 1185550 + ^Content/ra/v2/movies/mtnkfact.vqa: + Offset: 96568157 + Length: 3168076 + ^Content/ra/v2/movies/nukestok.vqa: + Offset: 99736233 + Length: 1877536 + ^Content/ra/v2/movies/onthprwl.vqa: + Offset: 101613769 + Length: 2648948 + ^Content/ra/v2/movies/periscop.vqa: + Offset: 104262717 + Length: 2099110 + ^Content/ra/v2/movies/prolog.vqa: + Offset: 106361827 + Length: 28658198 + ^Content/ra/v2/movies/radrraid.vqa: + Offset: 135020025 + Length: 1561740 + ^Content/ra/v2/movies/redintro.vqa: + Offset: 136581765 + Length: 2269452 + ^Content/ra/v2/movies/search.vqa: + Offset: 138851217 + Length: 2298940 + ^Content/ra/v2/movies/sfrozen.vqa: + Offset: 141150157 + Length: 1829954 + ^Content/ra/v2/movies/sitduck.vqa: + Offset: 142980111 + Length: 3650212 + ^Content/ra/v2/movies/slntsrvc.vqa: + Offset: 146630323 + Length: 1774986 + ^Content/ra/v2/movies/snowbomb.vqa: + Offset: 148405309 + Length: 2465762 + ^Content/ra/v2/movies/snstrafe.vqa: + Offset: 150871071 + Length: 2473362 + ^Content/ra/v2/movies/sovbatl.vqa: + Offset: 153344433 + Length: 3439876 + ^Content/ra/v2/movies/sovcemet.vqa: + Offset: 156784309 + Length: 3107928 + ^Content/ra/v2/movies/sovfinal.vqa: + Offset: 159892237 + Length: 35169890 + ^Content/ra/v2/movies/soviet1.vqa: + Offset: 195062127 + Length: 24112060 + ^Content/ra/v2/movies/soviet10.vqa: + Offset: 219174187 + Length: 10102944 + ^Content/ra/v2/movies/soviet11.vqa: + Offset: 229277131 + Length: 16685840 + ^Content/ra/v2/movies/soviet12.vqa: + Offset: 245962971 + Length: 11532038 + ^Content/ra/v2/movies/soviet13.vqa: + Offset: 257495009 + Length: 15210482 + ^Content/ra/v2/movies/soviet14.vqa: + Offset: 272705491 + Length: 24358232 + ^Content/ra/v2/movies/soviet2.vqa: + Offset: 297063723 + Length: 9494814 + ^Content/ra/v2/movies/soviet3.vqa: + Offset: 306558537 + Length: 17229910 + ^Content/ra/v2/movies/soviet4.vqa: + Offset: 323788447 + Length: 7236290 + ^Content/ra/v2/movies/soviet5.vqa: + Offset: 331024737 + Length: 18986154 + ^Content/ra/v2/movies/soviet6.vqa: + Offset: 350010891 + Length: 6782016 + ^Content/ra/v2/movies/soviet7.vqa: + Offset: 356792907 + Length: 5637552 + ^Content/ra/v2/movies/soviet8.vqa: + Offset: 362430459 + Length: 28905880 + ^Content/ra/v2/movies/soviet9.vqa: + Offset: 391336339 + Length: 31809450 + ^Content/ra/v2/movies/sovmcv.vqa: + Offset: 423145789 + Length: 1292126 + ^Content/ra/v2/movies/sovtstar.vqa: + Offset: 424437915 + Length: 670794 + ^Content/ra/v2/movies/spotter.vqa: + Offset: 425108709 + Length: 1346422 + ^Content/ra/v2/movies/strafe.vqa: + Offset: 426455131 + Length: 1226956 + ^Content/ra/v2/movies/take_off.vqa: + Offset: 427682087 + Length: 1419370 + ^Content/ra/v2/movies/tesla.vqa: + Offset: 429101457 + Length: 1796092 + ^Content/ra/v2/movies/v2rocket.vqa: + Offset: 430897549 + Length: 1856524 + ^Content/ra/v2/scores.mix: + Offset: 432754073 + Length: 64171360 + ^Content/ra/v2/snow.mix: + Offset: 496925433 + Length: 1030861 + ^Content/ra/v2/russian.mix: + Offset: 497956294 + Length: 266077 + ^Content/ra/v2/allies.mix: + Offset: 498222371 + Length: 309406 + ^Content/ra/v2/sounds.mix: + Offset: 498531777 + Length: 1006778 + ^Content/ra/v2/temperat.mix: + Offset: 499538555 + Length: 1038859 +soviet-linux: Red Alert 95 (Soviet Disc, English) + IDFiles: + automenu.apm: bb61132a492bfb37069a0139f95671da3655d916 + install/redalert.mix: 0e58f4b54f44f6cd29fecf8cf379d33cf2d4caef + Install: + extract-raw: install/redalert.mix + ^Content/ra/v2/hires.mix: + Offset: 650612 + Length: 5817417 + ^Content/ra/v2/local.mix: + Offset: 6468029 + Length: 3829837 + ^Content/ra/v2/lores.mix: + Offset: 10297866 + Length: 754800 + ^Content/ra/v2/speech.mix: + Offset: 23042864 + Length: 2003464 + extract-raw: main.mix + ^Content/ra/v2/conquer.mix: + Offset: 236 + Length: 2177047 + ^Content/ra/v2/interior.mix: + Offset: 17172192 + Length: 247425 + ^Content/ra/v2/movies/aagun.vqa: + Offset: 37694379 + Length: 3295512 + ^Content/ra/v2/movies/cronfail.vqa: + Offset: 40989891 + Length: 1717214 + ^Content/ra/v2/movies/airfield.vqa: + Offset: 42707105 + Length: 2696058 + ^Content/ra/v2/movies/ally1.vqa: + Offset: 45403163 + Length: 13536324 + ^Content/ra/v2/movies/allymorf.vqa: + Offset: 58939487 + Length: 916964 + ^Content/ra/v2/movies/averted.vqa: + Offset: 59856451 + Length: 1902556 + ^Content/ra/v2/movies/beachead.vqa: + Offset: 61759007 + Length: 4891790 + ^Content/ra/v2/movies/bmap.vqa: + Offset: 66650797 + Length: 2414312 + ^Content/ra/v2/movies/bombrun.vqa: + Offset: 69065109 + Length: 5167450 + ^Content/ra/v2/movies/countdwn.vqa: + Offset: 74232559 + Length: 2005906 + ^Content/ra/v2/movies/double.vqa: + Offset: 76238465 + Length: 1608508 + ^Content/ra/v2/movies/dpthchrg.vqa: + Offset: 77846973 + Length: 3048762 + ^Content/ra/v2/movies/execute.vqa: + Offset: 80895735 + Length: 1511212 + ^Content/ra/v2/movies/flare.vqa: + Offset: 82406947 + Length: 1731744 + ^Content/ra/v2/movies/landing.vqa: + Offset: 84138691 + Length: 2374106 + ^Content/ra/v2/movies/mcvbrdge.vqa: + Offset: 86512797 + Length: 2124412 + ^Content/ra/v2/movies/mig.vqa: + Offset: 88637209 + Length: 6745398 + ^Content/ra/v2/movies/movingin.vqa: + Offset: 95382607 + Length: 1185550 + ^Content/ra/v2/movies/mtnkfact.vqa: + Offset: 96568157 + Length: 3168076 + ^Content/ra/v2/movies/nukestok.vqa: + Offset: 99736233 + Length: 1877536 + ^Content/ra/v2/movies/onthprwl.vqa: + Offset: 101613769 + Length: 2648948 + ^Content/ra/v2/movies/periscop.vqa: + Offset: 104262717 + Length: 2099110 + ^Content/ra/v2/movies/prolog.vqa: + Offset: 106361827 + Length: 28658198 + ^Content/ra/v2/movies/radrraid.vqa: + Offset: 135020025 + Length: 1561740 + ^Content/ra/v2/movies/redintro.vqa: + Offset: 136581765 + Length: 2269452 + ^Content/ra/v2/movies/search.vqa: + Offset: 138851217 + Length: 2298940 + ^Content/ra/v2/movies/sfrozen.vqa: + Offset: 141150157 + Length: 1829954 + ^Content/ra/v2/movies/sitduck.vqa: + Offset: 142980111 + Length: 3650212 + ^Content/ra/v2/movies/slntsrvc.vqa: + Offset: 146630323 + Length: 1774986 + ^Content/ra/v2/movies/snowbomb.vqa: + Offset: 148405309 + Length: 2465762 + ^Content/ra/v2/movies/snstrafe.vqa: + Offset: 150871071 + Length: 2473362 + ^Content/ra/v2/movies/sovbatl.vqa: + Offset: 153344433 + Length: 3439876 + ^Content/ra/v2/movies/sovcemet.vqa: + Offset: 156784309 + Length: 3107928 + ^Content/ra/v2/movies/sovfinal.vqa: + Offset: 159892237 + Length: 35169890 + ^Content/ra/v2/movies/soviet1.vqa: + Offset: 195062127 + Length: 24112060 + ^Content/ra/v2/movies/soviet10.vqa: + Offset: 219174187 + Length: 10102944 + ^Content/ra/v2/movies/soviet11.vqa: + Offset: 229277131 + Length: 16685840 + ^Content/ra/v2/movies/soviet12.vqa: + Offset: 245962971 + Length: 11532038 + ^Content/ra/v2/movies/soviet13.vqa: + Offset: 257495009 + Length: 15210482 + ^Content/ra/v2/movies/soviet14.vqa: + Offset: 272705491 + Length: 24358232 + ^Content/ra/v2/movies/soviet2.vqa: + Offset: 297063723 + Length: 9494814 + ^Content/ra/v2/movies/soviet3.vqa: + Offset: 306558537 + Length: 17229910 + ^Content/ra/v2/movies/soviet4.vqa: + Offset: 323788447 + Length: 7236290 + ^Content/ra/v2/movies/soviet5.vqa: + Offset: 331024737 + Length: 18986154 + ^Content/ra/v2/movies/soviet6.vqa: + Offset: 350010891 + Length: 6782016 + ^Content/ra/v2/movies/soviet7.vqa: + Offset: 356792907 + Length: 5637552 + ^Content/ra/v2/movies/soviet8.vqa: + Offset: 362430459 + Length: 28905880 + ^Content/ra/v2/movies/soviet9.vqa: + Offset: 391336339 + Length: 31809450 + ^Content/ra/v2/movies/sovmcv.vqa: + Offset: 423145789 + Length: 1292126 + ^Content/ra/v2/movies/sovtstar.vqa: + Offset: 424437915 + Length: 670794 + ^Content/ra/v2/movies/spotter.vqa: + Offset: 425108709 + Length: 1346422 + ^Content/ra/v2/movies/strafe.vqa: + Offset: 426455131 + Length: 1226956 + ^Content/ra/v2/movies/take_off.vqa: + Offset: 427682087 + Length: 1419370 + ^Content/ra/v2/movies/tesla.vqa: + Offset: 429101457 + Length: 1796092 + ^Content/ra/v2/movies/v2rocket.vqa: + Offset: 430897549 + Length: 1856524 + ^Content/ra/v2/scores.mix: + Offset: 432754073 + Length: 64171360 + ^Content/ra/v2/snow.mix: + Offset: 496925433 + Length: 1030861 + ^Content/ra/v2/russian.mix: + Offset: 497956294 + Length: 266077 + ^Content/ra/v2/allies.mix: + Offset: 498222371 + Length: 309406 + ^Content/ra/v2/sounds.mix: + Offset: 498531777 + Length: 1006778 + ^Content/ra/v2/temperat.mix: + Offset: 499538555 + Length: 1038859 \ No newline at end of file diff --git a/mods/ura/languages/english.yaml b/mods/ura/languages/english.yaml new file mode 100644 index 0000000..7dee16a --- /dev/null +++ b/mods/ura/languages/english.yaml @@ -0,0 +1,2 @@ +english: + english: English diff --git a/mods/ura/maps/Siberian-Pass.oramap b/mods/ura/maps/Siberian-Pass.oramap new file mode 100644 index 0000000..dcf1e3a Binary files /dev/null and b/mods/ura/maps/Siberian-Pass.oramap differ diff --git a/mods/ura/maps/a-nuclear-winter/map.bin b/mods/ura/maps/a-nuclear-winter/map.bin new file mode 100644 index 0000000..9f27601 Binary files /dev/null and b/mods/ura/maps/a-nuclear-winter/map.bin differ diff --git a/mods/ura/maps/a-nuclear-winter/map.png b/mods/ura/maps/a-nuclear-winter/map.png new file mode 100644 index 0000000..f6c77c9 Binary files /dev/null and b/mods/ura/maps/a-nuclear-winter/map.png differ diff --git a/mods/ura/maps/a-nuclear-winter/map.yaml b/mods/ura/maps/a-nuclear-winter/map.yaml new file mode 100644 index 0000000..e572ead --- /dev/null +++ b/mods/ura/maps/a-nuclear-winter/map.yaml @@ -0,0 +1,2391 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: A Nuclear Winter + +Author: Lucian + +Tileset: SNOW + +MapSize: 102,72 + +Bounds: 1,1,100,70 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + Enemies: Multi0, Multi1 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + Playable: True + Faction: Random + Enemies: Creeps + +Actors: + Actor210: v04 + Owner: Neutral + Location: 47,14 + Actor221: wood + Owner: Neutral + Location: 52,15 + Actor239: c3 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 47,16 + Actor240: c3 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 52,16 + Actor241: v06 + Owner: Neutral + Location: 53,16 + Actor242: wood + Owner: Neutral + Location: 55,16 + Actor263: wood + Owner: Neutral + Location: 53,19 + Actor264: wood + Owner: Neutral + Location: 54,19 + Actor269: wood + Owner: Neutral + Location: 53,20 + Actor279: brl3 + Owner: Neutral + Location: 47,21 + Actor281: barl + Owner: Neutral + Location: 48,21 + Actor282: v07 + Owner: Neutral + Location: 51,21 + Actor283: wood + Owner: Neutral + Location: 53,21 + Actor289: barl + Owner: Neutral + Location: 47,22 + Actor296: t08 + Owner: Neutral + Location: 39,23 + Actor297: t17 + Owner: Neutral + Location: 40,22 + Actor298: t05 + Owner: Neutral + Location: 41,22 + Actor299: tc01 + Owner: Neutral + Location: 42,22 + Actor300: t11 + Owner: Neutral + Location: 43,22 + Actor301: t05 + Owner: Neutral + Location: 44,22 + Actor302: t03 + Owner: Neutral + Location: 44,22 + Actor303: t13 + Owner: Neutral + Location: 44,22 + Actor304: t06 + Owner: Neutral + Location: 45,22 + Actor305: t17 + Owner: Neutral + Location: 46,22 + Actor307: v10 + Owner: Neutral + Location: 49,23 + Actor317: t08 + Owner: Neutral + Location: 37,24 + Actor318: t05 + Owner: Neutral + Location: 38,23 + Actor319: t01 + Owner: Neutral + Location: 39,23 + Actor320: t06 + Owner: Neutral + Location: 39,23 + Actor321: t07 + Owner: Neutral + Location: 40,23 + Actor322: t08.husk + Owner: Neutral + Location: 41,24 + Actor323: t03 + Owner: Neutral + Location: 41,23 + Actor324: t10 + Owner: Neutral + Location: 41,23 + Actor325: tc02 + Owner: Neutral + Location: 41,24 + Actor326: t06 + Owner: Neutral + Location: 42,23 + Actor327: t06 + Owner: Neutral + Location: 43,23 + Actor328: tc01 + Owner: Neutral + Location: 44,23 + Actor329: tc01 + Owner: Neutral + Location: 46,23 + Actor330: c3 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 49,24 + Actor341: t08 + Owner: Neutral + Location: 35,25 + Actor342: t17 + Owner: Neutral + Location: 36,24 + Actor343: t06 + Owner: Neutral + Location: 37,24 + Actor344: t03 + Owner: Neutral + Location: 38,24 + Actor346: t08.husk + Owner: Neutral + Location: 40,25 + Actor347: t03 + Owner: Neutral + Location: 40,24 + Actor348: t12 + Owner: Neutral + Location: 43,24 + Actor349: t17.husk + Owner: Neutral + Location: 77,24 + Actor350: tc02.husk + Owner: Neutral + Location: 77,25 + Actor351: t16.husk + Owner: Neutral + Location: 78,24 + Actor364: t08 + Owner: Neutral + Location: 34,26 + Actor365: t15 + Owner: Neutral + Location: 34,25 + Actor366: t08 + Owner: Neutral + Location: 35,26 + Actor367: t03 + Owner: Neutral + Location: 35,25 + Actor368: tc02 + Owner: Neutral + Location: 35,26 + Actor369: t11 + Owner: Neutral + Location: 36,25 + Actor370: t17 + Owner: Neutral + Location: 37,25 + Actor371: tc03 + Owner: Neutral + Location: 38,26 + Actor372: t06 + Owner: Neutral + Location: 38,25 + Actor373: t06 + Owner: Neutral + Location: 40,25 + Actor374: t08 + Owner: Neutral + Location: 40,26 + Actor379: tc01 + Owner: Neutral + Location: 33,26 + Actor380: t01 + Owner: Neutral + Location: 37,26 + Actor381: t10 + Owner: Neutral + Location: 37,26 + Actor382: t08 + Owner: Neutral + Location: 39,27 + Actor383: t02 + Owner: Neutral + Location: 40,26 + Actor384: t11.husk + Owner: Neutral + Location: 77,26 + Actor385: t08.husk + Owner: Neutral + Location: 78,27 + Actor389: t02 + Owner: Neutral + Location: 32,27 + Actor390: t17 + Owner: Neutral + Location: 33,27 + Actor391: t10 + Owner: Neutral + Location: 34,27 + Actor392: t03 + Owner: Neutral + Location: 35,27 + Actor393: t08 + Owner: Neutral + Location: 36,28 + Actor394: t17 + Owner: Neutral + Location: 37,27 + Actor395: t12 + Owner: Neutral + Location: 38,27 + Actor396: t01 + Owner: Neutral + Location: 39,27 + Actor397: t03 + Owner: Neutral + Location: 40,27 + Actor399: tc03 + Owner: Neutral + Location: 31,29 + Actor400: t17 + Owner: Neutral + Location: 31,28 + Actor401: t06 + Owner: Neutral + Location: 32,28 + Actor402: t15 + Owner: Neutral + Location: 33,28 + Actor407: t07 + Owner: Neutral + Location: 32,29 + Actor410: mine + Owner: Neutral + Location: 44,31 + Actor412: t08 + Owner: Neutral + Location: 50,33 + Actor413: tc03 + Owner: Neutral + Location: 51,33 + Actor414: t12 + Owner: Neutral + Location: 53,32 + Actor416: t12 + Owner: Neutral + Location: 50,33 + Actor417: t08 + Owner: Neutral + Location: 53,34 + Actor430: t08 + Owner: Neutral + Location: 48,37 + Actor431: tc03 + Owner: Neutral + Location: 49,37 + Actor432: t08 + Owner: Neutral + Location: 51,37 + Actor437: t12 + Owner: Neutral + Location: 48,37 + Actor438: t17 + Owner: Neutral + Location: 51,37 + Actor441: t17 + Owner: Neutral + Location: 69,40 + Actor442: tc02 + Owner: Neutral + Location: 69,41 + Actor443: t12 + Owner: Neutral + Location: 70,40 + Actor445: mine + Owner: Neutral + Location: 57,42 + Actor447: t17 + Owner: Neutral + Location: 67,41 + Actor448: t14 + Owner: Neutral + Location: 67,41 + Actor450: t15 + Owner: Neutral + Location: 61,42 + Actor451: t08 + Owner: Neutral + Location: 62,43 + Actor452: tc02 + Owner: Neutral + Location: 61,43 + Actor453: t17 + Owner: Neutral + Location: 63,42 + Actor454: t02 + Owner: Neutral + Location: 64,42 + Actor455: t08 + Owner: Neutral + Location: 65,43 + Actor456: t12 + Owner: Neutral + Location: 65,42 + Actor457: t13 + Owner: Neutral + Location: 65,42 + Actor458: tc02 + Owner: Neutral + Location: 65,43 + Actor459: t06 + Owner: Neutral + Location: 66,42 + Actor460: t15 + Owner: Neutral + Location: 67,42 + Actor461: t12 + Owner: Neutral + Location: 67,42 + Actor462: tc02 + Owner: Neutral + Location: 67,43 + Actor463: t01 + Owner: Neutral + Location: 69,42 + Actor469: t02 + Owner: Neutral + Location: 63,43 + Actor470: t01 + Owner: Neutral + Location: 64,43 + Actor476: tc01 + Owner: Neutral + Location: 61,44 + Actor477: snowhut + Owner: Neutral + Location: 62,45 + Actor478: t01 + Owner: Neutral + Location: 63,44 + Actor479: t15 + Owner: Neutral + Location: 63,44 + Actor480: tc04 + Owner: Neutral + Location: 65,44 + Actor491: tc04 + Owner: Neutral + Location: 58,45 + Actor492: t10 + Owner: Neutral + Location: 60,45 + Actor493: t13 + Owner: Neutral + Location: 63,45 + Actor494: t06 + Owner: Neutral + Location: 63,45 + Actor495: t08 + Owner: Neutral + Location: 63,46 + Actor496: t06 + Owner: Neutral + Location: 64,45 + Actor497: t12 + Owner: Neutral + Location: 66,45 + Actor509: c3 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 52,47 + Actor510: t12 + Owner: Neutral + Location: 54,46 + Actor511: t17 + Owner: Neutral + Location: 54,46 + Actor512: t06 + Owner: Neutral + Location: 55,46 + Actor513: tc01 + Owner: Neutral + Location: 56,46 + Actor514: t10 + Owner: Neutral + Location: 57,46 + Actor515: t06 + Owner: Neutral + Location: 59,46 + Actor516: t08 + Owner: Neutral + Location: 60,47 + Actor518: t08 + Owner: Neutral + Location: 62,47 + Actor519: t12 + Owner: Neutral + Location: 63,46 + Actor520: t08 + Owner: Neutral + Location: 63,47 + Actor521: t03 + Owner: Neutral + Location: 64,46 + Actor522: t12 + Owner: Neutral + Location: 65,46 + Actor523: fenc + Owner: Neutral + Location: 78,47 + Actor524: fenc + Owner: Neutral + Location: 79,47 + Actor525: fenc + Owner: Neutral + Location: 80,47 + Actor526: fenc + Owner: Neutral + Location: 81,47 + Actor533: v10 + Owner: Neutral + Location: 52,48 + Actor534: t12 + Owner: Neutral + Location: 55,47 + Actor535: t06 + Owner: Neutral + Location: 56,47 + Actor536: t05 + Owner: Neutral + Location: 57,47 + Actor537: tc01 + Owner: Neutral + Location: 58,47 + Actor538: t17 + Owner: Neutral + Location: 60,47 + Actor539: t16 + Owner: Neutral + Location: 61,47 + Actor540: t12 + Owner: Neutral + Location: 62,47 + Actor549: barl + Owner: Neutral + Location: 54,49 + Actor557: wood + Owner: Neutral + Location: 48,50 + Actor558: v06 + Owner: Neutral + Location: 49,50 + Actor560: barl + Owner: Neutral + Location: 53,50 + Actor562: brl3 + Owner: Neutral + Location: 54,50 + Actor574: wood + Owner: Neutral + Location: 48,51 + Actor582: wood + Owner: Neutral + Location: 47,52 + Actor583: wood + Owner: Neutral + Location: 48,52 + Actor595: t10 + Owner: Neutral + Location: 52,52 + Actor617: wood + Owner: Neutral + Location: 46,55 + Actor618: v07 + Owner: Neutral + Location: 47,55 + Actor620: c3 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 49,55 + Actor621: c3 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 54,55 + Actor641: wood + Owner: Neutral + Location: 49,56 + Actor642: v04 + Owner: Neutral + Location: 53,56 + Actor709: tc03 + Owner: Neutral + Location: 5,1 + Actor710: t08 + Owner: Neutral + Location: 13,1 + Actor716: t08 + Owner: Neutral + Location: 26,1 + Actor720: t08 + Owner: Neutral + Location: 2,2 + Actor742: tc01 + Owner: Neutral + Location: 3,1 + Actor827: tc05 + Owner: Neutral + Location: 2,2 + Actor828: t12 + Owner: Neutral + Location: 7,1 + Actor829: t08 + Owner: Neutral + Location: 7,2 + Actor830: t12 + Owner: Neutral + Location: 10,1 + Actor831: t16 + Owner: Neutral + Location: 20,1 + Actor832: t14 + Owner: Neutral + Location: 22,1 + Actor833: t03 + Owner: Neutral + Location: 26,1 + Actor836: t16 + Owner: Neutral + Location: 1,2 + Actor837: t08 + Owner: Neutral + Location: 5,3 + Actor838: t06 + Owner: Neutral + Location: 6,2 + Actor839: t12 + Owner: Neutral + Location: 7,2 + Actor840: tc02 + Owner: Neutral + Location: 17,3 + Actor841: t05 + Owner: Neutral + Location: 20,2 + Actor842: t12 + Owner: Neutral + Location: 21,2 + Actor843: t08 + Owner: Neutral + Location: 21,3 + Actor844: t17 + Owner: Neutral + Location: 22,2 + Actor845: t12 + Owner: Neutral + Location: 23,2 + Actor847: tc01 + Owner: Neutral + Location: 1,3 + Actor848: tc05 + Owner: Neutral + Location: 8,4 + Actor849: t15 + Owner: Neutral + Location: 10,3 + Actor850: t16 + Owner: Neutral + Location: 12,3 + Actor851: t08 + Owner: Neutral + Location: 13,4 + Actor852: t12 + Owner: Neutral + Location: 13,3 + Actor853: t06 + Owner: Neutral + Location: 14,3 + Actor854: t07 + Owner: Neutral + Location: 15,3 + Actor855: t06 + Owner: Neutral + Location: 16,3 + Actor856: tc01 + Owner: Neutral + Location: 19,3 + Actor857: t04 + Owner: Neutral + Location: 21,3 + Actor858: t14 + Owner: Neutral + Location: 23,3 + Actor859: t12 + Owner: Neutral + Location: 25,3 + Actor860: t13 + Owner: Neutral + Location: 10,4 + Actor861: tc03 + Owner: Neutral + Location: 11,5 + Actor862: t12 + Owner: Neutral + Location: 12,4 + Actor863: t06 + Owner: Neutral + Location: 13,4 + Actor864: t17 + Owner: Neutral + Location: 13,4 + Actor865: t11 + Owner: Neutral + Location: 14,4 + Actor866: t01 + Owner: Neutral + Location: 16,4 + Actor867: t12 + Owner: Neutral + Location: 17,4 + Actor868: t14 + Owner: Neutral + Location: 6,5 + Actor869: t08 + Owner: Neutral + Location: 8,6 + Actor870: t12 + Owner: Neutral + Location: 8,5 + Actor871: t16 + Owner: Neutral + Location: 1,6 + Actor872: t15 + Owner: Neutral + Location: 1,6 + Actor873: tc05 + Owner: Neutral + Location: 1,7 + Actor874: t02 + Owner: Neutral + Location: 3,6 + Actor875: tc03 + Owner: Neutral + Location: 4,7 + Actor876: t08 + Owner: Neutral + Location: 4,7 + Actor877: t07 + Owner: Neutral + Location: 4,6 + Actor878: tc04 + Owner: Neutral + Location: 6,6 + Actor879: t17 + Owner: Neutral + Location: 8,6 + Actor880: tc03 + Owner: Neutral + Location: 9,7 + Actor881: t12 + Owner: Neutral + Location: 9,6 + Actor882: t08 + Owner: Neutral + Location: 11,7 + Actor883: t01 + Owner: Neutral + Location: 11,6 + Actor884: tc03 + Owner: Neutral + Location: 11,6 + Actor885: t16 + Owner: Neutral + Location: 12,6 + Actor886: tc03 + Owner: Neutral + Location: 15,7 + Actor887: t08 + Owner: Neutral + Location: 17,7 + Actor888: t12 + Owner: Neutral + Location: 18,6 + Actor889: t02 + Owner: Neutral + Location: 19,6 + Actor890: t06 + Owner: Neutral + Location: 20,6 + Actor891: t16 + Owner: Neutral + Location: 7,7 + Actor892: t08 + Owner: Neutral + Location: 8,8 + Actor893: t12 + Owner: Neutral + Location: 11,7 + Actor894: t08 + Owner: Neutral + Location: 16,8 + Actor895: t08 + Owner: Neutral + Location: 16,8 + Actor896: t06 + Owner: Neutral + Location: 17,7 + Actor897: t08 + Owner: Neutral + Location: 17,8 + Actor898: t03 + Owner: Neutral + Location: 18,7 + Actor899: t12 + Owner: Neutral + Location: 1,8 + Actor900: t08 + Owner: Neutral + Location: 1,9 + Actor901: t06 + Owner: Neutral + Location: 6,8 + Actor902: tc03 + Owner: Neutral + Location: 13,9 + Actor905: t12 + Owner: Neutral + Location: 2,9 + Actor906: tc03 + Owner: Neutral + Location: 12,10 + Actor907: t04 + Owner: Neutral + Location: 14,9 + Actor908: t01 + Owner: Neutral + Location: 15,9 + Actor909: tc02 + Owner: Neutral + Location: 5,11 + Actor910: t02 + Owner: Neutral + Location: 7,10 + Actor911: t07 + Owner: Neutral + Location: 8,10 + Actor912: t16 + Owner: Neutral + Location: 9,10 + Actor913: t06 + Owner: Neutral + Location: 13,10 + Actor914: t08 + Owner: Neutral + Location: 14,11 + Actor915: tc04 + Owner: Neutral + Location: 2,11 + Actor916: t06 + Owner: Neutral + Location: 7,11 + Actor917: t01 + Owner: Neutral + Location: 8,11 + Actor918: t12 + Owner: Neutral + Location: 9,11 + Actor919: t12 + Owner: Neutral + Location: 12,11 + Actor920: t03 + Owner: Neutral + Location: 13,11 + Actor923: t08 + Owner: Neutral + Location: 4,13 + Actor924: t15 + Owner: Neutral + Location: 4,12 + Actor925: t08 + Owner: Neutral + Location: 6,13 + Actor926: t12 + Owner: Neutral + Location: 7,12 + Actor927: t08 + Owner: Neutral + Location: 11,13 + Actor928: t12 + Owner: Neutral + Location: 12,12 + Actor922: tc03 + Owner: Neutral + Location: 4,13 + Actor929: t17 + Owner: Neutral + Location: 10,13 + Actor930: t03 + Owner: Neutral + Location: 11,13 + Actor931: t08 + Owner: Neutral + Location: 1,15 + Actor932: tc01 + Owner: Neutral + Location: 2,14 + Actor933: t06 + Owner: Neutral + Location: 9,14 + Actor934: t08 + Owner: Neutral + Location: 10,15 + Actor935: tc01 + Owner: Neutral + Location: 1,15 + Actor936: tc03 + Owner: Neutral + Location: 6,16 + Actor937: t12 + Owner: Neutral + Location: 6,15 + Actor938: t03 + Owner: Neutral + Location: 8,15 + Actor939: t03 + Owner: Neutral + Location: 9,15 + Actor940: t16 + Owner: Neutral + Location: 2,16 + Actor941: t07 + Owner: Neutral + Location: 8,16 + Actor942: t17 + Owner: Neutral + Location: 2,17 + Actor943: t12 + Owner: Neutral + Location: 3,17 + Actor944: t10 + Owner: Neutral + Location: 6,17 + Actor945: t12 + Owner: Neutral + Location: 7,17 + Actor946: t13 + Owner: Neutral + Location: 4,18 + Actor947: t03 + Owner: Neutral + Location: 6,18 + Actor948: t07 + Owner: Neutral + Location: 3,19 + Actor949: t03 + Owner: Neutral + Location: 4,19 + Actor950: t13 + Owner: Neutral + Location: 4,19 + Actor951: t12 + Owner: Neutral + Location: 5,19 + Actor952: t10 + Owner: Neutral + Location: 2,20 + Actor953: t12 + Owner: Neutral + Location: 3,20 + Actor954: t01 + Owner: Neutral + Location: 4,20 + Actor955: t01 + Owner: Neutral + Location: 1,21 + Actor956: t16 + Owner: Neutral + Location: 2,21 + Actor957: t03 + Owner: Neutral + Location: 3,21 + Actor958: t12 + Owner: Neutral + Location: 1,22 + Actor959: t04 + Owner: Neutral + Location: 1,22 + Actor960: t03 + Owner: Neutral + Location: 2,22 + Actor961: t06 + Owner: Neutral + Location: 2,22 + Actor962: t08 + Owner: Neutral + Location: 3,23 + Actor963: t11 + Owner: Neutral + Location: 1,23 + Actor964: t03 + Owner: Neutral + Location: 2,23 + Actor965: t03 + Owner: Neutral + Location: 2,23 + Actor966: t03 + Owner: Neutral + Location: 1,24 + Actor968: t02 + Owner: Neutral + Location: 1,25 + Actor783: t17 + Owner: Neutral + Location: 79,65 + Actor784: tc04 + Owner: Neutral + Location: 84,65 + Actor785: t08 + Owner: Neutral + Location: 84,66 + Actor786: tc02 + Owner: Neutral + Location: 85,66 + Actor787: t16 + Owner: Neutral + Location: 87,65 + Actor788: tc02 + Owner: Neutral + Location: 87,66 + Actor789: t02 + Owner: Neutral + Location: 90,65 + Actor790: tc05 + Owner: Neutral + Location: 93,66 + Actor795: t08 + Owner: Neutral + Location: 77,67 + Actor796: t08 + Owner: Neutral + Location: 78,67 + Actor797: t06 + Owner: Neutral + Location: 78,66 + Actor798: tc02 + Owner: Neutral + Location: 84,67 + Actor799: t06 + Owner: Neutral + Location: 89,66 + Actor800: t12 + Owner: Neutral + Location: 90,66 + Actor801: t12 + Owner: Neutral + Location: 92,66 + Actor802: tc02 + Owner: Neutral + Location: 97,67 + Actor803: t08 + Owner: Neutral + Location: 100,67 + Actor804: t08 + Owner: Neutral + Location: 75,68 + Actor805: t02 + Owner: Neutral + Location: 76,67 + Actor806: t03 + Owner: Neutral + Location: 77,67 + Actor807: t01 + Owner: Neutral + Location: 78,67 + Actor815: t12 + Owner: Neutral + Location: 83,67 + Actor816: t08 + Owner: Neutral + Location: 86,68 + Actor817: t12 + Owner: Neutral + Location: 87,67 + Actor818: t17 + Owner: Neutral + Location: 93,67 + Actor819: t15 + Owner: Neutral + Location: 95,67 + Actor820: t17 + Owner: Neutral + Location: 100,67 + Actor821: t08 + Owner: Neutral + Location: 73,69 + Actor822: t17 + Owner: Neutral + Location: 74,68 + Actor823: t08 + Owner: Neutral + Location: 75,69 + Actor824: t08 + Owner: Neutral + Location: 75,69 + Actor825: t06 + Owner: Neutral + Location: 76,68 + Actor826: tc01 + Owner: Neutral + Location: 77,68 + Actor974: t07 + Owner: Neutral + Location: 81,68 + Actor975: t17 + Owner: Neutral + Location: 83,68 + Actor976: t16 + Owner: Neutral + Location: 84,68 + Actor977: t03 + Owner: Neutral + Location: 88,68 + Actor978: t12 + Owner: Neutral + Location: 95,68 + Actor979: tc01 + Owner: Neutral + Location: 96,68 + Actor980: t14 + Owner: Neutral + Location: 97,68 + Actor981: t08 + Owner: Neutral + Location: 71,70 + Actor982: t17 + Owner: Neutral + Location: 72,69 + Actor983: t06 + Owner: Neutral + Location: 73,69 + Actor984: t12 + Owner: Neutral + Location: 74,69 + Actor985: t14 + Owner: Neutral + Location: 74,69 + Actor986: t17 + Owner: Neutral + Location: 76,69 + Actor987: t03 + Owner: Neutral + Location: 77,69 + Actor988: t05 + Owner: Neutral + Location: 81,69 + Actor989: tc03 + Owner: Neutral + Location: 87,70 + Actor990: t06 + Owner: Neutral + Location: 91,69 + Actor991: t16 + Owner: Neutral + Location: 97,69 + Actor992: t07 + Owner: Neutral + Location: 98,69 + Actor993: tc01 + Owner: Neutral + Location: 88,70 + Actor758: t05 + Owner: Neutral + Location: 90,57 + Actor759: t07 + Owner: Neutral + Location: 91,57 + Actor760: t04 + Owner: Neutral + Location: 92,57 + Actor761: t07 + Owner: Neutral + Location: 93,57 + Actor762: t17 + Owner: Neutral + Location: 100,57 + Actor768: t03 + Owner: Neutral + Location: 90,58 + Actor769: t06 + Owner: Neutral + Location: 91,58 + Actor770: t12 + Owner: Neutral + Location: 92,58 + Actor771: t12 + Owner: Neutral + Location: 96,58 + Actor772: t13 + Owner: Neutral + Location: 97,58 + Actor773: t08 + Owner: Neutral + Location: 97,59 + Actor774: t17 + Owner: Neutral + Location: 98,58 + Actor775: t03 + Owner: Neutral + Location: 100,58 + Actor781: t08 + Owner: Neutral + Location: 101,59 + Actor782: t08 + Owner: Neutral + Location: 87,60 + Actor814: t03 + Owner: Neutral + Location: 88,59 + Actor994: tc02 + Owner: Neutral + Location: 94,60 + Actor995: t12 + Owner: Neutral + Location: 96,59 + Actor996: t02 + Owner: Neutral + Location: 97,59 + Actor997: t02 + Owner: Neutral + Location: 98,59 + Actor998: t10 + Owner: Neutral + Location: 100,59 + Actor999: t04 + Owner: Neutral + Location: 86,60 + Actor1000: t02 + Owner: Neutral + Location: 86,60 + Actor1001: t04 + Owner: Neutral + Location: 87,60 + Actor1002: tc04 + Owner: Neutral + Location: 96,60 + Actor1003: t02 + Owner: Neutral + Location: 97,60 + Actor1004: t08 + Owner: Neutral + Location: 98,61 + Actor1005: t07 + Owner: Neutral + Location: 85,61 + Actor1006: t16 + Owner: Neutral + Location: 87,61 + Actor1007: t05 + Owner: Neutral + Location: 90,61 + Actor1008: t03 + Owner: Neutral + Location: 93,61 + Actor1009: t10 + Owner: Neutral + Location: 94,61 + Actor1010: tc01 + Owner: Neutral + Location: 96,61 + Actor1011: t17 + Owner: Neutral + Location: 83,62 + Actor1012: t06 + Owner: Neutral + Location: 84,62 + Actor1013: tc02 + Owner: Neutral + Location: 88,63 + Actor1014: t06 + Owner: Neutral + Location: 90,62 + Actor1015: t02 + Owner: Neutral + Location: 93,62 + Actor1016: t16 + Owner: Neutral + Location: 94,62 + Actor1017: t03 + Owner: Neutral + Location: 95,62 + Actor1018: tc02 + Owner: Neutral + Location: 95,63 + Actor1019: t03 + Owner: Neutral + Location: 96,62 + Actor1020: t01 + Owner: Neutral + Location: 97,62 + Actor1021: t03 + Owner: Neutral + Location: 82,63 + Actor1022: t03 + Owner: Neutral + Location: 90,63 + Actor1023: t17 + Owner: Neutral + Location: 94,63 + Actor1024: tc03 + Owner: Neutral + Location: 97,64 + Actor1025: t03 + Owner: Neutral + Location: 97,63 + Actor1026: t08 + Owner: Neutral + Location: 80,65 + Actor1027: t06 + Owner: Neutral + Location: 81,64 + Actor1028: t05 + Owner: Neutral + Location: 90,64 + Actor1029: t01 + Owner: Neutral + Location: 96,64 + Actor1030: t02 + Owner: Neutral + Location: 96,51 + Actor1031: t08 + Owner: Neutral + Location: 96,52 + Actor1032: t08 + Owner: Neutral + Location: 97,52 + Actor1033: t07 + Owner: Neutral + Location: 97,51 + Actor1034: t03 + Owner: Neutral + Location: 98,51 + Actor1035: t03 + Owner: Neutral + Location: 99,51 + Actor1036: t03 + Owner: Neutral + Location: 100,51 + Actor1037: t08 + Owner: Neutral + Location: 95,53 + Actor1038: t08 + Owner: Neutral + Location: 95,53 + Actor1039: t06 + Owner: Neutral + Location: 95,52 + Actor1040: t12 + Owner: Neutral + Location: 96,52 + Actor1041: t13 + Owner: Neutral + Location: 97,52 + Actor1042: t03 + Owner: Neutral + Location: 97,52 + Actor1043: tc03 + Owner: Neutral + Location: 98,53 + Actor1044: t12 + Owner: Neutral + Location: 98,52 + Actor1045: t06 + Owner: Neutral + Location: 99,52 + Actor1046: t02 + Owner: Neutral + Location: 100,52 + Actor1047: t01 + Owner: Neutral + Location: 94,53 + Actor1048: t03 + Owner: Neutral + Location: 95,53 + Actor1049: t13 + Owner: Neutral + Location: 96,53 + Actor1050: t06 + Owner: Neutral + Location: 96,53 + Actor1051: t05 + Owner: Neutral + Location: 97,53 + Actor1052: t03 + Owner: Neutral + Location: 93,54 + Actor1053: t08 + Owner: Neutral + Location: 94,55 + Actor1054: t02 + Owner: Neutral + Location: 94,54 + Actor1055: t16 + Owner: Neutral + Location: 95,54 + Actor1056: t12 + Owner: Neutral + Location: 96,54 + Actor1057: t03 + Owner: Neutral + Location: 97,54 + Actor1058: t16 + Owner: Neutral + Location: 98,54 + Actor1059: t05 + Owner: Neutral + Location: 92,55 + Actor1060: t17 + Owner: Neutral + Location: 93,55 + Actor1061: t02 + Owner: Neutral + Location: 94,55 + Actor1062: t10 + Owner: Neutral + Location: 95,55 + Actor1063: t08 + Owner: Neutral + Location: 95,56 + Actor1064: t08 + Owner: Neutral + Location: 96,56 + Actor1065: t01 + Owner: Neutral + Location: 97,55 + Actor1066: t17 + Owner: Neutral + Location: 97,55 + Actor1067: t06 + Owner: Neutral + Location: 98,55 + Actor1068: t17 + Owner: Neutral + Location: 100,55 + Actor1069: t17 + Owner: Neutral + Location: 91,56 + Actor1070: t12 + Owner: Neutral + Location: 92,56 + Actor1071: tc01 + Owner: Neutral + Location: 93,56 + Actor1072: t12 + Owner: Neutral + Location: 97,56 + Actor756: t07 + Owner: Neutral + Location: 99,46 + Actor1073: t08 + Owner: Neutral + Location: 99,48 + Actor1074: t12 + Owner: Neutral + Location: 99,47 + Actor1075: t06 + Owner: Neutral + Location: 100,47 + Actor1076: t08 + Owner: Neutral + Location: 101,48 + Actor1077: t06 + Owner: Neutral + Location: 98,48 + Actor1078: t03 + Owner: Neutral + Location: 99,48 + Actor1079: t08 + Owner: Neutral + Location: 100,49 + Actor1080: t10 + Owner: Neutral + Location: 100,48 + Actor1082: t12 + Owner: Neutral + Location: 98,49 + Actor1083: t02 + Owner: Neutral + Location: 99,49 + Actor1085: t08 + Owner: Neutral + Location: 100,50 + Actor1086: t12 + Owner: Neutral + Location: 97,50 + Actor1087: t03 + Owner: Neutral + Location: 98,50 + Actor1088: t06 + Owner: Neutral + Location: 98,50 + Actor1089: t12 + Owner: Neutral + Location: 99,50 + Actor1090: t10 + Owner: Neutral + Location: 100,50 + Actor1091: t08 + Owner: Neutral + Location: 100,51 + Actor1092: t03 + Owner: Neutral + Location: 95,56 + Actor1093: tc04 + Owner: Neutral + Location: 88,64 + Actor1094: tc01 + Owner: Neutral + Location: 87,64 + Actor1095: tc01 + Owner: Neutral + Location: 91,65 + Actor1096: tc01 + Owner: Neutral + Location: 94,61 + Actor1097: tc01 + Owner: Neutral + Location: 75,69 + Actor1098: tc01 + Owner: Neutral + Location: 99,51 + Actor1084: tc01 + Owner: Neutral + Location: 100,49 + Actor1099: t12 + Owner: Neutral + Location: 91,68 + Actor1100: t12 + Owner: Neutral + Location: 94,68 + Actor1101: t12 + Owner: Neutral + Location: 80,66 + Actor1102: t13 + Owner: Neutral + Location: 80,65 + Actor1103: t13 + Owner: Neutral + Location: 85,61 + Actor1104: t08 + Owner: Neutral + Location: 94,58 + Actor1105: t14 + Owner: Neutral + Location: 94,57 + Actor1106: t04 + Owner: Neutral + Location: 89,61 + Actor1108: t03 + Owner: Neutral + Location: 29,0 + Actor1109: t03 + Owner: Neutral + Location: 14,0 + Actor1110: t03 + Owner: Neutral + Location: 2,0 + Actor1111: t03 + Owner: Neutral + Location: 1,1 + Actor1112: t03 + Owner: Neutral + Location: 1,13 + Actor1114: t08 + Owner: Neutral + Location: 16,1 + Actor1115: t08 + Owner: Neutral + Location: 8,1 + Actor1116: t08 + Owner: Neutral + Location: 1,1 + Actor1117: t06 + Owner: Neutral + Location: 4,0 + Actor1118: t06 + Owner: Neutral + Location: 9,0 + Actor1119: tc03 + Owner: Neutral + Location: 11,0 + Actor1121: tc03 + Owner: Neutral + Location: 0,17 + Actor1120: t15 + Owner: Neutral + Location: 2,12 + Actor1122: t06 + Owner: Neutral + Location: 15,0 + Actor1123: t06 + Owner: Neutral + Location: 2,1 + Actor1194: t03 + Owner: Neutral + Location: 17,0 + Actor921: t13 + Owner: Neutral + Location: 1,12 + Actor1196: t12 + Owner: Neutral + Location: 1,12 + Actor1197: t17 + Owner: Neutral + Location: 10,0 + Actor835: tc05 + Owner: Neutral + Location: 26,0 + Actor834: t01 + Owner: Neutral + Location: 26,2 + Actor846: t08 + Owner: Neutral + Location: 7,1 + Actor1113: t08 + Owner: Neutral + Location: 3,1 + Actor1124: t08 + Owner: Neutral + Location: 3,14 + Actor1195: t06 + Owner: Neutral + Location: 2,13 + Actor1198: t06 + Owner: Neutral + Location: 16,0 + Actor1199: t06 + Owner: Neutral + Location: 13,0 + Actor1200: t06 + Owner: Neutral + Location: 89,65 + Actor724: t17.husk + Owner: Neutral + Location: 23,43 + Actor725: tc02.husk + Owner: Neutral + Location: 23,44 + Actor726: t16.husk + Owner: Neutral + Location: 24,43 + Actor727: t11.husk + Owner: Neutral + Location: 23,45 + Actor728: t08.husk + Owner: Neutral + Location: 24,46 + Actor731: oilb + Owner: Neutral + Location: 18,26 + Actor740: fenc + Owner: Neutral + Location: 20,24 + Actor741: fenc + Owner: Neutral + Location: 21,24 + Actor743: fenc + Owner: Neutral + Location: 22,24 + Actor745: fenc + Owner: Neutral + Location: 23,24 + Actor749: t06 + Owner: Neutral + Location: 96,18 + Actor714: t01 + Owner: Neutral + Location: 94,15 + Actor744: t08 + Owner: Neutral + Location: 1,27 + Actor746: t12 + Owner: Neutral + Location: 1,26 + Actor967: t03 + Owner: Neutral + Location: 2,24 + Actor1219: c3 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 36,35 + Actor1220: c3 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 33,37 + Actor1221: v08 + Owner: Neutral + Location: 35,37 + Actor1222: wood + Owner: Neutral + Location: 36,37 + Actor1223: wood + Owner: Neutral + Location: 37,37 + Actor1224: wood + Owner: Neutral + Location: 32,38 + Actor1225: wood + Owner: Neutral + Location: 33,38 + Actor1226: wood + Owner: Neutral + Location: 68,34 + Actor1227: wood + Owner: Neutral + Location: 69,34 + Actor1228: wood + Owner: Neutral + Location: 64,35 + Actor1229: wood + Owner: Neutral + Location: 65,35 + Actor1230: v08 + Owner: Neutral + Location: 66,35 + Actor1231: c3 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 68,35 + Actor1232: c3 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 65,37 + Actor1179: snowhut + Owner: Neutral + Location: 39,24 + Actor1125: t08 + Owner: Neutral + Location: 30,1 + Actor1245: barl + Owner: Neutral + Location: 46,20 + Actor1246: barl + Owner: Neutral + Location: 55,51 + Actor1159: t08 + Owner: Neutral + Location: 9,1 + Actor1160: t03 + Owner: Neutral + Location: 3,5 + Actor1171: t03 + Owner: Neutral + Location: 9,3 + Actor1172: t03 + Owner: Neutral + Location: 27,1 + Actor903: tc02 + Owner: Neutral + Location: 15,8 + Actor705: mpspawn + Owner: Neutral + Location: 11,45 + Actor701: t11 + Owner: Neutral + Location: 8,10 + Actor702: t11 + Owner: Neutral + Location: 5,2 + Actor711: t10 + Owner: Neutral + Location: 5,7 + Actor779: t12 + Owner: Neutral + Location: 5,8 + Actor793: t12 + Owner: Neutral + Location: 7,8 + Actor811: t12 + Owner: Neutral + Location: 60,46 + Actor812: t15 + Owner: Neutral + Location: 45,22 + Actor973: t10 + Owner: Neutral + Location: 48,17 + Actor753: wood + Owner: Neutral + Location: 50,8 + Actor813: wood + Owner: Neutral + Location: 48,9 + Actor904: wood + Owner: Neutral + Location: 49,9 + Actor969: wood + Owner: Neutral + Location: 50,9 + Actor1268: t12 + Owner: Neutral + Location: 49,12 + Actor1233: t12 + Owner: Neutral + Location: 52,58 + Actor1234: wood + Owner: Neutral + Location: 51,62 + Actor1235: wood + Owner: Neutral + Location: 52,62 + Actor1236: wood + Owner: Neutral + Location: 53,62 + Actor1237: wood + Owner: Neutral + Location: 51,63 + Actor1244: t03 + Owner: Neutral + Location: 100,25 + Actor1254: mine + Owner: Neutral + Location: 9,61 + Actor1288: mine + Owner: Neutral + Location: 92,10 + Actor1286: mine + Owner: Neutral + Location: 16,33 + Actor1290: wood + Owner: Neutral + Location: 53,15 + Actor1131: wood + Owner: Neutral + Location: 48,56 + Actor1133: wood + Owner: Neutral + Location: 48,56 + Actor971: mpspawn + Owner: Neutral + Location: 90,24 + Actor1180: tc03 + Owner: Neutral + Location: 50,35 + Actor1287: mine + Owner: Neutral + Location: 16,39 + Actor1303: mine + Owner: Neutral + Location: 85,32 + Actor1289: mine + Owner: Neutral + Location: 85,38 + Actor1308: v04 + Owner: Neutral + Location: 48,46 + Actor1310: oilb + Owner: Neutral + Location: 82,44 + Actor1129: mine + Owner: Neutral + Location: 61,62 + Actor1126: mine + Owner: Neutral + Location: 40,9 + Actor1313: barl + Owner: Neutral + Location: 82,46 + Actor1314: brl3 + Owner: Neutral + Location: 83,46 + Actor1316: brl3 + Owner: Neutral + Location: 18,25 + Actor1317: barl + Owner: Neutral + Location: 19,25 + Actor1318: t08 + Owner: Neutral + Location: 88,70 + Actor1319: t08 + Owner: Neutral + Location: 90,63 + Actor1320: t08 + Owner: Neutral + Location: 81,65 + Actor1321: t08 + Owner: Neutral + Location: 81,66 + Actor1323: t08 + Owner: Neutral + Location: 100,45 + Actor1322: t17 + Owner: Neutral + Location: 100,46 + Actor1324: t12 + Owner: Neutral + Location: 100,45 + Actor1128: mine + Owner: Neutral + Location: 71,57 + Actor1127: mine + Owner: Neutral + Location: 30,14 + Actor747: t13 + Owner: Neutral + Location: 55,7 + Actor748: t12 + Owner: Neutral + Location: 55,7 + Actor755: t07 + Owner: Neutral + Location: 56,7 + Actor757: t10 + Owner: Neutral + Location: 57,7 + Actor1150: t01 + Owner: Neutral + Location: 57,7 + Actor1153: t08 + Owner: Neutral + Location: 58,8 + Actor1161: t08 + Owner: Neutral + Location: 58,8 + Actor1162: t08 + Owner: Neutral + Location: 58,8 + Actor1163: tc01 + Owner: Neutral + Location: 58,7 + Actor1164: tc05 + Owner: Neutral + Location: 56,8 + Actor1165: oilb + Owner: Neutral + Location: 60,8 + Actor1166: brl3 + Owner: Neutral + Location: 62,8 + Actor1167: brl3 + Owner: Neutral + Location: 62,8 + Actor1168: t17 + Owner: Neutral + Location: 55,8 + Actor1169: t06 + Owner: Neutral + Location: 55,8 + Actor1170: t12 + Owner: Neutral + Location: 59,8 + Actor1175: barl + Owner: Neutral + Location: 62,9 + Actor1176: t04 + Owner: Neutral + Location: 55,9 + Actor1177: t12 + Owner: Neutral + Location: 56,9 + Actor1181: t02 + Owner: Neutral + Location: 59,9 + Actor1182: t08 + Owner: Neutral + Location: 60,10 + Actor1183: tc02 + Owner: Neutral + Location: 60,10 + Actor1184: t08 + Owner: Neutral + Location: 62,10 + Actor1185: t14 + Owner: Neutral + Location: 58,10 + Actor1186: t12 + Owner: Neutral + Location: 61,10 + Actor1187: t12 + Owner: Neutral + Location: 62,10 + Actor1189: t13 + Owner: Neutral + Location: 62,11 + Actor1190: wood + Owner: Neutral + Location: 54,15 + Actor1191: wood + Owner: Neutral + Location: 55,15 + Actor1134: wood + Owner: Neutral + Location: 46,56 + Actor1135: wood + Owner: Neutral + Location: 47,56 + Actor1136: wood + Owner: Neutral + Location: 47,56 + Actor1139: t13 + Owner: Neutral + Location: 39,59 + Actor1140: t12 + Owner: Neutral + Location: 39,59 + Actor1141: t17 + Owner: Neutral + Location: 40,59 + Actor1142: t08 + Owner: Neutral + Location: 41,60 + Actor1143: t08 + Owner: Neutral + Location: 42,60 + Actor1144: t11 + Owner: Neutral + Location: 39,60 + Actor1145: t12 + Owner: Neutral + Location: 40,60 + Actor1146: t06 + Owner: Neutral + Location: 40,60 + Actor1147: t11 + Owner: Neutral + Location: 41,60 + Actor1148: t12 + Owner: Neutral + Location: 42,60 + Actor1149: t07 + Owner: Neutral + Location: 43,60 + Actor1151: t17 + Owner: Neutral + Location: 44,60 + Actor1152: t08 + Owner: Neutral + Location: 45,61 + Actor1154: t08 + Owner: Neutral + Location: 46,61 + Actor1155: tc02 + Owner: Neutral + Location: 45,61 + Actor1156: barl + Owner: Neutral + Location: 39,62 + Actor1157: oilb + Owner: Neutral + Location: 40,62 + Actor1158: t01 + Owner: Neutral + Location: 42,61 + Actor1291: tc01 + Owner: Neutral + Location: 43,61 + Actor1292: brl3 + Owner: Neutral + Location: 39,63 + Actor1293: brl3 + Owner: Neutral + Location: 39,63 + Actor1294: t06 + Owner: Neutral + Location: 42,62 + Actor1295: t12 + Owner: Neutral + Location: 43,62 + Actor1296: t01 + Owner: Neutral + Location: 44,62 + Actor1297: t17 + Owner: Neutral + Location: 45,62 + Actor1301: t15 + Owner: Neutral + Location: 45,62 + Actor1130: v04 + Owner: Neutral + Location: 52,24 + Actor766: t17 + Owner: Neutral + Location: 35,28 + Actor1266: t17 + Owner: Neutral + Location: 61,46 + Actor1277: t08 + Owner: Neutral + Location: 1,13 + Actor1107: t12 + Owner: Neutral + Location: 89,59 + Actor767: t07 + Owner: Neutral + Location: 89,58 + Actor1325: fenc + Owner: Neutral + Location: 20,25 + Actor1326: fenc + Owner: Neutral + Location: 81,46 + Actor1327: barl + Owner: Neutral + Location: 84,45 + Actor1309: barl + Owner: Neutral + Location: 17,26 + Actor1311: barl + Owner: Neutral + Location: 20,26 + Actor1312: barl + Owner: Neutral + Location: 81,45 + Actor695: t08 + Owner: Neutral + Location: 39,59 + Actor707: tc04 + Owner: Neutral + Location: 4,65 + Actor721: tc01 + Owner: Neutral + Location: 5,66 + Actor733: t06 + Owner: Neutral + Location: 7,69 + Actor734: t06 + Owner: Neutral + Location: 94,0 + Actor735: tc01 + Owner: Neutral + Location: 13,69 + Actor736: tc01 + Owner: Neutral + Location: 87,0 + Actor737: t06 + Owner: Neutral + Location: 88,1 + Actor739: t12 + Owner: Neutral + Location: 2,64 + Actor750: t15 + Owner: Neutral + Location: 9,64 + Actor754: t06 + Owner: Neutral + Location: 95,8 + Actor763: t06 + Owner: Neutral + Location: 6,61 + Actor764: t03 + Owner: Neutral + Location: 1,66 + Actor776: t03 + Owner: Neutral + Location: 5,67 + Actor777: t03 + Owner: Neutral + Location: 96,2 + Actor778: tc04 + Owner: Neutral + Location: 95,3 + Actor780: tc01 + Owner: Neutral + Location: 96,4 + Actor791: t12 + Owner: Neutral + Location: 99,5 + Actor751: tc02 + Owner: Neutral + Location: 98,0 + Actor792: tc01 + Owner: Neutral + Location: 2,69 + Actor794: t12 + Owner: Neutral + Location: 2,68 + Actor809: t03 + Owner: Neutral + Location: 100,3 + Actor765: t17 + Owner: Neutral + Location: 99,1 + Actor730: t08 + Owner: Neutral + Location: 90,3 + Actor732: tc02 + Owner: Neutral + Location: 90,3 + Actor722: t08 + Owner: Neutral + Location: 10,67 + Actor729: tc02 + Owner: Neutral + Location: 10,67 + Actor808: t03 + Owner: Neutral + Location: 7,62 + Actor810: t03 + Owner: Neutral + Location: 94,7 + Actor972: tc01 + Owner: Neutral + Location: 87,4 + Actor970: tc01 + Owner: Neutral + Location: 13,65 + Actor1178: tc03 + Owner: Neutral + Location: 17,66 + Actor1192: tc03 + Owner: Neutral + Location: 83,4 + Actor1193: t01 + Owner: Neutral + Location: 8,65 + Actor1201: t01 + Owner: Neutral + Location: 93,4 + Actor752: t15 + Owner: Neutral + Location: 90,5 + Actor1204: t07 + Owner: Neutral + Location: 17,68 + Actor1205: t07 + Owner: Neutral + Location: 84,1 + Actor1206: t02 + Owner: Neutral + Location: 83,1 + Actor1207: t02 + Owner: Neutral + Location: 18,68 + Actor1209: t11 + Owner: Neutral + Location: 79,0 + Actor1208: t15 + Owner: Neutral + Location: 21,69 + Actor1210: t12 + Owner: Neutral + Location: 20,67 + Actor1211: t03 + Owner: Neutral + Location: 81,2 + Actor1213: t02 + Owner: Neutral + Location: 97,6 + Actor1216: tc02 + Owner: Neutral + Location: 98,9 + Actor1217: t08 + Owner: Neutral + Location: 98,9 + Actor1242: t08 + Owner: Neutral + Location: 6,65 + Actor1247: t12 + Owner: Neutral + Location: 95,5 + Actor1248: t17 + Owner: Neutral + Location: 86,3 + Actor1243: t17 + Owner: Neutral + Location: 15,66 + Actor1249: t08 + Owner: Neutral + Location: 14,69 + Actor1251: t06 + Owner: Neutral + Location: 3,57 + Actor1250: t01 + Owner: Neutral + Location: 98,12 + Actor1252: t12 + Owner: Neutral + Location: 100,11 + Actor1253: t12 + Owner: Neutral + Location: 1,58 + Actor1239: t08 + Owner: Neutral + Location: 2,61 + Actor1255: tc02 + Owner: Neutral + Location: 2,61 + Actor1238: t08 + Owner: Neutral + Location: 2,61 + Actor1256: t02 + Owner: Neutral + Location: 4,63 + Actor1212: t08 + Owner: Neutral + Location: 3,57 + Actor1257: t03 + Owner: Neutral + Location: 98,13 + Actor1202: t06 + Owner: Neutral + Location: 2,54 + Actor1203: t06 + Owner: Neutral + Location: 99,15 + Actor1259: tc02 + Owner: Neutral + Location: 4,54 + Actor1258: tc01 + Owner: Neutral + Location: 96,15 + Actor1260: t12 + Owner: Neutral + Location: 96,16 + Actor1261: t08 + Owner: Neutral + Location: 99,23 + Actor1265: t07 + Owner: Neutral + Location: 98,17 + Actor1263: t07 + Owner: Neutral + Location: 3,52 + Actor1267: t07 + Owner: Neutral + Location: 10,68 + Actor1269: t07 + Owner: Neutral + Location: 10,68 + Actor1270: t08 + Owner: Neutral + Location: 91,2 + Actor1271: t01 + Owner: Neutral + Location: 1,50 + Actor1272: t01 + Owner: Neutral + Location: 100,19 + Actor1274: t07 + Owner: Neutral + Location: 7,54 + Actor1276: tc01 + Owner: Neutral + Location: 8,56 + Actor1240: tc02 + Owner: Neutral + Location: 5,57 + Actor1241: tc01 + Owner: Neutral + Location: 95,12 + Actor1278: t12 + Owner: Neutral + Location: 95,13 + Actor1275: t08 + Owner: Neutral + Location: 96,12 + Actor1279: t17 + Owner: Neutral + Location: 5,58 + Actor1132: t17 + Owner: Neutral + Location: 25,68 + Actor1282: t12 + Owner: Neutral + Location: 81,4 + Actor1283: t07 + Owner: Neutral + Location: 78,2 + Actor1138: t03 + Owner: Neutral + Location: 76,1 + Actor1273: t12 + Owner: Neutral + Location: 98,20 + Actor1281: t12 + Owner: Neutral + Location: 16,63 + Actor1284: t17 + Owner: Neutral + Location: 85,6 + Actor1173: t17 + Owner: Neutral + Location: 20,65 + Actor1081: t05 + Owner: Neutral + Location: 23,67 + Actor1218: tc01 + Owner: Neutral + Location: 92,13 + Actor1214: t16 + Owner: Neutral + Location: 87,5 + Actor1215: t16 + Owner: Neutral + Location: 14,64 + Actor1285: t06 + Owner: Neutral + Location: 86,7 + Actor1174: t06 + Owner: Neutral + Location: 15,62 + Actor1262: t08 + Owner: Neutral + Location: 1,45 + Actor1298: t02 + Owner: Neutral + Location: 2,47 + Actor1280: t17 + Owner: Neutral + Location: 5,51 + Actor1299: t08 + Owner: Neutral + Location: 100,25 + Actor1300: t03 + Owner: Neutral + Location: 1,45 + Actor1264: t06 + Owner: Neutral + Location: 3,49 + Actor1188: t08 + Owner: Neutral + Location: 28,70 + Actor1137: t03 + Owner: Neutral + Location: 73,0 + +Rules: rules.yaml diff --git a/mods/ura/maps/a-nuclear-winter/rules.yaml b/mods/ura/maps/a-nuclear-winter/rules.yaml new file mode 100644 index 0000000..d43c18b --- /dev/null +++ b/mods/ura/maps/a-nuclear-winter/rules.yaml @@ -0,0 +1,20 @@ +World: + WeatherOverlay: + ChangingWindLevel: true + WindLevels: -5, -3, -2, 0, 2, 3, 5, 6 + WindTick: 150, 550 + InstantWindChanges: false + UseSquares: true + ParticleSize: 2, 3 + ScatterDirection: -1, 1 + Gravity: 1.00, 2.00 + SwingOffset: 1.0, 1.5 + SwingSpeed: 0.001, 0.025 + SwingAmplitude: 1.0, 1.5 + ParticleColors: ECECEC, E4E4E4, D0D0D0, BCBCBC + LineTailAlphaValue: 0 + GlobalLightingPaletteEffect: + Red: 0.88 + Green: 0.93 + Blue: 1.06 + Ambient: 1.09 diff --git a/mods/ura/maps/a-path-beyond.oramap b/mods/ura/maps/a-path-beyond.oramap new file mode 100644 index 0000000..c26dfc3 Binary files /dev/null and b/mods/ura/maps/a-path-beyond.oramap differ diff --git a/mods/ura/maps/agenda.oramap b/mods/ura/maps/agenda.oramap new file mode 100644 index 0000000..c19a5bf Binary files /dev/null and b/mods/ura/maps/agenda.oramap differ diff --git a/mods/ura/maps/alaska-anarchy-redux.oramap b/mods/ura/maps/alaska-anarchy-redux.oramap new file mode 100644 index 0000000..e3ac8cc Binary files /dev/null and b/mods/ura/maps/alaska-anarchy-redux.oramap differ diff --git a/mods/ura/maps/all-connected.oramap b/mods/ura/maps/all-connected.oramap new file mode 100644 index 0000000..fbb2504 Binary files /dev/null and b/mods/ura/maps/all-connected.oramap differ diff --git a/mods/ura/maps/allies-01/allies01.lua b/mods/ura/maps/allies-01/allies01.lua new file mode 100644 index 0000000..ac1262b --- /dev/null +++ b/mods/ura/maps/allies-01/allies01.lua @@ -0,0 +1,214 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +InsertionHelicopterType = "tran.insertion" +InsertionPath = { InsertionEntry.Location, InsertionLZ.Location } +ExtractionHelicopterType = "tran.extraction" +ExtractionPath = { SouthReinforcementsPoint.Location, ExtractionLZ.Location } +JeepReinforcements = { "jeep", "jeep" } +TanyaReinforcements = { "e7.noautotarget" } +EinsteinType = "einstein" +FlareType = "flare" +CruisersReinforcements = { "ca", "ca", "ca", "ca" } + +SendInsertionHelicopter = function() + local passengers = Reinforcements.ReinforceWithTransport(player, InsertionHelicopterType, + TanyaReinforcements, InsertionPath, { InsertionEntry.Location })[2] + local tanya = passengers[1] + Trigger.OnKilled(tanya, TanyaKilledInAction) + Trigger.AfterDelay(DateTime.Seconds(4), function() + Media.DisplayMessage("According to the rules of engagement I need your explicit orders to fire, Commander!", "Tanya") + end) +end + +SendJeeps = function() + Reinforcements.Reinforce(player, JeepReinforcements, InsertionPath, DateTime.Seconds(2)) + Media.PlaySpeechNotification(player, "ReinforcementsArrived") +end + +RunInitialActivities = function() + SendInsertionHelicopter() + Patrol1.Hunt() + Patrol2.Hunt() + Patrol3.Hunt() + Patrol4.Hunt() + Civilian1.Wait(DateTime.Seconds(6)) + Civilian2.Wait(DateTime.Seconds(6)) + Civilian1.Hunt() + Civilian2.Hunt() +end + +LabGuardsKilled = function() + CreateEinstein() + + Trigger.AfterDelay(DateTime.Seconds(2), function() + Actor.Create(FlareType, true, { Owner = england, Location = ExtractionFlarePoint.Location }) + Media.PlaySpeechNotification(player, "SignalFlareNorth") + SendExtractionHelicopter() + end) + + Trigger.AfterDelay(DateTime.Seconds(10), function() + Media.PlaySpeechNotification(player, "AlliedReinforcementsArrived") + Actor.Create("camera", true, { Owner = player, Location = CruiserCameraPoint.Location }) + SendCruisers() + end) + + Trigger.AfterDelay(DateTime.Seconds(12), function() + for i = 0, 2 do + Trigger.AfterDelay(DateTime.Seconds(i), function() + Media.PlaySoundNotification(player, "AlertBuzzer") + end) + end + Utils.Do(sovietArmy, function(a) + if not a.IsDead and a.HasProperty("Hunt") then + Trigger.OnIdle(a, a.Hunt) + end + end) + end) +end + +SendExtractionHelicopter = function() + heli = Reinforcements.ReinforceWithTransport(player, ExtractionHelicopterType, nil, ExtractionPath)[1] + if not einstein.IsDead then + Trigger.OnRemovedFromWorld(einstein, EvacuateHelicopter) + end + Trigger.OnKilled(heli, RescueFailed) + Trigger.OnRemovedFromWorld(heli, HelicopterGone) +end + +EvacuateHelicopter = function() + if heli.HasPassengers then + heli.Move(ExtractionExitPoint.Location) + Trigger.OnIdle(heli, heli.Destroy) + end +end + +SendCruisers = function() + local i = 1 + Utils.Do(CruisersReinforcements, function(cruiser) + local ca = Actor.Create(cruiser, true, { Owner = england, Location = SouthReinforcementsPoint.Location + CVec.New(2 * i, 0) }) + ca.Move(Map.NamedActor("CruiserPoint" .. i).Location) + i = i + 1 + end) +end + +LabDestroyed = function() + if not einstein then + RescueFailed() + end +end + +RescueFailed = function() + Media.PlaySpeechNotification(player, "ObjectiveNotMet") + player.MarkFailedObjective(EinsteinSurviveObjective) +end + +TanyaKilledInAction = function() + Media.PlaySpeechNotification(player, "ObjectiveNotMet") + player.MarkFailedObjective(TanyaSurviveObjective) +end + +OilPumpDestroyed = function() + Trigger.AfterDelay(DateTime.Seconds(5), SendJeeps) +end + +CiviliansKilled = function() + player.MarkFailedObjective(CivilProtectionObjective) + Media.PlaySpeechNotification(player, "ObjectiveNotMet") + collateralDamage = true +end + +CreateEinstein = function() + player.MarkCompletedObjective(FindEinsteinObjective) + Media.PlaySpeechNotification(player, "ObjectiveMet") + einstein = Actor.Create(EinsteinType, true, { Location = EinsteinSpawnPoint.Location, Owner = player }) + einstein.Scatter() + Trigger.OnKilled(einstein, RescueFailed) + ExtractObjective = player.AddPrimaryObjective("Wait for the helicopter and extract Einstein.") + Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(player, "TargetFreed") end) +end + +HelicopterGone = function() + if not heli.IsDead then + Media.PlaySpeechNotification(player, "TargetRescued") + Trigger.AfterDelay(DateTime.Seconds(1), function() + player.MarkCompletedObjective(ExtractObjective) + player.MarkCompletedObjective(EinsteinSurviveObjective) + if not player.IsObjectiveFailed(TanyaSurviveObjective) then + player.MarkCompletedObjective(TanyaSurviveObjective) + end + if not collateralDamage then + player.MarkCompletedObjective(CivilProtectionObjective) + end + end) + end +end + +MissionAccomplished = function() + Media.PlaySpeechNotification(player, "MissionAccomplished") +end + +MissionFailed = function() + Media.PlaySpeechNotification(player, "MissionFailed") +end + +SetUnitStances = function() + Utils.Do(Map.NamedActors, function(a) + if a.Owner == player then + a.Stance = "Defend" + end + end) +end + +Tick = function() + ussr.Resources = ussr.Resources - (0.01 * ussr.ResourceCapacity / 25) +end + +WorldLoaded = function() + player = Player.GetPlayer("Greece") + england = Player.GetPlayer("England") + ussr = Player.GetPlayer("USSR") + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(player, MissionFailed) + Trigger.OnPlayerWon(player, MissionAccomplished) + + FindEinsteinObjective = player.AddPrimaryObjective("Find Einstein.") + TanyaSurviveObjective = player.AddPrimaryObjective("Tanya must survive.") + EinsteinSurviveObjective = player.AddPrimaryObjective("Einstein must survive.") + CivilProtectionObjective = player.AddSecondaryObjective("Protect all civilians.") + + RunInitialActivities() + + Trigger.OnKilled(Lab, LabDestroyed) + Trigger.OnKilled(OilPump, OilPumpDestroyed) + + sovietArmy = ussr.GetGroundAttackers() + + labGuardsTeam = { LabGuard1, LabGuard2, LabGuard3 } + Trigger.OnAllKilled(labGuardsTeam, LabGuardsKilled) + + collateralDamage = false + civilianTeam = { Civilian1, Civilian2 } + Trigger.OnAnyKilled(civilianTeam, CiviliansKilled) + + SetUnitStances() + + Trigger.AfterDelay(DateTime.Seconds(5), function() Actor.Create("camera", true, { Owner = player, Location = BaseCameraPoint.Location }) end) + + Camera.Position = InsertionLZ.CenterPosition +end diff --git a/mods/ura/maps/allies-01/map.bin b/mods/ura/maps/allies-01/map.bin new file mode 100644 index 0000000..9531b64 Binary files /dev/null and b/mods/ura/maps/allies-01/map.bin differ diff --git a/mods/ura/maps/allies-01/map.png b/mods/ura/maps/allies-01/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/allies-01/map.png differ diff --git a/mods/ura/maps/allies-01/map.yaml b/mods/ura/maps/allies-01/map.yaml new file mode 100644 index 0000000..94b37b7 --- /dev/null +++ b/mods/ura/maps/allies-01/map.yaml @@ -0,0 +1,445 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 01: In the thick of it + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 49,45,30,36 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FE1100 + Enemies: Greece, England + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Greece: + Name: Greece + Playable: True + AllowBots: False + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: ABB7E4 + LockSpawn: True + LockTeam: True + Allies: England + Enemies: USSR + PlayerReference@England: + Name: England + Faction: allies + Color: A1EF8C + Allies: Greece + Enemies: USSR + +Actors: + Actor0: t16 + Location: 66,46 + Owner: Neutral + Actor1: t17 + Location: 59,46 + Owner: Neutral + Actor2: tc04 + Location: 75,44 + Owner: Neutral + Actor3: tc05 + Location: 76,45 + Owner: Neutral + Actor4: t01 + Location: 52,50 + Owner: Neutral + Actor5: t02 + Location: 70,68 + Owner: Neutral + Actor6: t05 + Location: 73,64 + Owner: Neutral + Actor7: t14 + Location: 59,50 + Owner: Neutral + Actor8: t17 + Location: 56,61 + Owner: Neutral + Actor9: tc01 + Location: 53,64 + Owner: Neutral + Actor10: tc02 + Location: 49,66 + Owner: Neutral + Actor11: t07 + Location: 49,59 + Owner: Neutral + Actor12: tc05 + Location: 49,60 + Owner: Neutral + Actor13: tc04 + Location: 50,58 + Owner: Neutral + Actor14: tc03 + Location: 69,50 + Owner: Neutral + Actor15: t11 + Location: 77,60 + Owner: Neutral + Actor16: t01 + Location: 78,59 + Owner: Neutral + Actor17: tc01 + Location: 76,56 + Owner: Neutral + Actor18: t08 + Location: 66,50 + Owner: Neutral + Actor19: t17 + Location: 57,56 + Owner: Neutral + Actor20: t01 + Location: 73,67 + Owner: Neutral + Actor21: tc01 + Location: 54,45 + Owner: Neutral + Actor22: tsla + Location: 71,60 + Owner: USSR + Actor23: powr + Location: 75,64 + Owner: USSR + Actor24: powr + Location: 67,57 + Owner: USSR + Actor25: powr + Location: 61,57 + Owner: USSR + Actor27: fact + Location: 69,62 + Owner: USSR + Actor28: dome + Location: 67,65 + Owner: USSR + Actor29: barr + Location: 61,64 + Owner: USSR + Actor30: tsla + Location: 67,68 + Owner: USSR + Actor31: tsla + Location: 60,67 + Owner: USSR + Actor32: weap + Location: 65,62 + Owner: USSR + Actor33: proc + Location: 73,58 + Owner: USSR + Actor34: kenn + Location: 64,65 + Owner: USSR + Actor35: powr + Location: 65,57 + Owner: USSR + Actor36: powr + Location: 77,64 + Owner: USSR + Actor37: powr + Location: 75,67 + Owner: USSR + Actor38: silo + Location: 59,64 + Owner: USSR + Actor39: powr + Location: 77,67 + Owner: USSR + Actor41: brl3 + Location: 60,57 + Owner: USSR + Actor42: barl + Location: 60,56 + Owner: USSR + Actor43: barl + Location: 61,56 + Owner: USSR + Actor44: brl3 + Location: 60,58 + Owner: USSR + Actor45: barl + Location: 58,56 + Owner: USSR + Actor46: barl + Location: 59,59 + Owner: USSR + Actor47: jeep + Location: 63,50 + Owner: Greece + Facing: 128 + Actor49: jeep + Location: 62,50 + Owner: Greece + Facing: 128 + Actor50: jeep + Location: 64,50 + Owner: Greece + Facing: 128 + Actor55: e2 + Location: 73,66 + Owner: USSR + SubCell: 1 + Actor56: e1 + Location: 62,67 + Owner: USSR + Facing: 128 + SubCell: 4 + Actor57: e1 + Location: 67,67 + Owner: USSR + Facing: 160 + SubCell: 3 + Actor58: e1 + Location: 65,67 + Owner: USSR + Facing: 160 + SubCell: 3 + Actor59: e1 + Location: 56,60 + Owner: USSR + Facing: 96 + SubCell: 1 + Actor63: e1 + Location: 58,60 + Owner: USSR + Facing: 64 + SubCell: 1 + Actor64: e1 + Location: 64,49 + Owner: Greece + Facing: 128 + SubCell: 1 + Actor65: e1 + Location: 63,49 + Owner: Greece + Facing: 128 + SubCell: 0 + Actor66: e1 + Location: 62,49 + Owner: Greece + Facing: 160 + SubCell: 2 + Actor69: e2 + Location: 62,56 + Owner: USSR + Facing: 32 + SubCell: 1 + Actor70: e2 + Location: 62,56 + Owner: USSR + SubCell: 4 + Actor71: e1 + Location: 64,49 + Owner: Greece + Facing: 128 + SubCell: 2 + Actor72: e1 + Location: 62,49 + Owner: Greece + Facing: 128 + SubCell: 1 + Actor48: fenc + Location: 53,60 + Owner: USSR + Actor51: fenc + Location: 53,59 + Owner: USSR + Actor52: fenc + Location: 54,59 + Owner: USSR + Actor60: fenc + Location: 53,63 + Owner: USSR + Actor61: fenc + Location: 54,63 + Owner: USSR + Actor73: fenc + Location: 55,63 + Owner: USSR + Actor74: fenc + Location: 55,64 + Owner: USSR + Actor75: fenc + Location: 55,65 + Owner: USSR + Actor76: fenc + Location: 55,66 + Owner: USSR + Actor77: fenc + Location: 55,67 + Owner: USSR + Actor78: fenc + Location: 56,67 + Owner: USSR + Actor79: fenc + Location: 57,67 + Owner: USSR + Actor80: fenc + Location: 58,67 + Owner: USSR + Actor81: fenc + Location: 58,68 + Owner: USSR + Actor82: fenc + Location: 73,70 + Owner: USSR + Actor83: fenc + Location: 74,70 + Owner: USSR + Actor84: fenc + Location: 78,70 + Owner: USSR + Actor85: fenc + Location: 77,70 + Owner: USSR + Actor86: fenc + Location: 76,70 + Owner: USSR + Actor87: fenc + Location: 78,58 + Owner: USSR + Actor99: fenc + Location: 78,59 + Owner: USSR + Actor88: fenc + Location: 77,58 + Owner: USSR + Actor89: fenc + Location: 78,57 + Owner: USSR + Actor90: fenc + Location: 78,56 + Owner: USSR + Actor91: fenc + Location: 77,56 + Owner: USSR + Actor98: fenc + Location: 76,56 + Owner: USSR + Actor92: fenc + Location: 75,56 + Owner: USSR + Actor93: fenc + Location: 74,56 + Owner: USSR + Actor94: fenc + Location: 74,55 + Owner: USSR + Actor95: fenc + Location: 68,55 + Owner: USSR + Actor96: fenc + Location: 69,55 + Owner: USSR + Actor97: fenc + Location: 68,54 + Owner: USSR + Lab: stek + Location: 61,60 + Owner: USSR + OilPump: v19 + Location: 59,57 + Owner: USSR + LabGuard1: e1 + Location: 64,61 + Owner: USSR + SubCell: 4 + LabGuard2: e1 + Location: 63,63 + Owner: USSR + Facing: 96 + SubCell: 0 + LabGuard3: e1 + Location: 61,63 + Owner: USSR + Facing: 128 + SubCell: 0 + Patrol1: dog + Location: 63,59 + Owner: USSR + SubCell: 2 + Patrol2: e1 + Location: 64,58 + Owner: USSR + SubCell: 3 + Patrol3: e1 + Location: 64,59 + Owner: USSR + SubCell: 2 + Patrol4: e1 + Location: 62,55 + Owner: USSR + SubCell: 4 + Civilian1: c8 + Location: 74,50 + Owner: England + SubCell: 0 + Civilian2: c7 + Location: 76,48 + Owner: England + SubCell: 3 + EinsteinSpawnPoint: waypoint + Location: 62,61 + Owner: Neutral + InsertionEntry: waypoint + Location: 63,45 + Owner: Neutral + InsertionLZ: waypoint + Location: 63,47 + Owner: Neutral + BaseCameraPoint: waypoint + Location: 64,63 + Owner: Neutral + SouthReinforcementsPoint: waypoint + Location: 66,80 + Owner: Neutral + ExtractionLZ: waypoint + Location: 53,49 + Owner: Neutral + ExtractionFlarePoint: waypoint + Location: 54,48 + Owner: Neutral + ExtractionExitPoint: waypoint + Location: 78,49 + Owner: Neutral + CruiserCameraPoint: waypoint + Location: 69,67 + Owner: Neutral + CruiserPoint1: waypoint + Location: 60,74 + Owner: Neutral + CruiserPoint2: waypoint + Location: 64,75 + Owner: Neutral + CruiserPoint4: waypoint + Location: 72,75 + Owner: Neutral + CruiserPoint3: waypoint + Location: 68,76 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ura/maps/allies-01/rules.yaml b/mods/ura/maps/allies-01/rules.yaml new file mode 100644 index 0000000..c9066f8 --- /dev/null +++ b/mods/ura/maps/allies-01/rules.yaml @@ -0,0 +1,52 @@ +World: + LuaScript: + Scripts: allies01.lua + MissionData: + Briefing: Rescue Einstein from the Headquarters inside this Soviet complex.\n\nOnce found, evacuate him via the helicopter at the signal flare.\n\nEinstein and Tanya must be kept alive at all costs.\n\nBeware the Soviet's Tesla Coils.\n\nDirect Tanya to destroy the westmost power plants to take them off-line. + BackgroundVideo: prolog.vqa + BriefingVideo: ally1.vqa + StartVideo: landing.vqa + WinVideo: snowbomb.vqa + LossVideo: bmap.vqa + +TRAN.Extraction: + Inherits: TRAN + WithFacingSpriteBody: + RevealsShroud: + Range: 0c0 + RejectsOrders: + -Selectable: + Cargo: + Types: Einstein + MaxWeight: 1 + RenderSprites: + Image: tran + Interactable: + +TRAN.Insertion: + Inherits: TRAN.Extraction + WithFacingSpriteBody: + Cargo: + MaxWeight: 0 + RenderSprites: + Image: tran + Interactable: + +EINSTEIN: + Passenger: + CargoType: Einstein + +^CivInfantry: + RevealsShroud: + Range: 0c0 + +C8: + Inherits@2: ^ArmedCivilian + +JEEP: + Cargo: + Types: Infantry, Einstein + +TSLA: + Power: + Amount: -150 diff --git a/mods/ura/maps/allies-01/weapons.yaml b/mods/ura/maps/allies-01/weapons.yaml new file mode 100644 index 0000000..14bfcdb --- /dev/null +++ b/mods/ura/maps/allies-01/weapons.yaml @@ -0,0 +1,2 @@ +8Inch: + Range: 25c0 diff --git a/mods/ura/maps/allies-02/allies02.lua b/mods/ura/maps/allies-02/allies02.lua new file mode 100644 index 0000000..6e86347 --- /dev/null +++ b/mods/ura/maps/allies-02/allies02.lua @@ -0,0 +1,288 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +ConstructionVehicleReinforcements = { "mcv" } +ConstructionVehiclePath = { ReinforcementsEntryPoint.Location, DeployPoint.Location } + +JeepReinforcements = { "e1", "e1", "e1", "jeep" } +JeepPath = { ReinforcementsEntryPoint.Location, ReinforcementsRallyPoint.Location } + +TruckReinforcements = { "truk", "truk", "truk" } +TruckPath = { TruckEntryPoint.Location, TruckRallyPoint.Location } + +PathGuards = { PathGuard1, PathGuard2, PathGuard3, PathGuard4, PathGuard5, PathGuard6, PathGuard7, PathGuard8, PathGuard9, PathGuard10, PathGuard11, PathGuard12, PathGuard13, PathGuard14, PathGuard15 } + +IdlingUnits = { } + +if Map.LobbyOption("difficulty") == "easy" then + TimerTicks = DateTime.Minutes(10) + Announcements = + { + { speech = "TenMinutesRemaining", delay = DateTime.Seconds(3) }, + { speech = "WarningFiveMinutesRemaining", delay = DateTime.Minutes(5) }, + { speech = "WarningFourMinutesRemaining", delay = DateTime.Minutes(6) }, + { speech = "WarningThreeMinutesRemaining", delay = DateTime.Minutes(7) }, + { speech = "WarningTwoMinutesRemaining", delay = DateTime.Minutes(8) }, + { speech = "WarningOneMinuteRemaining", delay = DateTime.Minutes(9) } + } + +elseif Map.LobbyOption("difficulty") == "normal" then + TimerTicks = DateTime.Minutes(5) + Announcements = + { + { speech = "WarningFiveMinutesRemaining", delay = DateTime.Seconds(3) }, + { speech = "WarningFourMinutesRemaining", delay = DateTime.Minutes(1) }, + { speech = "WarningThreeMinutesRemaining", delay = DateTime.Minutes(2) }, + { speech = "WarningTwoMinutesRemaining", delay = DateTime.Minutes(3) }, + { speech = "WarningOneMinuteRemaining", delay = DateTime.Minutes(4) } + } + + InfantryTypes = { "e1", "e1", "e1", "e2", "e2", "e1" } + InfantryDelay = DateTime.Seconds(18) + AttackGroupSize = 5 + +elseif Map.LobbyOption("difficulty") == "hard" then + TimerTicks = DateTime.Minutes(3) + Announcements = + { + { speech = "WarningThreeMinutesRemaining", delay = DateTime.Seconds(3) }, + { speech = "WarningTwoMinutesRemaining", delay = DateTime.Minutes(1) }, + { speech = "WarningOneMinuteRemaining", delay = DateTime.Minutes(2) }, + } + + InfantryTypes = { "e1", "e1", "e1", "e2", "e2", "e1" } + InfantryDelay = DateTime.Seconds(10) + VehicleTypes = { "ftrk" } + VehicleDelay = DateTime.Seconds(30) + AttackGroupSize = 7 + +else + TimerTicks = DateTime.Minutes(1) + Announcements = { { speech = "WarningOneMinuteRemaining", delay = DateTime.Seconds(3) } } + ConstructionVehicleReinforcements = { "jeep" } + + InfantryTypes = { "e1", "e1", "e1", "e2", "e2", "dog", "dog" } + InfantryDelay = DateTime.Seconds(10) + VehicleTypes = { "ftrk" } + VehicleDelay = DateTime.Minutes(1) + DateTime.Seconds(10) + AttackGroupSize = 5 +end + +SendJeepReinforcements = function() + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + Reinforcements.Reinforce(player, JeepReinforcements, JeepPath, DateTime.Seconds(1)) +end + +RunInitialActivities = function() + Harvester.FindResources() + Trigger.OnKilled(Harvester, function() HarvesterKilled = true end) + + Trigger.OnAllKilled(PathGuards, function() + player.MarkCompletedObjective(SecureObjective) + SendTrucks() + end) + + if InfantryTypes then + Trigger.AfterDelay(InfantryDelay, InfantryProduction) + end + + if VehicleTypes then + Trigger.AfterDelay(VehicleDelay, VehicleProduction) + end +end + +InfantryProduction = function() + if SovietBarracks.IsDead then + return + end + + local toBuild = { Utils.Random(InfantryTypes) } + + if SovietKennel.IsDead and toBuild == "dog" then + toBuild = "e1" + end + + ussr.Build(toBuild, function(unit) + IdlingUnits[#IdlingUnits + 1] = unit[1] + Trigger.AfterDelay(InfantryDelay, InfantryProduction) + + if #IdlingUnits >= (AttackGroupSize * 1.5) then + SendAttack() + end + end) +end + +VehicleProduction = function() + if SovietWarfactory.IsDead then + return + end + + if HarvesterKilled then + ussr.Build({ "harv" }, function(harv) + harv[1].FindResources() + Trigger.OnKilled(harv[1], function() HarvesterKilled = true end) + + HarvesterKilled = false + VehicleProduction() + end) + return + end + + local toBuild = { Utils.Random(VehicleTypes) } + ussr.Build(toBuild, function(unit) + IdlingUnits[#IdlingUnits + 1] = unit[1] + Trigger.AfterDelay(VehicleDelay, VehicleProduction) + + if #IdlingUnits >= (AttackGroupSize * 1.5) then + SendAttack() + end + end) +end + +SendAttack = function() + local units = { } + + for i = 0, AttackGroupSize, 1 do + local number = Utils.RandomInteger(1, #IdlingUnits) + + if IdlingUnits[number] and not IdlingUnits[number].IsDead then + units[i] = IdlingUnits[number] + table.remove(IdlingUnits, number) + end + end + + Utils.Do(units, function(unit) + if Map.LobbyOption("difficulty") ~= "tough" then + unit.AttackMove(DeployPoint.Location) + end + Trigger.OnIdle(unit, unit.Hunt) + end) +end + +ticked = TimerTicks +Tick = function() + ussr.Resources = ussr.Resources - (0.01 * ussr.ResourceCapacity / 25) + + if ussr.HasNoRequiredUnits() then + player.MarkCompletedObjective(ConquestObjective) + end + + if player.HasNoRequiredUnits() then + ussr.MarkCompletedObjective(ussrObj) + end + + if ticked > 0 then + UserInterface.SetMissionText("The convoy arrives in " .. Utils.FormatTime(ticked), TimerColor) + ticked = ticked - 1 + elseif ticked == 0 then + FinishTimer() + SendTrucks() + ticked = ticked - 1 + end +end + +FinishTimer = function() + for i = 0, 5, 1 do + local c = TimerColor + if i % 2 == 0 then + c = HSLColor.White + end + + Trigger.AfterDelay(DateTime.Seconds(i), function() UserInterface.SetMissionText("The convoy arrived!", c) end) + end + Trigger.AfterDelay(DateTime.Seconds(6), function() UserInterface.SetMissionText("") end) +end + +ConvoyOnSite = false +SendTrucks = function() + if not ConvoyOnSite then + ConvoyOnSite = true + + ticked = 0 + ConvoyObjective = player.AddPrimaryObjective("Escort the convoy.") + + Media.PlaySpeechNotification(player, "ConvoyApproaching") + Trigger.AfterDelay(DateTime.Seconds(3), function() + ConvoyUnharmed = true + local trucks = Reinforcements.Reinforce(england, TruckReinforcements, TruckPath, DateTime.Seconds(1), + function(truck) + Trigger.OnIdle(truck, function() truck.Move(TruckExitPoint.Location) end) + end) + count = 0 + Trigger.OnEnteredFootprint( { TruckExitPoint.Location }, function(a, id) + if a.Owner == england then + count = count + 1 + a.Destroy() + if count == 3 then + player.MarkCompletedObjective(ConvoyObjective) + Trigger.RemoveFootprintTrigger(id) + end + end + end) + Trigger.OnAnyKilled(trucks, ConvoyCasualites) + end) + end +end + +ConvoyCasualites = function() + Media.PlaySpeechNotification(player, "ConvoyUnitLost") + if ConvoyUnharmed then + ConvoyUnharmed = false + Trigger.AfterDelay(DateTime.Seconds(1), function() player.MarkFailedObjective(ConvoyObjective) end) + end +end + +ConvoyTimerAnnouncements = function() + for i = #Announcements, 1, -1 do + Trigger.AfterDelay(Announcements[i].delay, function() + if not ConvoyOnSite then + Media.PlaySpeechNotification(player, Announcements[i].speech) + end + end) + end +end + +WorldLoaded = function() + player = Player.GetPlayer("Greece") + england = Player.GetPlayer("England") + ussr = Player.GetPlayer("USSR") + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + + ussrObj = ussr.AddPrimaryObjective("Deny the allies!") + + SecureObjective = player.AddPrimaryObjective("Secure the convoy's path.") + ConquestObjective = player.AddPrimaryObjective("Eliminate the entire soviet presence in this area.") + + Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(allies, "MissionTimerInitialised") end) + + RunInitialActivities() + + Reinforcements.Reinforce(player, ConstructionVehicleReinforcements, ConstructionVehiclePath) + Trigger.AfterDelay(DateTime.Seconds(5), SendJeepReinforcements) + Trigger.AfterDelay(DateTime.Seconds(10), SendJeepReinforcements) + + Camera.Position = ReinforcementsEntryPoint.CenterPosition + TimerColor = player.Color + + ConvoyTimerAnnouncements() +end diff --git a/mods/ura/maps/allies-02/map.bin b/mods/ura/maps/allies-02/map.bin new file mode 100644 index 0000000..a76f3d1 Binary files /dev/null and b/mods/ura/maps/allies-02/map.bin differ diff --git a/mods/ura/maps/allies-02/map.png b/mods/ura/maps/allies-02/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/allies-02/map.png differ diff --git a/mods/ura/maps/allies-02/map.yaml b/mods/ura/maps/allies-02/map.yaml new file mode 100644 index 0000000..3825f6e --- /dev/null +++ b/mods/ura/maps/allies-02/map.yaml @@ -0,0 +1,672 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 02: Five to one + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 43,44,50,42 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FE1100 + Enemies: Greece, England + PlayerReference@England: + Name: England + NonCombatant: True + Faction: allies + Color: A1EF8C + Allies: Greece + Enemies: USSR + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Greece: + Name: Greece + Playable: True + AllowBots: False + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: ABB7E4 + LockSpawn: True + LockTeam: True + Allies: England + Enemies: USSR + +Actors: + EntryPoint: t06 + Location: 75,80 + Owner: Neutral + Actor1: t03 + Location: 75,72 + Owner: Neutral + Actor2: t08 + Location: 92,60 + Owner: Neutral + Actor3: t12 + Location: 92,63 + Owner: Neutral + Actor4: t01 + Location: 89,62 + Owner: Neutral + Actor5: t16 + Location: 61,44 + Owner: Neutral + Actor6: t14 + Location: 58,49 + Owner: Neutral + Actor7: t10 + Location: 55,46 + Owner: Neutral + Actor8: t10 + Location: 43,56 + Owner: Neutral + Actor9: t01 + Location: 45,56 + Owner: Neutral + Actor10: t17 + Location: 53,66 + Owner: Neutral + Actor11: tc01 + Location: 59,60 + Owner: Neutral + Actor12: tc01 + Location: 63,74 + Owner: Neutral + Actor13: t07 + Location: 44,77 + Owner: Neutral + Actor14: t08 + Location: 50,78 + Owner: Neutral + Actor15: t11 + Location: 51,71 + Owner: Neutral + Actor16: t10 + Location: 68,77 + Owner: Neutral + Actor17: tc02 + Location: 69,72 + Owner: Neutral + Actor18: tc03 + Location: 71,52 + Owner: Neutral + Actor19: tc04 + Location: 67,76 + Owner: Neutral + Actor20: t17 + Location: 70,55 + Owner: Neutral + Actor21: tc01 + Location: 70,54 + Owner: Neutral + Actor22: t06 + Location: 67,54 + Owner: Neutral + Actor23: t01 + Location: 67,44 + Owner: Neutral + Actor24: tc02 + Location: 67,51 + Owner: Neutral + Actor25: tc04 + Location: 67,49 + Owner: Neutral + Actor26: t17 + Location: 69,50 + Owner: Neutral + Actor27: t08 + Location: 64,55 + Owner: Neutral + Actor28: t16 + Location: 72,62 + Owner: Neutral + Actor29: t15 + Location: 71,63 + Owner: Neutral + Actor30: tc04 + Location: 67,66 + Owner: Neutral + Actor31: tc05 + Location: 68,67 + Owner: Neutral + Actor32: t17 + Location: 67,62 + Owner: Neutral + Actor33: tc02 + Location: 44,68 + Owner: Neutral + Actor34: t12 + Location: 93,81 + Owner: Neutral + Actor35: t03 + Location: 93,55 + Owner: Neutral + Actor36: t02 + Location: 93,57 + Owner: Neutral + Actor37: t02 + Location: 79,47 + Owner: Neutral + Actor38: t11 + Location: 77,56 + Owner: Neutral + Actor39: t01 + Location: 92,45 + Owner: Neutral + Actor40: t05 + Location: 93,54 + Owner: Neutral + Actor41: t06 + Location: 93,82 + Owner: Neutral + Actor42: t07 + Location: 87,44 + Owner: Neutral + Actor43: t14 + Location: 46,84 + Owner: Neutral + Actor44: t08 + Location: 48,85 + Owner: Neutral + Actor45: t07 + Location: 51,84 + Owner: Neutral + Actor46: tc01 + Location: 62,84 + Owner: Neutral + Actor47: t11 + Location: 59,71 + Owner: Neutral + Actor48: t01 + Location: 45,44 + Owner: Neutral + Actor49: tc04 + Location: 45,53 + Owner: Neutral + Actor50: t11 + Location: 54,55 + Owner: Neutral + Actor51: t10 + Location: 84,71 + Owner: Neutral + Actor52: tc05 + Location: 90,83 + Owner: Neutral + Actor53: tc01 + Location: 89,84 + Owner: Neutral + Actor54: tc04 + Location: 85,81 + Owner: Neutral + Actor55: tc05 + Location: 43,71 + Owner: Neutral + Actor56: tc03 + Location: 43,70 + Owner: Neutral + Actor58: fact + Location: 62,61 + Owner: USSR + Actor59: proc + Location: 53,62 + Owner: USSR + FreeActor: False + Actor60: powr + Location: 57,62 + Owner: USSR + Actor62: powr + Location: 59,62 + Owner: USSR + Actor64: brl3 + Location: 65,59 + Owner: USSR + Actor65: barl + Location: 66,60 + Owner: USSR + Actor66: barl + Location: 65,60 + Owner: USSR + Actor67: brl3 + Location: 64,60 + Owner: USSR + Actor68: barl + Location: 65,61 + Owner: USSR + Actor69: v19 + Location: 67,60 + Owner: USSR + Actor70: v19 + Location: 67,59 + Owner: USSR + Actor71: barl + Location: 65,62 + Owner: USSR + Actor72: silo + Location: 54,68 + Owner: USSR + Actor73: brl3 + Location: 55,70 + Owner: USSR + Actor74: brl3 + Location: 54,70 + Owner: USSR + Actor75: barl + Location: 53,69 + Owner: USSR + Actor76: barl + Location: 54,69 + Owner: USSR + Actor77: barl + Location: 55,71 + Owner: USSR + Actor78: brl3 + Location: 56,71 + Owner: USSR + Actor79: brl3 + Location: 53,68 + Owner: USSR + Actor80: v19 + Location: 56,70 + Owner: USSR + Actor81: barl + Location: 55,69 + Owner: USSR + Actor82: brl3 + Location: 72,51 + Owner: USSR + Actor83: barl + Location: 72,50 + Owner: USSR + Actor84: barl + Location: 74,48 + Owner: USSR + Actor85: barl + Location: 72,49 + Owner: USSR + Actor86: barl + Location: 73,48 + Owner: USSR + Actor87: v19 + Location: 75,48 + Owner: USSR + Health: 52 + Actor88: v19 + Location: 62,57 + Owner: USSR + Actor89: v19 + Location: 60,58 + Owner: USSR + Actor90: brl3 + Location: 62,56 + Owner: USSR + Actor91: brl3 + Location: 61,58 + Owner: USSR + Actor92: barl + Location: 61,57 + Owner: USSR + Actor93: brl3 + Location: 59,58 + Owner: USSR + Actor94: barl + Location: 58,58 + Owner: USSR + Actor96: dog + Location: 53,58 + Owner: USSR + SubCell: 1 + Actor97: dog + Location: 65,68 + Owner: USSR + Facing: 64 + SubCell: 3 + Actor98: dog + Location: 65,66 + Owner: USSR + Facing: 32 + SubCell: 2 + Actor99: dog + Location: 59,70 + Owner: USSR + Facing: 160 + SubCell: 2 + Actor100: e2 + Location: 61,56 + Owner: USSR + Facing: 32 + SubCell: 3 + Actor101: e2 + Location: 59,57 + Owner: USSR + Facing: 224 + SubCell: 4 + Actor102: e2 + Location: 64,67 + Owner: USSR + Facing: 96 + SubCell: 0 + Actor103: e1 + Location: 77,74 + Owner: USSR + Facing: 128 + SubCell: 2 + Actor104: e1 + Location: 80,74 + Owner: USSR + Facing: 160 + SubCell: 0 + Actor105: e1 + Location: 56,68 + Owner: USSR + Facing: 160 + SubCell: 3 + Actor107: e1 + Location: 73,60 + Owner: USSR + Facing: 32 + SubCell: 2 + Actor108: e1 + Location: 74,61 + Owner: USSR + Facing: 224 + SubCell: 1 + Actor109: e1 + Location: 72,60 + Owner: USSR + Facing: 64 + SubCell: 0 + Actor115: e1 + Location: 60,64 + Owner: USSR + Facing: 224 + SubCell: 3 + Actor116: e2 + Location: 68,45 + Owner: USSR + Facing: 96 + SubCell: 0 + Actor118: e1 + Location: 57,69 + Owner: USSR + Facing: 96 + SubCell: 1 + Actor119: e2 + Location: 60,70 + Owner: USSR + Facing: 32 + SubCell: 0 + Actor120: e1 + Location: 89,48 + Owner: Greece + Facing: 160 + SubCell: 1 + Actor121: e1 + Location: 87,48 + Owner: Greece + Facing: 192 + SubCell: 4 + Actor122: e1 + Location: 87,48 + Owner: Greece + Facing: 192 + SubCell: 1 + Actor123: e1 + Location: 88,48 + Owner: Greece + Facing: 128 + SubCell: 4 + Actor124: e1 + Location: 88,49 + Owner: Greece + Facing: 128 + SubCell: 1 + Actor125: dog + Location: 78,75 + Owner: USSR + Facing: 160 + SubCell: 1 + Actor126: e1 + Location: 71,61 + Owner: USSR + Facing: 160 + SubCell: 0 + Actor127: dog + Location: 70,61 + Owner: USSR + Facing: 96 + SubCell: 4 + Actor136: e2 + Location: 69,66 + Owner: USSR + SubCell: 3 + Actor137: e2 + Location: 73,51 + Owner: USSR + Facing: 224 + SubCell: 4 + Actor138: medi + Location: 88,48 + Owner: Greece + Facing: 160 + SubCell: 1 + Actor139: fenc + Location: 57,75 + Owner: USSR + Actor140: fenc + Location: 57,76 + Owner: USSR + Actor141: fenc + Location: 57,77 + Owner: USSR + Actor142: fenc + Location: 58,77 + Owner: USSR + Actor143: fenc + Location: 58,78 + Owner: USSR + Actor144: fenc + Location: 57,78 + Owner: USSR + Actor145: fenc + Location: 58,75 + Owner: USSR + Actor146: fenc + Location: 58,74 + Owner: USSR + Actor147: fenc + Location: 57,74 + Owner: USSR + Actor148: fenc + Location: 66,67 + Owner: USSR + Actor149: fenc + Location: 66,68 + Owner: USSR + Actor150: fenc + Location: 66,69 + Owner: USSR + Actor151: fenc + Location: 66,70 + Owner: USSR + Actor152: fenc + Location: 65,70 + Owner: USSR + Actor153: fenc + Location: 64,70 + Owner: USSR + Actor154: fenc + Location: 63,70 + Owner: USSR + Actor155: fenc + Location: 51,68 + Owner: USSR + Actor156: fenc + Location: 52,68 + Owner: USSR + Actor157: fenc + Location: 52,67 + Owner: USSR + Actor158: fenc + Location: 52,66 + Owner: USSR + Actor159: fenc + Location: 51,66 + Owner: USSR + Actor160: fenc + Location: 51,62 + Owner: USSR + Actor161: fenc + Location: 51,63 + Owner: USSR + Actor162: fenc + Location: 67,58 + Owner: USSR + Actor163: fenc + Location: 66,58 + Owner: USSR + Actor164: fenc + Location: 66,59 + Owner: USSR + Actor165: fenc + Location: 47,51 + Owner: USSR + Actor166: fenc + Location: 47,50 + Owner: USSR + Actor167: fenc + Location: 46,50 + Owner: USSR + Actor168: fenc + Location: 51,50 + Owner: USSR + Actor169: fenc + Location: 50,50 + Owner: USSR + Actor170: fenc + Location: 50,51 + Owner: USSR + SovietKennel: kenn + Location: 58,68 + Owner: USSR + SovietBarracks: barr + Location: 56,66 + Owner: USSR + SovietWarfactory: weap + Location: 60,66 + Owner: USSR + Harvester: harv + Location: 55,65 + Owner: USSR + Facing: 160 + PathGuard1: e1 + Location: 50,72 + Owner: USSR + Facing: 160 + SubCell: 4 + PathGuard2: e1 + Location: 49,58 + Owner: USSR + Facing: 192 + SubCell: 0 + PathGuard3: e1 + Location: 51,58 + Owner: USSR + Facing: 32 + SubCell: 1 + PathGuard4: e1 + Location: 60,78 + Owner: USSR + Facing: 192 + SubCell: 4 + PathGuard5: e2 + Location: 62,79 + Owner: USSR + Facing: 160 + SubCell: 4 + PathGuard6: e1 + Location: 48,72 + Owner: USSR + Facing: 96 + SubCell: 0 + PathGuard7: e1 + Location: 50,46 + Owner: USSR + Facing: 32 + SubCell: 1 + PathGuard8: e1 + Location: 49,47 + Owner: USSR + Facing: 64 + SubCell: 0 + PathGuard9: e2 + Location: 49,49 + Owner: USSR + Facing: 160 + SubCell: 1 + PathGuard10: e2 + Location: 47,46 + Owner: USSR + Facing: 96 + SubCell: 3 + PathGuard11: e2 + Location: 48,63 + Owner: USSR + SubCell: 1 + PathGuard12: e1 + Location: 49,63 + Owner: USSR + Facing: 96 + SubCell: 2 + PathGuard13: e1 + Location: 74,81 + Owner: USSR + Facing: 64 + SubCell: 3 + PathGuard14: e2 + Location: 75,83 + Owner: USSR + Facing: 96 + SubCell: 0 + PathGuard15: e1 + Location: 57,82 + Owner: USSR + Facing: 160 + SubCell: 1 + TruckEntryPoint: waypoint + Location: 49,44 + Owner: Neutral + TruckRallyPoint: waypoint + Location: 49,76 + Owner: Neutral + TruckExitPoint: waypoint + Location: 80,85 + Owner: Neutral + ReinforcementsEntryPoint: waypoint + Location: 90,44 + Owner: Neutral + ReinforcementsRallyPoint: waypoint + Location: 88,49 + Owner: Neutral + DeployPoint: waypoint + Location: 89,51 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/allies-02/rules.yaml b/mods/ura/maps/allies-02/rules.yaml new file mode 100644 index 0000000..93ffa83 --- /dev/null +++ b/mods/ura/maps/allies-02/rules.yaml @@ -0,0 +1,129 @@ +Player: + PlayerResources: + DefaultCash: 5700 + +World: + LuaScript: + Scripts: allies02.lua + MissionData: + Briefing: A critical supply convoy is due through this area in 10 minutes, but Soviet forces have blocked the road in several places.\n\nUnless you can clear them out, those supplies will never make it to the front.\n\nThe convoy will come from the northwest, and time is short so work quickly. + BriefingVideo: ally2.vqa + StartVideo: mcv.vqa + WinVideo: montpass.vqa + LossVideo: frozen.vqa + SmudgeLayer@CRATER: + InitialSmudges: + 60,79: cr1,0 + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + tough: Real tough guy + Default: easy + +APWR: + Buildable: + Prerequisites: ~disabled + +FIX: + Buildable: + Prerequisites: ~disabled + +SYRD: + Buildable: + Prerequisites: ~disabled + +WEAP: + Buildable: + Prerequisites: ~disabled + +DOME: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +ATEK: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +HBOX: + Buildable: + Prerequisites: ~disabled + +PBOX: + Buildable: + Prerequisites: ~disabled + +GUN: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +E6: + Buildable: + Prerequisites: ~disabled + +SPY: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +E7: + Buildable: + Prerequisites: ~disabled + +FACF: + Buildable: + Prerequisites: ~disabled + +WEAF: + Buildable: + Prerequisites: ~disabled + +SYRF: + Buildable: + Prerequisites: ~disabled + +DOMF: + Buildable: + Prerequisites: ~disabled + +ATEF: + Buildable: + Prerequisites: ~disabled + +MSLF: + Buildable: + Prerequisites: ~disabled + +PDOF: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/allies-03a/allies03a.lua b/mods/ura/maps/allies-03a/allies03a.lua new file mode 100644 index 0000000..f53dd2d --- /dev/null +++ b/mods/ura/maps/allies-03a/allies03a.lua @@ -0,0 +1,278 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +ProductionUnits = { "e1", "e1", "e2" } +ProductionBuildings = { USSRBarracks1, USSRBarracks2 } +TransportReinforcements = { "e1", "e1", "e1", "e2", "e2" } +FirstUSSRBase = { USSRFlameTower1, USSRBarracks1, USSRPowerPlant1, USSRPowerPlant2, USSRConstructionYard1, USSRTechCenter, USSRBaseGuard1, USSRBaseGuard2, USSRBaseGuard3, USSRBaseGuard4, USSRBaseGuard5, USSRBaseGuard6, USSRBaseGuard7, USSRBaseGuard8 } +SecondUSSRBase = { USSRBarracks2, USSRKennel, USSRRadarDome, USSRBaseGuard10, USSRBaseGuard11, USSRBaseGuard12, USSRBaseGuard13, USSRBaseGuard14 } +Prisoners = { PrisonedMedi1, PrisonedMedi2, PrisonedEngi } +CameraTriggerArea = { CPos.New(43, 64), CPos.New(44, 64), CPos.New(45, 64), CPos.New(46, 64), CPos.New(47, 64) } +WaterTransportTriggerArea = { CPos.New(39, 54), CPos.New(40, 54), CPos.New(41, 54), CPos.New(42, 54), CPos.New(43, 54), CPos.New(44, 54), CPos.New(45, 54) } +ParadropTriggerArea = { CPos.New(81, 60), CPos.New(82, 60), CPos.New(83, 60), CPos.New(63, 63), CPos.New(64, 63), CPos.New(65, 63), CPos.New(66, 63), CPos.New(67, 63), CPos.New(68, 63), CPos.New(69, 63), CPos.New(70, 63), CPos.New(71, 63), CPos.New(72, 63) } +ReinforcementsTriggerArea = { CPos.New(96, 55), CPos.New(97, 55), CPos.New(97, 56), CPos.New(98, 56) } + +if Map.LobbyOption("difficulty") == "easy" then + TanyaType = "e7" +else + TanyaType = "e7.noautotarget" +end + +IdleHunt = function(actor) + Trigger.OnIdle(actor, function(a) + if a.IsInWorld then + a.Hunt() + end + end) +end + +ProduceUnits = function(factory, count) + if ussr.IsProducing("e1") then + Trigger.AfterDelay(DateTime.Seconds(5), function() ProduceUnits(factory, count) end) + return + end + + local units = { } + for i = 0, count, 1 do + local type = Utils.Random(ProductionUnits) + units[i] = type + end + + if not factory.IsDead then + factory.IsPrimaryBuilding = true + ussr.Build(units, function(soldiers) + Utils.Do(soldiers, function(unit) IdleHunt(unit) end) + end) + end +end + +SendAlliedUnits = function() + Camera.Position = TanyaWaypoint.CenterPosition + + local Artillery = Actor.Create("arty", true, { Owner = player, Location = AlliedUnitsEntry.Location }) + local Tanya = Actor.Create(TanyaType, true, { Owner = player, Location = AlliedUnitsEntry.Location }) + + if TanyaType == "e7.noautotarget" then + Trigger.AfterDelay(DateTime.Seconds(2), function() + Media.DisplayMessage("According to the rules of engagement I need your explicit orders to fire, Commander!", "Tanya") + end) + end + Artillery.Stance = "HoldFire" + + Tanya.Move(TanyaWaypoint.Location) + Artillery.Move(ArtilleryWaypoint.Location) + + Trigger.OnKilled(Tanya, function() player.MarkFailedObjective(TanyaSurvive) end) +end + +SendUSSRParadrops = function() + local powerproxy = Actor.Create("powerproxy.paratroopers", false, { Owner = ussr }) + local unitsA = powerproxy.SendParatroopers(ParadropLZ.CenterPosition, false, 128 + 32) + local unitsB = powerproxy.SendParatroopers(ParadropLZ.CenterPosition, false, 128 - 32) + + Utils.Do(unitsA, function(unit) + IdleHunt(unit) + end) + Utils.Do(unitsB, function(unit) + IdleHunt(unit) + end) + + powerproxy.Destroy() +end + +SendUSSRWaterTransport = function() + local units = Reinforcements.ReinforceWithTransport(ussr, "lst", TransportReinforcements, { WaterTransportEntry.Location, WaterTransportLoadout.Location }, { WaterTransportExit.Location })[2] + Utils.Do(units, function(unit) IdleHunt(unit) end) +end + +SendUSSRTankReinforcements = function() + local camera = Actor.Create("camera", true, { Owner = player, Location = USSRReinforcementsCameraWaypoint.Location }) + local ussrTank = Reinforcements.Reinforce(ussr, { "3tnk" }, { USSRReinforcementsEntryWaypoint.Location, USSRReinforcementsRallyWaypoint1.Location, USSRReinforcementsRallyWaypoint2.Location })[1] + Trigger.OnRemovedFromWorld(ussrTank, function() + Trigger.AfterDelay(DateTime.Seconds(3), function() + if not camera.IsDead then + camera.Destroy() + end + end) + end) +end + +InitPlayers = function() + player = Player.GetPlayer("Greece") + ussr = Player.GetPlayer("USSR") + + ussr.Cash = 10000 +end + +InitObjectives = function() + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + KillBridges = player.AddPrimaryObjective("Destroy all bridges.") + TanyaSurvive = player.AddPrimaryObjective("Tanya must survive.") + KillUSSR = player.AddSecondaryObjective("Destroy all Soviet oil pumps.") + FreePrisoners = player.AddSecondaryObjective("Free all Allied soldiers and keep them alive.") + ussr.AddPrimaryObjective("Bridges must not be destroyed.") + + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(player, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + end) + Trigger.OnPlayerWon(player, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + end) +end + +InitTriggers = function() + Utils.Do(ussr.GetGroundAttackers(), function(unit) + Trigger.OnDamaged(unit, function() IdleHunt(unit) end) + end) + + Trigger.OnAnyKilled(Prisoners, function() player.MarkFailedObjective(FreePrisoners) end) + + Trigger.OnKilled(USSRTechCenter, function() + Actor.Create("moneycrate", true, { Owner = ussr, Location = USSRMoneyCrateSpawn.Location }) + end) + + Trigger.OnKilled(ExplosiveBarrel, function() + + -- We need the first bridge which is returned + local bridge = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "bridge1" end)[1] + + if not bridge.IsDead then + bridge.Kill() + end + end) + + local baseTrigger = Trigger.OnEnteredFootprint(CameraTriggerArea, function(a, id) + if a.Owner == player and not baseCamera then + Trigger.RemoveFootprintTrigger(id) + baseCamera = Actor.Create("camera", true, { Owner = player, Location = BaseCameraWaypoint.Location }) + end + end) + + Utils.Do(FirstUSSRBase, function(unit) + Trigger.OnDamaged(unit, function() + if not FirstBaseAlert then + FirstBaseAlert = true + if not baseCamera then + baseCamera = Actor.Create("camera", true, { Owner = player, Location = BaseCameraWaypoint.Location }) + Trigger.RemoveFootprintTrigger(baseTrigger) + end + Utils.Do(FirstUSSRBase, function(unit) + if unit.HasProperty("Move") then + IdleHunt(unit) + end + end) + for i = 0, 2 do + Trigger.AfterDelay(DateTime.Seconds(i), function() + Media.PlaySoundNotification(player, "AlertBuzzer") + end) + end + ProduceUnits(ProductionBuildings[1], Utils.RandomInteger(4, 8)) + end + end) + end) + Trigger.OnAllRemovedFromWorld(FirstUSSRBase, function() + if baseCamera then + baseCamera.Destroy() + end + end) + + Utils.Do(SecondUSSRBase, function(unit) + Trigger.OnDamaged(unit, function() + if not SecondBaseAlert then + SecondBaseAlert = true + Utils.Do(SecondUSSRBase, function(unit) + if unit.HasProperty("Move") then + IdleHunt(unit) + end + end) + for i = 0, 2 do + Trigger.AfterDelay(DateTime.Seconds(i), function() + Media.PlaySoundNotification(player, "AlertBuzzer") + end) + end + ProduceUnits(ProductionBuildings[2], Utils.RandomInteger(5, 7)) + end + end) + end) + + Trigger.OnCapture(USSRRadarDome, function(self) + largeCamera = Actor.Create("camera.verylarge", true, { Owner = player, Location = LargeCameraWaypoint.Location }) + Trigger.ClearAll(self) + Trigger.AfterDelay(DateTime.Seconds(1), function() + Trigger.OnRemovedFromWorld(self, function() + Trigger.ClearAll(self) + if largeCamera.IsInWorld then largeCamera.Destroy() end + end) + end) + end) + + Trigger.OnEnteredFootprint(WaterTransportTriggerArea, function(a, id) + if a.Owner == player and not waterTransportTriggered then + waterTransportTriggered = true + Trigger.RemoveFootprintTrigger(id) + SendUSSRWaterTransport() + end + end) + Trigger.OnEnteredFootprint(ParadropTriggerArea, function(a, id) + if a.Owner == player and not paradropsTriggered then + paradropsTriggered = true + Trigger.RemoveFootprintTrigger(id) + SendUSSRParadrops() + end + end) + Trigger.OnEnteredFootprint(ReinforcementsTriggerArea, function(a, id) + if a.Owner == player and not reinforcementsTriggered then + reinforcementsTriggered = true + Trigger.RemoveFootprintTrigger(id) + Trigger.AfterDelay(DateTime.Seconds(1), function() SendUSSRTankReinforcements() end) + end + end) + + Trigger.AfterDelay(0, function() + local bridges = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "bridge1" end) + + Trigger.OnAllKilled(bridges, function() + player.MarkCompletedObjective(KillBridges) + player.MarkCompletedObjective(TanyaSurvive) + + -- The prisoners are free once their guards are dead + if PGuard1.IsDead and PGuard2.IsDead then + player.MarkCompletedObjective(FreePrisoners) + end + end) + + local oilPumps = ussr.GetActorsByType("v19") + + Trigger.OnAllKilled(oilPumps, function() + player.MarkCompletedObjective(KillUSSR) + end) + end) +end + +WorldLoaded = function() + + InitPlayers() + + InitObjectives() + InitTriggers() + SendAlliedUnits() +end diff --git a/mods/ura/maps/allies-03a/map.bin b/mods/ura/maps/allies-03a/map.bin new file mode 100644 index 0000000..21c7fc1 Binary files /dev/null and b/mods/ura/maps/allies-03a/map.bin differ diff --git a/mods/ura/maps/allies-03a/map.png b/mods/ura/maps/allies-03a/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/allies-03a/map.png differ diff --git a/mods/ura/maps/allies-03a/map.yaml b/mods/ura/maps/allies-03a/map.yaml new file mode 100644 index 0000000..873f7be --- /dev/null +++ b/mods/ura/maps/allies-03a/map.yaml @@ -0,0 +1,1312 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 03a: Dead End + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 35,48,72,36 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FE1100 + Enemies: Greece + PlayerReference@Greece: + Name: Greece + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: E2E6F5 + Enemies: USSR + +Actors: + Actor0: brik + Location: 89,71 + Owner: Neutral + Actor1: brik + Location: 90,71 + Owner: Neutral + Actor2: brik + Location: 88,72 + Owner: Neutral + Actor3: brik + Location: 89,72 + Owner: Neutral + Actor4: brik + Location: 90,72 + Owner: Neutral + Actor5: brik + Location: 87,73 + Owner: Neutral + Actor6: brik + Location: 88,73 + Owner: Neutral + Actor7: brik + Location: 77,74 + Owner: Neutral + Actor8: brik + Location: 93,74 + Owner: Neutral + Actor9: brik + Location: 94,74 + Owner: Neutral + Actor10: brik + Location: 77,75 + Owner: Neutral + Actor11: brik + Location: 93,75 + Owner: Neutral + Actor12: brik + Location: 94,75 + Owner: Neutral + Actor13: brik + Location: 76,76 + Owner: Neutral + Actor14: brik + Location: 77,76 + Owner: Neutral + Actor15: brik + Location: 94,76 + Owner: Neutral + Actor16: brik + Location: 76,77 + Owner: Neutral + Actor17: brik + Location: 77,77 + Owner: Neutral + Actor18: brik + Location: 76,81 + Owner: Neutral + Actor19: brik + Location: 77,81 + Owner: Neutral + Actor20: brik + Location: 76,82 + Owner: Neutral + Actor21: brik + Location: 77,82 + Owner: Neutral + Actor22: brik + Location: 77,83 + Owner: Neutral + Actor23: tc01 + Location: 52,63 + Owner: Neutral + Actor24: t17 + Location: 49,64 + Owner: Neutral + Actor25: t14 + Location: 45,59 + Owner: Neutral + Actor26: tc02 + Location: 47,59 + Owner: Neutral + Actor27: tc03 + Location: 46,56 + Owner: Neutral + Actor28: tc02 + Location: 80,57 + Owner: Neutral + Actor29: t12 + Location: 40,48 + Owner: Neutral + Actor30: t08 + Location: 76,68 + Owner: Neutral + Actor31: t01 + Location: 76,64 + Owner: Neutral + Actor32: tc01 + Location: 72,47 + Owner: Neutral + Actor33: tc05 + Location: 49,58 + Owner: Neutral + Actor34: tc04 + Location: 47,57 + Owner: Neutral + Actor35: tc03 + Location: 50,54 + Owner: Neutral + Actor36: tc04 + Location: 45,54 + Owner: Neutral + Actor37: tc01 + Location: 46,53 + Owner: Neutral + Actor38: tc01 + Location: 42,56 + Owner: Neutral + Actor39: tc04 + Location: 50,49 + Owner: Neutral + Actor40: tc03 + Location: 51,51 + Owner: Neutral + Actor41: tc05 + Location: 44,49 + Owner: Neutral + Actor42: tc01 + Location: 81,49 + Owner: Neutral + Actor43: t16 + Location: 78,53 + Owner: Neutral + Actor44: tc05 + Location: 58,65 + Owner: Neutral + Actor45: tc02 + Location: 50,64 + Owner: Neutral + Actor46: tc01 + Location: 95,73 + Owner: Neutral + Actor47: tc05 + Location: 96,70 + Owner: Neutral + Actor48: tc04 + Location: 70,59 + Owner: Neutral + Actor49: tc03 + Location: 64,61 + Owner: Neutral + Actor50: t01 + Location: 63,70 + Owner: Neutral + Actor51: t02 + Location: 67,72 + Owner: Neutral + Actor52: t03 + Location: 65,74 + Owner: Neutral + Actor53: t10 + Location: 62,71 + Owner: Neutral + Actor54: tc02 + Location: 62,77 + Owner: Neutral + Actor55: tc03 + Location: 68,76 + Owner: Neutral + Actor56: tc05 + Location: 56,82 + Owner: Neutral + Actor57: tc01 + Location: 58,78 + Owner: Neutral + Actor58: t10 + Location: 39,71 + Owner: Neutral + Actor59: t14 + Location: 46,76 + Owner: Neutral + Actor60: t15 + Location: 54,78 + Owner: Neutral + Actor61: t13 + Location: 43,68 + Owner: Neutral + Actor62: tc05 + Location: 38,79 + Owner: Neutral + Actor63: tc04 + Location: 35,77 + Owner: Neutral + Actor64: tc03 + Location: 36,80 + Owner: Neutral + Actor65: tc02 + Location: 37,81 + Owner: Neutral + Actor66: tc01 + Location: 41,81 + Owner: Neutral + Actor67: t07 + Location: 96,77 + Owner: Neutral + Actor68: t12 + Location: 97,76 + Owner: Neutral + Actor69: tc03 + Location: 80,52 + Owner: Neutral + Actor70: tc03 + Location: 44,57 + Owner: Neutral + Actor71: tc03 + Location: 97,82 + Owner: Neutral + Actor72: tc04 + Location: 98,78 + Owner: Neutral + Actor73: t11 + Location: 74,70 + Owner: Neutral + Actor74: t16 + Location: 74,71 + Owner: Neutral + Actor75: t17 + Location: 73,68 + Owner: Neutral + Actor76: tc02 + Location: 65,51 + Owner: Neutral + Actor77: tc04 + Location: 67,47 + Owner: Neutral + Actor78: tc05 + Location: 57,48 + Owner: Neutral + Actor79: tc03 + Location: 67,50 + Owner: Neutral + Actor80: tc05 + Location: 91,48 + Owner: Neutral + Actor81: tc04 + Location: 90,47 + Owner: Neutral + Actor82: tc01 + Location: 94,48 + Owner: Neutral + Actor83: t17 + Location: 89,48 + Owner: Neutral + Actor84: tc05 + Location: 61,55 + Owner: Neutral + Actor85: tc04 + Location: 64,54 + Owner: Neutral + Actor86: tc05 + Location: 104,56 + Owner: Neutral + Actor87: tc04 + Location: 104,58 + Owner: Neutral + Actor88: tc01 + Location: 75,82 + Owner: Neutral + Actor89: tc02 + Location: 73,82 + Owner: Neutral + Actor90: t01 + Location: 87,55 + Owner: Neutral + Actor91: t02 + Location: 84,53 + Owner: Neutral + Actor92: t02 + Location: 90,59 + Owner: Neutral + Actor93: t02 + Location: 96,61 + Owner: Neutral + Actor94: t05 + Location: 93,58 + Owner: Neutral + Actor95: t05 + Location: 90,53 + Owner: Neutral + Actor96: t16 + Location: 92,57 + Owner: Neutral + Actor97: tc01 + Location: 88,58 + Owner: Neutral + Actor98: tc02 + Location: 90,54 + Owner: Neutral + Actor99: tc05 + Location: 100,61 + Owner: Neutral + Actor100: tc02 + Location: 94,60 + Owner: Neutral + Actor101: tc01 + Location: 82,55 + Owner: Neutral + Actor102: t01 + Location: 90,62 + Owner: Neutral + Actor103: t06 + Location: 98,58 + Owner: Neutral + Actor104: tc04 + Location: 88,68 + Owner: Neutral + Actor105: tc03 + Location: 90,66 + Owner: Neutral + Actor106: tc02 + Location: 96,80 + Owner: Neutral + Actor107: barl + Location: 81,67 + Owner: USSR + Actor108: barl + Location: 81,66 + Owner: USSR + Actor109: barl + Location: 85,70 + Owner: USSR + Actor110: barl + Location: 83,66 + Owner: USSR + Actor111: barl + Location: 85,69 + Owner: USSR + Actor112: barl + Location: 72,55 + Owner: USSR + Actor113: brl3 + Location: 70,55 + Owner: USSR + Actor114: barl + Location: 74,55 + Owner: USSR + Actor115: barl + Location: 75,57 + Owner: USSR + Actor116: barl + Location: 75,56 + Owner: USSR + Actor117: brl3 + Location: 76,56 + Owner: USSR + Actor118: barl + Location: 75,54 + Owner: USSR + Actor119: brl3 + Location: 75,55 + Owner: USSR + Actor120: barl + Location: 69,56 + Owner: USSR + Actor121: brl3 + Location: 71,54 + Owner: USSR + Actor122: brl3 + Location: 69,55 + Owner: USSR + Actor123: barl + Location: 73,54 + Owner: USSR + Actor124: brl3 + Location: 73,53 + Owner: USSR + Actor125: brl3 + Location: 74,53 + Owner: USSR + Actor126: brl3 + Location: 75,53 + Owner: USSR + Actor127: v19 + Location: 70,56 + Owner: USSR + Actor128: v19 + Location: 70,54 + Owner: USSR + Actor129: v19 + Location: 72,54 + Owner: USSR + Actor130: v19 + Location: 74,54 + Owner: USSR + Actor131: brl3 + Location: 84,65 + Owner: USSR + Actor132: barl + Location: 85,67 + Owner: USSR + Actor133: v19 + Location: 83,65 + Owner: USSR + Actor134: barl + Location: 78,70 + Owner: USSR + Actor135: brl3 + Location: 77,71 + Owner: USSR + Actor136: barl + Location: 76,71 + Owner: USSR + Actor137: barl + Location: 78,71 + Owner: USSR + Actor138: barl + Location: 76,72 + Owner: USSR + Actor139: brl3 + Location: 78,68 + Owner: USSR + Actor140: brl3 + Location: 82,67 + Owner: USSR + Actor141: brl3 + Location: 85,64 + Owner: USSR + Actor141b: brl3 + Location: 85,64 + Owner: USSR + Actor142: v19 + Location: 87,66 + Owner: USSR + Actor143: v19 + Location: 85,68 + Owner: USSR + Actor144: v19 + Location: 82,66 + Owner: USSR + Actor145: v19 + Location: 85,63 + Owner: USSR + Actor146: v04 + Location: 54,52 + Owner: Neutral + Actor147: v07 + Location: 53,57 + Owner: Neutral + Actor148: brl3 + Location: 73,55 + Owner: USSR + Actor149: barl + Location: 71,56 + Owner: USSR + Actor150: barl + Location: 74,58 + Owner: USSR + Actor151: brl3 + Location: 59,60 + Owner: USSR + Actor152: brl3 + Location: 57,60 + Owner: USSR + Actor153: barl + Location: 59,59 + Owner: USSR + Actor154: v19 + Location: 59,61 + Owner: USSR + Actor155: v19 + Location: 57,61 + Owner: USSR + Actor156: brl3 + Location: 58,61 + Owner: USSR + Actor157: barl + Location: 56,59 + Owner: USSR + Actor162: brl3 + Location: 55,67 + Owner: USSR + Actor163: brl3 + Location: 54,67 + Owner: USSR + Actor164: barl + Location: 53,69 + Owner: USSR + Actor165: brl3 + Location: 58,70 + Owner: USSR + Actor166: brl3 + Location: 55,68 + Owner: USSR + Actor167: brl3 + Location: 53,68 + Owner: USSR + Actor168: brl3 + Location: 53,67 + Owner: USSR + Actor169: barl + Location: 54,70 + Owner: USSR + Actor170: v19 + Location: 54,68 + Owner: USSR + Actor179: brl3 + Location: 77,66 + Owner: USSR + Actor180: brl3 + Location: 77,67 + Owner: USSR + Actor181: barl + Location: 76,67 + Owner: USSR + Actor182: barl + Location: 77,68 + Owner: USSR + Actor183: barl + Location: 78,69 + Owner: USSR + Actor185: brl3 + Location: 57,70 + Owner: USSR + Actor186: barl + Location: 56,70 + Owner: USSR + Actor187: barl + Location: 55,69 + Owner: USSR + Actor188: brl3 + Location: 59,68 + Owner: USSR + Actor189: barl + Location: 59,69 + Owner: USSR + Actor191: brl3 + Location: 56,67 + Owner: USSR + Actor191b: brl3 + Location: 56,67 + Owner: USSR + Actor192: barl + Location: 56,68 + Owner: USSR + Actor194: brl3 + Location: 102,49 + Owner: USSR + Actor195: barl + Location: 101,49 + Owner: USSR + Actor196: brl3 + Location: 100,49 + Owner: USSR + Actor196b: brl3 + Location: 100,49 + Owner: USSR + Actor197: barl + Location: 100,48 + Owner: USSR + Actor198: barl + Location: 99,48 + Owner: USSR + Actor199: brl3 + Location: 102,48 + Owner: USSR + Actor200: brl3 + Location: 99,51 + Owner: USSR + Actor200b: brl3 + Location: 99,51 + Owner: USSR + Actor201: brl3 + Location: 98,51 + Owner: USSR + Actor202: v19 + Location: 101,48 + Owner: USSR + Actor203: brl3 + Location: 96,50 + Owner: USSR + Actor204: barl + Location: 97,51 + Owner: USSR + Actor205: v19 + Location: 95,50 + Owner: USSR + Actor206: v19 + Location: 94,51 + Owner: USSR + Actor207: brl3 + Location: 94,50 + Owner: USSR + Actor208: barl + Location: 93,51 + Owner: USSR + Actor209: v19 + Location: 102,67 + Owner: USSR + Actor210: v19 + Location: 101,69 + Owner: USSR + Actor211: v19 + Location: 100,71 + Owner: USSR + Actor212: brl3 + Location: 102,66 + Owner: USSR + Actor213: barl + Location: 102,68 + Owner: USSR + Actor214: brl3 + Location: 101,70 + Owner: USSR + Actor215: brl3 + Location: 99,72 + Owner: USSR + Actor216: brl3 + Location: 100,72 + Owner: USSR + Actor217: brl3 + Location: 101,72 + Owner: USSR + Actor218: barl + Location: 101,71 + Owner: USSR + Actor219: brl3 + Location: 99,66 + Owner: USSR + Actor220: barl + Location: 98,66 + Owner: USSR + Actor221: barl + Location: 100,67 + Owner: USSR + Actor222: brl3 + Location: 101,68 + Owner: USSR + Actor223: brl3 + Location: 101,66 + Owner: USSR + Actor224: brl3 + Location: 100,70 + Owner: USSR + Actor226: brl3 + Location: 88,64 + Owner: USSR + Actor227: barl + Location: 87,65 + Owner: USSR + Actor228: brl3 + Location: 86,66 + Owner: USSR + Actor229: brl3 + Location: 99,69 + Owner: USSR + Actor230: barl + Location: 98,68 + Owner: USSR + Actor231: brl3 + Location: 99,71 + Owner: USSR + Actor232: v19 + Location: 91,68 + Owner: USSR + Actor233: brl3 + Location: 91,69 + Owner: USSR + Actor233b: brl3 + Location: 91,69 + Owner: USSR + Actor234: v19 + Location: 84,51 + Owner: USSR + Actor235: v19 + Location: 87,51 + Owner: USSR + Actor236: v19 + Location: 86,52 + Owner: USSR + Actor237: brl3 + Location: 84,52 + Owner: USSR + Actor238: brl3 + Location: 85,51 + Owner: USSR + Actor239: brl3 + Location: 86,51 + Owner: USSR + Actor240: barl + Location: 88,52 + Owner: USSR + Actor240b: brl3 + Location: 87,52 + Owner: USSR + Actor241: brl3 + Location: 85,52 + Owner: USSR + Actor242: barl + Location: 85,53 + Owner: USSR + Actor243: barl + Location: 89,52 + Owner: USSR + Actor244: brl3 + Location: 68,66 + Owner: USSR + Actor245: barl + Location: 69,67 + Owner: USSR + Actor246: brl3 + Location: 69,66 + Owner: USSR + Actor247: barl + Location: 70,67 + Owner: USSR + Actor249: v2rl + Location: 76,66 + Owner: USSR + Health: 52 + Facing: 224 + Actor250: e1.autotarget + Location: 42,56 + Owner: USSR + Facing: 32 + SubCell: 3 + Actor251: e1.autotarget + Location: 51,53 + Owner: USSR + Facing: 64 + SubCell: 4 + Actor252: e1.autotarget + Location: 47,53 + Owner: USSR + Facing: 192 + SubCell: 3 + Actor253: e2 + Location: 79,66 + Owner: USSR + Facing: 160 + SubCell: 2 + Actor254: e2 + Location: 80,67 + Owner: USSR + Facing: 128 + SubCell: 1 + Actor255: e2 + Location: 79,68 + Owner: USSR + Facing: 96 + SubCell: 0 + Actor256: e2 + Location: 80,68 + Owner: USSR + Facing: 224 + SubCell: 1 + Actor259: e1.autotarget + Location: 54,55 + Owner: USSR + Facing: 32 + SubCell: 2 + Actor260: e1.autotarget + Location: 70,65 + Owner: USSR + Facing: 160 + SubCell: 4 + Actor261: e2.autotarget + Location: 71,65 + Owner: USSR + Facing: 32 + SubCell: 2 + Actor262: dog + Location: 69,63 + Owner: USSR + Facing: 160 + SubCell: 1 + Actor263: e1.autotarget + Location: 72,62 + Owner: USSR + Facing: 32 + SubCell: 1 + Actor264: e1.autotarget + Location: 74,62 + Owner: USSR + Facing: 192 + SubCell: 1 + Actor270: e1.autotarget + Location: 65,71 + Owner: USSR + Facing: 160 + SubCell: 0 + Actor271: e1.autotarget + Location: 64,70 + Owner: USSR + Facing: 160 + SubCell: 0 + Actor272: e1.autotarget + Location: 66,70 + Owner: USSR + Facing: 128 + SubCell: 4 + Actor277: e1 + Location: 78,77 + Owner: USSR + Facing: 160 + SubCell: 3 + Actor281: dog + Location: 85,81 + Owner: USSR + Facing: 224 + SubCell: 1 + Actor282: dog + Location: 96,73 + Owner: USSR + Facing: 160 + SubCell: 1 + Actor287: e1.autotarget + Location: 84,53 + Owner: USSR + SubCell: 4 + Actor288: e1.autotarget + Location: 90,53 + Owner: USSR + Facing: 160 + SubCell: 4 + Actor289: e1.autotarget + Location: 88,58 + Owner: USSR + SubCell: 4 + Actor290: e2.autotarget + Location: 89,58 + Owner: USSR + Facing: 96 + SubCell: 3 + Actor291: e2.autotarget + Location: 83,55 + Owner: USSR + Facing: 160 + SubCell: 3 + Actor292: e2.autotarget + Location: 98,58 + Owner: USSR + Facing: 160 + SubCell: 4 + Actor293: e2.autotarget + Location: 96,61 + Owner: USSR + Facing: 128 + SubCell: 4 + Actor294: e1.autotarget + Location: 93,58 + Owner: USSR + Facing: 64 + SubCell: 4 + Actor295: e1.autotarget + Location: 90,59 + Owner: USSR + Facing: 160 + SubCell: 4 + Actor296: e1.autotarget + Location: 97,66 + Owner: USSR + Facing: 32 + SubCell: 0 + Actor297: e1.autotarget + Location: 94,65 + Owner: USSR + SubCell: 4 + Actor298: e1.autotarget + Location: 96,65 + Owner: USSR + Facing: 192 + SubCell: 3 + Actor299: e2.autotarget + Location: 99,67 + Owner: USSR + Facing: 192 + SubCell: 0 + Actor300: e2.autotarget + Location: 99,68 + Owner: USSR + Facing: 128 + SubCell: 4 + Actor301: e2.autotarget + Location: 98,67 + Owner: USSR + Facing: 160 + SubCell: 1 + Actor302: e1.autotarget + Location: 87,61 + Owner: USSR + Facing: 160 + SubCell: 2 + Actor309: fenc + Location: 72,63 + Owner: USSR + Actor311: fenc + Location: 69,57 + Owner: USSR + Actor307: fenc + Location: 83,50 + Owner: USSR + Actor304: fenc + Location: 73,63 + Owner: USSR + Actor306: fenc + Location: 71,63 + Owner: USSR + Actor312: fenc + Location: 71,62 + Owner: USSR + Actor313: fenc + Location: 70,62 + Owner: USSR + Actor314: fenc + Location: 68,57 + Owner: USSR + Actor315: fenc + Location: 70,57 + Owner: USSR + Actor316: fenc + Location: 71,57 + Owner: USSR + Actor317: fenc + Location: 76,57 + Owner: USSR + Actor318: fenc + Location: 76,58 + Owner: USSR + Actor319: fenc + Location: 75,58 + Owner: USSR + Actor320: fenc + Location: 75,59 + Owner: USSR + Actor321: fenc + Location: 60,68 + Owner: USSR + Actor322: fenc + Location: 61,68 + Owner: USSR + Actor323: fenc + Location: 61,69 + Owner: USSR + Actor324: fenc + Location: 61,70 + Owner: USSR + Actor325: fenc + Location: 61,71 + Owner: USSR + Actor326: fenc + Location: 61,72 + Owner: USSR + Actor327: fenc + Location: 61,73 + Owner: USSR + Actor328: fenc + Location: 61,74 + Owner: USSR + Actor329: fenc + Location: 60,74 + Owner: USSR + Actor330: fenc + Location: 59,74 + Owner: USSR + Actor331: fenc + Location: 59,75 + Owner: USSR + Actor332: fenc + Location: 58,75 + Owner: USSR + Actor333: fenc + Location: 57,75 + Owner: USSR + Actor334: fenc + Location: 56,75 + Owner: USSR + Actor335: fenc + Location: 55,75 + Owner: USSR + Actor336: fenc + Location: 54,75 + Owner: USSR + Actor337: fenc + Location: 53,75 + Owner: USSR + Actor338: fenc + Location: 52,75 + Owner: USSR + Actor339: fenc + Location: 51,75 + Owner: USSR + Actor340: fenc + Location: 50,75 + Owner: USSR + Actor342: fenc + Location: 50,67 + Owner: USSR + Actor341: fenc + Location: 50,68 + Owner: USSR + Actor343: fenc + Location: 50,72 + Owner: USSR + Actor344: fenc + Location: 50,73 + Owner: USSR + Actor345: fenc + Location: 50,74 + Owner: USSR + Actor346: fenc + Location: 50,66 + Owner: USSR + Actor347: fenc + Location: 51,66 + Owner: USSR + Actor348: fenc + Location: 52,66 + Owner: USSR + Actor349: fenc + Location: 53,66 + Owner: USSR + Actor350: fenc + Location: 54,66 + Owner: USSR + Actor351: fenc + Location: 55,66 + Owner: USSR + Actor352: fenc + Location: 56,66 + Owner: USSR + Actor353: fenc + Location: 57,66 + Owner: USSR + Actor354: fenc + Location: 58,67 + Owner: USSR + Actor355: fenc + Location: 58,68 + Owner: USSR + Actor356: fenc + Location: 83,51 + Owner: USSR + Actor357: fenc + Location: 83,52 + Owner: USSR + Actor358: fenc + Location: 83,53 + Owner: USSR + Actor359: fenc + Location: 84,50 + Owner: USSR + Actor360: fenc + Location: 85,50 + Owner: USSR + Actor361: fenc + Location: 86,50 + Owner: USSR + Actor362: fenc + Location: 87,50 + Owner: USSR + Actor363: fenc + Location: 103,60 + Owner: USSR + Actor364: fenc + Location: 103,59 + Owner: USSR + Actor365: fenc + Location: 103,58 + Owner: USSR + Actor366: fenc + Location: 103,57 + Owner: USSR + Actor367: fenc + Location: 102,57 + Owner: USSR + Actor368: fenc + Location: 101,57 + Owner: USSR + Actor369: fenc + Location: 100,57 + Owner: USSR + USSRBarracks1: barr + Location: 51,67 + Owner: USSR + USSRBarracks2: barr + Location: 78,75 + Owner: USSR + USSRWarFactory: weap + Location: 83,73 + Owner: USSR + USSRKennel: kenn + Location: 81,77 + Owner: USSR + USSRAdvancedPowerPlant: apwr + Location: 81,81 + Owner: USSR + USSRRadarDome: dome + Location: 78,80 + Owner: USSR + USSRConstructionYard1: fact + Location: 55,71 + Owner: USSR + USSRConstructionYard2: fact + Location: 88,80 + Owner: USSR + USSRPowerPlant1: powr + Location: 53,72 + Owner: USSR + USSRPowerPlant2: powr + Location: 51,72 + Owner: USSR + USSRPowerPlant3: powr + Location: 90,77 + Owner: USSR + USSRPowerPlant4: powr + Location: 92,76 + Owner: USSR + USSRFlameTower1: ftur + Location: 50,69 + Owner: USSR + USSRFlameTower2: ftur + Location: 100,69 + Owner: USSR + USSRTechCenter: miss + Location: 58,71 + Owner: USSR + USSRForwardCommand: fcom + Location: 79,69 + Owner: USSR + USSRBaseGuard1: e1 + Location: 49,66 + Owner: USSR + Facing: 96 + SubCell: 0 + USSRBaseGuard2: e1 + Location: 48,67 + Owner: USSR + Facing: 224 + SubCell: 0 + USSRBaseGuard3: e2 + Location: 48,70 + Owner: USSR + SubCell: 4 + USSRBaseGuard4: e2 + Location: 49,69 + Owner: USSR + Facing: 160 + SubCell: 0 + USSRBaseGuard5: e1 + Location: 51,69 + Owner: USSR + Facing: 160 + SubCell: 3 + USSRBaseGuard6: e2 + Location: 49,72 + Owner: USSR + Facing: 128 + SubCell: 2 + USSRBaseGuard7: e1 + Location: 53,70 + Owner: USSR + Facing: 160 + SubCell: 1 + USSRBaseGuard8: e1 + Location: 56,69 + Owner: USSR + Facing: 96 + SubCell: 2 + USSRBaseGuard10: e2 + Location: 77,80 + Owner: USSR + Facing: 64 + SubCell: 0 + USSRBaseGuard11: e1 + Location: 78,77 + Owner: USSR + Facing: 128 + SubCell: 4 + USSRBaseGuard12: e1 + Location: 79,77 + Owner: USSR + Facing: 96 + SubCell: 4 + USSRBaseGuard13: e2 + Location: 80,76 + Owner: USSR + SubCell: 0 + USSRBaseGuard14: dog + Location: 81,76 + Owner: USSR + Facing: 160 + SubCell: 3 + PGuard1: e1 + Location: 58,59 + Owner: USSR + Facing: 224 + SubCell: 3 + PGuard2: e1 + Location: 57,68 + Owner: USSR + Facing: 128 + SubCell: 4 + PrisonedMedi1: medi + Location: 58,60 + Owner: Greece + SubCell: 0 + PrisonedMedi2: medi + Location: 57,67 + Owner: Greece + Facing: 128 + SubCell: 0 + PrisonedEngi: hacke6 + Location: 57,67 + Owner: Greece + Facing: 96 + SubCell: 2 + Jail1: prison + Location: 58,60 + Owner: Greece + Jail2: prison + Location: 57,67 + Owner: Greece + ExplosiveBarrel: brl3 + Location: 102,49 + Owner: USSR + AlliedUnitsEntry: waypoint + Location: 60,48 + Owner: Neutral + TanyaWaypoint: waypoint + Location: 61,50 + Owner: Neutral + ArtilleryWaypoint: waypoint + Location: 62,49 + Owner: Neutral + WaterTransportEntry: waypoint + Location: 36,48 + Owner: Neutral + WaterTransportLoadout: waypoint + Location: 37,58 + Owner: Neutral + WaterTransportExit: waypoint + Location: 35,58 + Owner: Neutral + BaseCameraWaypoint: waypoint + Location: 55,70 + Owner: Neutral + LargeCameraWaypoint: waypoint + Location: 71,65 + Owner: Neutral + ParadropLZ: waypoint + Location: 73,57 + Owner: Neutral + USSRReinforcementsCameraWaypoint: waypoint + Location: 101,52 + Owner: Neutral + USSRReinforcementsEntryWaypoint: waypoint + Location: 106,48 + Owner: Neutral + USSRReinforcementsRallyWaypoint1: waypoint + Location: 104,49 + Owner: Neutral + USSRReinforcementsRallyWaypoint2: waypoint + Location: 96,56 + Owner: Neutral + USSRMoneyCrateSpawn: waypoint + Location: 59,72 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ura/maps/allies-03a/rules.yaml b/mods/ura/maps/allies-03a/rules.yaml new file mode 100644 index 0000000..4c6f6c6 --- /dev/null +++ b/mods/ura/maps/allies-03a/rules.yaml @@ -0,0 +1,219 @@ +World: + LuaScript: + Scripts: allies03a.lua + MissionData: + Briefing: LANDCOM 16 HQS.\nTOP SECRET.\nTO: FIELD COMMANDER A9\n\nINTELLIGENCE RECON SHOWS HEAVY\nSOVIET MOVEMENT IN YOUR AREA.\nNEARBY BRIDGES ARE KEY TO SOVIET\nADVANCEMENT. DESTROY ALL BRIDGES\nASAP. TANYA WILL ASSIST. KEEP HER\nALIVE AT ALL COSTS.\n\nCONFIRMATION CODE 1612.\n\nTRANSMISSION ENDS.\n + StartVideo: brdgtilt.vqa + WinVideo: toofar.vqa + LossVideo: sovtstar.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + Default: easy + +^Building: + Capturable: + CaptureThreshold: 25 + +^TechBuilding: + Capturable: + Types: ~disabled + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E2,E2 + +HACKE6: + Inherits: E6 + -RepairsBridges: + -ExternalCaptures: + Captures: + CaptureTypes: building + Targetable: + RequiresCondition: !jail + Targetable@PRISONER: + TargetTypes: Prisoner + RenderSprites: + Image: E6 + ExternalCondition@JAIL: + Condition: jail + +MEDI: + Targetable: + RequiresCondition: !jail + Targetable@PRISONER: + TargetTypes: Prisoner + ExternalCondition@JAIL: + Condition: jail + +PRISON: + HiddenUnderShroud: + Type: CenterPosition + Immobile: + OccupiesSpace: false + ProximityExternalCondition: + Condition: jail + Range: 1c0 + +CAMERA: + RevealsShroud: + Range: 8c7 + +CAMERA.VeryLarge: + Inherits: CAMERA + RevealsShroud: + Range: 40c0 + +MONEYCRATE: + Tooltip: + Name: Crate + WithCrateBody: + RenderSprites: + Image: scrate + +E1.Autotarget: + Inherits: E1 + Buildable: + Prerequisites: ~disabled + RevealsShroud: + Range: 8c0 + AutoTarget: + ScanRadius: 7 + RenderSprites: + Image: E1 + +E2.Autotarget: + Inherits: E2 + Buildable: + Prerequisites: ~disabled + RevealsShroud: + Range: 8c0 + AutoTarget: + ScanRadius: 7 + RenderSprites: + Image: E2 + +DOG: + RevealsShroud: + Range: 9c0 + AutoTarget: + ScanRadius: 8 + +DOME: + Buildable: + Prerequisites: ~disabled + +WEAP: + Buildable: + Prerequisites: ~disabled + +FIX: + Buildable: + Prerequisites: ~disabled + +APC: + Buildable: + Prerequisites: ~disabled + +V2RL: + Buildable: + Prerequisites: ~disabled + +2TNK: + Buildable: + Prerequisites: ~disabled + +3TNK: + Buildable: + Prerequisites: ~disabled + +4TNK: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +TTNK: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +DTRK: + Buildable: + Prerequisites: ~disabled + +QTNK: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +SPEN: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +TSLA: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +APWR: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +KENN: + Buildable: + Prerequisites: ~disabled + +E3: + Buildable: + Prerequisites: ~disabled + +E4: + Buildable: + Prerequisites: ~disabled + +E6: + Buildable: + Prerequisites: ~disabled + +SNIPER: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +SHOK: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/allies-03a/weapons.yaml b/mods/ura/maps/allies-03a/weapons.yaml new file mode 100644 index 0000000..a8004c0 --- /dev/null +++ b/mods/ura/maps/allies-03a/weapons.yaml @@ -0,0 +1,3 @@ +BarrelExplode: + Warhead@1Dam: + ValidTargets: Ground, Prisoner diff --git a/mods/ura/maps/allies-03b/allies03b.lua b/mods/ura/maps/allies-03b/allies03b.lua new file mode 100644 index 0000000..953e6de --- /dev/null +++ b/mods/ura/maps/allies-03b/allies03b.lua @@ -0,0 +1,389 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +ProductionUnits = { "e1", "e1", "e2" } +ProductionBuildings = { USSRBarracks1, USSRBarracks2, USSRBarracks3 } +FirstUSSRBase = { USSRFlameTower1, USSRFlameTower2, USSRFlameTower3, USSRBarracks1, PGuard1, PGuard2, PGuard3, PGuard4, PGuard5 } +SecondUSSRBase = { USSRFlameTower4, USSRFlameTower5, USSRFlameTower6, USSRRadarDome, USSRBarracks2, USSRPowerPlant, USSRSubPen, USSRBaseGuard1, USSRBaseGuard2, uSSRBaseGuard3, MediGuard } +Prisoners = { PrisonedEngi1, PrisonedEngi2, PrisonedEngi3, PrisonedEngi4 } +PGuards = { PGuard1, PGuard2, PGuard3, PGuard4, PGuard5 } +AlliedIslandReinforcements = { "1tnk", "1tnk" } +USSRTankReinforcements = { "3tnk", "3tnk", "3tnk" } +USSRTankReinforcementsWaypoints = { USSRReinforcementsEntryWaypoint.Location, USSRReinforcementsCameraWaypoint.Location + CVec.New(1, -1), USSRReinforcementsRallyWaypoint.Location } +TrukTriggerArea = { CPos.New(51, 89), CPos.New(52, 89), CPos.New(53, 89), CPos.New(54, 89), CPos.New(55, 89), CPos.New(56, 89), CPos.New(57, 89) } +FreeMediTriggerArea = { CPos.New(56, 93), CPos.New(56, 94), CPos.New(57, 94), CPos.New(57, 95), CPos.New(57, 96), CPos.New(57, 97), CPos.New(57, 98), CPos.New(57, 99), CPos.New(57, 100), CPos.New(57, 101), CPos.New(57, 102) } +CameraTriggerArea = { CPos.New(73, 88), CPos.New(73, 87), CPos.New(76, 92), CPos.New(76, 93), CPos.New(76, 94) } +BeachTriggerArea = { CPos.New(111, 36), CPos.New(112, 36), CPos.New(112, 37), CPos.New(113, 37), CPos.New(113, 38), CPos.New(114, 38), CPos.New(114, 39), CPos.New(115, 39), CPos.New(116, 39), CPos.New(116, 40), CPos.New(117, 40), CPos.New(118, 40), CPos.New(119, 40), CPos.New(119, 41) } +ParadropTriggerArea = { CPos.New(81, 66), CPos.New(82, 66), CPos.New(83, 66), CPos.New(84, 66), CPos.New(85, 66), CPos.New(86, 66), CPos.New(87, 66), CPos.New(93, 64), CPos.New(94, 64), CPos.New(94, 63), CPos.New(95, 63), CPos.New(95, 62), CPos.New(96, 62), CPos.New(96, 61), CPos.New(97, 61), CPos.New(97, 60), CPos.New(98, 60), CPos.New(99, 60), CPos.New(100, 60), CPos.New(101, 60), CPos.New(102, 60), CPos.New(103, 60) } +ReinforcementsTriggerArea = { CPos.New(57, 46), CPos.New(58, 46), CPos.New(66, 35), CPos.New(65, 35), CPos.New(65, 36), CPos.New(64, 36), CPos.New(64, 37), CPos.New(64, 38), CPos.New(64, 39), CPos.New(64, 40), CPos.New(64, 41), CPos.New(63, 41), CPos.New(63, 42), CPos.New(63, 43), CPos.New(62, 43), CPos.New(62, 44) } +Barracks3TriggerArea = { CPos.New(69, 50), CPos.New(69, 51), CPos.New(69, 52), CPos.New(69, 53), CPos.New(69, 54), CPos.New(61, 45), CPos.New(62, 45), CPos.New(62, 46), CPos.New(62, 47), CPos.New(62, 48), CPos.New(63, 48), CPos.New(57, 46), CPos.New(58, 46) } +JeepTriggerArea = { CPos.New(75, 76), CPos.New(76, 76), CPos.New(77, 76), CPos.New(78, 76), CPos.New(79, 76), CPos.New(80, 76), CPos.New(81, 76), CPos.New(82, 76), CPos.New(91, 78), CPos.New(92, 78), CPos.New(93, 78), CPos.New(95, 84), CPos.New(96, 84), CPos.New(97, 84), CPos.New(98, 84), CPos.New(99, 84), CPos.New(100, 84) } +JeepBarrels = { JeepBarrel1, JeepBarrel2, JeepBarrel3, JeepBarrel4 } +GuardTanks = { Heavy1, Heavy2, Heavy3 } +CheckpointGuards = { USSRCheckpointGuard1, USSRCheckpointGuard2 } +CheckpointGuardWaypoints = { CheckpointGuardWaypoint1, CheckpointGuardWaypoint2 } + +if Map.LobbyOption("difficulty") == "easy" then + TanyaType = "e7" +else + TanyaType = "e7.noautotarget" +end + +IdleHunt = function(actor) + Trigger.OnIdle(actor, function(a) + if a.IsInWorld then + a.Hunt() + end + end) +end + +Tick = function() + if TeleportJeepCamera and Jeep.IsInWorld then + JeepCamera.Teleport(Jeep.Location) + end +end + +ProduceUnits = function(factory, count) + if ussr.IsProducing("e1") then + Trigger.AfterDelay(DateTime.Seconds(5), function() ProduceUnits(factory, count) end) + return + end + + local units = { } + for i = 0, count, 1 do + units[i] = Utils.Random(ProductionUnits) + end + + if not factory.IsDead then + factory.IsPrimaryBuilding = true + ussr.Build(units, function(soldiers) + Utils.Do(soldiers, function(unit) IdleHunt(unit) end) + end) + end +end + +SetupAlliedUnits = function() + Tanya = Actor.Create(TanyaType, true, { Owner = player, Location = TanyaWaypoint.Location, Facing = 128 }) + + if TanyaType == "e7.noautotarget" then + Trigger.AfterDelay(DateTime.Seconds(2), function() + Media.DisplayMessage("According to the rules of engagement I need your explicit orders to fire, Commander!", "Tanya") + end) + end + + Camera.Position = Tanya.CenterPosition + + InsertionHeli.Wait(DateTime.Seconds(2)) + InsertionHeli.Move(InsertionHeliExit.Location) + InsertionHeli.Destroy() + + Trigger.OnKilled(Tanya, function() player.MarkFailedObjective(TanyaSurvive) end) +end + +SetupTopRightIsland = function() + player.MarkCompletedObjective(FindAllies) + Media.PlaySpeechNotification(player, "AlliedReinforcementsArrived") + Reinforcements.Reinforce(player, AlliedIslandReinforcements, { AlliedIslandReinforcementsEntry.Location, IslandParadropReinforcementsDropzone.Location }) + SendUSSRParadrops(128 + 52, IslandParadropReinforcementsDropzone) +end + +SendUSSRParadrops = function(facing, dropzone) + local paraproxy = Actor.Create("powerproxy.paratroopers", false, { Owner = ussr }) + + local units = paraproxy.SendParatroopers(dropzone.CenterPosition, false, facing) + Utils.Do(units, function(unit) + IdleHunt(unit) + end) + + paraproxy.Destroy() +end + +SendUSSRTankReinforcements = function() + local camera = Actor.Create("camera", true, { Owner = player, Location = USSRReinforcementsCameraWaypoint.Location }) + local ussrTanks = Reinforcements.Reinforce(ussr, USSRTankReinforcements, USSRTankReinforcementsWaypoints) + Trigger.OnAllRemovedFromWorld(ussrTanks, function() + Trigger.AfterDelay(DateTime.Seconds(3), function() + if not camera.IsDead then + camera.Destroy() + end + end) + end) +end + +JeepCheckpointMove = function() + JeepCamera = Actor.Create("camera.jeep", true, { Owner = player }) + TeleportJeepCamera = true + + Trigger.OnIdle(Jeep, function() + if Jeep.Location == JeepCheckpoint.Location then + Trigger.ClearAll(Jeep) + for i = 1, 2, 1 do + if not CheckpointGuards[i].IsDead then + CheckpointGuards[i].Move(CheckpointGuardWaypoints[i].Location) + end + end + else + Jeep.Move(JeepCheckpoint.Location) + end + end) +end + +JeepSuicideMove = function() + if not JeepCamera then + JeepCamera = Actor.Create("camera.jeep", true, { Owner = player }) + TeleportJeepCamera = true + end + + Trigger.OnIdle(Jeep, function() + if Jeep.Location == JeepSuicideWaypoint.Location then + Trigger.ClearAll(Jeep) + TeleportJeepCamera = false + Jeep.Kill() + if not USSRFlameTower4.IsDead then USSRFlameTower4.Kill() end + Trigger.AfterDelay(DateTime.Seconds(1), JeepCamera.Destroy) + else + Jeep.Move(JeepSuicideWaypoint.Location) + end + end) +end + +AlertFirstBase = function() + if not FirstBaseAlert then + FirstBaseAlert = true + Utils.Do(FirstUSSRBase, function(unit) + if unit.HasProperty("Move") then + IdleHunt(unit) + end + end) + for i = 0, 2 do + Trigger.AfterDelay(DateTime.Seconds(i), function() + Media.PlaySoundNotification(player, "AlertBuzzer") + end) + end + ProduceUnits(ProductionBuildings[1], Utils.RandomInteger(4, 8)) + end +end + +InitPlayers = function() + player = Player.GetPlayer("Greece") + ussr = Player.GetPlayer("USSR") + + ussr.Cash = 10000 +end + +InitObjectives = function() + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + KillBridges = player.AddPrimaryObjective("Destroy all bridges.") + TanyaSurvive = player.AddPrimaryObjective("Tanya must survive.") + FindAllies = player.AddSecondaryObjective("Find our lost tanks.") + FreePrisoners = player.AddSecondaryObjective("Free all Allied soldiers and keep them alive.") + ussr.AddPrimaryObjective("Bridges must not be destroyed.") + + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(player, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(player, "Lose") + end) + end) + Trigger.OnPlayerWon(player, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(player, "Win") + end) + end) +end + +InitTriggers = function() + Utils.Do(ussr.GetGroundAttackers(), function(unit) + Trigger.OnDamaged(unit, function() IdleHunt(unit) end) + end) + + Trigger.OnAnyKilled(Prisoners, function() player.MarkFailedObjective(FreePrisoners) end) + Trigger.OnKilled(PrisonedMedi, function() player.MarkFailedObjective(FreePrisoners) end) + Trigger.OnKilled(MediHideaway, function() + if not MediFreed then + MediFreed = true + player.MarkFailedObjective(FreePrisoners) + end + end) + + Trigger.OnKilled(ExplosiveBarrel, function() + if not ExplodingBridge.IsDead then ExplodingBridge.Kill() end + reinforcementsTriggered = true + Trigger.AfterDelay(DateTime.Seconds(1), SendUSSRTankReinforcements) + end) + + Trigger.OnKilled(ExplosiveBarrel2, function() + if not USSRFlameTower3.IsDead then USSRFlameTower3.Kill() end + end) + + Trigger.OnAnyKilled(JeepBarrels, function() + Utils.Do(JeepBarrels, function(barrel) + if not barrel.IsDead then barrel.Kill() end + end) + Utils.Do(GuardTanks, function(tank) + if not tank.IsDead then tank.Kill() end + end) + + jeepTriggered = true + JeepSuicideMove() + end) + + Utils.Do(FirstUSSRBase, function(unit) + Trigger.OnDamaged(unit, function() + if not baseCamera then baseCamera = Actor.Create("camera", true, { Owner = player, Location = BaseCameraWaypoint.Location }) end + AlertFirstBase() + end) + end) + Trigger.OnAllRemovedFromWorld(FirstUSSRBase, function() + if baseCamera then + baseCamera.Destroy() + end + end) + + Trigger.OnDamaged(USSRBarracks3, function() + if not Barracks3Producing then + Barracks3Producing = true + ProduceUnits(ProductionBuildings[3], Utils.RandomInteger(2, 5)) + end + end) + + Trigger.OnCapture(USSRRadarDome, function() + largeCameraA = Actor.Create("camera.verylarge", true, { Owner = player, Location = LargeCameraWaypoint1.Location }) + largeCameraB = Actor.Create("camera.verylarge", true, { Owner = player, Location = LargeCameraWaypoint2.Location }) + largeCameraC = Actor.Create("camera.verylarge", true, { Owner = player, Location = LargeCameraWaypoint3.Location }) + end) + Trigger.OnRemovedFromWorld(USSRRadarDome, function() + if largeCameraA and largeCameraA.IsInWorld then largeCameraA.Destroy() end + if largeCameraB and largeCameraB.IsInWorld then largeCameraB.Destroy() end + if largeCameraC and largeCameraC.IsInWorld then largeCameraC.Destroy() end + end) + + Trigger.OnEnteredFootprint(TrukTriggerArea, function(a, id) + if a.Owner == player and not trukTriggered then + trukTriggered = true + Trigger.RemoveFootprintTrigger(id) + + if USSRTruk.IsDead then + return + end + + Trigger.OnIdle(USSRTruk, function() + if USSRTruk.Location == BaseCameraWaypoint.Location then + Trigger.ClearAll(USSRTruk) + + local driver = Actor.Create("e1", true, { Owner = ussr, Location = USSRTruk.Location }) + if not PGuard5.IsDead then + driver.AttackMove(PGuard5.Location) + else + driver.Scatter() + end + + FirstUSSRBase[#FirstUSSRBase + 1] = driver + Trigger.AfterDelay(DateTime.Seconds(3), AlertFirstBase) + else + USSRTruk.Move(BaseCameraWaypoint.Location) + end + end) + Trigger.OnEnteredProximityTrigger(BaseCameraWaypoint.CenterPosition, WDist.New(7 * 1024), function(a, id) + if a.Type == "truk" and not baseCamera then + Trigger.RemoveProximityTrigger(id) + baseCamera = Actor.Create("camera", true, { Owner = player, Location = BaseCameraWaypoint.Location }) + end + end) + end + end) + Trigger.OnEnteredFootprint(FreeMediTriggerArea, function(a, id) + if a.Owner == player and not MediFreed then + MediFreed = true + Trigger.RemoveFootprintTrigger(id) + Reinforcements.Reinforce(player, { "medi" }, { MediSpawnpoint.Location, MediRallypoint.Location }) + end + end) + Trigger.OnEnteredFootprint(CameraTriggerArea, function(a, id) + if a.Owner == player and not baseCamera then + Trigger.RemoveFootprintTrigger(id) + baseCamera = Actor.Create("camera", true, { Owner = player, Location = BaseCameraWaypoint.Location }) + end + end) + Trigger.OnEnteredFootprint(BeachTriggerArea, function(a, id) + if a.Owner == player and not beachTransportTriggered then + beachTransportTriggered = true + Trigger.RemoveFootprintTrigger(id) + SetupTopRightIsland() + end + end) + Trigger.OnEnteredFootprint(ParadropTriggerArea, function(a, id) + if a.Owner == player and a.Type ~= "jeep.mission" and not paradropsTriggered then + paradropsTriggered = true + Trigger.RemoveFootprintTrigger(id) + SendUSSRParadrops(54, ParadropReinforcementsDropzone) + end + end) + Trigger.OnEnteredFootprint(ReinforcementsTriggerArea, function(a, id) + if a.Owner == player and not reinforcementsTriggered then + reinforcementsTriggered = true + Trigger.RemoveFootprintTrigger(id) + Trigger.AfterDelay(DateTime.Seconds(1), SendUSSRTankReinforcements) + end + end) + Trigger.OnEnteredFootprint(Barracks3TriggerArea, function(a, id) + if a.Owner == player and not Barracks3Producing then + Barracks3Producing = true + Trigger.RemoveFootprintTrigger(id) + ProduceUnits(ProductionBuildings[3], Utils.RandomInteger(2, 5)) + end + end) + Trigger.OnEnteredFootprint(JeepTriggerArea, function(a, id) + if a.Owner == player and not jeepTriggered then + jeepTriggered = true + Trigger.RemoveFootprintTrigger(id) + JeepCheckpointMove() + end + end) + + -- The engineers need to leave the enemy base to count as 'freed' + Trigger.OnExitedProximityTrigger(BaseCameraWaypoint.CenterPosition, WDist.New(7 * 1024), function(a, id) + if a.Type == "hacke6" and not EngisFreed then + EngisFreed = true + Trigger.RemoveProximityTrigger(id) + end + end) + + Trigger.AfterDelay(0, function() + local bridges = Utils.Where(Map.ActorsInWorld, function(actor) return actor.Type == "bridge1" or actor.Type == "bridge2" end) + ExplodingBridge = bridges[1] + + Trigger.OnAllKilled(bridges, function() + player.MarkCompletedObjective(KillBridges) + player.MarkCompletedObjective(TanyaSurvive) + + -- The medic is freed once his guard is dead + if MediFreed and MediGuard.IsDead and EngisFreed then + player.MarkCompletedObjective(FreePrisoners) + end + end) + end) +end + +WorldLoaded = function() + + InitPlayers() + + InitObjectives() + InitTriggers() + SetupAlliedUnits() +end diff --git a/mods/ura/maps/allies-03b/map.bin b/mods/ura/maps/allies-03b/map.bin new file mode 100644 index 0000000..03718af Binary files /dev/null and b/mods/ura/maps/allies-03b/map.bin differ diff --git a/mods/ura/maps/allies-03b/map.png b/mods/ura/maps/allies-03b/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/allies-03b/map.png differ diff --git a/mods/ura/maps/allies-03b/map.yaml b/mods/ura/maps/allies-03b/map.yaml new file mode 100644 index 0000000..ad847ad --- /dev/null +++ b/mods/ura/maps/allies-03b/map.yaml @@ -0,0 +1,1211 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 03b: Dead End + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 46,31,75,75 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FE1100 + Enemies: Greece + PlayerReference@Greece: + Name: Greece + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: E2E6F5 + Enemies: USSR + PlayerReference@England: + Name: England + Color: A1EF8C + Faction: allies + +Actors: + Actor0: cycl + Location: 49,38 + Owner: Neutral + Actor1: cycl + Location: 50,38 + Owner: Neutral + Actor2: cycl + Location: 51,38 + Owner: Neutral + Actor3: cycl + Location: 49,39 + Owner: Neutral + Actor4: cycl + Location: 51,39 + Owner: Neutral + Actor5: cycl + Location: 49,40 + Owner: Neutral + Actor6: cycl + Location: 50,40 + Owner: Neutral + Actor7: cycl + Location: 51,40 + Owner: Neutral + Actor8: cycl + Location: 59,40 + Owner: Neutral + Actor9: cycl + Location: 60,40 + Owner: Neutral + Actor10: cycl + Location: 61,40 + Owner: Neutral + Actor11: cycl + Location: 62,40 + Owner: Neutral + Actor12: cycl + Location: 59,41 + Owner: Neutral + Actor13: cycl + Location: 62,41 + Owner: Neutral + Actor14: cycl + Location: 59,42 + Owner: Neutral + Actor15: cycl + Location: 60,42 + Owner: Neutral + Actor16: cycl + Location: 61,42 + Owner: Neutral + Actor17: cycl + Location: 62,42 + Owner: Neutral + Actor18: sbag + Location: 94,66 + Owner: Neutral + Actor19: sbag + Location: 100,66 + Owner: Neutral + Actor20: sbag + Location: 94,67 + Owner: Neutral + Actor21: sbag + Location: 95,67 + Owner: Neutral + Actor22: sbag + Location: 96,67 + Owner: Neutral + Actor23: sbag + Location: 98,67 + Owner: Neutral + Actor24: sbag + Location: 99,67 + Owner: Neutral + Actor25: sbag + Location: 100,67 + Owner: Neutral + Actor26: sbag + Location: 96,68 + Owner: Neutral + Actor27: sbag + Location: 98,68 + Owner: Neutral + Actor28: brik + Location: 92,85 + Owner: Neutral + Actor29: brik + Location: 93,85 + Owner: Neutral + Actor30: brik + Location: 92,86 + Owner: Neutral + Actor31: brik + Location: 93,86 + Owner: Neutral + Actor32: brik + Location: 92,87 + Owner: Neutral + Actor33: brik + Location: 93,87 + Owner: Neutral + Actor34: t02 + Location: 93,79 + Owner: Neutral + Actor35: tc02 + Location: 90,87 + Owner: Neutral + Actor36: t01 + Location: 90,78 + Owner: Neutral + Actor37: tc04 + Location: 96,91 + Owner: Neutral + Actor38: tc01 + Location: 95,89 + Owner: Neutral + Actor39: tc02 + Location: 88,92 + Owner: Neutral + Actor40: tc01 + Location: 85,91 + Owner: Neutral + Actor41: tc05 + Location: 95,99 + Owner: Neutral + Actor42: t08 + Location: 95,101 + Owner: Neutral + Actor43: tc04 + Location: 78,94 + Owner: Neutral + Actor44: tc01 + Location: 67,82 + Owner: Neutral + Actor45: tc02 + Location: 67,86 + Owner: Neutral + Actor46: t01 + Location: 96,56 + Owner: Neutral + Actor47: tc02 + Location: 72,73 + Owner: Neutral + Actor48: tc04 + Location: 77,69 + Owner: Neutral + Actor49: tc01 + Location: 72,66 + Owner: Neutral + Actor50: t08 + Location: 73,68 + Owner: Neutral + Actor51: t01 + Location: 106,49 + Owner: Neutral + Actor52: tc01 + Location: 104,43 + Owner: Neutral + Actor53: tc02 + Location: 86,50 + Owner: Neutral + Actor54: tc03 + Location: 95,76 + Owner: Neutral + Actor55: tc02 + Location: 104,74 + Owner: Neutral + Actor56: tc03 + Location: 84,44 + Owner: Neutral + Actor57: t01 + Location: 100,67 + Owner: Neutral + Actor58: tc01 + Location: 90,66 + Owner: Neutral + Actor59: tc05 + Location: 72,77 + Owner: Neutral + Actor60: tc02 + Location: 73,63 + Owner: Neutral + Actor61: tc02 + Location: 99,57 + Owner: Neutral + Actor62: tc03 + Location: 86,57 + Owner: Neutral + Actor63: tc04 + Location: 82,61 + Owner: Neutral + Actor64: tc01 + Location: 77,67 + Owner: Neutral + Actor65: tc04 + Location: 62,98 + Owner: Neutral + Actor66: tc01 + Location: 68,96 + Owner: Neutral + Actor67: tc02 + Location: 64,94 + Owner: Neutral + Actor68: tc02 + Location: 55,91 + Owner: Neutral + Actor69: tc05 + Location: 51,95 + Owner: Neutral + Actor70: tc04 + Location: 50,90 + Owner: Neutral + Actor71: t15 + Location: 59,96 + Owner: Neutral + Actor72: tc05 + Location: 62,31 + Owner: Neutral + Actor73: tc02 + Location: 54,35 + Owner: Neutral + Actor74: tc01 + Location: 50,40 + Owner: Neutral + Actor75: tc04 + Location: 47,32 + Owner: Neutral + Actor76: tc05 + Location: 46,48 + Owner: Neutral + Actor77: tc03 + Location: 50,46 + Owner: Neutral + Actor78: tc02 + Location: 50,51 + Owner: Neutral + Actor79: tc01 + Location: 62,36 + Owner: Neutral + Actor80: t13 + Location: 56,41 + Owner: Neutral + Actor81: t15 + Location: 51,87 + Owner: Neutral + Actor82: t13 + Location: 104,95 + Owner: Neutral + Actor83: tc02 + Location: 102,93 + Owner: Neutral + Actor85: tc01 + Location: 89,45 + Owner: Neutral + Actor86: tc01 + Location: 75,34 + Owner: Neutral + Actor87: t01 + Location: 84,34 + Owner: Neutral + Actor88: tc05 + Location: 102,33 + Owner: Neutral + Actor89: tc04 + Location: 105,31 + Owner: Neutral + Actor90: tc02 + Location: 108,34 + Owner: Neutral + Actor91: tc01 + Location: 119,37 + Owner: Neutral + Actor92: tc03 + Location: 117,32 + Owner: Neutral + Actor93: tc04 + Location: 83,86 + Owner: Neutral + Actor94: tc05 + Location: 56,79 + Owner: Neutral + Actor95: tc01 + Location: 52,77 + Owner: Neutral + Actor97: brl3 + Location: 86,82 + Owner: USSR + Actor98: brl3 + Location: 86,81 + Owner: USSR + Actor99: brl3 + Location: 89,82 + Owner: USSR + Actor100: barl + Location: 87,81 + Owner: USSR + Actor101: barl + Location: 88,82 + Owner: USSR + Actor102: barl + Location: 89,81 + Owner: USSR + Actor103: barl + Location: 88,81 + Owner: USSR + Actor104: brl3 + Location: 90,81 + Owner: USSR + Actor106: barl + Location: 92,81 + Owner: USSR + Actor109: barl + Location: 90,80 + Owner: USSR + Actor116: brl3 + Location: 106,47 + Owner: USSR + Actor117: brl3 + Location: 105,48 + Owner: USSR + Actor118: brl3 + Location: 104,46 + Owner: USSR + Actor119: brl3 + Location: 103,47 + Owner: USSR + Actor120: brl3 + Location: 102,46 + Owner: USSR + Actor121: brl3 + Location: 102,48 + Owner: USSR + Actor122: barl + Location: 102,47 + Owner: USSR + Actor123: barl + Location: 101,46 + Owner: USSR + Actor124: barl + Location: 103,46 + Owner: USSR + Actor125: barl + Location: 104,49 + Owner: USSR + Actor127: barl + Location: 105,46 + Owner: USSR + Actor128: brl3 + Location: 57,40 + Owner: USSR + Actor129: brl3 + Location: 56,40 + Owner: USSR + Actor130: brl3 + Location: 57,41 + Owner: USSR + Actor132: brl3 + Location: 58,42 + Owner: USSR + Actor133: brl3 + Location: 58,41 + Owner: USSR + Actor134: barl + Location: 58,40 + Owner: USSR + Actor135: barl + Location: 58,44 + Owner: USSR + Actor136: barl + Location: 57,42 + Owner: USSR + Actor137: barl + Location: 56,41 + Owner: USSR + Actor138: v19 + Location: 50,39 + Owner: USSR + Actor139: v19 + Location: 60,41 + Owner: USSR + Actor140: v19 + Location: 61,41 + Owner: USSR + Actor141: brl3 + Location: 58,43 + Owner: USSR + Actor142: brl3 + Location: 96,59 + Owner: USSR + Actor143: barl + Location: 96,58 + Owner: USSR + Actor149: v01 + Location: 64,95 + Owner: Neutral + Actor150: brl3 + Location: 66,91 + Owner: USSR + Actor151: brl3 + Location: 61,93 + Owner: USSR + Actor152: brl3 + Location: 62,92 + Owner: USSR + Actor153: brl3 + Location: 63,92 + Owner: USSR + Actor154: brl3 + Location: 65,91 + Owner: USSR + Actor155: barl + Location: 60,93 + Owner: USSR + Actor156: barl + Location: 62,93 + Owner: USSR + Actor157: barl + Location: 64,92 + Owner: USSR + Actor158: v02 + Location: 65,98 + Owner: Neutral + Actor159: v03 + Location: 60,97 + Owner: Neutral + Actor160: v04 + Location: 70,96 + Owner: Neutral + Actor161: v05 + Location: 51,95 + Owner: Neutral + Actor162: t17 + Location: 59,92 + Owner: Neutral + Actor163: v07 + Location: 51,89 + Owner: Neutral + Actor164: brl3 + Location: 79,61 + Owner: USSR + Actor165: brl3 + Location: 75,63 + Owner: USSR + Actor166: brl3 + Location: 79,63 + Owner: USSR + Actor167: brl3 + Location: 77,64 + Owner: USSR + Actor168: barl + Location: 76,64 + Owner: USSR + Actor169: barl + Location: 78,64 + Owner: USSR + Actor170: barl + Location: 79,62 + Owner: USSR + Actor171: fcom + Location: 95,46 + Owner: USSR + Actor172: v01 + Location: 103,94 + Owner: Neutral + Actor174: brl3 + Location: 54,48 + Owner: USSR + Actor175: brl3 + Location: 55,49 + Owner: USSR + Actor176: brl3 + Location: 56,50 + Owner: USSR + Actor177: barl + Location: 54,49 + Owner: USSR + Actor178: barl + Location: 57,50 + Owner: USSR + Actor189: e2 + Location: 98,91 + Owner: USSR + Facing: 192 + SubCell: 0 + Actor201: e1.autotarget + Location: 64,91 + Owner: USSR + Facing: 160 + SubCell: 4 + Actor202: e1.autotarget + Location: 61,99 + Owner: USSR + SubCell: 3 + Actor203: e1.autotarget + Location: 54,89 + Owner: USSR + SubCell: 2 + Actor204: e2.autotarget + Location: 78,93 + Owner: USSR + SubCell: 3 + Actor205: e2.autotarget + Location: 90,92 + Owner: USSR + Facing: 160 + SubCell: 0 + Actor206: e1.autotarget + Location: 56,45 + Owner: USSR + Facing: 96 + SubCell: 1 + Actor207: e1.autotarget + Location: 57,44 + Owner: USSR + Facing: 96 + SubCell: 3 + Actor208: e2.autotarget + Location: 57,43 + Owner: USSR + Facing: 96 + SubCell: 0 + Actor210: e1 + Location: 103,96 + Owner: USSR + SubCell: 2 + Actor211: e1 + Location: 102,95 + Owner: USSR + Facing: 32 + SubCell: 4 + Actor212: e1.autotarget + Location: 79,94 + Owner: USSR + SubCell: 3 + Actor213: e1.autotarget + Location: 91,62 + Owner: USSR + SubCell: 1 + Actor214: e1.autotarget + Location: 85,65 + Owner: USSR + SubCell: 2 + Actor107: fenc + Location: 84,48 + Owner: USSR + Actor108: fenc + Location: 84,49 + Owner: USSR + Actor110: fenc + Location: 83,49 + Owner: USSR + Actor112: fenc + Location: 82,49 + Owner: USSR + Actor113: fenc + Location: 81,49 + Owner: USSR + Actor114: fenc + Location: 80,49 + Owner: USSR + Actor126: fenc + Location: 79,49 + Owner: USSR + Actor148: fenc + Location: 78,49 + Owner: USSR + Actor173: fenc + Location: 77,49 + Owner: USSR + Actor179: fenc + Location: 78,45 + Owner: USSR + Actor183: fenc + Location: 78,46 + Owner: USSR + Actor184: fenc + Location: 77,46 + Owner: USSR + Actor187: fenc + Location: 77,47 + Owner: USSR + Actor195: fenc + Location: 77,48 + Owner: USSR + Actor196: fenc + Location: 78,48 + Owner: USSR + Actor197: fenc + Location: 94,44 + Owner: USSR + Actor198: fenc + Location: 94,45 + Owner: USSR + Actor215: fenc + Location: 94,46 + Owner: USSR + Actor216: fenc + Location: 94,47 + Owner: USSR + Actor217: fenc + Location: 93,47 + Owner: USSR + Actor218: fenc + Location: 93,48 + Owner: USSR + Actor219: fenc + Location: 93,49 + Owner: USSR + Actor220: fenc + Location: 93,50 + Owner: USSR + Actor221: fenc + Location: 92,49 + Owner: USSR + Actor222: fenc + Location: 91,49 + Owner: USSR + Actor223: fenc + Location: 91,50 + Owner: USSR + Actor224: fenc + Location: 91,51 + Owner: USSR + Actor225: fenc + Location: 91,52 + Owner: USSR + Actor226: fenc + Location: 92,52 + Owner: USSR + Actor227: fenc + Location: 92,55 + Owner: USSR + Actor228: fenc + Location: 91,55 + Owner: USSR + Actor229: fenc + Location: 91,56 + Owner: USSR + Actor230: fenc + Location: 91,57 + Owner: USSR + Actor231: fenc + Location: 92,57 + Owner: USSR + Actor232: fenc + Location: 95,59 + Owner: USSR + Actor233: fenc + Location: 95,58 + Owner: USSR + Actor234: fenc + Location: 98,58 + Owner: USSR + Actor235: fenc + Location: 98,59 + Owner: USSR + Actor236: fenc + Location: 99,59 + Owner: USSR + Actor237: fenc + Location: 100,59 + Owner: USSR + Actor238: fenc + Location: 101,59 + Owner: USSR + Actor239: fenc + Location: 102,59 + Owner: USSR + Actor240: fenc + Location: 103,60 + Owner: USSR + Actor241: fenc + Location: 103,59 + Owner: USSR + Actor242: fenc + Location: 104,59 + Owner: USSR + Actor243: fenc + Location: 104,60 + Owner: USSR + Actor244: fenc + Location: 95,45 + Owner: USSR + Actor245: fenc + Location: 96,45 + Owner: USSR + Actor246: fenc + Location: 97,45 + Owner: USSR + Actor247: fenc + Location: 98,45 + Owner: USSR + Actor248: fenc + Location: 99,45 + Owner: USSR + Actor249: fenc + Location: 100,45 + Owner: USSR + Actor250: fenc + Location: 99,44 + Owner: USSR + Actor251: fenc + Location: 100,44 + Owner: USSR + Actor252: fenc + Location: 101,44 + Owner: USSR + Actor253: fenc + Location: 101,45 + Owner: USSR + Actor254: fenc + Location: 98,46 + Owner: USSR + Actor255: fenc + Location: 97,46 + Owner: USSR + Actor256: fenc + Location: 102,45 + Owner: USSR + Actor257: fenc + Location: 103,45 + Owner: USSR + Actor258: fenc + Location: 104,45 + Owner: USSR + Actor259: fenc + Location: 106,44 + Owner: USSR + Actor260: fenc + Location: 106,45 + Owner: USSR + Actor261: fenc + Location: 106,46 + Owner: USSR + Actor262: fenc + Location: 107,45 + Owner: USSR + Actor263: fenc + Location: 107,46 + Owner: USSR + Actor264: fenc + Location: 107,47 + Owner: USSR + Actor265: fenc + Location: 107,48 + Owner: USSR + Actor266: fenc + Location: 106,48 + Owner: USSR + Actor267: fenc + Location: 105,49 + Owner: USSR + Actor268: fenc + Location: 105,50 + Owner: USSR + Actor269: fenc + Location: 105,51 + Owner: USSR + Actor270: fenc + Location: 106,51 + Owner: USSR + Actor271: fenc + Location: 106,52 + Owner: USSR + Actor272: fenc + Location: 107,52 + Owner: USSR + Actor273: fenc + Location: 105,59 + Owner: USSR + Actor274: fenc + Location: 106,59 + Owner: USSR + Actor275: fenc + Location: 107,59 + Owner: USSR + Actor276: fenc + Location: 108,59 + Owner: USSR + Actor277: fenc + Location: 108,58 + Owner: USSR + Actor278: fenc + Location: 107,58 + Owner: USSR + Actor279: fenc + Location: 106,49 + Owner: USSR + Actor282: fenc + Location: 94,81 + Owner: USSR + Actor281: fenc + Location: 93,81 + Owner: USSR + Actor280: fenc + Location: 93,82 + Owner: USSR + Actor209: fenc + Location: 93,83 + Owner: USSR + Actor96: fenc + Location: 93,84 + Owner: USSR + Actor290: fenc + Location: 92,88 + Owner: USSR + Actor289: fenc + Location: 93,88 + Owner: USSR + Actor287: fenc + Location: 92,89 + Owner: USSR + Actor288: fenc + Location: 93,89 + Owner: USSR + Actor286: fenc + Location: 91,89 + Owner: USSR + Actor285: fenc + Location: 90,89 + Owner: USSR + Actor284: fenc + Location: 89,89 + Owner: USSR + Actor283: fenc + Location: 89,88 + Owner: USSR + Actor301: fenc + Location: 86,88 + Owner: USSR + Actor293: fenc + Location: 85,88 + Owner: USSR + Actor299: fenc + Location: 85,89 + Owner: USSR + Actor300: fenc + Location: 86,89 + Owner: USSR + Actor298: fenc + Location: 84,89 + Owner: USSR + Actor297: fenc + Location: 83,89 + Owner: USSR + Actor296: fenc + Location: 82,89 + Owner: USSR + Actor295: fenc + Location: 81,89 + Owner: USSR + Actor292: fenc + Location: 81,87 + Owner: USSR + Actor294: fenc + Location: 81,88 + Owner: USSR + Actor291: fenc + Location: 82,87 + Owner: USSR + Actor199: fenc + Location: 81,81 + Owner: USSR + Actor194: fenc + Location: 82,81 + Owner: USSR + Actor180: fenc + Location: 89,79 + Owner: USSR + Actor181: fenc + Location: 89,80 + Owner: USSR + Actor182: fenc + Location: 88,80 + Owner: USSR + Actor185: fenc + Location: 87,80 + Owner: USSR + Actor186: fenc + Location: 86,80 + Owner: USSR + Actor188: fenc + Location: 85,80 + Owner: USSR + Actor190: fenc + Location: 84,80 + Owner: USSR + Actor191: fenc + Location: 83,80 + Owner: USSR + Actor192: fenc + Location: 82,80 + Owner: USSR + Actor200: fenc + Location: 84,79 + Owner: USSR + Actor193: fenc + Location: 81,80 + Owner: USSR + Actor105: fenc + Location: 76,57 + Owner: USSR + Actor111: fenc + Location: 76,56 + Owner: USSR + Actor115: fenc + Location: 75,56 + Owner: USSR + Actor131: fenc + Location: 74,56 + Owner: USSR + Actor144: fenc + Location: 74,57 + Owner: USSR + Actor145: fenc + Location: 73,57 + Owner: USSR + Actor146: fenc + Location: 72,57 + Owner: USSR + Actor147: fenc + Location: 72,56 + Owner: USSR + Actor303: fenc + Location: 83,79 + Owner: USSR + Actor302: apwr + Location: 5,6 + Owner: USSR + Actor304: apwr + Location: 5,6 + Owner: USSR + ExplosiveBarrel: brl3 + Location: 55,40 + Owner: USSR + ExplosiveBarrel2: brl3 + Location: 91,81 + Owner: USSR + JeepBarrel1: brl3 + Location: 95,66 + Owner: USSR + JeepBarrel2: brl3 + Location: 99,66 + Owner: USSR + JeepBarrel3: brl3 + Location: 96,65 + Owner: USSR + JeepBarrel4: barl + Location: 99,65 + Owner: USSR + USSRSubPen: spen + Location: 109,53 + Owner: USSR + Health: 52 + USSRFlameTower1: ftur + Location: 82,82 + Owner: USSR + USSRFlameTower2: ftur + Location: 82,86 + Owner: USSR + USSRFlameTower3: ftur + Location: 91,80 + Owner: USSR + USSRFlameTower4: ftur + Location: 97,58 + Owner: USSR + USSRFlameTower5: ftur + Location: 92,56 + Owner: USSR + USSRFlameTower6: ftur + Location: 92,51 + Owner: USSR + USSRRadarDome: dome + Location: 105,56 + Owner: USSR + Health: 56 + USSRPowerPlant: powr + Location: 103,55 + Owner: USSR + Health: 52 + USSRBarracks1: barr + Location: 84,81 + Owner: USSR + USSRBarracks2: barr + Location: 99,46 + Owner: USSR + USSRBarracks3: barr + Location: 53,50 + Owner: USSR + Jeep: jeep.mission + Location: 101,97 + Owner: England + Facing: 32 + Heavy1: 3tnk + Location: 96,66 + Owner: USSR + Health: 13 + Facing: 128 + Heavy2: 3tnk + Location: 97,65 + Owner: USSR + Health: 13 + Facing: 128 + Heavy3: 3tnk + Location: 98,66 + Owner: USSR + Health: 6 + Facing: 128 + USSRTruk: truk + Location: 56,93 + Owner: USSR + Facing: 96 + MediGuard: e2 + Location: 104,48 + Owner: USSR + Facing: 160 + SubCell: 1 + PGuard1: e1 + Location: 89,85 + Owner: USSR + Facing: 64 + SubCell: 3 + PGuard2: e1 + Location: 89,86 + Owner: USSR + Facing: 64 + SubCell: 3 + PGuard3: e1 + Location: 89,86 + Owner: USSR + Facing: 64 + SubCell: 1 + PGuard4: e1 + Location: 89,87 + Owner: USSR + Facing: 64 + SubCell: 1 + PGuard5: e1 + Location: 91,84 + Owner: USSR + Facing: 128 + SubCell: 4 + USSRBaseGuard1: e2.autotarget + Location: 96,60 + Owner: USSR + Facing: 96 + SubCell: 1 + USSRBaseGuard2: e2.autotarget + Location: 102,49 + Owner: USSR + Facing: 160 + SubCell: 3 + USSRBaseGuard3: e2.autotarget + Location: 104,50 + Owner: USSR + Facing: 160 + SubCell: 3 + USSRCheckpointGuard1: e1 + Location: 95,68 + Owner: USSR + Facing: 64 + SubCell: 0 + USSRCheckpointGuard2: e1 + Location: 99,68 + Owner: USSR + Facing: 192 + SubCell: 0 + Jail1: prison + Location: 104,47 + Owner: Greece + Jail2: prison + Location: 91,86 + Owner: Greece + PrisonedMedi: medi + Location: 104,47 + Owner: Greece + Health: 15 + Facing: 192 + SubCell: 0 + PrisonedEngi1: hacke6 + Location: 91,86 + Owner: Greece + Facing: 192 + SubCell: 0 + PrisonedEngi2: hacke6 + Location: 91,86 + Owner: Greece + Facing: 192 + SubCell: 1 + PrisonedEngi3: hacke6 + Location: 91,86 + Owner: Greece + Facing: 192 + SubCell: 2 + PrisonedEngi4: hacke6 + Location: 91,86 + Owner: Greece + Facing: 192 + SubCell: 4 + MediHideaway: v06 + Location: 57,93 + Owner: Neutral + InsertionHeli: tran + Location: 55,80 + Owner: Greece + Facing: 32 + TanyaWaypoint: waypoint + Location: 54,81 + Owner: Greece + InsertionHeliExit: waypoint + Location: 46,76 + Owner: Neutral + IslandParadropReinforcementsDropzone: waypoint + Location: 117,37 + Owner: Neutral + AlliedIslandReinforcementsEntry: waypoint + Location: 112,31 + Owner: Neutral + ParadropReinforcementsDropzone: waypoint + Location: 76,62 + Owner: Neutral + MediSpawnpoint: waypoint + Location: 58,93 + Owner: Neutral + MediRallypoint: waypoint + Location: 58,94 + Owner: Neutral + USSRReinforcementsCameraWaypoint: waypoint + Location: 56,37 + Owner: Neutral + USSRReinforcementsEntryWaypoint: waypoint + Location: 58,31 + Owner: Neutral + USSRReinforcementsRallyWaypoint: waypoint + Location: 54,42 + Owner: Neutral + BaseCameraWaypoint: waypoint + Location: 88,85 + Owner: Neutral + JeepCheckpoint: waypoint + Location: 97,67 + Owner: Neutral + JeepSuicideWaypoint: waypoint + Location: 97,59 + Owner: Neutral + CheckpointGuardWaypoint1: waypoint + Location: 96,69 + Owner: Neutral + CheckpointGuardWaypoint2: waypoint + Location: 98,69 + Owner: Neutral + LargeCameraWaypoint1: waypoint + Location: 83,38 + Owner: Neutral + LargeCameraWaypoint2: waypoint + Location: 83,66 + Owner: Neutral + LargeCameraWaypoint3: waypoint + Location: 83,94 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ura/maps/allies-03b/rules.yaml b/mods/ura/maps/allies-03b/rules.yaml new file mode 100644 index 0000000..241ecb9 --- /dev/null +++ b/mods/ura/maps/allies-03b/rules.yaml @@ -0,0 +1,179 @@ +World: + LuaScript: + Scripts: allies03b.lua + MissionData: + Briefing: LANDCOM 16 HQS.\nTOP SECRET.\nTO: FIELD COMMANDER A9\n\nINTELLIGENCE RECON SHOWS HEAVY\nSOVIET MOVEMENT IN YOUR AREA.\nNEARBY BRIDGES ARE KEY TO SOVIET\nADVANCEMENT. DESTROY ALL BRIDGES\nASAP. TANYA WILL ASSIST. KEEP HER\nALIVE AT ALL COSTS.\n\nCONFIRMATION CODE 1612.\n\nTRANSMISSION ENDS.\n + StartVideo: brdgtilt.vqa + WinVideo: toofar.vqa + LossVideo: sovtstar.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + Default: easy + +^Building: + Capturable: + CaptureThreshold: 25 + +^TechBuilding: + Capturable: + Types: ~disabled + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E2,E2 + +HACKE6: + Inherits: E6 + -RepairsBridges: + -ExternalCaptures: + Captures: + CaptureTypes: building + WithInfantryBody: + Targetable: + RequiresCondition: !jail + Targetable@PRISONER: + TargetTypes: Prisoner + RenderSprites: + Image: E6 + ExternalCondition@JAIL: + Condition: jail + +MEDI: + Targetable: + RequiresCondition: !jail + Targetable@PRISONER: + TargetTypes: Prisoner + ExternalCondition@JAIL: + Condition: jail + +PRISON: + HiddenUnderShroud: + Type: CenterPosition + Immobile: + OccupiesSpace: false + ProximityExternalCondition: + Condition: jail + Range: 1c0 + +CAMERA: + RevealsShroud: + Range: 8c5 + +CAMERA.VeryLarge: + Inherits: CAMERA + RevealsShroud: + Range: 40c0 + +CAMERA.Jeep: + AlwaysVisible: + Mobile: + TerrainSpeeds: + RevealsShroud: + Range: 4c0 + ScriptTriggers: + +MONEYCRATE: + Tooltip: + Name: Crate + WithCrateBody: + RenderSprites: + Image: scrate + +E1.Autotarget: + Inherits: E1 + Buildable: + Prerequisites: ~disabled + RevealsShroud: + Range: 8c0 + AutoTarget: + ScanRadius: 7 + RenderSprites: + Image: E1 + +E2.Autotarget: + Inherits: E2 + Buildable: + Prerequisites: ~disabled + RevealsShroud: + Range: 8c0 + AutoTarget: + ScanRadius: 7 + RenderSprites: + Image: E2 + +DOG: + Buildable: + Prerequisites: ~disabled + RevealsShroud: + Range: 9c0 + AutoTarget: + ScanRadius: 8 + +TRUK: + -Demolishable: + Targetable: + TargetTypes: Ground, Truk + Armor: + Type: Truk + +TRAN: + RejectsOrders: + -Selectable: + RevealsShroud: + Range: 0c0 + Cargo: + Types: ~disabled + Interactable: + +JEEP.mission: + Inherits: JEEP + -Selectable: + -Demolishable: + -Huntable: + -Targetable: + -Armament: + -WithSpriteTurret: + -WithMuzzleOverlay: + Cargo: + Types: ~disabled + RevealsShroud: + Range: 0c0 + RenderSprites: + Image: JEEP + Interactable: + +E3: + Buildable: + Prerequisites: ~disabled + +E4: + Buildable: + Prerequisites: ~disabled + +E6: + Buildable: + Prerequisites: ~disabled + +SNIPER: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +SHOK: + Buildable: + Prerequisites: ~disabled + +SS: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/allies-03b/weapons.yaml b/mods/ura/maps/allies-03b/weapons.yaml new file mode 100644 index 0000000..2d19edd --- /dev/null +++ b/mods/ura/maps/allies-03b/weapons.yaml @@ -0,0 +1,10 @@ +Colt45: + ValidTargets: Ground, Infantry, Truk + Warhead@1Dam: SpreadDamage + ValidTargets: Barrel, Infantry, Truk + Versus: + Truk: 50 + +BarrelExplode: + Warhead@1Dam: + ValidTargets: Ground, Prisoner diff --git a/mods/ura/maps/allies-04/allies04-AI.lua b/mods/ura/maps/allies-04/allies04-AI.lua new file mode 100644 index 0000000..bb20e2d --- /dev/null +++ b/mods/ura/maps/allies-04/allies04-AI.lua @@ -0,0 +1,279 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] + +IdlingUnits = { } +Yaks = { } + +AttackGroupSizes = +{ + easy = 6, + normal = 8, + hard = 10, + tough = 12 +} + +AttackDelays = +{ + easy = { DateTime.Seconds(4), DateTime.Seconds(9) }, + normal = { DateTime.Seconds(2), DateTime.Seconds(7) }, + hard = { DateTime.Seconds(1), DateTime.Seconds(5) }, + tough = { DateTime.Seconds(1), DateTime.Seconds(5) } +} + +AttackRallyPoints = +{ + { SovietRally1.Location, SovietRally3.Location, SovietRally5.Location, SovietRally4.Location, SovietRally13.Location, PlayerBase.Location }, + { SovietRally7.Location, SovietRally10.Location, PlayerBase.Location }, + { SovietRally1.Location, SovietRally3.Location, SovietRally5.Location, SovietRally4.Location, SovietRally12.Location, PlayerBase.Location }, + { SovietRally7.Location, ParadropPoint1.Location, PlayerBase.Location }, + { SovietRally8.Location, SovietRally9.Location, ParadropPoint1.Location, PlayerBase.Location, } +} + +SovietInfantryTypes = { "e1", "e1", "e2" } +SovietVehicleTypes = { "3tnk", "3tnk", "3tnk", "ftrk", "ftrk", "apc" } +SovietAircraftType = { "yak" } + +AttackOnGoing = false +HoldProduction = false +HarvesterKilled = false + +Powr1 = { name = "powr", pos = CPos.New(47, 21), prize = 500, exists = true } +Barr = { name = "barr", pos = CPos.New(53, 26), prize = 400, exists = true } +Proc = { name = "proc", pos = CPos.New(54, 21), prize = 1400, exists = true } +Weap = { name = "weap", pos = CPos.New(48, 28), prize = 2000, exists = true } +Powr2 = { name = "powr", pos = CPos.New(51, 21), prize = 500, exists = true } +Powr3 = { name = "powr", pos = CPos.New(46, 25), prize = 500, exists = true } +Powr4 = { name = "powr", pos = CPos.New(49, 21), prize = 500, exists = true } +Ftur1 = { name = "powr", pos = CPos.New(56, 27), prize = 600, exists = true } +Ftur2 = { name = "powr", pos = CPos.New(51, 32), prize = 600, exists = true } +Ftur3 = { name = "powr", pos = CPos.New(54, 30), prize = 600, exists = true } +Afld1 = { name = "afld", pos = CPos.New(43, 23), prize = 500, exists = true } +Afld2 = { name = "afld", pos = CPos.New(43, 21), prize = 500, exists = true } +BaseBuildings = { Powr1, Barr, Proc, Weap, Powr2, Powr3, Powr4, Ftur1, Ftur2, Ftur3, Afld1, Afld2 } +InitialBase = { Barracks, Refinery, PowerPlant1, PowerPlant2, PowerPlant3, PowerPlant4, Warfactory, Flametur1, Flametur2, Flametur3, Airfield1, Airfield2 } + +BuildBase = function() + if Conyard.IsDead or Conyard.Owner ~= ussr then + return + elseif Harvester.IsDead and ussr.Resources <= 299 then + return + end + + for i,v in ipairs(BaseBuildings) do + if not v.exists then + BuildBuilding(v) + return + end + end + + Trigger.AfterDelay(DateTime.Seconds(10), BuildBase) +end + +BuildBuilding = function(building) + Trigger.AfterDelay(Actor.BuildTime(building.name), function() + local actor = Actor.Create(building.name, true, { Owner = ussr, Location = building.pos }) + ussr.Cash = ussr.Cash - building.prize + + building.exists = true + Trigger.OnKilled(actor, function() building.exists = false end) + Trigger.OnDamaged(actor, function(building) + if building.Owner == ussr and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + DefendActor(actor) + end + end) + + Trigger.AfterDelay(DateTime.Seconds(10), BuildBase) + end) +end + +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +SetupAttackGroup = function() + local units = { } + + for i = 0, AttackGroupSize, 1 do + if #IdlingUnits == 0 then + return units + end + + local number = Utils.RandomInteger(1, #IdlingUnits) + + if IdlingUnits[number] and not IdlingUnits[number].IsDead then + units[i] = IdlingUnits[number] + table.remove(IdlingUnits, number) + end + end + + return units +end + +SendAttack = function() + if Attacking then + return + end + Attacking = true + HoldProduction = true + + local units = SetupAttackGroup() + local path = Utils.Random(AttackRallyPoints) + Utils.Do(units, function(unit) + unit.Patrol(path) + IdleHunt(unit) + end) + + Trigger.OnAllRemovedFromWorld(units, function() + Attacking = false + HoldProduction = false + end) +end + +ProtectHarvester = function(unit) + DefendActor(unit) + Trigger.OnKilled(unit, function() HarvesterKilled = true end) +end + +DefendActor = function(unit) + Trigger.OnDamaged(unit, function(self, attacker) + if AttackOnGoing then + return + end + AttackOnGoing = true + + local Guards = SetupAttackGroup() + + if #Guards <= 0 then + AttackOnGoing = false + return + end + + Utils.Do(Guards, function(unit) + if not self.IsDead then + unit.AttackMove(self.Location) + end + IdleHunt(unit) + end) + + Trigger.OnAllRemovedFromWorld(Guards, function() AttackOnGoing = false end) + end) +end + +InitAIUnits = function() + IdlingUnits = ussr.GetGroundAttackers() + + DefendActor(Conyard) + for i,v in ipairs(InitialBase) do + DefendActor(v) + Trigger.OnDamaged(v, function(building) + if building.Owner == ussr and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + + Trigger.OnKilled(v, function() + BaseBuildings[i].exists = false + end) + end +end + +ProduceInfantry = function() + if HoldProduction then + Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry) + return + end + + -- See AttackDelay in WorldLoaded + local delay = Utils.RandomInteger(AttackDelay[1], AttackDelay[2]) + local toBuild = { Utils.Random(SovietInfantryTypes) } + ussr.Build(toBuild, function(unit) + IdlingUnits[#IdlingUnits + 1] = unit[1] + Trigger.AfterDelay(delay, ProduceInfantry) + + -- See AttackGroupSize in WorldLoaded + if #IdlingUnits >= (AttackGroupSize * 2.5) then + SendAttack() + end + end) +end + +ProduceVehicles = function() + if HoldProduction then + Trigger.AfterDelay(DateTime.Minutes(1), ProduceVehicles) + return + end + + -- See AttackDelay in WorldLoaded + local delay = Utils.RandomInteger(AttackDelay[1], AttackDelay[2]) + if HarvesterKilled then + ussr.Build({ "harv" }, function(harv) + ProtectHarvester(harv[1]) + HarvesterKilled = false + Trigger.AfterDelay(delay, ProduceVehicles) + end) + else + local toBuild = { Utils.Random(SovietVehicleTypes) } + ussr.Build(toBuild, function(unit) + IdlingUnits[#IdlingUnits + 1] = unit[1] + Trigger.AfterDelay(delay, ProduceVehicles) + + -- See AttackGroupSize in WorldLoaded + if #IdlingUnits >= (AttackGroupSize * 2.5) then + SendAttack() + end + end) + end +end + +ProduceAircraft = function() + ussr.Build(SovietAircraftType, function(units) + local yak = units[1] + Yaks[#Yaks + 1] = yak + + Trigger.OnKilled(yak, ProduceAircraft) + if #Yaks == 1 then + Trigger.AfterDelay(DateTime.Minutes(1), ProduceAircraft) + end + + TargetAndAttack(yak) + end) +end + +TargetAndAttack = function(yak, target) + if not target or target.IsDead or (not target.IsInWorld) then + local enemies = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == player and self.HasProperty("Health") and yak.CanTarget(self) end) + + if #enemies > 0 then + target = Utils.Random(enemies) + end + end + + if target and yak.AmmoCount() > 0 and yak.CanTarget(target) then + yak.Attack(target) + else + yak.ReturnToBase() + end + + yak.CallFunc(function() + TargetAndAttack(yak, target) + end) +end + +ActivateAI = function() + InitAIUnits() + ProtectHarvester(Harvester) + + local difficulty = Map.LobbyOption("difficulty") + AttackDelay = AttackDelays[difficulty] + AttackGroupSize = AttackGroupSizes[difficulty] + Trigger.AfterDelay(DateTime.Seconds(10), function() + ProduceInfantry() + ProduceVehicles() + ProduceAircraft() + end) +end diff --git a/mods/ura/maps/allies-04/allies04.lua b/mods/ura/maps/allies-04/allies04.lua new file mode 100644 index 0000000..3f73b2a --- /dev/null +++ b/mods/ura/maps/allies-04/allies04.lua @@ -0,0 +1,182 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] + +ConvoyUnits = +{ + { "ftrk", "ftrk", "truk", "truk", "apc", "ftrk" }, + { "ftrk", "3tnk", "truk", "truk", "apc" }, + { "3tnk", "3tnk", "truk", "truk", "ftrk" } +} + +ConvoyRallyPoints = +{ + { SovietEntry1.Location, SovietRally1.Location, SovietRally3.Location, SovietRally5.Location, SovietRally4.Location, SovietRally6.Location }, + { SovietEntry2.Location, SovietRally10.Location, SovietRally11.Location } +} + +ConvoyDelays = +{ + easy = { DateTime.Minutes(4), DateTime.Minutes(5) + DateTime.Seconds(20) }, + normal = { DateTime.Minutes(2) + DateTime.Seconds(30), DateTime.Minutes(4) }, + hard = { DateTime.Minutes(1) + DateTime.Seconds(30), DateTime.Minutes(2) + DateTime.Seconds(30) }, + tough = { DateTime.Minutes(1), DateTime.Minutes(1) + DateTime.Seconds(15) } +} + +Convoys = +{ + easy = 2, + normal = 3, + hard = 5, + tough = 10 +} + +ParadropDelays = +{ + easy = { DateTime.Seconds(40), DateTime.Seconds(90) }, + normal = { DateTime.Seconds(30), DateTime.Seconds(70) }, + hard = { DateTime.Seconds(20), DateTime.Seconds(50) }, + tough = { DateTime.Seconds(10), DateTime.Seconds(25) } +} + +ParadropWaves = +{ + easy = 4, + normal = 6, + hard = 10, + tough = 25 +} + +ParadropLZs = { ParadropPoint1.CenterPosition, ParadropPoint2.CenterPosition, ParadropPoint3.CenterPosition } + +Paradropped = 0 +Paradrop = function() + Trigger.AfterDelay(Utils.RandomInteger(ParadropDelay[1], ParadropDelay[2]), function() + local units = PowerProxy.SendParatroopers(Utils.Random(ParadropLZs)) + Utils.Do(units, function(unit) + Trigger.OnAddedToWorld(unit, IdleHunt) + end) + + Paradropped = Paradropped + 1 + if Paradropped <= ParadropWaves[Map.LobbyOption("difficulty")] then + Paradrop() + end + end) +end + +ConvoysSent = 0 +SendConvoys = function() + Trigger.AfterDelay(Utils.RandomInteger(ConvoyDelay[1], ConvoyDelay[2]), function() + local path = Utils.Random(ConvoyRallyPoints) + local units = Reinforcements.Reinforce(ussr, Utils.Random(ConvoyUnits), { path[1] }) + local lastWaypoint = path[#path] + + Utils.Do(units, function(unit) + Trigger.OnAddedToWorld(unit, function() + if unit.Type == "truk" then + Utils.Do(path, function(waypoint) + unit.Move(waypoint) + end) + + Trigger.OnIdle(unit, function() + unit.Move(lastWaypoint) + end) + else + unit.Patrol(path) + Trigger.OnIdle(unit, function() + unit.AttackMove(lastWaypoint) + end) + end + end) + end) + + local id = Trigger.OnEnteredFootprint({ lastWaypoint }, function(a, id) + if a.Owner == ussr and Utils.Any(units, function(unit) return unit == a end) then + + -- We are at our destination and thus don't care about other queued actions anymore + a.Stop() + a.Destroy() + + if a.Type == "truk" then + player.MarkFailedObjective(DestroyConvoys) + end + end + end) + + Trigger.OnAllRemovedFromWorld(units, function() + Trigger.RemoveFootprintTrigger(id) + + ConvoysSent = ConvoysSent + 1 + if ConvoysSent <= Convoys[Map.LobbyOption("difficulty")] then + SendConvoys() + else + player.MarkCompletedObjective(DestroyConvoys) + end + end) + + Media.PlaySpeechNotification(player, "ConvoyApproaching") + end) +end + +Tick = function() + if player.HasNoRequiredUnits() then + player.MarkFailedObjective(KillUSSR) + end + + if ussr.HasNoRequiredUnits() then + player.MarkCompletedObjective(KillUSSR) + + -- We don't care about future convoys anymore + player.MarkCompletedObjective(DestroyConvoys) + end +end + +InitObjectives = function() + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + KillUSSR = player.AddPrimaryObjective("Destroy all Soviet units and buildings in this region.") + DestroyConvoys = player.AddSecondaryObjective("Eliminate all passing Soviet convoys.") + + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(player, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + end) + Trigger.OnPlayerWon(player, function() + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + end) +end + +WorldLoaded = function() + player = Player.GetPlayer("Greece") + ussr = Player.GetPlayer("USSR") + + Camera.Position = AlliedConyard.CenterPosition + + InitObjectives() + + local difficulty = Map.LobbyOption("difficulty") + ConvoyDelay = ConvoyDelays[difficulty] + ParadropDelay = ParadropDelays[difficulty] + PowerProxy = Actor.Create("powerproxy.paratroopers", false, { Owner = ussr }) + Paradrop() + SendConvoys() + + Trigger.AfterDelay(0, ActivateAI) +end diff --git a/mods/ura/maps/allies-04/map.bin b/mods/ura/maps/allies-04/map.bin new file mode 100644 index 0000000..2479ae9 Binary files /dev/null and b/mods/ura/maps/allies-04/map.bin differ diff --git a/mods/ura/maps/allies-04/map.png b/mods/ura/maps/allies-04/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/allies-04/map.png differ diff --git a/mods/ura/maps/allies-04/map.yaml b/mods/ura/maps/allies-04/map.yaml new file mode 100644 index 0000000..856750c --- /dev/null +++ b/mods/ura/maps/allies-04/map.yaml @@ -0,0 +1,538 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 04: Ten to one + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 37,21,56,65 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FE1100 + Enemies: Greece + PlayerReference@Greece: + Name: Greece + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: E2E6F5 + Enemies: USSR + +Actors: + Actor0: t17 + Location: 65,35 + Owner: Neutral + Actor1: tc02 + Location: 65,36 + Owner: Neutral + Actor2: tc04 + Location: 85,81 + Owner: Neutral + Actor3: tc01 + Location: 89,84 + Owner: Neutral + Actor4: tc05 + Location: 90,83 + Owner: Neutral + Actor5: t10 + Location: 84,71 + Owner: Neutral + Actor6: t11 + Location: 54,55 + Owner: Neutral + Actor7: tc04 + Location: 45,53 + Owner: Neutral + Actor8: t01 + Location: 45,44 + Owner: Neutral + Actor9: t11 + Location: 59,71 + Owner: Neutral + Actor10: tc01 + Location: 62,84 + Owner: Neutral + Actor11: t07 + Location: 51,84 + Owner: Neutral + Actor12: t08 + Location: 48,85 + Owner: Neutral + Actor13: t14 + Location: 46,84 + Owner: Neutral + Actor14: t11 + Location: 40,84 + Owner: Neutral + Actor15: t07 + Location: 87,44 + Owner: Neutral + Actor16: t01 + Location: 92,45 + Owner: Neutral + Actor17: t11 + Location: 77,56 + Owner: Neutral + Actor18: t02 + Location: 79,47 + Owner: Neutral + Actor19: tc02 + Location: 44,68 + Owner: Neutral + Actor20: t17 + Location: 67,62 + Owner: Neutral + Actor21: tc05 + Location: 68,67 + Owner: Neutral + Actor22: tc04 + Location: 67,66 + Owner: Neutral + Actor23: t15 + Location: 71,63 + Owner: Neutral + Actor24: t16 + Location: 72,62 + Owner: Neutral + Actor25: t08 + Location: 64,55 + Owner: Neutral + Actor26: t17 + Location: 69,50 + Owner: Neutral + Actor27: tc04 + Location: 67,49 + Owner: Neutral + Actor28: tc02 + Location: 67,51 + Owner: Neutral + Actor29: t01 + Location: 67,44 + Owner: Neutral + Actor30: t06 + Location: 67,54 + Owner: Neutral + Actor31: tc01 + Location: 70,54 + Owner: Neutral + Actor32: t17 + Location: 70,55 + Owner: Neutral + Actor33: tc04 + Location: 67,76 + Owner: Neutral + Actor34: tc03 + Location: 71,52 + Owner: Neutral + Actor35: t05 + Location: 40,74 + Owner: Neutral + Actor36: tc02 + Location: 69,72 + Owner: Neutral + Actor37: t10 + Location: 68,77 + Owner: Neutral + Actor38: t11 + Location: 51,71 + Owner: Neutral + Actor39: t08 + Location: 50,78 + Owner: Neutral + Actor40: t07 + Location: 44,77 + Owner: Neutral + Actor41: tc01 + Location: 63,74 + Owner: Neutral + Actor42: tc01 + Location: 59,60 + Owner: Neutral + Actor43: t17 + Location: 53,66 + Owner: Neutral + Actor44: t01 + Location: 45,56 + Owner: Neutral + Actor45: t10 + Location: 43,56 + Owner: Neutral + Actor46: t10 + Location: 55,46 + Owner: Neutral + Actor47: t14 + Location: 58,49 + Owner: Neutral + Actor48: t16 + Location: 61,44 + Owner: Neutral + Actor49: t01 + Location: 89,62 + Owner: Neutral + Actor50: t12 + Location: 92,63 + Owner: Neutral + Actor51: t08 + Location: 92,60 + Owner: Neutral + Actor52: t03 + Location: 75,72 + Owner: Neutral + Actor53: t06 + Location: 75,80 + Owner: Neutral + Actor54: t01 + Location: 77,41 + Owner: Neutral + Actor55: t03 + Location: 76,42 + Owner: Neutral + Actor56: t05 + Location: 83,27 + Owner: Neutral + Actor57: tc02 + Location: 79,35 + Owner: Neutral + Actor58: tc04 + Location: 90,26 + Owner: Neutral + Actor59: t17 + Location: 92,22 + Owner: Neutral + Actor60: tc03 + Location: 91,31 + Owner: Neutral + Actor61: t01 + Location: 43,47 + Owner: Neutral + Actor62: t02 + Location: 37,52 + Owner: Neutral + Actor63: t10 + Location: 37,37 + Owner: Neutral + Actor64: tc02 + Location: 41,28 + Owner: Neutral + Actor65: tc03 + Location: 67,27 + Owner: Neutral + Actor66: t16 + Location: 63,27 + Owner: Neutral + Actor67: t03 + Location: 38,27 + Owner: Neutral + Actor68: t06 + Location: 42,31 + Owner: Neutral + Actor69: t07 + Location: 77,25 + Owner: Neutral + Actor70: tc02 + Location: 40,24 + Owner: Neutral + Actor71: t17 + Location: 37,24 + Owner: Neutral + Actor81: silo + Location: 43,27 + Owner: USSR + Actor82: silo + Location: 44,28 + Owner: USSR + Actor83: silo + Location: 44,26 + Owner: USSR + Actor89: 3tnk + Location: 42,35 + Owner: USSR + Facing: 64 + Actor90: 3tnk + Location: 39,34 + Owner: USSR + Facing: 64 + Actor91: 3tnk + Location: 49,31 + Owner: USSR + Facing: 96 + Actor93: e2 + Location: 47,40 + Owner: USSR + Facing: 64 + SubCell: 0 + Actor94: e2 + Location: 47,36 + Owner: USSR + Facing: 96 + SubCell: 4 + Actor95: e2 + Location: 50,40 + Owner: USSR + Facing: 96 + SubCell: 0 + Actor96: e2 + Location: 48,40 + Owner: USSR + Facing: 64 + SubCell: 0 + Actor97: e2 + Location: 48,36 + Owner: USSR + Facing: 64 + SubCell: 0 + Actor98: e2 + Location: 46,39 + Owner: USSR + Facing: 96 + SubCell: 2 + Actor99: e1 + Location: 70,59 + Owner: Greece + Facing: 192 + SubCell: 4 + Actor100: e1 + Location: 44,34 + Owner: USSR + Facing: 96 + SubCell: 4 + Actor101: e1 + Location: 43,37 + Owner: USSR + Facing: 96 + SubCell: 4 + waypoint17: waypoint + Location: 92,68 + Owner: Neutral + waypoint98: waypoint + Location: 70,60 + Owner: Neutral + Actor129: proc + Owner: Greece + Location: 82,54 + Actor130: powr + Owner: Greece + Location: 87,53 + Actor131: tent + Owner: Greece + Location: 83,49 + Health: 12 + Actor88: jeep + Location: 70,60 + Owner: Greece + Facing: 224 + Actor132: jeep + Location: 57,65 + Owner: Greece + Actor133: jeep + Location: 62,67 + Owner: Greece + Actor134: jeep + Location: 74,81 + Owner: Greece + Actor135: jeep + Location: 45,71 + Owner: Greece + Actor136: e1 + Location: 47,71 + Owner: Greece + Actor137: e1 + Location: 44,72 + Owner: Greece + Actor138: e1 + Location: 49,73 + Owner: Greece + Actor139: e1 + Location: 47,73 + Owner: Greece + Actor140: e1 + Location: 45,73 + Owner: Greece + Actor141: e1 + Location: 56,69 + Owner: Greece + Actor142: e3 + Location: 48,72 + Owner: Greece + Actor143: e1 + Location: 73,80 + Owner: Greece + Actor144: e1 + Location: 76,79 + Owner: Greece + Actor145: e1 + Location: 74,80 + Owner: Greece + Actor146: e1 + Location: 62,69 + Owner: Greece + Actor147: e3 + Location: 58,69 + Owner: Greece + Actor148: e3 + Location: 60,68 + Owner: Greece + Actor149: e3 + Location: 75,79 + Owner: Greece + Actor150: e1 + Location: 85,54 + Owner: Greece + Actor151: e1 + Location: 85,51 + Owner: Greece + Actor152: e1 + Location: 84,48 + Owner: Greece + Actor153: e3 + Location: 84,55 + Owner: Greece + Actor154: e2 + Owner: USSR + Location: 82,47 + SubCell: 3 + Facing: 92 + TurretFacing: 92 + Actor155: e1 + Owner: USSR + Location: 87,49 + SubCell: 3 + Facing: 92 + TurretFacing: 92 + Actor156: e1 + Owner: USSR + Location: 87,49 + SubCell: 1 + Facing: 122 + TurretFacing: 122 + AlliedConyard: fact + Owner: Greece + Location: 88,49 + Health: 88 + Harvester: harv + Location: 57,24 + Owner: USSR + Facing: 64 + Conyard: fact + Location: 49,24 + Owner: USSR + Barracks: barr + Location: 53,26 + Owner: USSR + Refinery: proc + Location: 54,21 + Owner: USSR + FreeActor: false + PowerPlant1: powr + Location: 47,21 + Owner: USSR + PowerPlant2: powr + Location: 51,21 + Owner: USSR + PowerPlant3: powr + Location: 46,25 + Owner: USSR + PowerPlant4: powr + Location: 49,21 + Owner: USSR + Warfactory: weap + Location: 48,28 + Owner: USSR + Flametur1: ftur + Location: 56,27 + Owner: USSR + Flametur2: ftur + Location: 51,32 + Owner: USSR + Flametur3: ftur + Location: 54,30 + Owner: USSR + Airfield1: afld + Location: 43,23 + Owner: USSR + Airfield2: afld + Location: 43,21 + Owner: USSR + ParadropPoint1: waypoint + Location: 77,40 + Owner: Neutral + ParadropPoint2: waypoint + Location: 83,65 + Owner: Neutral + ParadropPoint3: waypoint + Location: 76,52 + Owner: Neutral + SovietEntry1: waypoint + Location: 37,34 + Owner: Neutral + SovietEntry2: waypoint + Location: 88,21 + Owner: Neutral + SovietRally1: waypoint + Location: 48,38 + Owner: Neutral + SovietRally2: waypoint + Location: 43,51 + Owner: Neutral + SovietRally3: waypoint + Location: 49,65 + Owner: Neutral + SovietRally4: waypoint + Location: 61,80 + Owner: Neutral + SovietRally5: waypoint + Location: 49,74 + Owner: Neutral + SovietRally6: waypoint + Location: 80,85 + Owner: Neutral + SovietRally7: waypoint + Location: 59,32 + Owner: Neutral + SovietRally8: waypoint + Location: 56,34 + Owner: Neutral + SovietRally9: waypoint + Location: 62,48 + Owner: Neutral + SovietRally10: waypoint + Location: 84,30 + Owner: Neutral + SovietRally11: waypoint + Location: 92,42 + Owner: Neutral + SovietRally12: waypoint + Location: 72,66 + Owner: Neutral + SovietRally13: waypoint + Location: 80,77 + Owner: Neutral + USSRBase: waypoint + Location: 50,25 + Owner: Neutral + PlayerBase: waypoint + Location: 88,52 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/allies-04/rules.yaml b/mods/ura/maps/allies-04/rules.yaml new file mode 100644 index 0000000..1c2cd15 --- /dev/null +++ b/mods/ura/maps/allies-04/rules.yaml @@ -0,0 +1,108 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: allies04.lua, allies04-AI.lua + MissionData: + Briefing: Soviet forces are trying to retake the pass you cleared for our convoys.\n\nDon't let this happen. Hold the pass and prevent the Soviets from taking this vital area.\n\nDestroy all Soviet units and buildings in this region. + BriefingVideo: ally4.vqa + StartVideo: binoc.vqa + WinVideo: oildrum.vqa + LossVideo: bmap.vqa + MapOptions: + TechLevel: medium + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + tough: Real tough guy + Default: easy + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E2,E2 + +V2RL: + Buildable: + Prerequisites: ~disabled + +2TNK: + Buildable: + Prerequisites: ~disabled + +3TNK: + Buildable: + Prerequisites: ~vehicles.soviet + +ARTY: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +SPEN: + Buildable: + Prerequisites: ~disabled + +SYRD: + Buildable: + Prerequisites: ~disabled + +APWR: + Buildable: + Prerequisites: ~disabled + +TSLA: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +E4: + Buildable: + Prerequisites: ~disabled + +E6: + Buildable: + Prerequisites: ~disabled + +SPY: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/allies-05a/allies05a-AI.lua b/mods/ura/maps/allies-05a/allies05a-AI.lua new file mode 100644 index 0000000..e3b4060 --- /dev/null +++ b/mods/ura/maps/allies-05a/allies05a-AI.lua @@ -0,0 +1,298 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] + +IdlingUnits = { } +AttackGroupSize = 6 + +Barracks = { Barracks2, Barracks3 } + +Rallypoints = { VehicleRallypoint1, VehicleRallypoint2, VehicleRallypoint3, VehicleRallypoint4, VehicleRallypoint5 } +WaterLZs = { WaterLZ1, WaterLZ2 } + +Airfields = { Airfield1, Airfield2 } +Yaks = { } + +SovietInfantryTypes = { "e1", "e1", "e2", "e4" } +SovietVehicleTypes = { "3tnk", "3tnk", "3tnk", "v2rl", "v2rl", "apc" } +SovietAircraftType = { "yak" } + +HoldProduction = true +BuildVehicles = true +TrainInfantry = true + +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +SetupAttackGroup = function() + local units = { } + + for i = 0, AttackGroupSize, 1 do + if #IdlingUnits == 0 then + return units + end + + local number = Utils.RandomInteger(1, #IdlingUnits) + + if IdlingUnits[number] and not IdlingUnits[number].IsDead then + units[i] = IdlingUnits[number] + table.remove(IdlingUnits, number) + end + end + + return units +end + +SendAttack = function() + if Attacking then + return + end + Attacking = true + HoldProduction = true + + local units = { } + if SendWaterTransports and Utils.RandomInteger(0,2) == 1 then + units = WaterAttack() + + Utils.Do(units, function(unit) + Trigger.OnAddedToWorld(unit, function() + Trigger.OnIdle(unit, unit.Hunt) + end) + end) + + Trigger.AfterDelay(DateTime.Seconds(20), function() + Attacking = false + HoldProduction = false + end) + else + units = SetupAttackGroup() + + Utils.Do(units, function(unit) + IdleHunt(unit) + end) + + Trigger.AfterDelay(DateTime.Minutes(1), function() Attacking = false end) + Trigger.AfterDelay(DateTime.Minutes(2), function() HoldProduction = false end) + end +end + +WaterAttack = function() + local types = { } + for i = 1, 5, 1 do + types[i] = Utils.Random(SovietInfantryTypes) + end + + return Reinforcements.ReinforceWithTransport(ussr, InsertionTransport, types, { WaterTransportSpawn.Location, Utils.Random(WaterLZs).Location }, { WaterTransportSpawn.Location })[2] +end + +ProtectHarvester = function(unit) + Trigger.OnDamaged(unit, function(self, attacker) + -- TODO: Send the Harvester to the service depo + + if AttackOnGoing then + return + end + AttackOnGoing = true + + local Guards = SetupAttackGroup() + Utils.Do(Guards, function(unit) + if not self.IsDead then + unit.AttackMove(self.Location) + end + IdleHunt(unit) + end) + + Trigger.OnAllRemovedFromWorld(Guards, function() AttackOnGoing = false end) + end) + + Trigger.OnKilled(unit, function() HarvesterKilled = true end) +end + +InitAIUnits = function() + IdlingUnits = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == ussr and self.HasProperty("Hunt") and self.Location.Y > MainBaseTopLeft.Location.Y end) + + local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == ussr and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(buildings, function(actor) + Trigger.OnDamaged(actor, function(building) + if building.Owner == ussr and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + end) +end + +InitAIEconomy = function() + ussr.Cash = 6000 + + if not Harvester.IsDead then + Harvester.FindResources() + ProtectHarvester(Harvester) + end +end + +InitProductionBuildings = function() + if not Warfactory2.IsDead then + Warfactory2.IsPrimaryBuilding = true + Trigger.OnKilled(Warfactory2, function() BuildVehicles = false end) + else + BuildVehicles = false + end + + if not Barracks2.IsDead then + Barracks2.IsPrimaryBuilding = true + + Trigger.OnKilled(Barracks2, function() + if not Barracks3.IsDead then + Barracks3.IsPrimaryBuilding = true + else + TrainInfantry = false + end + end) + elseif not Barracks3.IsDead then + Barracks3.IsPrimaryBuilding = true + else + TrainInfantry = false + end + + if not Barracks3.IsDead then + Trigger.OnKilled(Barracks3, function() + if Barracks2.IsDead then + TrainInfantry = false + end + end) + end + + if Map.LobbyOption("difficulty") ~= "easy" then + + if not Airfield1.IsDead then + Trigger.OnKilled(Airfield1, function() + if Airfield2.IsDead then + AirAttacks = false + else + Airfield2.IsPrimaryBuilding = true + Trigger.OnKilled(Airfield2, function() AirAttacks = false end) + end + end) + + Airfield1.IsPrimaryBuilding = true + AirAttacks = true + + elseif not Airfield2.IsDead then + Trigger.OnKilled(Airfield2, function() AirAttacks = false end) + + Airfield2.IsPrimaryBuilding = true + AirAttacks = true + end + end +end + +ProduceInfantry = function() + if not TrainInfantry then + return + end + + if HoldProduction then + Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry) + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(3), DateTime.Seconds(9)) + local toBuild = { Utils.Random(SovietInfantryTypes) } + ussr.Build(toBuild, function(unit) + IdlingUnits[#IdlingUnits + 1] = unit[1] + Trigger.AfterDelay(delay, ProduceInfantry) + + if #IdlingUnits >= (AttackGroupSize * 2.5) then + SendAttack() + end + end) +end + +ProduceVehicles = function() + if not BuildVehicles then + return + end + + if HoldProduction then + Trigger.AfterDelay(DateTime.Minutes(1), ProduceVehicles) + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(5), DateTime.Seconds(9)) + if HarvesterKilled then + HarvesterKilled = false + ussr.Build({ "harv" }, function(harv) + harv[1].FindResources() + ProtectHarvester(harv[1]) + Trigger.AfterDelay(delay, ProduceVehicles) + end) + return + end + + Warfactory2.RallyPoint = Utils.Random(Rallypoints).Location + local toBuild = { Utils.Random(SovietVehicleTypes) } + ussr.Build(toBuild, function(unit) + IdlingUnits[#IdlingUnits + 1] = unit[1] + Trigger.AfterDelay(delay, ProduceVehicles) + + if #IdlingUnits >= (AttackGroupSize * 2.5) then + SendAttack() + end + end) +end + +ProduceAircraft = function() + if not AirAttacks then + return + end + + ussr.Build(SovietAircraftType, function(units) + local yak = units[1] + Yaks[#Yaks + 1] = yak + + Trigger.OnKilled(yak, ProduceAircraft) + if #Yaks == 1 then + Trigger.AfterDelay(DateTime.Minutes(1), ProduceAircraft) + end + + TargetAndAttack(yak) + end) +end + +TargetAndAttack = function(yak, target) + if not target or target.IsDead or (not target.IsInWorld) then + local enemies = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == greece and self.HasProperty("Health") and yak.CanTarget(self) end) + if #enemies > 0 then + target = Utils.Random(enemies) + end + end + + if target and yak.AmmoCount() > 0 and yak.CanTarget(target) then + yak.Attack(target) + else + yak.ReturnToBase() + end + + yak.CallFunc(function() + TargetAndAttack(yak, target) + end) +end + +ActivateAI = function() + + InitAIUnits() + InitAIEconomy() + InitProductionBuildings() + + Trigger.AfterDelay(DateTime.Minutes(5), function() + ProduceInfantry() + ProduceVehicles() + if AirAttacks then + Trigger.AfterDelay(DateTime.Minutes(3), ProduceAircraft) + end + end) +end diff --git a/mods/ura/maps/allies-05a/allies05a.lua b/mods/ura/maps/allies-05a/allies05a.lua new file mode 100644 index 0000000..730e61c --- /dev/null +++ b/mods/ura/maps/allies-05a/allies05a.lua @@ -0,0 +1,365 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +if Map.LobbyOption("difficulty") == "easy" then + TanyaType = "e7" + ReinforceCash = 5000 + HoldAITime = DateTime.Minutes(3) + SpecialCameras = true +elseif Map.LobbyOption("difficulty") == "normal" then + TanyaType = "e7.noautotarget" + ReinforceCash = 2250 + HoldAITime = DateTime.Minutes(2) + SpecialCameras = true +else + TanyaType = "e7.noautotarget" + ReinforceCash = 1500 + HoldAITime = DateTime.Minutes(1) + DateTime.Seconds(30) + SendWaterTransports = true +end + +SpyType = { "spy" } +SpyEntryPath = { SpyEntry.Location, SpyLoadout.Location } +InsertionTransport = "lst.in" +ExtractionTransport = "lst" +TrukPath = { TrukWaypoint1, TrukWaypoint2, TrukWaypoint3, TrukWaypoint4, TrukWaypoint5, TrukWaypoint6 } +ExtractionHeliType = "tran" +InsertionHeliType = "tran.in" +ExtractionPath = { ExtractionEntry.Location, ExtractionLZ.Location } +HeliReinforcements = { "medi", "mech", "mech" } + +GreeceReinforcements = +{ + { types = { "2tnk", "2tnk", "2tnk", "arty", "arty" }, entry = { SpyEntry.Location, SpyLoadout.Location } }, + { types = { "e3", "e3", "e3", "e6", "e6" }, entry = { SpyEntry.Location, GreeceLoadout1.Location } }, + { types = { "jeep", "jeep", "e1", "e1", "2tnk" }, entry = { SpyEntry.Location, GreeceLoadout2.Location } } +} + +DogPatrol = { Dog1, Dog2 } +PatrolA = { PatrolA1, PatrolA2, PatrolA3, PatrolA4, PatrolA5 } +PatrolB = { PatrolB1, PatrolB2, PatrolB3 } + +DogPatrolPath = { DogPatrolRally1.Location, DogPatrolRally2.Location, DogPatrolRally3.Location } +PatrolAPath = { PatrolRally.Location, PatrolARally1.Location, PatrolARally2.Location, PatrolARally3.Location } +PatrolBPath = { PatrolBRally1.Location, PatrolBRally2.Location, PatrolBRally3.Location, PatrolRally.Location } + +TanyaVoices = { "tuffguy", "bombit", "laugh", "gotit", "lefty", "keepem" } +SpyVoice = "sking" +SamSites = { Sam1, Sam2, Sam3, Sam4 } + +GroupPatrol = function(units, waypoints, delay) + local i = 1 + local stop = false + + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function() + if stop then + return + end + + if unit.Location == waypoints[i] then + local bool = Utils.All(units, function(actor) return actor.IsIdle end) + + if bool then + stop = true + + i = i + 1 + if i > #waypoints then + i = 1 + end + + Trigger.AfterDelay(delay, function() stop = false end) + end + else + unit.AttackMove(waypoints[i]) + end + end) + end) +end + +Tick = function() + if FollowTruk then + Camera.Position = Truk.CenterPosition + end + + if ussr.HasNoRequiredUnits() then + if not greece.IsObjectiveCompleted(KillAll) and Map.LobbyOption("difficulty") == "tough" then + SendWaterExtraction() + end + greece.MarkCompletedObjective(KillAll) + end + + if GreeceReinforcementsArrived and greece.HasNoRequiredUnits() then + ussr.MarkCompletedObjective(ussrObj) + end + + if ussr.Resources >= ussr.ResourceCapacity * 0.75 then + ussr.Cash = ussr.Cash + ussr.Resources - ussr.ResourceCapacity * 0.25 + ussr.Resources = ussr.ResourceCapacity * 0.25 + end +end + +SendReinforcements = function() + GreeceReinforcementsArrived = true + Camera.Position = ReinforceCamera.CenterPosition + greece.Cash = greece.Cash + ReinforceCash + + Utils.Do(GreeceReinforcements, function(reinforcements) + Reinforcements.ReinforceWithTransport(greece, InsertionTransport, reinforcements.types, reinforcements.entry, { SpyEntry.Location }) + end) + + Media.PlaySpeechNotification(greece, "AlliedReinforcementsArrived") + + ActivateAI() +end + +ExtractUnits = function(extractionUnit, pos, after) + if extractionUnit.IsDead or not extractionUnit.HasPassengers then + return + end + + extractionUnit.Move(pos) + extractionUnit.Destroy() + + Trigger.OnRemovedFromWorld(extractionUnit, after) +end + +SendWaterExtraction = function() + local flare = Actor.Create("flare", true, { Owner = greece, Location = SpyEntryPath[2] + CVec.New(2, 0) }) + Trigger.AfterDelay(DateTime.Seconds(5), flare.Destroy) + Media.PlaySpeechNotification(greece, "SignalFlareNorth") + Camera.Position = flare.CenterPosition + + WaterExtractionTran = Reinforcements.ReinforceWithTransport(greece, ExtractionTransport, nil, SpyEntryPath)[1] + ExtractObj = greece.AddPrimaryObjective("Get all your forces into the transport.") + + Trigger.OnKilled(WaterExtractionTran, function() ussr.MarkCompletedObjective(ussrObj) end) + Trigger.OnAllRemovedFromWorld(greece.GetGroundAttackers(), function() + ExtractUnits(WaterExtractionTran, SpyEntryPath[1], function() + greece.MarkCompletedObjective(ExtractObj) + greece.MarkCompletedObjective(surviveObj) + end) + end) +end + +WarfactoryInfiltrated = function() + FollowTruk = true + Truk.GrantCondition("hijacked") + + Truk.Wait(DateTime.Seconds(1)) + Utils.Do(TrukPath, function(waypoint) + Truk.Move(waypoint.Location) + end) + + if SpecialCameras then + Trigger.AfterDelay(DateTime.Seconds(2), function() + SpyCameraA.Destroy() + SpyCameraB.Destroy() + end) + end +end + +MissInfiltrated = function() + for i = 0, 5, 1 do + local sound = Utils.Random(TanyaVoices) + Trigger.AfterDelay(DateTime.Seconds(i), function() + Media.PlaySoundNotification(greece, sound) + end) + end + Prison.Attack(Prison) + + Trigger.AfterDelay(DateTime.Seconds(6), FreeTanya) +end + +FreeTanya = function() + Prison.Stop() + Tanya = Actor.Create(TanyaType, true, { Owner = greece, Location = Prison.Location + CVec.New(1, 1) }) + Tanya.Demolish(Prison) + Tanya.Move(Tanya.Location + CVec.New(Utils.RandomInteger(-1, 2), 1)) + + if TanyaType == "e7.noautotarget" then + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.DisplayMessage("According to the rules of engagement I need your explicit orders to fire, Commander!", "Tanya") + end) + end + + Trigger.OnKilled(Tanya, function() ussr.MarkCompletedObjective(ussrObj) end) + + if Map.LobbyOption("difficulty") == "tough" then + KillSams = greece.AddPrimaryObjective("Destroy all four SAM Sites that block\nour reinforcements' helicopter.") + + greece.MarkCompletedObjective(mainObj) + surviveObj = greece.AddPrimaryObjective("Tanya must not die!") + Media.PlaySpeechNotification(greece, "TanyaRescued") + else + KillSams = greece.AddPrimaryObjective("Destroy all four SAM sites that block\nthe extraction helicopter.") + + Media.PlaySpeechNotification(greece, "TargetFreed") + end + + if not SpecialCameras then + PrisonCamera.Destroy() + end +end + +SendSpy = function() + Camera.Position = SpyEntry.CenterPosition + Spy = Reinforcements.ReinforceWithTransport(greece, InsertionTransport, SpyType, SpyEntryPath, { SpyEntryPath[1] })[2][1] + + Trigger.OnKilled(Spy, function() ussr.MarkCompletedObjective(ussrObj) end) + + if SpecialCameras then + SpyCameraA = Actor.Create("camera", true, { Owner = greece, Location = SpyCamera1.Location }) + SpyCameraB = Actor.Create("camera", true, { Owner = greece, Location = SpyCamera2.Location }) + end + + Trigger.AfterDelay(DateTime.Seconds(3), function() + Media.DisplayMessage("Commander! You have to disguise me in order to get through the enemy patrols.", "Spy") + end) +end + +ActivatePatrols = function() + GroupPatrol(DogPatrol, DogPatrolPath, DateTime.Seconds(2)) + + Trigger.AfterDelay(DateTime.Seconds(3), function() + GroupPatrol(PatrolA, PatrolAPath, DateTime.Seconds(7)) + GroupPatrol(PatrolB, PatrolBPath, DateTime.Seconds(6)) + end) +end + +InitTriggers = function() + Trigger.OnInfiltrated(Warfactory, function() + Trigger.ClearAll(Spy) + greece.MarkCompletedObjective(infWarfactory) + WarfactoryInfiltrated() + end) + + Trigger.OnInfiltrated(Prison, function() + if not greece.IsObjectiveCompleted(infWarfactory) then + Media.DisplayMessage("Good work! But next time skip the heroics!", "Battlefield Control") + greece.MarkCompletedObjective(infWarfactory) + end + Trigger.ClearAll(Spy) + Trigger.AfterDelay(DateTime.Seconds(2), MissInfiltrated) + end) + + Trigger.OnEnteredFootprint({ TrukWaypoint5.Location }, function(a, id) + if a == Truk then + Trigger.RemoveFootprintTrigger(id) + + Spy = Actor.Create("spy", true, { Owner = greece, Location = TrukWaypoint5.Location }) + Spy.DisguiseAsType("e1", ussr) + Spy.Move(SpyWaypoint.Location) + Spy.Infiltrate(Prison) + Media.PlaySoundNotification(greece, SpyVoice) + + FollowTruk = false + + if SpecialCameras then + PrisonCamera = Actor.Create("camera", true, { Owner = greece, Location = TrukWaypoint5.Location }) + else + PrisonCamera = Actor.Create("camera.small", true, { Owner = greece, Location = Prison.Location + CVec.New(1, 1) }) + end + + Trigger.OnKilled(Spy, function() ussr.MarkCompletedObjective(ussrObj) end) + end + end) + + Trigger.OnEnteredFootprint({ TrukWaypoint6.Location }, function(a, id) + if a == Truk then + Trigger.RemoveFootprintTrigger(id) + Truk.Stop() + Truk.Kill() + ExplosiveBarrel.Kill() + end + end) + + if Map.LobbyOption("difficulty") ~= "tough" then + Trigger.OnKilled(Mammoth, function() + Trigger.AfterDelay(HoldAITime - DateTime.Seconds(45), function() HoldProduction = false end) + Trigger.AfterDelay(HoldAITime, function() Attacking = true end) + end) + end + + Trigger.OnKilled(FlameBarrel, function() + if not FlameTower.IsDead then + FlameTower.Kill() + end + end) + + Trigger.OnKilled(SamBarrel, Sam1.Kill) + + Trigger.OnAllKilled(SamSites, function() + greece.MarkCompletedObjective(KillSams) + + local flare = Actor.Create("flare", true, { Owner = greece, Location = ExtractionPath[2] + CVec.New(0, -1) }) + Trigger.AfterDelay(DateTime.Seconds(7), flare.Destroy) + Media.PlaySpeechNotification(greece, "SignalFlare") + + if Map.LobbyOption("difficulty") == "tough" then + Reinforcements.ReinforceWithTransport(greece, InsertionHeliType, HeliReinforcements, ExtractionPath, { ExtractionPath[1] }) + if not Harvester.IsDead then + Harvester.FindResources() + end + + else + ExtractionHeli = Reinforcements.ReinforceWithTransport(greece, ExtractionHeliType, nil, ExtractionPath)[1] + local exitPos = CPos.New(ExtractionPath[1].X, ExtractionPath[2].Y) + + Trigger.OnKilled(ExtractionHeli, function() ussr.MarkCompletedObjective(ussrObj) end) + Trigger.OnRemovedFromWorld(Tanya, function() + ExtractUnits(ExtractionHeli, exitPos, function() + + Media.PlaySpeechNotification(greece, "TanyaRescued") + greece.MarkCompletedObjective(mainObj) + SendReinforcements() + + if SpecialCameras then + PrisonCamera.Destroy() + end + end) + end) + end + end) +end + +InitObjectives = function() + Trigger.OnObjectiveAdded(greece, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + ussrObj = ussr.AddPrimaryObjective("Deny the Allies.") + mainObj = greece.AddPrimaryObjective("Rescue Tanya.") + KillAll = greece.AddPrimaryObjective("Eliminate all Soviet units in this area.") + infWarfactory = greece.AddPrimaryObjective("Infiltrate the Soviet warfactory.") + + Trigger.OnObjectiveCompleted(greece, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(greece, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(greece, function() + Media.PlaySpeechNotification(player, "Lose") + end) + Trigger.OnPlayerWon(greece, function() + Media.PlaySpeechNotification(player, "Win") + end) +end + +WorldLoaded = function() + greece = Player.GetPlayer("Greece") + ussr = Player.GetPlayer("USSR") + + InitObjectives() + InitTriggers() + SendSpy() + + Trigger.AfterDelay(DateTime.Seconds(3), ActivatePatrols) +end diff --git a/mods/ura/maps/allies-05a/map.bin b/mods/ura/maps/allies-05a/map.bin new file mode 100644 index 0000000..d6ab55d Binary files /dev/null and b/mods/ura/maps/allies-05a/map.bin differ diff --git a/mods/ura/maps/allies-05a/map.png b/mods/ura/maps/allies-05a/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/allies-05a/map.png differ diff --git a/mods/ura/maps/allies-05a/map.yaml b/mods/ura/maps/allies-05a/map.yaml new file mode 100644 index 0000000..fee874c --- /dev/null +++ b/mods/ura/maps/allies-05a/map.yaml @@ -0,0 +1,1568 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 05a: Tanya's Tale + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 12,48,60,64 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FE1100 + Enemies: Greece + PlayerReference@Greece: + Name: Greece + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: E2E6F5 + Enemies: USSR + +Actors: + Actor0: cycl + Location: 35,48 + Owner: Neutral + Actor1: cycl + Location: 36,48 + Owner: Neutral + Actor2: cycl + Location: 37,48 + Owner: Neutral + Actor3: cycl + Location: 38,48 + Owner: Neutral + Actor4: cycl + Location: 39,48 + Owner: Neutral + Actor5: cycl + Location: 40,48 + Owner: Neutral + Actor6: cycl + Location: 41,48 + Owner: Neutral + Actor7: cycl + Location: 42,48 + Owner: Neutral + Actor8: cycl + Location: 43,48 + Owner: Neutral + Actor9: cycl + Location: 44,48 + Owner: Neutral + Actor10: cycl + Location: 45,48 + Owner: Neutral + Actor11: cycl + Location: 46,48 + Owner: Neutral + Actor12: cycl + Location: 47,48 + Owner: Neutral + Actor13: cycl + Location: 48,48 + Owner: Neutral + Actor14: cycl + Location: 49,48 + Owner: Neutral + Actor15: cycl + Location: 50,48 + Owner: Neutral + Actor16: cycl + Location: 51,48 + Owner: Neutral + Actor17: cycl + Location: 35,49 + Owner: Neutral + Actor18: cycl + Location: 51,49 + Owner: Neutral + Actor19: cycl + Location: 52,49 + Owner: Neutral + Actor20: cycl + Location: 35,50 + Owner: Neutral + Actor21: cycl + Location: 35,51 + Owner: Neutral + Actor22: cycl + Location: 35,52 + Owner: Neutral + Actor23: cycl + Location: 35,53 + Owner: Neutral + Actor24: cycl + Location: 36,53 + Owner: Neutral + Actor25: cycl + Location: 35,54 + Owner: Neutral + Actor26: cycl + Location: 36,54 + Owner: Neutral + Actor27: cycl + Location: 51,57 + Owner: Neutral + Actor28: cycl + Location: 52,57 + Owner: Neutral + Actor29: cycl + Location: 35,58 + Owner: Neutral + Actor30: cycl + Location: 36,58 + Owner: Neutral + Actor31: cycl + Location: 47,58 + Owner: Neutral + Actor32: cycl + Location: 48,58 + Owner: Neutral + Actor33: cycl + Location: 49,58 + Owner: Neutral + Actor34: cycl + Location: 50,58 + Owner: Neutral + Actor35: cycl + Location: 51,58 + Owner: Neutral + Actor36: cycl + Location: 35,59 + Owner: Neutral + Actor37: cycl + Location: 36,59 + Owner: Neutral + Actor38: cycl + Location: 37,59 + Owner: Neutral + Actor39: cycl + Location: 38,59 + Owner: Neutral + Actor40: cycl + Location: 39,59 + Owner: Neutral + Actor41: cycl + Location: 40,59 + Owner: Neutral + Actor42: cycl + Location: 41,59 + Owner: Neutral + Actor43: cycl + Location: 42,59 + Owner: Neutral + Actor44: cycl + Location: 46,59 + Owner: Neutral + Actor45: cycl + Location: 47,59 + Owner: Neutral + Actor46: brik + Location: 39,73 + Owner: Neutral + Actor47: brik + Location: 40,73 + Owner: Neutral + Actor48: brik + Location: 41,73 + Owner: Neutral + Actor49: brik + Location: 42,73 + Owner: Neutral + Actor50: brik + Location: 46,73 + Owner: Neutral + Actor51: brik + Location: 47,73 + Owner: Neutral + Actor52: brik + Location: 48,73 + Owner: Neutral + Actor53: brik + Location: 49,73 + Owner: Neutral + Actor54: brik + Location: 39,74 + Owner: Neutral + Actor55: brik + Location: 41,74 + Owner: Neutral + Actor56: brik + Location: 42,74 + Owner: Neutral + Actor57: brik + Location: 46,74 + Owner: Neutral + Actor58: brik + Location: 47,74 + Owner: Neutral + Actor59: brik + Location: 49,74 + Owner: Neutral + Actor60: brik + Location: 39,75 + Owner: Neutral + Actor61: brik + Location: 49,75 + Owner: Neutral + Actor62: brik + Location: 39,76 + Owner: Neutral + Actor63: brik + Location: 49,76 + Owner: Neutral + Actor64: brik + Location: 13,77 + Owner: Neutral + Actor65: brik + Location: 14,77 + Owner: Neutral + Actor66: brik + Location: 15,77 + Owner: Neutral + Actor67: brik + Location: 16,77 + Owner: Neutral + Actor68: brik + Location: 17,77 + Owner: Neutral + Actor69: brik + Location: 18,77 + Owner: Neutral + Actor70: brik + Location: 19,77 + Owner: Neutral + Actor71: brik + Location: 20,77 + Owner: Neutral + Actor72: brik + Location: 21,77 + Owner: Neutral + Actor73: brik + Location: 22,77 + Owner: Neutral + Actor74: brik + Location: 23,77 + Owner: Neutral + Actor75: brik + Location: 24,77 + Owner: Neutral + Actor76: brik + Location: 25,77 + Owner: Neutral + Actor77: brik + Location: 26,77 + Owner: Neutral + Actor78: brik + Location: 27,77 + Owner: Neutral + Actor79: brik + Location: 28,77 + Owner: Neutral + Actor80: brik + Location: 29,77 + Owner: Neutral + Actor81: brik + Location: 30,77 + Owner: Neutral + Actor82: brik + Location: 31,77 + Owner: Neutral + Actor83: brik + Location: 32,77 + Owner: Neutral + Actor84: brik + Location: 33,77 + Owner: Neutral + Actor85: brik + Location: 39,77 + Owner: Neutral + Actor86: brik + Location: 49,77 + Owner: Neutral + Actor87: brik + Location: 13,78 + Owner: Neutral + Actor88: brik + Location: 14,78 + Owner: Neutral + Actor89: brik + Location: 33,78 + Owner: Neutral + Actor90: brik + Location: 39,78 + Owner: Neutral + Actor91: brik + Location: 49,78 + Owner: Neutral + Actor92: brik + Location: 13,79 + Owner: Neutral + Actor93: brik + Location: 33,79 + Owner: Neutral + Actor95: brik + Location: 49,79 + Owner: Neutral + Actor96: brik + Location: 13,80 + Owner: Neutral + Actor97: brik + Location: 33,80 + Owner: Neutral + Actor98: brik + Location: 39,80 + Owner: Neutral + Actor99: brik + Location: 49,80 + Owner: Neutral + Actor100: brik + Location: 13,81 + Owner: Neutral + Actor101: brik + Location: 33,81 + Owner: Neutral + Actor102: brik + Location: 39,81 + Owner: Neutral + Actor103: brik + Location: 49,81 + Owner: Neutral + Actor104: brik + Location: 50,81 + Owner: Neutral + Actor105: brik + Location: 51,81 + Owner: Neutral + Actor106: brik + Location: 52,81 + Owner: Neutral + Actor107: brik + Location: 53,81 + Owner: Neutral + Actor108: brik + Location: 54,81 + Owner: Neutral + Actor109: brik + Location: 55,81 + Owner: Neutral + Actor110: brik + Location: 56,81 + Owner: Neutral + Actor111: brik + Location: 57,81 + Owner: Neutral + Actor112: brik + Location: 58,81 + Owner: Neutral + Actor113: brik + Location: 59,81 + Owner: Neutral + Actor114: brik + Location: 60,81 + Owner: Neutral + Actor115: brik + Location: 61,81 + Owner: Neutral + Actor116: brik + Location: 62,81 + Owner: Neutral + Actor117: brik + Location: 66,81 + Owner: Neutral + Actor118: brik + Location: 67,81 + Owner: Neutral + Actor119: brik + Location: 68,81 + Owner: Neutral + Actor120: brik + Location: 69,81 + Owner: Neutral + Actor121: brik + Location: 70,81 + Owner: Neutral + Actor122: brik + Location: 71,81 + Owner: Neutral + Actor123: brik + Location: 13,82 + Owner: Neutral + Actor124: brik + Location: 33,82 + Owner: Neutral + Actor125: brik + Location: 34,82 + Owner: Neutral + Actor126: brik + Location: 38,82 + Owner: Neutral + Actor127: brik + Location: 39,82 + Owner: Neutral + Actor128: brik + Location: 61,82 + Owner: Neutral + Actor129: brik + Location: 62,82 + Owner: Neutral + Actor130: brik + Location: 66,82 + Owner: Neutral + Actor131: brik + Location: 67,82 + Owner: Neutral + Actor132: brik + Location: 71,82 + Owner: Neutral + Actor133: brik + Location: 13,83 + Owner: Neutral + Actor134: brik + Location: 33,83 + Owner: Neutral + Actor135: brik + Location: 34,83 + Owner: Neutral + Actor136: brik + Location: 35,83 + Owner: Neutral + Actor137: brik + Location: 36,83 + Owner: Neutral + Actor138: brik + Location: 37,83 + Owner: Neutral + Actor139: brik + Location: 38,83 + Owner: Neutral + Actor140: brik + Location: 39,83 + Owner: Neutral + Actor141: brik + Location: 71,83 + Owner: Neutral + Actor142: brik + Location: 13,84 + Owner: Neutral + Actor143: brik + Location: 34,84 + Owner: Neutral + Actor144: brik + Location: 71,84 + Owner: Neutral + Actor145: brik + Location: 13,85 + Owner: Neutral + Actor146: brik + Location: 33,85 + Owner: Neutral + Actor147: brik + Location: 34,85 + Owner: Neutral + Actor148: brik + Location: 71,85 + Owner: Neutral + Actor149: brik + Location: 13,86 + Owner: Neutral + Actor150: brik + Location: 33,86 + Owner: Neutral + Actor151: brik + Location: 34,86 + Owner: Neutral + Actor152: brik + Location: 71,86 + Owner: Neutral + Actor153: brik + Location: 13,87 + Owner: Neutral + Actor154: brik + Location: 71,87 + Owner: Neutral + Actor155: brik + Location: 13,88 + Owner: Neutral + Actor156: brik + Location: 33,88 + Owner: Neutral + Actor157: brik + Location: 34,88 + Owner: Neutral + Actor158: brik + Location: 71,88 + Owner: Neutral + Actor159: brik + Location: 13,89 + Owner: Neutral + Actor160: brik + Location: 33,89 + Owner: Neutral + Actor161: brik + Location: 34,89 + Owner: Neutral + Actor162: brik + Location: 65,89 + Owner: Neutral + Actor163: brik + Location: 66,89 + Owner: Neutral + Actor164: brik + Location: 67,89 + Owner: Neutral + Actor165: brik + Location: 68,89 + Owner: Neutral + Actor166: brik + Location: 69,89 + Owner: Neutral + Actor167: brik + Location: 70,89 + Owner: Neutral + Actor168: brik + Location: 71,89 + Owner: Neutral + Actor169: brik + Location: 13,90 + Owner: Neutral + Actor170: brik + Location: 34,90 + Owner: Neutral + Actor171: brik + Location: 65,90 + Owner: Neutral + Actor172: brik + Location: 13,91 + Owner: Neutral + Actor173: brik + Location: 34,91 + Owner: Neutral + Actor174: brik + Location: 65,91 + Owner: Neutral + Actor175: brik + Location: 13,92 + Owner: Neutral + Actor176: brik + Location: 34,92 + Owner: Neutral + Actor177: brik + Location: 64,92 + Owner: Neutral + Actor178: brik + Location: 65,92 + Owner: Neutral + Actor179: brik + Location: 13,93 + Owner: Neutral + Actor180: brik + Location: 34,93 + Owner: Neutral + Actor181: brik + Location: 64,93 + Owner: Neutral + Actor182: brik + Location: 65,93 + Owner: Neutral + Actor183: brik + Location: 13,94 + Owner: Neutral + Actor184: brik + Location: 14,94 + Owner: Neutral + Actor185: brik + Location: 33,94 + Owner: Neutral + Actor186: brik + Location: 34,94 + Owner: Neutral + Actor187: brik + Location: 64,94 + Owner: Neutral + Actor188: brik + Location: 13,95 + Owner: Neutral + Actor189: brik + Location: 14,95 + Owner: Neutral + Actor190: brik + Location: 15,95 + Owner: Neutral + Actor191: brik + Location: 16,95 + Owner: Neutral + Actor192: brik + Location: 17,95 + Owner: Neutral + Actor193: brik + Location: 18,95 + Owner: Neutral + Actor194: brik + Location: 19,95 + Owner: Neutral + Actor195: brik + Location: 20,95 + Owner: Neutral + Actor196: brik + Location: 26,95 + Owner: Neutral + Actor197: brik + Location: 27,95 + Owner: Neutral + Actor198: brik + Location: 28,95 + Owner: Neutral + Actor199: brik + Location: 29,95 + Owner: Neutral + Actor200: brik + Location: 30,95 + Owner: Neutral + Actor201: brik + Location: 31,95 + Owner: Neutral + Actor202: brik + Location: 32,95 + Owner: Neutral + Actor203: brik + Location: 33,95 + Owner: Neutral + Actor204: brik + Location: 34,95 + Owner: Neutral + Actor205: brik + Location: 64,95 + Owner: Neutral + Actor206: brik + Location: 19,96 + Owner: Neutral + Actor207: brik + Location: 20,96 + Owner: Neutral + Actor208: brik + Location: 26,96 + Owner: Neutral + Actor209: brik + Location: 27,96 + Owner: Neutral + Actor210: brik + Location: 33,96 + Owner: Neutral + Actor211: brik + Location: 63,96 + Owner: Neutral + Actor212: brik + Location: 64,96 + Owner: Neutral + Actor213: brik + Location: 33,97 + Owner: Neutral + Actor214: brik + Location: 34,97 + Owner: Neutral + Actor215: brik + Location: 35,97 + Owner: Neutral + Actor216: brik + Location: 36,97 + Owner: Neutral + Actor217: brik + Location: 37,97 + Owner: Neutral + Actor218: brik + Location: 38,97 + Owner: Neutral + Actor219: brik + Location: 39,97 + Owner: Neutral + Actor220: brik + Location: 40,97 + Owner: Neutral + Actor221: brik + Location: 41,97 + Owner: Neutral + Actor222: brik + Location: 42,97 + Owner: Neutral + Actor223: brik + Location: 43,97 + Owner: Neutral + Actor224: brik + Location: 44,97 + Owner: Neutral + Actor225: brik + Location: 45,97 + Owner: Neutral + Actor226: brik + Location: 46,97 + Owner: Neutral + Actor227: brik + Location: 47,97 + Owner: Neutral + Actor228: brik + Location: 48,97 + Owner: Neutral + Actor229: brik + Location: 49,97 + Owner: Neutral + Actor230: brik + Location: 50,97 + Owner: Neutral + Actor231: brik + Location: 51,97 + Owner: Neutral + Actor232: brik + Location: 52,97 + Owner: Neutral + Actor233: brik + Location: 53,97 + Owner: Neutral + Actor234: brik + Location: 54,97 + Owner: Neutral + Actor235: brik + Location: 55,97 + Owner: Neutral + Actor236: brik + Location: 56,97 + Owner: Neutral + Actor237: brik + Location: 57,97 + Owner: Neutral + Actor238: brik + Location: 58,97 + Owner: Neutral + Actor239: brik + Location: 59,97 + Owner: Neutral + Actor240: brik + Location: 60,97 + Owner: Neutral + Actor241: brik + Location: 61,97 + Owner: Neutral + Actor242: brik + Location: 62,97 + Owner: Neutral + Actor243: brik + Location: 63,97 + Owner: Neutral + Actor244: brik + Location: 64,97 + Owner: Neutral + Actor245: sbag + Location: 20,98 + Owner: Neutral + Actor246: sbag + Location: 26,98 + Owner: Neutral + Actor247: sbag + Location: 20,99 + Owner: Neutral + Actor248: sbag + Location: 26,99 + Owner: Neutral + Actor249: t16 + Location: 64,90 + Owner: Neutral + Actor250: tc03 + Location: 46,93 + Owner: Neutral + Actor251: tc04 + Location: 52,83 + Owner: Neutral + Actor252: tc05 + Location: 41,84 + Owner: Neutral + Actor253: tc03 + Location: 31,88 + Owner: Neutral + Actor254: t11 + Location: 28,108 + Owner: Neutral + Actor255: t08 + Location: 16,108 + Owner: Neutral + Actor256: t10 + Location: 26,96 + Owner: Neutral + Actor257: tc02 + Location: 41,60 + Owner: Neutral + Actor258: tc05 + Location: 17,97 + Owner: Neutral + Actor259: tc04 + Location: 14,95 + Owner: Neutral + Actor260: t15 + Location: 15,97 + Owner: Neutral + Actor261: t08 + Location: 18,96 + Owner: Neutral + Actor262: t16 + Location: 18,60 + Owner: Neutral + Actor263: t14 + Location: 16,64 + Owner: Neutral + Actor264: t10 + Location: 12,57 + Owner: Neutral + Actor265: t08 + Location: 16,56 + Owner: Neutral + Actor266: tc02 + Location: 28,51 + Owner: Neutral + Actor267: tc04 + Location: 49,58 + Owner: Neutral + Actor268: t07 + Location: 36,64 + Owner: Neutral + Actor269: t15 + Location: 36,60 + Owner: Neutral + Actor270: t08 + Location: 31,51 + Owner: Neutral + Actor271: t07 + Location: 29,48 + Owner: Neutral + Actor272: t12 + Location: 97,49 + Owner: Neutral + Actor273: tc04 + Location: 40,80 + Owner: Neutral + Actor274: tc03 + Location: 59,95 + Owner: Neutral + Actor275: tc02 + Location: 35,84 + Owner: Neutral + Actor276: tc01 + Location: 42,81 + Owner: Neutral + Actor277: t11 + Location: 44,77 + Owner: Neutral + Actor278: t01 + Location: 43,80 + Owner: Neutral + Actor279: t10 + Location: 50,59 + Owner: Neutral + Actor280: t01 + Location: 25,51 + Owner: Neutral + Actor281: t02 + Location: 20,56 + Owner: Neutral + Actor282: tc05 + Location: 27,104 + Owner: Neutral + Actor283: t08 + Location: 26,103 + Owner: Neutral + Actor286: barl + Location: 21,88 + Owner: USSR + Actor287: barl + Location: 27,88 + Owner: USSR + Actor288: barl + Location: 19,87 + Owner: USSR + Actor289: brl3 + Location: 50,49 + Owner: USSR + Actor291: powr + Location: 48,49 + Owner: USSR + Actor293: ftur + Location: 37,56 + Owner: USSR + Actor296: powr + Location: 59,82 + Owner: USSR + Actor297: fcom + Location: 24,85 + Owner: USSR + Actor299: fix + Location: 61,90 + Owner: USSR + Actor300: kenn + Location: 32,84 + Owner: USSR + Actor301: kenn + Location: 48,82 + Owner: USSR + Actor306: silo + Location: 57,90 + Owner: USSR + Actor307: silo + Location: 53,90 + Owner: USSR + Actor310: ftur + Location: 36,86 + Owner: USSR + Actor312: ftur + Location: 44,76 + Owner: USSR + Actor313: dome + Location: 53,85 + Owner: USSR + Actor314: tsla + Location: 40,74 + Owner: USSR + Actor315: tsla + Location: 48,74 + Owner: USSR + Actor317: powr + Location: 46,49 + Owner: USSR + Actor318: brl3 + Location: 35,89 + Owner: USSR + Actor319: barl + Location: 35,88 + Owner: USSR + Actor320: barl + Location: 36,89 + Owner: USSR + Actor321: brl3 + Location: 26,88 + Owner: USSR + Actor322: brl3 + Location: 20,88 + Owner: USSR + Actor323: barl + Location: 25,88 + Owner: USSR + Actor324: brl3 + Location: 28,88 + Owner: USSR + Actor325: barl + Location: 58,82 + Owner: USSR + Actor326: brl3 + Location: 57,82 + Owner: USSR + Actor327: barl + Location: 58,83 + Owner: USSR + Actor328: barl + Location: 58,84 + Owner: USSR + Actor329: fix + Location: 46,54 + Owner: USSR + Actor330: fact + Location: 36,49 + Owner: USSR + Actor331: brl3 + Location: 42,54 + Owner: USSR + Actor332: brl3 + Location: 42,55 + Owner: USSR + Actor333: barl + Location: 38,54 + Owner: USSR + Actor335: barl + Location: 42,53 + Owner: USSR + Actor336: brl3 + Location: 39,49 + Owner: USSR + Actor337: brl3 + Location: 48,56 + Owner: USSR + Actor338: barl + Location: 46,56 + Owner: USSR + Actor339: barl + Location: 40,49 + Owner: USSR + Actor340: kenn + Location: 26,94 + Owner: USSR + Actor341: brl3 + Location: 41,52 + Owner: USSR + Actor342: barl + Location: 40,52 + Owner: USSR + Actor343: brl3 + Location: 39,53 + Owner: USSR + Actor345: brl3 + Location: 37,89 + Owner: USSR + Actor346: brl3 + Location: 58,85 + Owner: USSR + Actor347: brl3 + Location: 56,82 + Owner: USSR + Actor348: brl3 + Location: 55,82 + Owner: USSR + Actor349: barl + Location: 54,82 + Owner: USSR + Actor350: barl + Location: 52,82 + Owner: USSR + Actor351: brl3 + Location: 53,82 + Owner: USSR + Actor352: brl3 + Location: 51,82 + Owner: USSR + Actor353: barl + Location: 52,83 + Owner: USSR + Actor354: brl3 + Location: 51,83 + Owner: USSR + Actor355: barl + Location: 50,82 + Owner: USSR + Actor356: silo + Location: 55,90 + Owner: USSR + Actor357: silo + Location: 55,88 + Owner: USSR + Actor358: brl3 + Location: 20,108 + Owner: USSR + Actor359: barl + Location: 18,108 + Owner: USSR + Actor361: ftur + Location: 62,80 + Owner: USSR + Actor362: ftur + Location: 66,80 + Owner: USSR + Actor363: powr + Location: 36,94 + Owner: USSR + Actor364: powr + Location: 38,94 + Owner: USSR + Actor365: powr + Location: 42,94 + Owner: USSR + Actor366: powr + Location: 44,94 + Owner: USSR + Actor367: powr + Location: 24,78 + Owner: USSR + Actor368: powr + Location: 31,78 + Owner: USSR + Actor369: powr + Location: 22,78 + Owner: USSR + Actor370: powr + Location: 14,82 + Owner: USSR + Actor371: powr + Location: 16,83 + Owner: USSR + Actor372: powr + Location: 31,81 + Owner: USSR + Actor373: powr + Location: 32,91 + Owner: USSR + Actor374: powr + Location: 14,87 + Owner: USSR + Actor375: powr + Location: 69,86 + Owner: USSR + Actor376: powr + Location: 67,86 + Owner: USSR + Actor377: brl3 + Location: 19,108 + Owner: USSR + Actor429: brl3 + Location: 41,56 + Owner: USSR + Actor380: v2rl + Location: 48,87 + Owner: USSR + Facing: 224 + Actor381: v2rl + Location: 51,84 + Owner: USSR + Facing: 136 + Actor382: v2rl + Location: 45,82 + Owner: USSR + Facing: 0 + Actor384: 3tnk + Location: 54,94 + Owner: USSR + Facing: 0 + Actor385: 3tnk + Location: 46,78 + Owner: USSR + Facing: 0 + Actor386: 3tnk + Location: 43,78 + Owner: USSR + Facing: 0 + Actor387: 3tnk + Location: 28,79 + Owner: USSR + Facing: 160 + Actor388: 3tnk + Location: 42,84 + Owner: USSR + Facing: 64 + Actor390: 3tnk + Location: 63,94 + Owner: USSR + Facing: 0 + Actor391: 3tnk + Location: 52,94 + Owner: USSR + Facing: 0 + Actor392: v2rl + Location: 42,90 + Owner: USSR + Facing: 0 + Actor393: v2rl + Location: 53,95 + Owner: USSR + Facing: 0 + Actor395: 3tnk + Location: 62,85 + Owner: USSR + Facing: 0 + Actor396: 3tnk + Location: 44,89 + Owner: USSR + Facing: 0 + Actor397: 3tnk + Location: 66,84 + Owner: USSR + Facing: 0 + Actor401: e2 + Location: 20,85 + Owner: USSR + SubCell: 2 + Actor402: e2 + Location: 26,85 + Owner: USSR + SubCell: 3 + Actor403: e2 + Location: 20,85 + Owner: USSR + SubCell: 1 + Actor404: e2 + Location: 26,85 + Owner: USSR + SubCell: 0 + Actor405: e2 + Location: 26,85 + Owner: USSR + SubCell: 4 + Actor406: e1 + Location: 46,76 + Owner: USSR + SubCell: 4 + Actor407: e1 + Location: 42,76 + Owner: USSR + SubCell: 4 + Actor408: dog + Location: 32,85 + Owner: USSR + Facing: 160 + SubCell: 1 + Actor409: dog + Location: 46,81 + Owner: USSR + SubCell: 3 + Actor410: e1 + Location: 46,88 + Owner: USSR + SubCell: 4 + Actor411: e1 + Location: 42,88 + Owner: USSR + SubCell: 3 + Actor412: e2 + Location: 45,77 + Owner: USSR + SubCell: 2 + Actor413: e2 + Location: 43,76 + Owner: USSR + SubCell: 2 + Actor414: e2 + Location: 45,76 + Owner: USSR + SubCell: 2 + Actor415: e2 + Location: 43,77 + Owner: USSR + SubCell: 2 + Actor421: e1.autotarget + Location: 21,98 + Owner: USSR + SubCell: 1 + Actor422: e1.autotarget + Location: 25,98 + Owner: USSR + SubCell: 2 + Actor423: e2.autotarget + Location: 21,97 + Owner: USSR + SubCell: 1 + Actor424: e2.autotarget + Location: 25,97 + Owner: USSR + SubCell: 2 + Actor425: e2.autotarget + Location: 21,96 + Owner: USSR + SubCell: 1 + Actor426: e2.autotarget + Location: 25,96 + Owner: USSR + SubCell: 2 + Actor427: dog + Location: 25,93 + Owner: USSR + Facing: 160 + SubCell: 3 + Actor430: e1 + Location: 37,60 + Owner: USSR + Facing: 192 + SubCell: 3 + Actor431: e1 + Location: 36,60 + Owner: USSR + Facing: 192 + SubCell: 4 + Actor94: brik + Location: 39,79 + Owner: Neutral + Actor360: brl3 + Location: 21,108 + Owner: USSR + Actor284: fenc + Location: 26,102 + Owner: USSR + Actor285: fenc + Location: 26,105 + Owner: USSR + Actor292: fenc + Location: 25,105 + Owner: USSR + Actor294: fenc + Location: 25,104 + Owner: USSR + Actor295: fenc + Location: 25,103 + Owner: USSR + Actor298: fenc + Location: 24,105 + Owner: USSR + Actor311: fenc + Location: 24,106 + Owner: USSR + Actor334: fenc + Location: 19,109 + Owner: USSR + Actor344: fenc + Location: 20,109 + Owner: USSR + Actor378: fenc + Location: 21,109 + Owner: USSR + Actor379: fenc + Location: 22,109 + Owner: USSR + Actor383: fenc + Location: 23,109 + Owner: USSR + Actor389: fenc + Location: 24,109 + Owner: USSR + Actor394: fenc + Location: 25,109 + Owner: USSR + Actor398: fenc + Location: 26,109 + Owner: USSR + Actor399: fenc + Location: 27,109 + Owner: USSR + Actor400: fenc + Location: 24,104 + Owner: USSR + Actor290: e1 + Location: 65,83 + Owner: USSR + SubCell: 5 + Actor302: dog + Location: 65,83 + Owner: USSR + SubCell: 4 + Facing: 160 + Mammoth: 4tnk + Location: 41,57 + Owner: USSR + Facing: 192 + Dog1: dog + Location: 24,54 + Owner: USSR + Facing: 224 + SubCell: 0 + Dog2: dog + Location: 23,55 + Owner: USSR + Facing: 192 + SubCell: 0 + PatrolA1: e1 + Location: 28,56 + Owner: USSR + SubCell: 2 + PatrolA2: e1 + Location: 28,56 + Owner: USSR + SubCell: 3 + PatrolA3: e1 + Location: 28,56 + Owner: USSR + SubCell: 4 + PatrolA4: e1 + Location: 28,56 + Owner: USSR + SubCell: 0 + PatrolA5: e1 + Location: 28,56 + Owner: USSR + SubCell: 1 + PatrolB1: dog + Location: 50,52 + Owner: USSR + SubCell: 2 + PatrolB2: dog + Location: 49,52 + Owner: USSR + SubCell: 2 + PatrolB3: e1 + Location: 50,52 + Owner: USSR + SubCell: 3 + Truk: truk.mission + Location: 44,52 + Owner: USSR + Facing: 160 + Prison: miss + Location: 25,106 + Owner: USSR + Warfactory: weap.infiltratable + Location: 43,50 + Owner: USSR + Warfactory2: weap + Location: 49,88 + Owner: USSR + Barracks1: barr + Location: 40,53 + Owner: USSR + Barracks2: barr + Location: 56,83 + Owner: USSR + Barracks3: barr + Location: 27,81 + Owner: USSR + Airfield1: afld + Location: 25,89 + Owner: USSR + Airfield2: afld + Location: 17,88 + Owner: USSR + Refinery: proc + Location: 57,91 + Owner: USSR + FreeActor: False + Factory: fact + Location: 16,78 + Owner: USSR + Harvester: harv + Location: 59,91 + Owner: USSR + Facing: 224 + Sam1: sam + Location: 16,107 + Owner: USSR + Sam2: sam + Location: 28,107 + Owner: USSR + Sam3: sam + Location: 17,94 + Owner: USSR + Sam4: sam + Location: 28,94 + Owner: USSR + SamBarrel: barl + Location: 17,108 + Owner: USSR + ExplosiveBarrel: barl + Location: 22,108 + Owner: USSR + FlameBarrel: brl3 + Location: 37,88 + Owner: USSR + FlameTower: ftur + Location: 36,88 + Owner: USSR + SpyEntry: waypoint + Location: 12,50 + Owner: Neutral + SpyLoadout: waypoint + Location: 15,49 + Owner: Neutral + GreeceLoadout1: waypoint + Location: 15,52 + Owner: Neutral + GreeceLoadout2: waypoint + Location: 13,53 + Owner: Neutral + SpyCamera1: waypoint + Location: 43,55 + Owner: Neutral + SpyCamera2: waypoint + Location: 29,58 + Owner: Neutral + DogPatrolRally1: waypoint + Location: 33,56 + Owner: Neutral + DogPatrolRally2: waypoint + Location: 27,64 + Owner: Neutral + DogPatrolRally3: waypoint + Location: 23,54 + Owner: Neutral + PatrolARally1: waypoint + Location: 36,52 + Owner: Neutral + PatrolARally2: waypoint + Location: 26,58 + Owner: Neutral + PatrolARally3: waypoint + Location: 44,60 + Owner: Neutral + PatrolRally: waypoint + Location: 49,52 + Owner: Neutral + PatrolBRally1: waypoint + Location: 37,52 + Owner: Neutral + PatrolBRally2: waypoint + Location: 37,58 + Owner: Neutral + PatrolBRally3: waypoint + Location: 50,57 + Owner: Neutral + TrukWaypoint1: waypoint + Location: 44,74 + Owner: Neutral + TrukWaypoint2: waypoint + Location: 44,80 + Owner: Neutral + TrukWaypoint3: waypoint + Location: 44,87 + Owner: Neutral + TrukWaypoint4: waypoint + Location: 24,87 + Owner: Neutral + TrukWaypoint5: waypoint + Location: 22,103 + Owner: Neutral + TrukWaypoint6: waypoint + Location: 21,107 + Owner: Neutral + SpyWaypoint: waypoint + Location: 23,104 + Owner: Neutral + ExtractionEntry: waypoint + Location: 12,88 + Owner: Neutral + ExtractionLZ: waypoint + Location: 22,99 + Owner: Neutral + ReinforceCamera: waypoint + Location: 18,54 + Owner: Neutral + MainBaseTopLeft: waypoint + Location: 12,71 + Owner: Neutral + VehicleRallypoint1: waypoint + Location: 39,92 + Owner: Neutral + VehicleRallypoint2: waypoint + Location: 48,91 + Owner: Neutral + VehicleRallypoint3: waypoint + Location: 63,87 + Owner: Neutral + VehicleRallypoint4: waypoint + Location: 53,94 + Owner: Neutral + VehicleRallypoint5: waypoint + Location: 47,84 + Owner: Neutral + WaterTransportSpawn: waypoint + Owner: Neutral + Location: 71,48 + WaterLZ1: waypoint + Owner: Neutral + Location: 52,53 + WaterLZ2: waypoint + Owner: Neutral + Location: 63,63 + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml + +Notifications: notifications.yaml diff --git a/mods/ura/maps/allies-05a/notifications.yaml b/mods/ura/maps/allies-05a/notifications.yaml new file mode 100644 index 0000000..6a7d9a5 --- /dev/null +++ b/mods/ura/maps/allies-05a/notifications.yaml @@ -0,0 +1,9 @@ +Sounds: + Notifications: + bombit: bombit1 + laugh: laugh1 + gotit: gotit1 + lefty: lefty1 + keepem: keepem1 + tuffguy: tuffguy1 + sking: sking1 \ No newline at end of file diff --git a/mods/ura/maps/allies-05a/rules.yaml b/mods/ura/maps/allies-05a/rules.yaml new file mode 100644 index 0000000..811b67f --- /dev/null +++ b/mods/ura/maps/allies-05a/rules.yaml @@ -0,0 +1,194 @@ +World: + LuaScript: + Scripts: allies05a.lua, allies05a-AI.lua + MissionData: + Briefing: Rescue Tanya.\n\nOnce disguised, your spy can move past any enemy unit, except dogs, without being detected. Direct him into the weapons factory located at a nearby Soviet Base where he will hijack a truck and free Tanya.\n\nWith Tanya's help, take out the air defenses on the island and a Chinook will arrive to rescue her.\n\nThen destroy all remaining Soviet buildings and units. + BriefingVideo: ally5.vqa + StartVideo: tanya1.vqa + WinVideo: tanya2.vqa + LossVideo: grvestne.vqa + MapOptions: + TechLevel: medium + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + tough: Real tough guy + Default: easy + +Camera.Small: + Inherits: CAMERA + RevealsShroud: + Range: 4c0 + +TSLA: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +LST: + -Selectable: + Targetable: + TargetTypes: Ground, Water + Interactable: + +LST.IN: + Inherits: LST + RenderSprites: + Image: LST + Cargo: + Types: disabled + +TRAN: + -Selectable: + RevealsShroud: + Range: 4c0 + Targetable@GROUND: + TargetTypes: Ground + Interactable: + +TRAN.IN: + Inherits: TRAN + RenderSprites: + Image: TRAN + Cargo: + Types: disabled + +TRUK.mission: + Inherits: TRUK + Buildable: + Prerequisites: ~disabled + WithFacingSpriteBody: + -SpawnActorOnDeath: + RevealsShroud: + Range: 4c0 + ValidStances: Ally, Enemy + RequiresCondition: hijacked + ExternalCondition@hijacked: + Condition: hijacked + RenderSprites: + Image: TRUK + +SPY: + Infiltrates: + Types: Mission Objectives + +WEAP: + -InfiltrateForSupportPower: + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure + +WEAP.infiltratable: + Inherits: WEAP + Buildable: + Prerequisites: ~disabled + Targetable@Spy: + TargetTypes: Ground, C4, DetonateAttack, Structure, Mission Objectives + RenderSprites: + Image: WEAP + +MISS: + Tooltip: + Name: Prison + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, Mission Objectives + AttackOmni: + Armament: + Weapon: PrisonColt + +E1.Autotarget: + Inherits: E1 + Buildable: + Prerequisites: ~disabled + RevealsShroud: + Range: 8c0 + AutoTarget: + ScanRadius: 7 + RenderSprites: + Image: E1 + +E2.Autotarget: + Inherits: E2 + Buildable: + Prerequisites: ~disabled + RevealsShroud: + Range: 8c0 + AutoTarget: + ScanRadius: 7 + RenderSprites: + Image: E2 + +AFLD: + AirstrikePower@spyplane: + Prerequisites: ~disabled + ParatroopersPower@paratroopers: + Prerequisites: ~disabled + +FCOM: + MustBeDestroyed: + +4TNK: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +TTNK: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +DTRK: + Buildable: + Prerequisites: ~disabled + +QTNK: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +SPEN: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +E6: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +SHOK: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/allies-05a/weapons.yaml b/mods/ura/maps/allies-05a/weapons.yaml new file mode 100644 index 0000000..bd85e06 --- /dev/null +++ b/mods/ura/maps/allies-05a/weapons.yaml @@ -0,0 +1,6 @@ +PrisonColt: + ReloadDelay: 5 + Report: gun5.aud + Projectile: InstantHit + Warhead@1Dam: SpreadDamage + AffectsParent: true diff --git a/mods/ura/maps/allies-06a/allies06a-AI.lua b/mods/ura/maps/allies-06a/allies06a-AI.lua new file mode 100644 index 0000000..4ec918f --- /dev/null +++ b/mods/ura/maps/allies-06a/allies06a-AI.lua @@ -0,0 +1,239 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] + +WTransWays = +{ + { WaterUnloadEntry1.Location, WaterUnload1.Location }, + { WaterUnloadEntry2.Location, WaterUnload2.Location } +} +WTransUnits = +{ + hard = { { "3tnk", "3tnk", "3tnk", "v2rl", "v2rl" }, { "v2rl", "v2rl", "e4", "e4", "3tnk" } }, + normal = { { "e1", "e1", "3tnk", "3tnk", "v2rl" }, { "e4", "e4", "e4", "e4", "v2rl" } }, + easy = { { "e1", "e1", "e1", "e2", "e2" }, { "e2", "e2", "3tnk" } } +} +WTransDelays = +{ + easy = 4, + normal = 3, + hard = 1 +} + +BuildDelays = +{ + easy = 90, + normal = 60, + hard = 30 +} + +WaterAttacks = +{ + easy = 1, + normal = 2, + hard = 3 +} + +WaterAttackTypes = +{ + easy = { "ss" }, + normal = { "ss", "ss" }, + hard = { "ss", "ss", "ss" } +} + +VehicleTypes = { "v2rl", "3tnk", "3tnk", "3tnk", "3tnk", "harv" } + +InfTypes = +{ + { "e1", "e1", "e1"}, + { "e2", "e1", "e1"}, + { "e4", "e4", "e1"} +} + +AttackRallyPoints = +{ + { SovietOreAttackStart.Location, SovietOreAttack1.Location }, + { SovietBaseAttack.Location }, + { SovietOreAttack2.Location } +} + +ImportantBuildings = { WeaponsFactory, Airfield, dome2, SovietConyard } +SovietAircraftType = { "yak" } +Yaks = { } +IdlingUnits = { } +IdlingTanks = { tank1, tank2, tank3, tank4, tank5, tank6, tank7, tank8 } +IdlingNavalUnits = { } + +InitialiseAttack = function() + Utils.Do(ImportantBuildings, function(a) + Trigger.OnDamaged(a, function() + Utils.Do(IdlingTanks, function(unit) + if not unit.IsDead then + unit.Hunt() + end + end) + end) + end) +end + +Attack = 0 +ProduceInfantry = function() + if SovietBarracks.IsDead or SovietBarracks.Owner ~= ussr then + return + end + + Attack = Attack + 1 + local toBuild = Utils.Random(InfTypes) + ussr.Build(toBuild, function(units) + if Attack == 2 and not AttackTnk1.IsDead then + units[#units + 1] = AttackTnk1 + elseif Attack == 4 and not AttackTnk2.IsDead then + units[#units + 1] = AttackTnk2 + end + + SendAttack(units, Utils.Random(AttackRallyPoints)) + Trigger.AfterDelay(DateTime.Seconds(BuildDelays), ProduceInfantry) + end) +end + +ProduceVehicles = function() + if WeaponsFactory.IsDead or WeaponsFactory.Owner ~= ussr then + return + end + ussr.Build(VehicleTypes, function(units) + Utils.Do(units, function(unit) + if unit.Type ~= "harv" then + IdlingTanks[#IdlingTanks + 1] = unit + end + end) + end) +end + +ProduceNaval = function() + if not shouldProduce and #Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == player and self.Type == "syrd" end) < 1 then + Trigger.AfterDelay(DateTime.Minutes(1), ProduceNaval) + return + end + + shouldProduce = true + + if SubPen.IsDead or SubPen.Owner ~= ussr then + return + end + + ussr.Build(WaterAttackTypes, function(units) + Utils.Do(units, function(unit) + IdlingNavalUnits[#IdlingNavalUnits + 1] = unit + end) + + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(40), ProduceNaval) + if #IdlingNavalUnits >= WaterAttacks then + Trigger.AfterDelay(DateTime.Seconds(20), function() + SendAttack(SetupNavalAttackGroup(), { Harbor.Location }) + end) + end + end) +end + +ProduceAircraft = function() + if Airfield.IsDead or Airfield.Owner ~= ussr then + return + end + + ussr.Build(SovietAircraftType, function(units) + local yak = units[1] + Yaks[#Yaks + 1] = yak + + Trigger.OnKilled(yak, ProduceAircraft) + if #Yaks == 1 then + Trigger.AfterDelay(DateTime.Seconds(BuildDelays), ProduceAircraft) + end + + TargetAndAttack(yak) + end) +end + +TargetAndAttack = function(yak, target) + if not target or target.IsDead or (not target.IsInWorld) then + local enemies = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == player and self.HasProperty("Health") and yak.CanTarget(self) end) + if #enemies > 0 then + target = Utils.Random(enemies) + end + end + + if target and yak.AmmoCount() > 0 and yak.CanTarget(target) then + yak.Attack(target) + else + yak.ReturnToBase() + end + + yak.CallFunc(function() + TargetAndAttack(yak, target) + end) +end + +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +SendAttack = function(units, path) + Utils.Do(units, function(unit) + unit.Patrol(path, false) + IdleHunt(unit) + end) +end + +SetupNavalAttackGroup = function() + local units = { } + for i = 0, 3 do + if #IdlingNavalUnits == 0 then + return units + end + + local number = Utils.RandomInteger(1, #IdlingNavalUnits) + if IdlingNavalUnits[number] and not IdlingNavalUnits[number].IsDead then + units[i] = IdlingNavalUnits[number] + table.remove(IdlingNavalUnits, number) + end + end + + return units +end + +WTransWaves = function() + local way = Utils.Random(WTransWays) + local units = Utils.Random(WTransUnits) + local attackUnits = Reinforcements.ReinforceWithTransport(ussr, "lst", units , way, { way[2], way[1] })[2] + Utils.Do(attackUnits, function(a) + Trigger.OnAddedToWorld(a, function() + a.AttackMove(UnitBStopLocation.Location) + IdleHunt(a) + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(WTransDelays), WTransWaves) +end + +ActivateAI = function() + local difficulty = Map.LobbyOption("difficulty") + WaterAttackTypes = WaterAttackTypes[difficulty] + WaterAttacks = WaterAttacks[difficulty] + WTransUnits = WTransUnits[difficulty] + WTransDelays = WTransDelays[difficulty] + BuildDelays = BuildDelays[difficulty] + + InitialiseAttack() + Trigger.AfterDelay(DateTime.Seconds(10), ProduceInfantry) + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(10), function() + ProduceAircraft() + ProduceVehicles() + end) + + WeaponsFactory.RallyPoint = WeaponMeetPoint.Location + SubPen.RallyPoint = SubMeetPoint.Location + Trigger.AfterDelay(DateTime.Minutes(5) + DateTime.Seconds(10), ProduceNaval) + Trigger.AfterDelay(DateTime.Minutes(WTransDelays), WTransWaves) +end diff --git a/mods/ura/maps/allies-06a/allies06a.lua b/mods/ura/maps/allies-06a/allies06a.lua new file mode 100644 index 0000000..f3e6122 --- /dev/null +++ b/mods/ura/maps/allies-06a/allies06a.lua @@ -0,0 +1,239 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +AlliedReinforcementsA = { "e1", "e1", "e1", "e1", "e1" } +AlliedReinforcementsB = { "e3", "e3", "e3", "e3", "e3" } +BadGuys = { BadGuy1, BadGuy2, BadGuy3 } + +SovietDogPatrols = +{ + { Patrol_1_e1, Patrol_1_dog }, + { Patrol_2_e1, Patrol_2_dog }, + { Patrol_3_e1, Patrol_3_dog }, + { Patrol_4_e1, Patrol_4_dog } +} + +SovietDogPatrolPaths = +{ + { Patrol6.Location, Patrol7.Location, Patrol8.Location, Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location }, + { Patrol8.Location, Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location }, + { Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location, Patrol8.Location }, + { Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location, Patrol8.Location, Patrol1.Location } +} + +Mammoths = { Mammoth1, Mammoth2, Mammoth3 } + +SovietMammothPaths = +{ + { TnkPatrol1.Location, TnkPatrol2.Location,TnkPatrol3.Location, TnkPatrol4.Location, TnkPatrol5.Location, TnkPatrol6.Location, TnkPatrol7.Location, TnkPatrol8.Location }, + { TnkPatrol5.Location, TnkPatrol6.Location, TnkPatrol7.Location, TnkPatrol8.Location, TnkPatrol1.Location, TnkPatrol2.Location, TnkPatrol3.Location, TnkPatrol4.Location }, + { TnkPatrol8.Location, TnkPatrol1.Location, TnkPatrol2.Location, TnkPatrol3.Location, TnkPatrol4.Location, TnkPatrol5.Location, TnkPatrol6.Location, TnkPatrol7.Location } +} + +SovietSubPath = { SubPatrol3_1.Location, SubPatrol3_2.Location, SubPatrol3_3.Location } + +ParadropWaypoints = +{ + easy = { UnitBStopLocation }, + normal = { UnitBStopLocation, UnitAStopLocation }, + hard = { UnitBStopLocation, MCVStopLocation, UnitAStopLocation } +} + +SovietTechLabs = { TechLab1, TechLab2, TechLab3 } +TechLabCams = { TechCam1, TechCam2, TechCam3 } + +GroupPatrol = function(units, waypoints, delay) + local i = 1 + local stop = false + + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function() + if stop then + return + end + if unit.Location == waypoints[i] then + local bool = Utils.All(units, function(actor) return actor.IsIdle end) + if bool then + stop = true + i = i + 1 + if i > #waypoints then + i = 1 + end + Trigger.AfterDelay(delay, function() stop = false end) + end + else + unit.AttackMove(waypoints[i]) + end + end) + end) +end + +InitialSovietPatrols = function() + -- Dog Patrols + for i = 1, 4 do + GroupPatrol(SovietDogPatrols[i], SovietDogPatrolPaths[i], DateTime.Seconds(5)) + end + + -- Mammoth Patrols + for i = 1, 3 do + Trigger.AfterDelay(DateTime.Seconds(6 * (i - 1)), function() + Trigger.OnIdle(Mammoths[i], function() + Mammoths[i].Patrol(SovietMammothPaths[i]) + end) + end) + end + + -- Sub Patrols + Patrol1Sub.Patrol({ SubPatrol1_1.Location, SubPatrol1_2.Location }) + Patrol2Sub.Patrol({ SubPatrol2_1.Location, SubPatrol2_2.Location }) + Patrol3Sub1.Patrol(SovietSubPath) + Patrol3Sub2.Patrol(SovietSubPath) +end + +InitialAlliedReinforcements = function() + local camera = Actor.Create("Camera", true, { Owner = player, Location = DefaultCameraPosition.Location }) + Trigger.AfterDelay(DateTime.Seconds(30), camera.Destroy) + + Reinforcements.Reinforce(player, AlliedReinforcementsA, { AlliedEntry1.Location, UnitBStopLocation.Location }, 2) + Trigger.AfterDelay(DateTime.Seconds(2), function() + Reinforcements.Reinforce(player, AlliedReinforcementsB, { AlliedEntry2.Location, UnitAStopLocation.Location }, 2) + end) + Trigger.AfterDelay(DateTime.Seconds(5), function() + Reinforcements.Reinforce(player, { "mcv" }, { AlliedEntry3.Location, MCVStopLocation.Location }) + end) +end + +CaptureRadarDome = function() + Trigger.OnKilled(Radar, function() + player.MarkFailedObjective(CaptureRadarDomeObj) + end) + + Trigger.OnCapture(Radar, function() + player.MarkCompletedObjective(CaptureRadarDomeObj) + Beacon.New(player, TechLab1.CenterPosition) + Beacon.New(player, TechLab2.CenterPosition) + Beacon.New(player, TechLab3.CenterPosition) + Media.DisplayMessage("Coordinates of the Soviet tech centers discovered.") + if Map.LobbyOption("difficulty") ~= "hard" then + Utils.Do(TechLabCams, function(a) + Actor.Create("TECH.CAM", true, { Owner = player, Location = a.Location }) + end) + + if Map.LobbyOption("difficulty") == "easy" then + Actor.Create("Camera", true, { Owner = player, Location = Weapcam.Location }) + end + end + end) +end + +InfiltrateTechCenter = function() + Utils.Do(SovietTechLabs, function(a) + Trigger.OnInfiltrated(a, function() + if infiltrated then + return + end + infiltrated = true + DestroySovietsObj = player.AddPrimaryObjective("Destroy all Soviet buildings and units in the area.") + player.MarkCompletedObjective(InfiltrateTechCenterObj) + + local Proxy = Actor.Create("powerproxy.paratroopers", false, { Owner = ussr }) + Utils.Do(ParadropWaypoints[Map.LobbyOption("difficulty")], function(waypoint) + Proxy.SendParatroopers(waypoint.CenterPosition, false, Facing.South) + end) + Proxy.Destroy() + end) + + Trigger.OnCapture(a, function() + if not infiltrated then + Media.DisplayMessage("Do not capture the tech centers! Infiltrate one with a spy.") + end + end) + end) + + Trigger.OnAllKilledOrCaptured(SovietTechLabs, function() + if not player.IsObjectiveCompleted(InfiltrateTechCenterObj) then + player.MarkFailedObjective(InfiltrateTechCenterObj) + end + end) +end + +InfiltrateRef = function() + Trigger.OnInfiltrated(Refinery, function() + player.MarkCompletedObjective(InfiltrateRefObj) + end) + Trigger.OnCapture(Refinery, function() + player.MarkCompletedObjective(InfiltrateRefObj) + end) + Trigger.OnKilled(Refinery, function() + if not player.IsObjectiveCompleted(InfiltrateRefObj) then + player.MarkFailedObjective(InfiltrateRefObj) + end + end) +end + +Tick = function() + if DateTime.GameTime > DateTime.Seconds(10) and player.HasNoRequiredUnits() then + player.MarkFailedObjective(InfiltrateTechCenterObj) + end + + if DestroySovietsObj and ussr.HasNoRequiredUnits() then + player.MarkCompletedObjective(DestroySovietsObj) + end +end + +WorldLoaded = function() + player = Player.GetPlayer("Greece") + ussr = Player.GetPlayer("USSR") + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + + InfiltrateTechCenterObj = player.AddPrimaryObjective("Infiltrate one of the Soviet tech centers with a spy.") + CaptureRadarDomeObj = player.AddSecondaryObjective("Capture the Radar Dome at the shore.") + InfiltrateRefObj = player.AddSecondaryObjective("Infiltrate the Refinery for money.") + + Camera.Position = DefaultCameraPosition.CenterPosition + + Utils.Do(BadGuys, function(a) + a.AttackMove(MCVStopLocation.Location) + end) + + Trigger.AfterDelay(DateTime.Seconds(1), function() + InitialAlliedReinforcements() + InitialSovietPatrols() + end) + + Trigger.OnEnteredProximityTrigger(SovietMiniBaseCam.CenterPosition, WDist.New(1024 * 6), function(a, id) + if a.Owner == player then + Trigger.RemoveProximityTrigger(id) + local cam = Actor.Create("Camera", true, { Owner = player, Location = SovietMiniBaseCam.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), cam.Destroy) + end + end) + + CaptureRadarDome() + InfiltrateTechCenter() + InfiltrateRef() + Trigger.AfterDelay(0, ActivateAI) +end diff --git a/mods/ura/maps/allies-06a/map.bin b/mods/ura/maps/allies-06a/map.bin new file mode 100644 index 0000000..451ec95 Binary files /dev/null and b/mods/ura/maps/allies-06a/map.bin differ diff --git a/mods/ura/maps/allies-06a/map.png b/mods/ura/maps/allies-06a/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/allies-06a/map.png differ diff --git a/mods/ura/maps/allies-06a/map.yaml b/mods/ura/maps/allies-06a/map.yaml new file mode 100644 index 0000000..fa3306f --- /dev/null +++ b/mods/ura/maps/allies-06a/map.yaml @@ -0,0 +1,640 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 06a: Cripple Iron Curtain research + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 3,61,94,54 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FF1400 + Enemies: USSR, Greece + PlayerReference@Greece: + Name: Greece + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: E2E6F6 + LockSpawn: True + LockTeam: True + Enemies: USSR + +Actors: + Actor176: camera + Owner: USSR + Location: 19,66 + Actor0: sbag + Location: 22,81 + Owner: USSR + Actor1: sbag + Location: 23,81 + Owner: USSR + Actor2: sbag + Location: 24,81 + Owner: USSR + Actor3: sbag + Location: 22,82 + Owner: USSR + Actor4: sbag + Location: 24,82 + Owner: USSR + Actor5: sbag + Location: 22,83 + Owner: USSR + Actor6: sbag + Location: 23,83 + Owner: USSR + Actor7: sbag + Location: 24,83 + Owner: USSR + Actor8: sbag + Location: 12,84 + Owner: USSR + Actor9: sbag + Location: 13,84 + Owner: USSR + Actor10: sbag + Location: 14,84 + Owner: USSR + Actor11: sbag + Location: 12,85 + Owner: USSR + Actor12: sbag + Location: 14,85 + Owner: USSR + Actor13: sbag + Location: 12,86 + Owner: USSR + Actor14: sbag + Location: 13,86 + Owner: USSR + Actor15: sbag + Location: 14,86 + Owner: USSR + Actor16: t08 + Location: 88,68 + Owner: Neutral + Actor17: t08 + Location: 26,72 + Owner: Neutral + Actor18: tc02 + Location: 52,92 + Owner: Neutral + Actor19: tc01 + Location: 57,96 + Owner: Neutral + Actor20: t15 + Location: 3,76 + Owner: Neutral + Actor21: tc05 + Location: 11,74 + Owner: Neutral + Actor22: t15 + Location: 74,81 + Owner: Neutral + Actor23: t08 + Location: 77,85 + Owner: Neutral + Actor24: tc05 + Location: 94,106 + Owner: Neutral + Actor25: tc03 + Location: 84,94 + Owner: Neutral + Actor26: t16 + Location: 83,94 + Owner: Neutral + Actor27: t08 + Location: 85,96 + Owner: Neutral + Actor28: tc01 + Location: 62,105 + Owner: Neutral + Actor29: tc01 + Location: 89,98 + Owner: Neutral + Actor30: tc02 + Location: 85,100 + Owner: Neutral + Actor31: tc03 + Location: 87,99 + Owner: Neutral + Actor32: t17 + Location: 89,99 + Owner: Neutral + Actor33: t16 + Location: 85,99 + Owner: Neutral + Actor34: t13 + Location: 86,98 + Owner: Neutral + Actor35: tc04 + Location: 15,74 + Owner: Neutral + Actor36: tc01 + Location: 24,73 + Owner: Neutral + Actor37: t17 + Location: 27,71 + Owner: Neutral + Actor38: t13 + Location: 36,69 + Owner: Neutral + Actor39: t12 + Location: 34,70 + Owner: Neutral + Actor40: t11 + Location: 23,84 + Owner: Neutral + Actor41: t08 + Location: 9,78 + Owner: Neutral + Actor42: t05 + Location: 12,89 + Owner: Neutral + Actor43: tc03 + Location: 12,82 + Owner: Neutral + Actor44: t17 + Location: 5,82 + Owner: Neutral + Actor45: tc02 + Location: 9,95 + Owner: Neutral + Actor46: tc03 + Location: 7,94 + Owner: Neutral + Actor47: tc05 + Location: 9,109 + Owner: Neutral + Actor48: tc04 + Location: 3,100 + Owner: Neutral + Actor49: tc02 + Location: 3,110 + Owner: Neutral + Actor50: tc01 + Location: 6,105 + Owner: Neutral + Actor51: t17 + Location: 12,106 + Owner: Neutral + Actor52: t16 + Location: 8,107 + Owner: Neutral + Actor53: t14 + Location: 11,100 + Owner: Neutral + Actor54: t01 + Location: 29,102 + Owner: Neutral + Actor55: t03 + Location: 36,104 + Owner: Neutral + Actor56: t06 + Location: 25,104 + Owner: Neutral + Actor57: t08 + Location: 38,100 + Owner: Neutral + Actor58: tc03 + Location: 95,72 + Owner: Neutral + Actor59: mine + Location: 5,68 + Owner: Neutral + Actor60: mine + Location: 9,104 + Owner: Neutral + Actor61: mine + Location: 5,113 + Owner: Neutral + Actor70: kenn + Location: 91,94 + Owner: USSR + Actor71: kenn + Location: 71,83 + Owner: USSR + Actor74: kenn + Location: 77,101 + Owner: USSR + Actor75: ftur + Location: 16,82 + Owner: USSR + Actor76: ftur + Location: 19,82 + Owner: USSR + Actor77: tsla + Location: 60,97 + Owner: USSR + Actor78: apwr + Location: 79,108 + Owner: USSR + Actor79: apwr + Location: 82,109 + Owner: USSR + Actor81: apwr + Location: 82,106 + Owner: USSR + Actor82: apwr + Location: 81,112 + Owner: USSR + Actor83: silo + Location: 94,104 + Owner: USSR + Actor84: silo + Location: 94,105 + Owner: USSR + Actor85: silo + Location: 95,104 + Owner: USSR + Actor86: silo + Location: 95,105 + Owner: USSR + Actor87: silo + Location: 85,102 + Owner: USSR + Actor88: silo + Location: 85,93 + Owner: USSR + Actor89: apwr + Location: 87,101 + Owner: USSR + Actor90: ftur + Location: 80,87 + Owner: USSR + Actor105: jeep + Location: 19,64 + Owner: Greece + Facing: 127 + Actor109: e2 + Location: 13,85 + Owner: USSR + Facing: 223 + SubCell: 2 + Actor110: e2 + Location: 23,82 + Owner: USSR + Facing: 31 + SubCell: 3 + Actor111: e1 + Location: 20,64 + Owner: Greece + Facing: 159 + SubCell: 2 + Actor112: e1 + Location: 19,65 + Owner: Greece + Facing: 127 + SubCell: 0 + Actor113: e1 + Location: 18,64 + Owner: Greece + Facing: 127 + SubCell: 1 + Actor114: e1 + Location: 23,82 + Owner: USSR + SubCell: 2 + Actor115: e1 + Location: 13,85 + Owner: USSR + Facing: 63 + SubCell: 3 + Actor117: dog + Location: 79,100 + Owner: USSR + Facing: 191 + SubCell: 0 + Actor126: ss + Location: 59,102 + Owner: USSR + Facing: 95 + Actor130: ss + Location: 74,113 + Owner: USSR + Facing: 63 + Actor177: mine + Owner: Neutral + Location: 56,94 + Actor178: mine + Owner: Neutral + Location: 64,108 + Actor180: mine + Owner: Neutral + Location: 93,84 + SovietConyard: fact + Location: 69,96 + Owner: USSR + dome2: dome + Location: 90,109 + Owner: USSR + harv: harv + Location: 82,94 + Owner: USSR + Facing: 31 + tank1: 3tnk + Location: 69,90 + Owner: USSR + Facing: 95 + tank2: 3tnk + Location: 93,102 + Owner: USSR + Facing: 31 + tank3: 3tnk + Location: 85,90 + Owner: USSR + tank4: 3tnk + Location: 93,106 + Owner: USSR + Facing: 63 + tank5: 3tnk + Location: 73,100 + Owner: USSR + Facing: 63 + tank6: v2rl + Location: 80,90 + Owner: USSR + Facing: 223 + tank7: v2rl + Location: 70,91 + Owner: USSR + Facing: 95 + tank8: v2rl + Location: 74,101 + Owner: USSR + Facing: 63 + SubPatrol3_1: waypoint + Location: 48,114 + Owner: Neutral + SubPatrol3_2: waypoint + Location: 48,98 + Owner: Neutral + SubPatrol3_3: waypoint + Location: 79,71 + Owner: Neutral + Patrol3Sub1: ss + Location: 46,105 + Owner: USSR + Facing: 63 + Patrol3Sub2: ss + Location: 77,71 + Owner: USSR + Facing: 63 + Patrol1Sub: ss + Location: 46,71 + Owner: USSR + Facing: 127 + Patrol2Sub: ss + Location: 52,85 + Owner: USSR + Facing: 63 + SubPatrol1_1: waypoint + Location: 42,71 + Owner: Neutral + SubPatrol1_2: waypoint + Location: 58,84 + Owner: Neutral + SubPatrol2_1: waypoint + Location: 56,87 + Owner: Neutral + SubPatrol2_2: waypoint + Location: 40,74 + Owner: Neutral + SubMeetPoint: waypoint + Location: 48,105 + Owner: Neutral + SovietBaseAttack: waypoint + Location: 18,68 + Owner: Neutral + Patrol1: waypoint + Location: 92,108 + Owner: Neutral + Patrol2: waypoint + Location: 76,103 + Owner: Neutral + Patrol3: waypoint + Location: 65,110 + Owner: Neutral + Patrol4: waypoint + Location: 68,101 + Owner: Neutral + Patrol5: waypoint + Location: 68,93 + Owner: Neutral + Patrol6: waypoint + Location: 72,84 + Owner: Neutral + Patrol7: waypoint + Location: 79,88 + Owner: Neutral + Patrol8: waypoint + Location: 90,94 + Owner: Neutral + TnkPatrol1: waypoint + Location: 52,100 + Owner: Neutral + TnkPatrol2: waypoint + Location: 65,94 + Owner: Neutral + TnkPatrol3: waypoint + Location: 65,78 + Owner: Neutral + TnkPatrol4: waypoint + Location: 84,82 + Owner: Neutral + TnkPatrol5: waypoint + Location: 79,92 + Owner: Neutral + TnkPatrol6: waypoint + Location: 77,106 + Owner: Neutral + TnkPatrol7: waypoint + Location: 61,107 + Owner: Neutral + TnkPatrol8: waypoint + Location: 70,100 + Owner: Neutral + Mammoth1: 4tnk + Location: 63,94 + Owner: USSR + Facing: 63 + Mammoth2: 4tnk + Location: 82,87 + Owner: USSR + Facing: 223 + Mammoth3: 4tnk + Location: 76,105 + Owner: USSR + Facing: 31 + AttackTnk1: 3tnk + Location: 18,85 + Owner: USSR + Facing: 31 + AttackTnk2: 3tnk + Location: 17,82 + Owner: USSR + Facing: 223 + BadGuy1: e1 + Location: 20,69 + Owner: USSR + SubCell: 3 + BadGuy2: e1 + Location: 19,70 + Owner: USSR + SubCell: 0 + BadGuy3: e1 + Location: 24,67 + Owner: USSR + Facing: 63 + SubCell: 3 + Patrol_1_e1: e1 + Location: 71,84 + Owner: USSR + SubCell: 4 + Patrol_1_dog: dog + Location: 72,84 + Owner: USSR + Facing: 63 + SubCell: 1 + Patrol_2_e1: e1 + Location: 89,94 + Owner: USSR + SubCell: 0 + Patrol_2_dog: dog + Location: 89,93 + Owner: USSR + Facing: 95 + SubCell: 4 + Patrol_3_e1: e1 + Location: 92,108 + Owner: USSR + SubCell: 1 + Patrol_3_dog: dog + Location: 92,108 + Owner: USSR + SubCell: 3 + Patrol_4_e1: e1 + Location: 76,102 + Owner: USSR + SubCell: 4 + Patrol_4_dog: dog + Location: 77,102 + Owner: USSR + Facing: 95 + SubCell: 4 + WaterUnloadEntry1: waypoint + Location: 22,114 + Owner: Neutral + WaterUnloadEntry2: waypoint + Location: 43,114 + Owner: Neutral + WaterUnload1: waypoint + Location: 15,108 + Owner: Neutral + WaterUnload2: waypoint + Location: 30,93 + Owner: Neutral + SovietOreAttackStart: waypoint + Location: 5,73 + Owner: Neutral + SovietOreAttack1: waypoint + Location: 3,65 + Owner: Neutral + SovietOreAttack2: waypoint + Location: 36,67 + Owner: Neutral + Harbor: waypoint + Location: 19,92 + Owner: Neutral + UnitAStopLocation: waypoint + Location: 16,64 + Owner: Neutral + MCVStopLocation: waypoint + Location: 23,64 + Owner: Neutral + UnitBStopLocation: waypoint + Location: 19,63 + Owner: Neutral + DefaultCameraPosition: waypoint + Location: 19,64 + Owner: Neutral + SovietMiniBaseCam: waypoint + Location: 18,83 + Owner: Neutral + Weapcam: waypoint + Location: 76,94 + Owner: Neutral + TechCam1: waypoint + Location: 69,83 + Owner: Neutral + TechCam2: waypoint + Location: 94,94 + Owner: Neutral + TechCam3: waypoint + Owner: Neutral + Location: 94,109 + AlliedEntry1: waypoint + Location: 19,61 + Owner: Neutral + AlliedEntry2: waypoint + Location: 14,61 + Owner: Neutral + AlliedEntry3: waypoint + Location: 23,61 + Owner: Neutral + SubPen: spen + Location: 63,99 + Owner: USSR + TechLab1: stek + Location: 93,93 + Owner: USSR + TechLab2: stek + Location: 68,82 + Owner: USSR + TechLab3: stek + Location: 93,108 + Owner: USSR + SovietBarracks: barr + Location: 15,83 + Owner: USSR + WeaponsFactory: weap + Location: 75,93 + Owner: USSR + Airfield: afld + Location: 74,86 + Owner: USSR + Refinery: proc + Location: 81,90 + Owner: USSR + Radar: dome + Location: 20,83 + Owner: USSR + WeaponMeetPoint: waypoint + Owner: Neutral + Location: 73,90 + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/allies-06a/rules.yaml b/mods/ura/maps/allies-06a/rules.yaml new file mode 100644 index 0000000..9c7ebb3 --- /dev/null +++ b/mods/ura/maps/allies-06a/rules.yaml @@ -0,0 +1,97 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: allies06a.lua, allies06a-AI.lua + MissionData: + Briefing: Priority one is to establish a base and get your spy into one of the Soviet Tech Centers in the base across the gulf.\nData on the Iron Curtain is in there and we need it.\n\nOnce you get the data complete your mission...\nWipe out everything. + BriefingVideo: ally6.vqa + WinVideo: allymorf.vqa + LossVideo: overrun.vqa + StartVideo: mcv.vqa + MapOptions: + TechLevel: medium + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E4,E4 + +TSLA: + Power: + Amount: -150 + +3TNK: + Buildable: + Prerequisites: ~vehicles.soviet + +ARTY: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +STEK: + Targetable: + TargetTypes: Ground, Structure, C4, DetonateAttack, SpyInfiltrate + +TECH.CAM: + Inherits: CAMERA + RevealsShroud: + Range: 4c0 + Type: CenterPosition + +APWR: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +DD: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +SS: + AutoTarget: + InitialStanceAI: AttackAnything diff --git a/mods/ura/maps/allies-06b/allies06b-AI.lua b/mods/ura/maps/allies-06b/allies06b-AI.lua new file mode 100644 index 0000000..8af0df8 --- /dev/null +++ b/mods/ura/maps/allies-06b/allies06b-AI.lua @@ -0,0 +1,248 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] + +WTransWays = +{ + { WaterUnloadEntry1.Location, WaterUnload1.Location }, + { WaterUnloadEntry2.Location, WaterUnload2.Location }, + { WaterUnloadEntry3.Location, WaterUnload3.Location } +} + +WTransUnits = +{ + hard = { { "3tnk", "3tnk", "3tnk", "v2rl", "v2rl" }, { "v2rl", "v2rl", "e4", "e4", "3tnk" } }, + normal = { { "e1", "e1", "3tnk", "3tnk", "v2rl" }, { "e4", "e4", "e4", "e4", "v2rl" } }, + easy = { { "e1", "e1", "e1", "e2", "e2" }, { "e2", "e2", "3tnk" } } +} + +WTransDelays = +{ + easy = 4, + normal = 3, + hard = 1 +} + +BuildDelays = +{ + easy = 90, + normal = 60, + hard = 30 +} + +WaterAttacks = +{ + easy = 1, + normal = 2, + hard = 3 +} + +WaterAttackTypes = +{ + easy = { "ss" }, + normal = { "ss", "ss" }, + hard = { "ss", "ss", "ss" } +} + +VehicleTypes = { "v2rl", "3tnk", "3tnk", "3tnk", "3tnk", "harv" } + +InfTypes = +{ + { "e1", "e1", "e1", "e1", "e1"}, + { "e2", "e2", "e1", "e1", "e1"}, + { "e4", "e4", "e4", "e1", "e1"} +} + +AttackRallyPoints = +{ + { SovietSideAttack1.Location, SovietBaseAttack.Location }, + { SovietBaseAttack.Location }, + { SovietSideAttack2.Location, SovietBaseAttack.Location } +} + +ImportantBuildings = { WarFactory, Airfield1, Airfield2, Radar2, Refinery, SovietConyard } +SovietAircraftType = { "yak" } +Yaks = { } +IdlingUnits = { } +IdlingTanks = { tank1, tank2, tank3, tank4, tank5, tank6, tank7 } +IdlingNavalUnits = { } + +InitialiseAttack = function() + Utils.Do(ImportantBuildings, function(a) + Trigger.OnDamaged(a, function() + Utils.Do(IdlingTanks, function(unit) + if not unit.IsDead then + IdleHunt(unit) + end + end) + end) + Trigger.OnCapture(a, function() + Utils.Do(IdlingTanks, function(unit) + if not unit.IsDead then + IdleHunt(unit) + end + end) + end) + end) +end + +Attack = 0 +ProduceInfantry = function() + if SovietBarracks.IsDead or SovietBarracks.Owner ~= ussr then + return + end + + Attack = Attack + 1 + local toBuild = Utils.Random(InfTypes) + ussr.Build(toBuild, function(units) + if Attack == 2 and not AttackTank1.IsDead then + units[#units + 1] = AttackTank1 + elseif Attack == 4 and not AttackTank2.IsDead then + units[#units + 1] = AttackTank2 + end + + SendAttack(units, Utils.Random(AttackRallyPoints)) + Trigger.AfterDelay(DateTime.Seconds(BuildDelays), ProduceInfantry) + end) +end + +ProduceVehicles = function() + if WarFactory.IsDead or WarFactory.Owner ~= ussr then + return + end + ussr.Build(VehicleTypes, function(units) + Utils.Do(units, function(unit) + if unit.Type ~= "harv" then + IdlingTanks[#IdlingTanks + 1] = unit + end + end) + end) +end + +ProduceNaval = function() + if SubPen.IsDead or SubPen.Owner ~= ussr then + return + end + + if not shouldProduce and #Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == player and self.Type == "syrd" end) < 1 then + Trigger.AfterDelay(DateTime.Minutes(1), ProduceNaval) + return + end + + shouldProduce = true + + ussr.Build(WaterAttackTypes, function(units) + Utils.Do(units, function(unit) + IdlingNavalUnits[#IdlingNavalUnits + 1] = unit + end) + + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(40), ProduceNaval) + if #IdlingNavalUnits >= WaterAttacks then + Trigger.AfterDelay(DateTime.Seconds(20), function() + SendAttack(SetupNavalAttackGroup(), { SubPatrol1_2.Location }) + end) + end + end) +end + +ProduceAircraft = function() + if (Airfield1.IsDead or Airfield1.Owner ~= ussr) and (Airfield2.IsDead or Airfield2.Owner ~= ussr) then + return + end + + ussr.Build(SovietAircraftType, function(units) + local yak = units[1] + Yaks[#Yaks + 1] = yak + + Trigger.OnKilled(yak, ProduceAircraft) + + local alive = Utils.Where(Yaks, function(y) return not y.IsDead end) + if #alive < 2 then + Trigger.AfterDelay(DateTime.Seconds(BuildDelays / 2), ProduceAircraft) + end + + TargetAndAttack(yak) + end) +end + +TargetAndAttack = function(yak, target) + if not target or target.IsDead or (not target.IsInWorld) then + local enemies = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == player and self.HasProperty("Health") and yak.CanTarget(self) end) + if #enemies > 0 then + target = Utils.Random(enemies) + end + end + + if target and yak.AmmoCount() > 0 and yak.CanTarget(target) then + yak.Attack(target) + else + yak.ReturnToBase() + end + + yak.CallFunc(function() + TargetAndAttack(yak, target) + end) +end + +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +SendAttack = function(units, path) + Utils.Do(units, function(unit) + unit.Patrol(path, false) + IdleHunt(unit) + end) +end + +SetupNavalAttackGroup = function() + local units = { } + for i = 0, 3 do + if #IdlingNavalUnits == 0 then + return units + end + + local number = Utils.RandomInteger(1, #IdlingNavalUnits + 1) + if IdlingNavalUnits[number] and not IdlingNavalUnits[number].IsDead then + units[i] = IdlingNavalUnits[number] + table.remove(IdlingNavalUnits, number) + end + end + + return units +end + +WTransWaves = function() + local way = Utils.Random(WTransWays) + local units = Utils.Random(WTransUnits) + local attackUnits = Reinforcements.ReinforceWithTransport(ussr, "lst", units , way, { way[2], way[1] })[2] + Utils.Do(attackUnits, function(a) + Trigger.OnAddedToWorld(a, function() + a.AttackMove(SovietBaseAttack.Location) + IdleHunt(a) + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(WTransDelays), WTransWaves) +end + +ActivateAI = function() + local difficulty = Map.LobbyOption("difficulty") + WaterAttackTypes = WaterAttackTypes[difficulty] + WaterAttacks = WaterAttacks[difficulty] + WTransUnits = WTransUnits[difficulty] + WTransDelays = WTransDelays[difficulty] + BuildDelays = BuildDelays[difficulty] + + InitialiseAttack() + Trigger.AfterDelay(DateTime.Seconds(40), ProduceInfantry) + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(10), ProduceAircraft) + Trigger.AfterDelay(DateTime.Minutes(2) + DateTime.Seconds(10), ProduceVehicles) + + WarFactory.RallyPoint = WeaponMeetPoint.Location + Trigger.AfterDelay(DateTime.Minutes(4) + DateTime.Seconds(10), ProduceNaval) + Trigger.AfterDelay(DateTime.Minutes(WTransDelays + 1) + DateTime.Seconds(30), WTransWaves) +end diff --git a/mods/ura/maps/allies-06b/allies06b.lua b/mods/ura/maps/allies-06b/allies06b.lua new file mode 100644 index 0000000..63253c4 --- /dev/null +++ b/mods/ura/maps/allies-06b/allies06b.lua @@ -0,0 +1,269 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +AlliedReinforcementsA = { "e1", "e1", "e1", "e1", "e1" } +AlliedReinforcementsB = { "e1", "e1", "e3", "e3", "e3" } +AlliedBoatReinforcements = { "pt", "pt" } +BadGuys = { BadGuy1, BadGuy2, BadGuy3, BadGuy4 } + +SovietDogPatrols = +{ + { Patrol_1_e1, Patrol_1_dog }, + { Patrol_2_e1, Patrol_2_dog }, + { Patrol_3_e1, Patrol_3_dog }, + { Patrol_4_e1, Patrol_4_dog } +} + +SovietDogPatrolPaths = +{ + { Patrol6.Location, Patrol7.Location, Patrol8.Location, Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location }, + { Patrol8.Location, Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location }, + { Patrol1.Location, Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location, Patrol8.Location }, + { Patrol2.Location, Patrol3.Location, Patrol4.Location, Patrol5.Location, Patrol6.Location, Patrol7.Location, Patrol8.Location, Patrol1.Location } +} + +Mammoths = { Mammoth1, Mammoth2, Mammoth3 } + +SovietMammothPaths = +{ + { TnkPatrol1.Location, TnkPatrol2.Location,TnkPatrol3.Location, TnkPatrol4.Location, TnkPatrol5.Location, TnkPatrol6.Location }, + { TnkPatrol5.Location, TnkPatrol6.Location, TnkPatrol1.Location, TnkPatrol2.Location, TnkPatrol3.Location, TnkPatrol4.Location }, + { TnkPatrol6.Location, TnkPatrol1.Location, TnkPatrol2.Location, TnkPatrol3.Location, TnkPatrol4.Location, TnkPatrol5.Location } +} + +SubPaths = { + { SubPatrol1_1.Location, SubPatrol1_2.Location }, + { SubPatrol2_1.Location, SubPatrol2_2.Location }, + { SubPatrol3_1.Location, SubPatrol3_2.Location }, + { SubPatrol4_1.Location, SubPatrol4_2.Location }, + { SubPatrol5_1.Location, SubPatrol5_2.Location } +} + +ParadropWaypoints = +{ + easy = { UnitBStopLocation }, + normal = { UnitBStopLocation, UnitAStopLocation }, + hard = { UnitBStopLocation, UnitCStopLocation, UnitAStopLocation } +} + +SovietTechLabs = { TechLab1, TechLab2 } + +TechLabCams = { TechCam1, TechCam2 } + +GroupPatrol = function(units, waypoints, delay) + local i = 1 + local stop = false + + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function() + if stop then + return + end + if unit.Location == waypoints[i] then + local bool = Utils.All(units, function(actor) return actor.IsIdle end) + if bool then + stop = true + i = i + 1 + if i > #waypoints then + i = 1 + end + Trigger.AfterDelay(delay, function() stop = false end) + end + else + unit.AttackMove(waypoints[i]) + end + end) + end) +end + +InitialSovietPatrols = function() + -- Dog Patrols + BeachDog.Patrol({ BeachPatrol1.Location, BeachPatrol2.Location, BeachPatrol3.Location }) + for i = 1, 4 do + GroupPatrol(SovietDogPatrols[i], SovietDogPatrolPaths[i], DateTime.Seconds(5)) + end + + -- Mammoth Patrols + for i = 1, 3 do + Trigger.AfterDelay(DateTime.Seconds(6 * (i - 1)), function() + Trigger.OnIdle(Mammoths[i], function() + Mammoths[i].Patrol(SovietMammothPaths[i]) + end) + end) + end + + -- Sub Patrols + Patrol1Sub.Patrol(SubPaths[1]) + Patrol2Sub.Patrol(SubPaths[2]) + Patrol3Sub.Patrol(SubPaths[3]) + Patrol4Sub.Patrol(SubPaths[4]) + Patrol5Sub.Patrol(SubPaths[5]) +end + +InitialAlliedReinforcements = function() + local camera = Actor.Create("Camera", true, { Owner = player, Location = DefaultCameraPosition.Location }) + Trigger.AfterDelay(DateTime.Seconds(30), camera.Destroy) + + Trigger.AfterDelay(DateTime.Seconds(1), function() + Reinforcements.Reinforce(player, AlliedReinforcementsA, { AlliedEntry3.Location, UnitCStopLocation.Location }, 2) + Reinforcements.Reinforce(player, AlliedReinforcementsB, { AlliedEntry2.Location, UnitAStopLocation.Location }, 2) + end) + Trigger.AfterDelay(DateTime.Seconds(3), function() + Reinforcements.Reinforce(player, { "mcv" }, { AlliedEntry1.Location, UnitBStopLocation.Location }) + Reinforcements.Reinforce(player, AlliedBoatReinforcements, { AlliedBoatEntry.Location, AlliedBoatStop.Location }) + end) +end + +CaptureRadarDome = function() + Trigger.OnKilled(Radar, function() + player.MarkFailedObjective(CaptureRadarDomeObj) + end) + + Trigger.OnCapture(Radar, function() + player.MarkCompletedObjective(CaptureRadarDomeObj) + Beacon.New(player, TechLab1.CenterPosition) + Beacon.New(player, TechLab2.CenterPosition) + Media.DisplayMessage("Coordinates of the Soviet tech centers discovered.") + if Map.LobbyOption("difficulty") ~= "hard" then + Utils.Do(TechLabCams, function(a) + Actor.Create("TECH.CAM", true, { Owner = player, Location = a.Location }) + end) + + if Map.LobbyOption("difficulty") == "easy" then + Actor.Create("Camera", true, { Owner = player, Location = Weapcam.Location }) + end + end + end) +end + +InfiltrateTechCenter = function() + Utils.Do(SovietTechLabs, function(a) + Trigger.OnInfiltrated(a, function() + if infiltrated then + return + end + infiltrated = true + DestroySovietsObj = player.AddPrimaryObjective("Destroy all Soviet buildings and units in the area.") + player.MarkCompletedObjective(InfiltrateTechCenterObj) + end) + + Trigger.OnCapture(a, function() + if not infiltrated then + Media.DisplayMessage("Do not capture the tech centers! Infiltrate one with a spy.") + end + end) + end) + + Trigger.OnAllKilledOrCaptured(SovietTechLabs, function() + if not player.IsObjectiveCompleted(InfiltrateTechCenterObj) then + player.MarkFailedObjective(InfiltrateTechCenterObj) + end + end) +end + +InfiltrateRef = function() + Trigger.OnInfiltrated(Refinery, function() + player.MarkCompletedObjective(InfiltrateRefObj) + end) + Trigger.OnCapture(Refinery, function() + player.MarkCompletedObjective(InfiltrateRefObj) + end) + Trigger.OnKilled(Refinery, function() + if not player.IsObjectiveCompleted(InfiltrateRefObj) then + player.MarkFailedObjective(InfiltrateRefObj) + end + end) +end + +Tick = function() + if player.HasNoRequiredUnits() then + player.MarkFailedObjective(InfiltrateTechCenterObj) + end + + if DestroySovietsObj and ussr.HasNoRequiredUnits() then + player.MarkCompletedObjective(DestroySovietsObj) + end +end + +WorldLoaded = function() + player = Player.GetPlayer("Greece") + ussr = Player.GetPlayer("USSR") + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + + InfiltrateTechCenterObj = player.AddPrimaryObjective("Infiltrate one of the Soviet tech centers with a spy.") + CaptureRadarDomeObj = player.AddSecondaryObjective("Capture the Radar Dome at the shore.") + InfiltrateRefObj = player.AddSecondaryObjective("Infiltrate the Refinery for money.") + + Camera.Position = DefaultCameraPosition.CenterPosition + + if Map.LobbyOption("difficulty") ~= "hard" then + Trigger.OnEnteredProximityTrigger(SovietDefenseCam.CenterPosition, WDist.New(1024 * 7), function(a, id) + if a.Owner == player then + Trigger.RemoveProximityTrigger(id) + local cam1 = Actor.Create("TECH.CAM", true, { Owner = player, Location = SovietDefenseCam.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), cam1.Destroy) + if not DefenseFlame1.IsDead then + local cam2 = Actor.Create("TECH.CAM", true, { Owner = player, Location = DefenseFlame1.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), cam2.Destroy) + end + if not DefenseFlame2.IsDead then + local cam3 = Actor.Create("TECH.CAM", true, { Owner = player, Location = DefenseFlame2.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), cam3.Destroy) + end + end + end) + + if Map.LobbyOption("difficulty") == "easy" then + Trigger.OnKilled(DefBrl1, function(a, b) + DefenseFlame1.Kill() + end) + Trigger.OnKilled(DefBrl2, function(a, b) + DefenseFlame2.Kill() + end) + end + end + + Utils.Do(BadGuys, function(a) + a.AttackMove(UnitCStopLocation.Location) + end) + + InitialAlliedReinforcements() + Trigger.AfterDelay(DateTime.Seconds(1), function() + InitialSovietPatrols() + end) + + Trigger.OnEnteredProximityTrigger(SovietMiniBaseCam.CenterPosition, WDist.New(1024 * 14), function(a, id) + if a.Owner == player then + Trigger.RemoveProximityTrigger(id) + local cam = Actor.Create("Camera", true, { Owner = player, Location = SovietMiniBaseCam.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), cam.Destroy) + end + end) + CaptureRadarDome() + InfiltrateTechCenter() + InfiltrateRef() + Trigger.AfterDelay(0, ActivateAI) +end diff --git a/mods/ura/maps/allies-06b/map.bin b/mods/ura/maps/allies-06b/map.bin new file mode 100644 index 0000000..36d149b Binary files /dev/null and b/mods/ura/maps/allies-06b/map.bin differ diff --git a/mods/ura/maps/allies-06b/map.png b/mods/ura/maps/allies-06b/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/allies-06b/map.png differ diff --git a/mods/ura/maps/allies-06b/map.yaml b/mods/ura/maps/allies-06b/map.yaml new file mode 100644 index 0000000..b1defd7 --- /dev/null +++ b/mods/ura/maps/allies-06b/map.yaml @@ -0,0 +1,851 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 06b: Cripple Iron Curtain research + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 20,34,83,78 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FF1400 + Enemies: Greece + PlayerReference@Greece: + Name: Greece + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: E2E6F6 + LockSpawn: True + LockTeam: True + Enemies: USSR + +Actors: + Actor245: sbag + Owner: Neutral + Location: 69,83 + Actor0: sbag + Location: 69,80 + Owner: Neutral + Actor1: sbag + Location: 70,80 + Owner: Neutral + Actor2: sbag + Location: 71,80 + Owner: Neutral + Actor3: sbag + Location: 72,80 + Owner: Neutral + Actor4: sbag + Location: 73,80 + Owner: Neutral + Actor5: sbag + Location: 74,80 + Owner: Neutral + Actor6: sbag + Location: 75,80 + Owner: Neutral + Actor7: sbag + Location: 76,80 + Owner: Neutral + Actor8: sbag + Location: 77,80 + Owner: Neutral + Actor9: sbag + Location: 69,81 + Owner: Neutral + Actor10: sbag + Location: 75,81 + Owner: Neutral + Actor11: sbag + Location: 77,81 + Owner: Neutral + Actor12: sbag + Location: 69,82 + Owner: Neutral + Actor13: sbag + Location: 75,82 + Owner: Neutral + Actor14: sbag + Location: 76,82 + Owner: Neutral + Actor15: sbag + Location: 77,82 + Owner: Neutral + Actor17: sbag + Location: 69,84 + Owner: Neutral + Actor18: sbag + Location: 85,84 + Owner: Neutral + Actor19: sbag + Location: 86,84 + Owner: Neutral + Actor20: sbag + Location: 87,84 + Owner: Neutral + Actor21: sbag + Location: 85,85 + Owner: Neutral + Actor22: sbag + Location: 87,85 + Owner: Neutral + Actor23: sbag + Location: 85,86 + Owner: Neutral + Actor24: sbag + Location: 86,86 + Owner: Neutral + Actor25: sbag + Location: 87,86 + Owner: Neutral + Actor26: sbag + Location: 87,87 + Owner: Neutral + Actor27: sbag + Location: 87,88 + Owner: Neutral + Actor28: sbag + Location: 87,89 + Owner: Neutral + Actor29: sbag + Location: 69,90 + Owner: Neutral + Actor30: sbag + Location: 87,90 + Owner: Neutral + Actor31: sbag + Location: 69,91 + Owner: Neutral + Actor32: sbag + Location: 87,91 + Owner: Neutral + Actor33: sbag + Location: 69,92 + Owner: Neutral + Actor34: sbag + Location: 74,92 + Owner: Neutral + Actor35: sbag + Location: 75,92 + Owner: Neutral + Actor36: sbag + Location: 76,92 + Owner: Neutral + Actor37: sbag + Location: 81,92 + Owner: Neutral + Actor38: sbag + Location: 82,92 + Owner: Neutral + Actor39: sbag + Location: 83,92 + Owner: Neutral + Actor40: sbag + Location: 87,92 + Owner: Neutral + Actor41: sbag + Location: 69,93 + Owner: Neutral + Actor42: sbag + Location: 74,93 + Owner: Neutral + Actor43: sbag + Location: 76,93 + Owner: Neutral + Actor44: sbag + Location: 81,93 + Owner: Neutral + Actor45: sbag + Location: 83,93 + Owner: Neutral + Actor46: sbag + Location: 87,93 + Owner: Neutral + Actor47: sbag + Location: 69,94 + Owner: Neutral + Actor48: sbag + Location: 70,94 + Owner: Neutral + Actor49: sbag + Location: 71,94 + Owner: Neutral + Actor50: sbag + Location: 72,94 + Owner: Neutral + Actor51: sbag + Location: 73,94 + Owner: Neutral + Actor52: sbag + Location: 74,94 + Owner: Neutral + Actor53: sbag + Location: 75,94 + Owner: Neutral + Actor54: sbag + Location: 76,94 + Owner: Neutral + Actor55: sbag + Location: 81,94 + Owner: Neutral + Actor56: sbag + Location: 82,94 + Owner: Neutral + Actor57: sbag + Location: 83,94 + Owner: Neutral + Actor58: sbag + Location: 84,94 + Owner: Neutral + Actor59: sbag + Location: 85,94 + Owner: Neutral + Actor60: sbag + Location: 86,94 + Owner: Neutral + Actor61: sbag + Location: 87,94 + Owner: Neutral + Actor62: tc05 + Location: 54,109 + Owner: Neutral + Actor63: tc02 + Location: 46,103 + Owner: Neutral + Actor64: t08 + Location: 43,103 + Owner: Neutral + Actor65: t08 + Location: 46,109 + Owner: Neutral + Actor66: t01 + Location: 52,102 + Owner: Neutral + Actor67: t11 + Location: 72,94 + Owner: Neutral + Actor68: tc05 + Location: 89,89 + Owner: Neutral + Actor69: tc04 + Location: 84,95 + Owner: Neutral + Actor70: tc03 + Location: 78,97 + Owner: Neutral + Actor71: tc01 + Location: 73,97 + Owner: Neutral + Actor72: t17 + Location: 76,95 + Owner: Neutral + Actor73: t16 + Location: 77,102 + Owner: Neutral + Actor74: tc02 + Location: 76,40 + Owner: Neutral + Actor75: tc05 + Location: 72,47 + Owner: Neutral + Actor76: tc04 + Location: 72,45 + Owner: Neutral + Actor77: t08 + Location: 75,49 + Owner: Neutral + Actor78: t08 + Location: 75,40 + Owner: Neutral + Actor79: tc02 + Location: 39,34 + Owner: Neutral + Actor80: t08 + Location: 38,36 + Owner: Neutral + Actor81: tc05 + Location: 93,43 + Owner: Neutral + Actor82: tc03 + Location: 93,42 + Owner: Neutral + Actor83: tc01 + Location: 91,45 + Owner: Neutral + Actor84: t08 + Location: 93,45 + Owner: Neutral + Actor85: tc02 + Location: 42,38 + Owner: Neutral + Actor86: tc04 + Location: 42,41 + Owner: Neutral + Actor87: tc05 + Location: 46,39 + Owner: Neutral + Actor88: t17 + Location: 46,42 + Owner: Neutral + Actor89: tc01 + Location: 51,104 + Owner: Neutral + Actor90: t17 + Location: 47,106 + Owner: Neutral + Actor91: t16 + Location: 53,107 + Owner: Neutral + Actor92: t08 + Location: 50,109 + Owner: Neutral + Actor93: t08 + Location: 51,106 + Owner: Neutral + Actor94: t08 + Location: 87,95 + Owner: Neutral + Actor95: tc04 + Location: 88,93 + Owner: Neutral + Actor96: tc05 + Location: 88,95 + Owner: Neutral + Actor97: t01 + Location: 36,110 + Owner: Neutral + Actor98: t07 + Location: 38,110 + Owner: Neutral + Actor99: t07 + Location: 34,100 + Owner: Neutral + Actor100: t08 + Location: 33,105 + Owner: Neutral + Actor101: mine + Location: 42,108 + Owner: Neutral + Actor102: mine + Location: 77,105 + Owner: Neutral + Actor103: mine + Location: 84,104 + Owner: Neutral + Actor104: mine + Location: 31,108 + Owner: Neutral + Actor106: ftur + Location: 69,89 + Owner: USSR + Actor107: ftur + Location: 69,85 + Owner: USSR + Actor108: powr + Location: 80,87 + Owner: USSR + Actor109: powr + Location: 78,85 + Owner: USSR + Actor114: ftur + Location: 57,45 + Owner: USSR + Actor115: ftur + Location: 62,45 + Owner: USSR + Actor118: silo + Location: 68,35 + Owner: USSR + Actor119: silo + Location: 71,34 + Owner: USSR + Actor120: silo + Location: 67,34 + Owner: USSR + Actor121: silo + Location: 72,35 + Owner: USSR + Actor124: apwr + Location: 81,46 + Owner: USSR + Actor125: apwr + Location: 58,59 + Owner: USSR + Actor126: apwr + Location: 75,46 + Owner: USSR + Actor127: apwr + Location: 78,46 + Owner: USSR + Actor128: apwr + Location: 50,59 + Owner: USSR + Actor131: kenn + Location: 52,45 + Owner: USSR + Actor132: kenn + Location: 75,41 + Owner: USSR + Actor133: tsla + Location: 77,64 + Owner: USSR + Actor134: tsla + Location: 33,44 + Owner: USSR + Actor135: tsla + Location: 72,60 + Owner: USSR + Actor136: kenn + Location: 72,50 + Owner: USSR + Actor137: brl3 + Location: 52,91 + Owner: USSR + Actor138: barl + Location: 52,90 + Owner: USSR + Actor139: brl3 + Location: 47,90 + Owner: USSR + Actor140: barl + Location: 46,91 + Owner: USSR + Actor143: barl + Location: 52,92 + Owner: USSR + Actor146: barl + Location: 46,90 + Owner: USSR + Actor148: 3tnk + Location: 49,91 + Owner: USSR + Facing: 127 + Actor158: harv + Location: 78,37 + Owner: USSR + Facing: 223 + Actor161: v2rl + Location: 85,55 + Owner: USSR + Facing: 63 + Actor165: e1 + Location: 75,93 + Owner: USSR + SubCell: 3 + Actor166: e1 + Location: 82,93 + Owner: USSR + SubCell: 3 + Actor167: e1 + Location: 86,85 + Owner: USSR + SubCell: 2 + Actor168: e1 + Location: 76,81 + Owner: USSR + SubCell: 1 + Actor169: e2 + Location: 75,93 + Owner: USSR + SubCell: 2 + Actor170: e2 + Location: 82,93 + Owner: USSR + SubCell: 2 + Actor171: e2 + Location: 86,85 + Owner: USSR + SubCell: 3 + Actor172: e2 + Location: 76,81 + Owner: USSR + SubCell: 3 + Actor182: e1 + Location: 54,105 + Owner: Greece + SubCell: 1 + Actor183: e1 + Location: 53,106 + Owner: Greece + Facing: 31 + SubCell: 2 + Actor184: e1 + Location: 55,105 + Owner: Greece + Facing: 223 + SubCell: 4 + Actor186: ss + Location: 67,62 + Owner: USSR + Facing: 127 + Actor236: mine + Owner: Neutral + Location: 88,35 + Actor237: mine + Owner: Neutral + Location: 40,52 + Actor238: mine + Owner: Neutral + Location: 28,36 + Actor244: camera + Owner: USSR + Location: 49,107 + SovietBaseAttack: waypoint + Owner: Neutral + Location: 49,87 + SovietSideAttack1: waypoint + Owner: Neutral + Location: 66,93 + SovietSideAttack2: waypoint + Owner: Neutral + Location: 66,82 + AttackTank1: 3tnk + Location: 71,87 + Owner: USSR + Facing: 63 + AttackTank2: 3tnk + Location: 80,84 + Owner: USSR + Facing: 95 + AlliedEntry1: waypoint + Location: 49,111 + Owner: Neutral + AlliedEntry2: waypoint + Location: 46,111 + Owner: Neutral + AlliedEntry3: waypoint + Location: 52,111 + Owner: Neutral + AlliedBoatEntry: waypoint + Location: 60,111 + Owner: Neutral + UnitAStopLocation: waypoint + Location: 49,108 + Owner: Neutral + UnitBStopLocation: waypoint + Location: 47,108 + Owner: Neutral + UnitCStopLocation: waypoint + Location: 51,108 + Owner: Neutral + AlliedBoatStop: waypoint + Location: 60,108 + Owner: Neutral + WaterUnload1: waypoint + Location: 79,109 + Owner: Neutral + WaterUnload2: waypoint + Location: 26,107 + Owner: Neutral + WaterUnload3: waypoint + Location: 83,82 + Owner: Neutral + WaterUnloadEntry1: waypoint + Location: 102,108 + Owner: Neutral + WaterUnloadEntry2: waypoint + Owner: Neutral + Location: 20,68 + WaterUnloadEntry3: waypoint + Location: 102,53 + Owner: Neutral + DefaultCameraPosition: waypoint + Location: 54,107 + Owner: Neutral + SovietMiniBaseCam: waypoint + Location: 77,87 + Owner: Neutral + SovietDefenseCam: waypoint + Owner: Neutral + Location: 49,91 + TechCam1: waypoint + Owner: Neutral + Location: 55,58 + TechCam2: waypoint + Owner: Neutral + Location: 91,43 + Weapcam: waypoint + Owner: Neutral + Location: 53,47 + TechLab1: stek + Location: 54,57 + Owner: USSR + TechLab2: stek + Location: 90,42 + Owner: USSR + Airfield1: afld + Location: 60,48 + Owner: USSR + Airfield2: afld + Location: 58,41 + Owner: USSR + WarFactory: weap + Location: 52,46 + Owner: USSR + WeaponMeetPoint: waypoint + Owner: Neutral + Location: 65,46 + SovietConyard: fact + Location: 70,54 + Owner: USSR + Refinery: proc + Location: 68,35 + Owner: USSR + Radar: dome + Location: 75,86 + Owner: USSR + Radar2: dome + Location: 59,44 + Owner: USSR + SovietBarracks: barr + Location: 73,83 + Owner: USSR + SubPen: spen + Location: 72,62 + Owner: USSR + BadGuy1: e1 + Location: 48,95 + Owner: USSR + Facing: 95 + SubCell: 4 + BadGuy2: e1 + Location: 50,98 + Owner: USSR + Facing: 95 + SubCell: 1 + BadGuy3: e1 + Location: 50,96 + Owner: USSR + Facing: 95 + SubCell: 1 + BadGuy4: e1 + Location: 48,97 + Owner: USSR + Facing: 95 + SubCell: 4 + Patrol1Sub: ss + Location: 96,58 + Owner: USSR + Facing: 127 + SubPatrol1_1: waypoint + Location: 96,58 + Owner: Neutral + SubPatrol1_2: waypoint + Location: 86,77 + Owner: Neutral + Patrol2Sub: ss + Location: 39,70 + Owner: USSR + Facing: 95 + SubPatrol2_1: waypoint + Location: 42,63 + Owner: Neutral + SubPatrol2_2: waypoint + Location: 22,72 + Owner: Neutral + Patrol3Sub: ss + Location: 22,64 + Owner: USSR + Facing: 191 + SubPatrol3_1: waypoint + Location: 41,75 + Owner: Neutral + SubPatrol3_2: waypoint + Location: 22,64 + Owner: Neutral + Patrol4Sub: ss + Location: 79,51 + Owner: USSR + Facing: 191 + SubPatrol4_1: waypoint + Location: 79,51 + Owner: Neutral + SubPatrol4_2: waypoint + Location: 102,51 + Owner: Neutral + Patrol5Sub: ss + Owner: USSR + Location: 94,75 + Facing: 125 + SubPatrol5_1: waypoint + Location: 94,94 + Owner: Neutral + SubPatrol5_2: waypoint + Location: 94,75 + Owner: Neutral + Mammoth1: 4tnk + Location: 69,43 + Owner: USSR + Facing: 63 + Mammoth2: 4tnk + Location: 43,40 + Owner: USSR + Facing: 63 + Mammoth3: 4tnk + Location: 54,37 + Owner: USSR + Facing: 63 + TnkPatrol1: waypoint + Location: 69,43 + Owner: Neutral + TnkPatrol2: waypoint + Location: 69,55 + Owner: Neutral + TnkPatrol3: waypoint + Location: 56,55 + Owner: Neutral + TnkPatrol4: waypoint + Location: 41,44 + Owner: Neutral + TnkPatrol5: waypoint + Location: 42,37 + Owner: Neutral + TnkPatrol6: waypoint + Location: 62,37 + Owner: Neutral + DefenseFlame1: ftur + Location: 51,91 + Owner: USSR + DefenseFlame2: ftur + Location: 47,91 + Owner: USSR + DefBrl1: brl3 + Location: 51,90 + Owner: USSR + DefBrl2: brl3 + Location: 46,89 + Owner: USSR + Patrol_1_e1: e1 + Location: 40,44 + Owner: USSR + Facing: 63 + SubCell: 1 + Patrol_1_dog: dog + Location: 40,43 + Owner: USSR + Facing: 63 + SubCell: 1 + Patrol_2_e1: e1 + Location: 41,37 + Owner: USSR + Facing: 63 + SubCell: 1 + Patrol_2_dog: dog + Location: 41,37 + Owner: USSR + Facing: 63 + SubCell: 3 + Patrol_3_e1: e1 + Location: 84,43 + Owner: USSR + Facing: 63 + SubCell: 2 + Patrol_3_dog: dog + Location: 86,43 + Owner: USSR + Facing: 63 + SubCell: 0 + Patrol_4_e1: e1 + Location: 67,51 + Owner: USSR + Facing: 95 + SubCell: 1 + Patrol_4_dog: dog + Location: 66,50 + Owner: USSR + Facing: 95 + SubCell: 3 + Patrol1: waypoint + Location: 85,43 + Owner: Neutral + Patrol2: waypoint + Location: 66,50 + Owner: Neutral + Patrol3: waypoint + Location: 53,55 + Owner: Neutral + Patrol4: waypoint + Location: 46,49 + Owner: Neutral + Patrol5: waypoint + Location: 40,44 + Owner: Neutral + Patrol6: waypoint + Location: 41,37 + Owner: Neutral + Patrol7: waypoint + Location: 54,37 + Owner: Neutral + Patrol8: waypoint + Location: 71,43 + Owner: Neutral + tank1: 3tnk + Location: 81,56 + Owner: USSR + Facing: 95 + tank2: 3tnk + Location: 77,54 + Owner: USSR + Facing: 95 + tank3: 3tnk + Location: 64,43 + Owner: USSR + Facing: 159 + tank4: 3tnk + Location: 45,43 + Owner: USSR + Facing: 127 + tank5: 3tnk + Location: 51,56 + Owner: USSR + tank6: v2rl + Location: 46,41 + Owner: USSR + Facing: 95 + tank7: v2rl + Location: 62,42 + Owner: USSR + Facing: 159 + BeachDog: dog + Location: 75,54 + Owner: USSR + Facing: 95 + SubCell: 1 + BeachPatrol1: waypoint + Owner: Neutral + Location: 68,59 + BeachPatrol2: waypoint + Owner: Neutral + Location: 75,54 + BeachPatrol3: waypoint + Location: 77,58 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml \ No newline at end of file diff --git a/mods/ura/maps/allies-06b/rules.yaml b/mods/ura/maps/allies-06b/rules.yaml new file mode 100644 index 0000000..80a6d56 --- /dev/null +++ b/mods/ura/maps/allies-06b/rules.yaml @@ -0,0 +1,93 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: allies06b.lua, allies06b-AI.lua + MissionData: + BriefingVideo: ally6.vqa + WinVideo: allymorf.vqa + LossVideo: overrun.vqa + StartVideo: mcv.vqa + Briefing: Priority one is to establish a base and get your spy into one of the Soviet Tech Centers in the base across the gulf.\nData on the Iron Curtain is in there and we need it.\n\nOnce you get the data complete your mission...\nWipe out everything. + MapOptions: + TechLevel: medium + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E4,E4 + +3TNK: + Buildable: + Prerequisites: ~vehicles.soviet + +ARTY: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +TECH.CAM: + Inherits: CAMERA + RevealsShroud: + Range: 4c0 + Type: CenterPosition + +STEK: + Targetable: + TargetTypes: Ground, Structure, C4, DetonateAttack, SpyInfiltrate + +APWR: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +DD: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +SS: + AutoTarget: + InitialStanceAI: AttackAnything diff --git a/mods/ura/maps/asymmetric-battle.oramap b/mods/ura/maps/asymmetric-battle.oramap new file mode 100644 index 0000000..389243b Binary files /dev/null and b/mods/ura/maps/asymmetric-battle.oramap differ diff --git a/mods/ura/maps/barracuda.oramap b/mods/ura/maps/barracuda.oramap new file mode 100644 index 0000000..12d697a Binary files /dev/null and b/mods/ura/maps/barracuda.oramap differ diff --git a/mods/ura/maps/behind-the-veil.oramap b/mods/ura/maps/behind-the-veil.oramap new file mode 100644 index 0000000..8af7d75 Binary files /dev/null and b/mods/ura/maps/behind-the-veil.oramap differ diff --git a/mods/ura/maps/bombardment-islands.oramap b/mods/ura/maps/bombardment-islands.oramap new file mode 100644 index 0000000..9cd3818 Binary files /dev/null and b/mods/ura/maps/bombardment-islands.oramap differ diff --git a/mods/ura/maps/bomber-john/brick.shp b/mods/ura/maps/bomber-john/brick.shp new file mode 100644 index 0000000..9f90058 Binary files /dev/null and b/mods/ura/maps/bomber-john/brick.shp differ diff --git a/mods/ura/maps/bomber-john/map.bin b/mods/ura/maps/bomber-john/map.bin new file mode 100644 index 0000000..52a01cc Binary files /dev/null and b/mods/ura/maps/bomber-john/map.bin differ diff --git a/mods/ura/maps/bomber-john/map.png b/mods/ura/maps/bomber-john/map.png new file mode 100644 index 0000000..c01122c Binary files /dev/null and b/mods/ura/maps/bomber-john/map.png differ diff --git a/mods/ura/maps/bomber-john/map.yaml b/mods/ura/maps/bomber-john/map.yaml new file mode 100644 index 0000000..fd882bd --- /dev/null +++ b/mods/ura/maps/bomber-john/map.yaml @@ -0,0 +1,757 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Bomber John + +Author: Holloweye + +Tileset: TEMPERAT + +MapSize: 56,56 + +Bounds: 16,16,24,24 + +Visibility: Lobby + +Categories: Minigame + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: allies + Enemies: Multi0, Multi1, Multi2, Multi3, Multi4, Multi5, Multi6, Multi7 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + Enemies: Creeps + PlayerReference@Multi2: + Name: Multi2 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + Enemies: Creeps + PlayerReference@Multi3: + Name: Multi3 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + Enemies: Creeps + PlayerReference@Multi4: + Name: Multi4 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + Enemies: Creeps + PlayerReference@Multi5: + Name: Multi5 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + Enemies: Creeps + PlayerReference@Multi6: + Name: Multi6 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + Enemies: Creeps + PlayerReference@Multi7: + Name: Multi7 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + Enemies: Creeps + +Actors: + Actor69: ftur + Location: 39,16 + Owner: Creeps + Actor1: T17 + Location: 16,17 + Owner: Neutral + Actor2: T17 + Location: 16,18 + Owner: Neutral + Actor3: T17 + Location: 16,19 + Owner: Neutral + Actor4: T17 + Location: 16,20 + Owner: Neutral + Actor5: T17 + Location: 16,21 + Owner: Neutral + Actor6: T17 + Location: 16,22 + Owner: Neutral + Actor7: T17 + Location: 16,23 + Owner: Neutral + Actor8: T17 + Location: 16,24 + Owner: Neutral + Actor9: T17 + Location: 16,25 + Owner: Neutral + Actor10: T17 + Location: 16,26 + Owner: Neutral + Actor11: T17 + Location: 16,27 + Owner: Neutral + Actor12: T17 + Location: 16,28 + Owner: Neutral + Actor13: T17 + Location: 16,29 + Owner: Neutral + Actor14: T17 + Location: 16,30 + Owner: Neutral + Actor15: T17 + Location: 16,31 + Owner: Neutral + Actor16: T17 + Location: 16,32 + Owner: Neutral + Actor17: T17 + Location: 16,33 + Owner: Neutral + Actor18: T17 + Location: 16,34 + Owner: Neutral + Actor19: T17 + Location: 16,35 + Owner: Neutral + Actor20: T17 + Location: 16,36 + Owner: Neutral + Actor21: T17 + Location: 16,37 + Owner: Neutral + Actor22: T17 + Location: 16,38 + Owner: Neutral + Actor46: ftur + Location: 39,39 + Owner: Creeps + Actor24: T17 + Location: 17,39 + Owner: Neutral + Actor25: T17 + Location: 18,39 + Owner: Neutral + Actor26: T17 + Location: 19,39 + Owner: Neutral + Actor27: T17 + Location: 20,39 + Owner: Neutral + Actor28: T17 + Location: 21,39 + Owner: Neutral + Actor29: T17 + Location: 22,39 + Owner: Neutral + Actor30: T17 + Location: 23,39 + Owner: Neutral + Actor31: T17 + Location: 24,39 + Owner: Neutral + Actor32: T17 + Location: 25,39 + Owner: Neutral + Actor33: T17 + Location: 26,39 + Owner: Neutral + Actor34: T17 + Location: 27,39 + Owner: Neutral + Actor35: T17 + Location: 28,39 + Owner: Neutral + Actor36: T17 + Location: 29,39 + Owner: Neutral + Actor37: T17 + Location: 30,39 + Owner: Neutral + Actor38: T17 + Location: 31,39 + Owner: Neutral + Actor39: T17 + Location: 32,39 + Owner: Neutral + Actor40: T17 + Location: 33,39 + Owner: Neutral + Actor41: T17 + Location: 34,39 + Owner: Neutral + Actor42: T17 + Location: 35,39 + Owner: Neutral + Actor43: T17 + Location: 36,39 + Owner: Neutral + Actor44: T17 + Location: 37,39 + Owner: Neutral + Actor45: T17 + Location: 38,39 + Owner: Neutral + Actor23: ftur + Location: 16,39 + Owner: Creeps + Actor47: T17 + Location: 39,38 + Owner: Neutral + Actor48: T17 + Location: 39,37 + Owner: Neutral + Actor49: T17 + Location: 39,36 + Owner: Neutral + Actor50: T17 + Location: 39,35 + Owner: Neutral + Actor51: T17 + Location: 39,34 + Owner: Neutral + Actor52: T17 + Location: 39,33 + Owner: Neutral + Actor53: T17 + Location: 39,32 + Owner: Neutral + Actor54: T17 + Location: 39,31 + Owner: Neutral + Actor55: T17 + Location: 39,30 + Owner: Neutral + Actor56: T17 + Location: 39,29 + Owner: Neutral + Actor57: T17 + Location: 39,28 + Owner: Neutral + Actor58: T17 + Location: 39,27 + Owner: Neutral + Actor59: T17 + Location: 39,26 + Owner: Neutral + Actor60: T17 + Location: 39,25 + Owner: Neutral + Actor61: T17 + Location: 39,24 + Owner: Neutral + Actor62: T17 + Location: 39,23 + Owner: Neutral + Actor63: T17 + Location: 39,22 + Owner: Neutral + Actor64: T17 + Location: 39,21 + Owner: Neutral + Actor65: T17 + Location: 39,20 + Owner: Neutral + Actor66: T17 + Location: 39,19 + Owner: Neutral + Actor67: T17 + Location: 39,18 + Owner: Neutral + Actor68: T17 + Location: 39,17 + Owner: Neutral + Actor0: ftur + Location: 16,16 + Owner: Creeps + Actor70: T17 + Location: 38,16 + Owner: Neutral + Actor71: T17 + Location: 37,16 + Owner: Neutral + Actor72: T17 + Location: 36,16 + Owner: Neutral + Actor73: T17 + Location: 35,16 + Owner: Neutral + Actor74: T17 + Location: 34,16 + Owner: Neutral + Actor75: T17 + Location: 33,16 + Owner: Neutral + Actor76: T17 + Location: 32,16 + Owner: Neutral + Actor77: T17 + Location: 31,16 + Owner: Neutral + Actor78: T17 + Location: 30,16 + Owner: Neutral + Actor79: T17 + Location: 29,16 + Owner: Neutral + Actor80: T17 + Location: 28,16 + Owner: Neutral + Actor81: T17 + Location: 27,16 + Owner: Neutral + Actor82: T17 + Location: 26,16 + Owner: Neutral + Actor83: T17 + Location: 25,16 + Owner: Neutral + Actor84: T17 + Location: 24,16 + Owner: Neutral + Actor85: T17 + Location: 23,16 + Owner: Neutral + Actor86: T17 + Location: 22,16 + Owner: Neutral + Actor87: T17 + Location: 21,16 + Owner: Neutral + Actor88: T17 + Location: 20,16 + Owner: Neutral + Actor89: T17 + Location: 19,16 + Owner: Neutral + Actor90: T17 + Location: 18,16 + Owner: Neutral + Actor91: T17 + Location: 17,16 + Owner: Neutral + Actor92: T17 + Location: 18,18 + Owner: Neutral + Actor93: T17 + Location: 18,20 + Owner: Neutral + Actor94: T17 + Location: 18,22 + Owner: Neutral + Actor95: T17 + Location: 18,24 + Owner: Neutral + Actor96: T17 + Location: 18,26 + Owner: Neutral + Actor97: T17 + Location: 18,28 + Owner: Neutral + Actor98: T17 + Location: 18,30 + Owner: Neutral + Actor99: T17 + Location: 18,32 + Owner: Neutral + Actor100: T17 + Location: 18,34 + Owner: Neutral + Actor101: T17 + Location: 18,36 + Owner: Neutral + Actor102: T17 + Location: 18,38 + Owner: Neutral + Actor103: T17 + Location: 20,37 + Owner: Neutral + Actor104: T17 + Location: 20,35 + Owner: Neutral + Actor105: T17 + Location: 20,33 + Owner: Neutral + Actor106: T17 + Location: 20,31 + Owner: Neutral + Actor107: T17 + Location: 20,29 + Owner: Neutral + Actor108: T17 + Location: 20,27 + Owner: Neutral + Actor109: T17 + Location: 20,25 + Owner: Neutral + Actor110: T17 + Location: 20,23 + Owner: Neutral + Actor111: T17 + Location: 20,21 + Owner: Neutral + Actor112: T17 + Location: 20,19 + Owner: Neutral + Actor113: T17 + Location: 20,17 + Owner: Neutral + Actor114: T17 + Location: 22,18 + Owner: Neutral + Actor115: T17 + Location: 22,20 + Owner: Neutral + Actor116: T17 + Location: 22,22 + Owner: Neutral + Actor117: T17 + Location: 22,24 + Owner: Neutral + Actor118: T17 + Location: 22,26 + Owner: Neutral + Actor119: T17 + Location: 22,28 + Owner: Neutral + Actor120: T17 + Location: 22,30 + Owner: Neutral + Actor121: T17 + Location: 22,32 + Owner: Neutral + Actor122: T17 + Location: 22,34 + Owner: Neutral + Actor123: T17 + Location: 22,36 + Owner: Neutral + Actor124: T17 + Location: 22,38 + Owner: Neutral + Actor125: T17 + Location: 24,37 + Owner: Neutral + Actor126: T17 + Location: 24,35 + Owner: Neutral + Actor127: T17 + Location: 24,33 + Owner: Neutral + Actor128: T17 + Location: 24,31 + Owner: Neutral + Actor129: T17 + Location: 24,29 + Owner: Neutral + Actor130: T17 + Location: 24,27 + Owner: Neutral + Actor131: T17 + Location: 24,25 + Owner: Neutral + Actor132: T17 + Location: 24,23 + Owner: Neutral + Actor133: T17 + Location: 24,21 + Owner: Neutral + Actor134: T17 + Location: 24,19 + Owner: Neutral + Actor135: T17 + Location: 24,17 + Owner: Neutral + Actor136: T17 + Location: 26,18 + Owner: Neutral + Actor137: T17 + Location: 26,20 + Owner: Neutral + Actor138: T17 + Location: 26,22 + Owner: Neutral + Actor139: T17 + Location: 26,24 + Owner: Neutral + Actor162: mpspawn + Location: 36,26 + Owner: Neutral + Actor153: mpspawn + Location: 36,36 + Owner: Neutral + Actor142: T17 + Location: 26,30 + Owner: Neutral + Actor143: T17 + Location: 26,32 + Owner: Neutral + Actor144: T17 + Location: 26,34 + Owner: Neutral + Actor145: T17 + Location: 26,36 + Owner: Neutral + Actor146: T17 + Location: 26,38 + Owner: Neutral + Actor147: T17 + Location: 28,37 + Owner: Neutral + Actor148: T17 + Location: 28,35 + Owner: Neutral + Actor149: T17 + Location: 28,33 + Owner: Neutral + Actor150: T17 + Location: 28,31 + Owner: Neutral + Actor152: mpspawn + Location: 28,36 + Owner: Neutral + Actor163: mpspawn + Location: 36,18 + Owner: Neutral + Actor141: mpspawn + Location: 19,27 + Owner: Neutral + Actor154: T17 + Location: 28,23 + Owner: Neutral + Actor155: T17 + Location: 28,21 + Owner: Neutral + Actor156: T17 + Location: 28,19 + Owner: Neutral + Actor157: T17 + Location: 28,17 + Owner: Neutral + Actor158: T17 + Location: 30,18 + Owner: Neutral + Actor159: T17 + Location: 30,20 + Owner: Neutral + Actor160: T17 + Location: 30,22 + Owner: Neutral + Actor161: T17 + Location: 30,24 + Owner: Neutral + Actor140: mpspawn + Location: 19,19 + Owner: Neutral + Actor151: mpspawn + Location: 19,36 + Owner: Neutral + Actor164: T17 + Location: 30,30 + Owner: Neutral + Actor165: T17 + Location: 30,32 + Owner: Neutral + Actor166: T17 + Location: 30,34 + Owner: Neutral + Actor167: T17 + Location: 30,36 + Owner: Neutral + Actor168: T17 + Location: 30,38 + Owner: Neutral + Actor169: T17 + Location: 32,37 + Owner: Neutral + Actor170: T17 + Location: 32,35 + Owner: Neutral + Actor171: T17 + Location: 32,33 + Owner: Neutral + Actor172: T17 + Location: 32,31 + Owner: Neutral + Actor173: T17 + Location: 32,29 + Owner: Neutral + Actor174: T17 + Location: 32,27 + Owner: Neutral + Actor175: T17 + Location: 32,25 + Owner: Neutral + Actor176: T17 + Location: 32,23 + Owner: Neutral + Actor177: T17 + Location: 32,21 + Owner: Neutral + Actor178: T17 + Location: 32,19 + Owner: Neutral + Actor179: T17 + Location: 32,17 + Owner: Neutral + Actor180: T17 + Location: 34,18 + Owner: Neutral + Actor181: T17 + Location: 34,20 + Owner: Neutral + Actor182: T17 + Location: 34,22 + Owner: Neutral + Actor183: T17 + Location: 34,24 + Owner: Neutral + Actor184: T17 + Location: 34,26 + Owner: Neutral + Actor185: T17 + Location: 34,28 + Owner: Neutral + Actor186: T17 + Location: 34,30 + Owner: Neutral + Actor187: T17 + Location: 34,32 + Owner: Neutral + Actor188: T17 + Location: 34,34 + Owner: Neutral + Actor189: T17 + Location: 34,36 + Owner: Neutral + Actor190: T17 + Location: 34,38 + Owner: Neutral + Actor191: T17 + Location: 36,37 + Owner: Neutral + Actor192: T17 + Location: 36,35 + Owner: Neutral + Actor193: T17 + Location: 36,33 + Owner: Neutral + Actor194: T17 + Location: 36,31 + Owner: Neutral + Actor195: T17 + Location: 36,29 + Owner: Neutral + Actor196: T17 + Location: 36,27 + Owner: Neutral + Actor197: T17 + Location: 36,25 + Owner: Neutral + Actor198: T17 + Location: 36,23 + Owner: Neutral + Actor199: T17 + Location: 36,21 + Owner: Neutral + Actor200: T17 + Location: 36,19 + Owner: Neutral + Actor201: T17 + Location: 36,17 + Owner: Neutral + Actor202: T17 + Location: 38,18 + Owner: Neutral + Actor203: T17 + Location: 38,20 + Owner: Multi0 + Actor204: T17 + Location: 38,22 + Owner: Multi1 + Actor205: T17 + Location: 38,24 + Owner: Multi2 + Actor206: T17 + Location: 38,26 + Owner: Multi3 + Actor207: T17 + Location: 38,28 + Owner: Multi4 + Actor208: T17 + Location: 38,30 + Owner: Multi5 + Actor209: T17 + Location: 38,32 + Owner: Multi6 + Actor210: T17 + Location: 38,34 + Owner: Multi7 + Actor211: T17 + Location: 38,36 + Owner: Neutral + Actor212: T17 + Location: 38,38 + Owner: Neutral + Actor213: mpspawn + Location: 28,18 + Owner: Neutral + Actor214: mnlyr + Location: 19,20 + Owner: Multi0 + Actor215: mnlyr + Location: 19,28 + Owner: Multi1 + Actor216: mnlyr + Location: 20,36 + Owner: Multi2 + Actor217: mnlyr + Location: 29,36 + Owner: Multi3 + Actor218: mnlyr + Location: 37,35 + Owner: Multi4 + Actor219: mnlyr + Location: 37,25 + Owner: Multi5 + Actor220: mnlyr + Location: 34,18 + Owner: Multi6 + Actor221: mnlyr + Location: 27,18 + Owner: Multi7 + +Rules: rules.yaml + +Sequences: sequences.yaml diff --git a/mods/ura/maps/bomber-john/miner.shp b/mods/ura/maps/bomber-john/miner.shp new file mode 100644 index 0000000..6765b54 Binary files /dev/null and b/mods/ura/maps/bomber-john/miner.shp differ diff --git a/mods/ura/maps/bomber-john/rules.yaml b/mods/ura/maps/bomber-john/rules.yaml new file mode 100644 index 0000000..c04078b --- /dev/null +++ b/mods/ura/maps/bomber-john/rules.yaml @@ -0,0 +1,172 @@ +World: + CrateSpawner: + CheckboxEnabled: False + CheckboxLocked: True + -SpawnMPUnits: + MapBuildRadius: + AllyBuildRadiusCheckboxLocked: True + AllyBuildRadiusCheckboxEnabled: False + BuildRadiusCheckboxLocked: True + BuildRadiusCheckboxEnabled: True + MapOptions: + TechLevelDropdownLocked: True + TechLevel: unrestricted + +APWR: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +BARR: + Buildable: + Prerequisites: ~disabled + +FIX: + Buildable: + Prerequisites: ~disabled + +POWR: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +PROC: + Buildable: + Prerequisites: ~disabled + +WEAP: + Buildable: + Prerequisites: ~disabled + +DOME: + Buildable: + Prerequisites: ~disabled + +SPEN: + Buildable: + Prerequisites: ~disabled + +SILO: + Buildable: + Prerequisites: ~disabled + +Player: + Shroud: + FogCheckboxLocked: True + FogCheckboxEnabled: True + ExploredMapCheckboxLocked: True + ExploredMapCheckboxEnabled: False + PlayerResources: + DefaultCashLocked: True + DefaultCash: 60 + ChronoshiftPower: + Icon: chrono + ChargeInterval: 1500 + Description: Chronoshift + LongDesc: Teleport a group of vehicles across\nthe map. + SelectTargetSound: slcttgt1.aud + BeginChargeSound: chrochr1.aud + EndChargeSound: chrordy1.aud + KillCargo: yes + Range: 3 + GrantExternalConditionPower@IRONCURTAIN: + Icon: invuln + ChargeInterval: 750 + Description: Invulnerability + LongDesc: Makes a unit invulnerable\nfor 3 seconds. + Duration: 75 + SelectTargetSound: slcttgt1.aud + BeginChargeSound: ironchg1.aud + EndChargeSound: ironrdy1.aud + Range: 1 + Condition: invulnerability + Sequence: idle + OnFireSound: ironcur9.aud + Production: + Produces: Building + LobbyPrerequisiteCheckbox@GLOBALBOUNTY: + Enabled: True + Locked: True + +MNLYR: + Inherits: ^TrackedVehicle + Valued: + Cost: 800 + Tooltip: + Name: Bomber + Health: + HP: 500 + Armor: + Type: Heavy + Mobile: + Speed: 128 + WaitAverage: 1 + WaitSpread: 1 + TurnSpeed: 900 + RevealsShroud: + Range: 40c0 + MustBeDestroyed: + RequiredForShortGame: true + Transforms: + IntoActor: ftur + Offset: 0,0 + Facing: 96 + CashTrickler: + Interval: 150 + Amount: 20 + RenderSprites: + Image: MNLY + Chronoshiftable: + ReturnToOrigin: false + HitShape: + +FTUR: + Health: + HP: 1000 + Transforms: + IntoActor: mnlyr + Offset: 0,0 + Facing: 96 + MustBeDestroyed: + RequiredForShortGame: true + CashTrickler: + Interval: 150 + Amount: 30 + -Power: + +MINVV: + Inherits: ^SpriteActor + HiddenUnderFog: + Building: + TerrainTypes: Clear,Road + Buildable: + Queue: Building + BuildPaletteOrder: 10 + Description: Bomb which explodes after 8 seconds + Valued: + Cost: 30 + Health: + HP: 200 + RenderSprites: + Image: miner + WithSpriteBody: + Tooltip: + Name: Bomb + SelfHealing: + Step: -1 + Delay: 1 + HealIfBelow: 101 + Explodes: + Weapon: CrateNuke + EmptyWeapon: CrateNuke + HitShape: + Interactable: + +T17: + -Health: diff --git a/mods/ura/maps/bomber-john/sequences.yaml b/mods/ura/maps/bomber-john/sequences.yaml new file mode 100644 index 0000000..8163088 --- /dev/null +++ b/mods/ura/maps/bomber-john/sequences.yaml @@ -0,0 +1,9 @@ +miner: + idle: + Length: * + Tick: 400 + ZOffset: -512 + icon: jmin + +brick: + idle: diff --git a/mods/ura/maps/caffeinated.oramap b/mods/ura/maps/caffeinated.oramap new file mode 100644 index 0000000..5122ce3 Binary files /dev/null and b/mods/ura/maps/caffeinated.oramap differ diff --git a/mods/ura/maps/center-of-attention-redux-2/map.bin b/mods/ura/maps/center-of-attention-redux-2/map.bin new file mode 100644 index 0000000..d650ef3 Binary files /dev/null and b/mods/ura/maps/center-of-attention-redux-2/map.bin differ diff --git a/mods/ura/maps/center-of-attention-redux-2/map.png b/mods/ura/maps/center-of-attention-redux-2/map.png new file mode 100644 index 0000000..778a7fa Binary files /dev/null and b/mods/ura/maps/center-of-attention-redux-2/map.png differ diff --git a/mods/ura/maps/center-of-attention-redux-2/map.yaml b/mods/ura/maps/center-of-attention-redux-2/map.yaml new file mode 100644 index 0000000..58cb4da --- /dev/null +++ b/mods/ura/maps/center-of-attention-redux-2/map.yaml @@ -0,0 +1,1180 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Center of Attention Redux 2 + +Author: Buddha + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 15,10,105,114 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: allies + Enemies: Multi0, Multi1, Multi2, Multi3, Multi4, Multi5, Multi6, Multi7 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi2: + Name: Multi2 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi3: + Name: Multi3 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi4: + Name: Multi4 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi5: + Name: Multi5 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi6: + Name: Multi6 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi7: + Name: Multi7 + Playable: True + Faction: Random + Enemies: Creeps + +Actors: + Actor101: oilb.strong + Location: 69,68 + Owner: Neutral + Actor391: mine + Owner: Neutral + Location: 71,61 + Actor93: oilb.strong + Location: 69,63 + Owner: Neutral + Actor47: tc05 + Location: 67,71 + Owner: Neutral + Actor380: mine + Owner: Neutral + Location: 59,18 + Actor379: mine + Owner: Neutral + Location: 72,20 + Actor382: mine + Owner: Neutral + Location: 25,19 + Actor381: mine + Owner: Neutral + Location: 21,25 + Actor375: mine + Owner: Neutral + Location: 116,69 + Actor376: mine + Owner: Neutral + Location: 117,61 + Actor388: mine + Owner: Neutral + Location: 79,96 + Actor387: mine + Owner: Neutral + Location: 78,101 + Actor390: mine + Owner: Neutral + Location: 107,96 + Actor389: mine + Owner: Neutral + Location: 112,90 + Actor377: mine + Owner: Neutral + Location: 112,24 + Actor378: mine + Owner: Neutral + Location: 108,22 + Actor16: tc05 + Location: 109,42 + Owner: Neutral + Actor17: tc05 + Location: 105,89 + Owner: Neutral + Actor18: tc04 + Location: 93,99 + Owner: Neutral + Actor19: tc05 + Location: 68,99 + Owner: Neutral + Actor20: tc04 + Location: 19,62 + Owner: Neutral + Actor21: tc05 + Location: 38,44 + Owner: Neutral + Actor26: tc05 + Location: 77,18 + Owner: Neutral + Actor23: tc04 + Location: 108,41 + Owner: Neutral + Actor24: tc03 + Location: 93,98 + Owner: Neutral + Actor25: tc03 + Location: 20,61 + Owner: Neutral + Actor22: tc05 + Location: 72,8 + Owner: Neutral + Actor370: t06 + Owner: Neutral + Location: 108,87 + Actor29: tc02 + Location: 86,60 + Owner: Neutral + Actor30: tc02 + Location: 111,77 + Owner: Neutral + Actor31: tc02 + Location: 86,95 + Owner: Neutral + Actor32: tc04 + Location: 72,92 + Owner: Neutral + Actor33: tc02 + Location: 74,93 + Owner: Neutral + Actor34: t17 + Location: 73,93 + Owner: Neutral + Actor124: t02 + Location: 84,106 + Owner: Neutral + Actor36: tc04 + Location: 96,104 + Owner: Neutral + Actor37: tc03 + Location: 66,100 + Owner: Neutral + Actor38: tc04 + Location: 45,107 + Owner: Neutral + Actor39: tc03 + Location: 46,109 + Owner: Neutral + Actor42: tc05 + Location: 45,59 + Owner: Neutral + Actor43: tc05 + Location: 86,61 + Owner: Neutral + Actor44: tc03 + Location: 81,56 + Owner: Neutral + Actor394: mine + Owner: Neutral + Location: 56,60 + Actor97: t03 + Location: 88,64 + Owner: Neutral + Actor49: tc01 + Location: 72,37 + Owner: Neutral + Actor51: tc01 + Location: 30,38 + Owner: Neutral + Actor52: tc02 + Location: 31,39 + Owner: Neutral + Actor53: tc04 + Location: 19,34 + Owner: Neutral + Actor54: tc03 + Location: 20,36 + Owner: Neutral + Actor55: t15 + Location: 35,22 + Owner: Neutral + Actor56: t14 + Location: 47,45 + Owner: Neutral + Actor95: t06 + Location: 85,64 + Owner: Neutral + Actor58: t12 + Location: 56,97 + Owner: Neutral + Actor273: tc01 + Owner: Creeps + Location: 24,118 + Actor384: mine + Owner: Neutral + Location: 32,66 + Actor383: mine + Owner: Neutral + Location: 36,68 + Actor385: mine + Owner: Neutral + Location: 39,95 + Actor386: mine + Owner: Neutral + Location: 35,90 + Actor63: tc04 + Location: 15,23 + Owner: Neutral + Actor64: t11 + Location: 20,81 + Owner: Neutral + Actor66: t16 + Location: 21,84 + Owner: Neutral + Actor65: t11 + Location: 21,82 + Owner: Neutral + Actor67: tc04 + Location: 20,93 + Owner: Neutral + Actor69: oilb.weak + Location: 63,40 + Owner: Neutral + Actor70: oilb.weak + Location: 89,44 + Owner: Neutral + Actor71: t08 + Location: 63,44 + Owner: Neutral + Actor72: t10 + Location: 61,43 + Owner: Neutral + Actor73: t11 + Location: 94,32 + Owner: Neutral + Actor74: tc03 + Location: 109,57 + Owner: Neutral + Actor75: tc02 + Location: 108,59 + Owner: Neutral + Actor76: tc01 + Location: 65,91 + Owner: Neutral + Actor77: t13 + Location: 51,93 + Owner: Neutral + Actor78: t08 + Location: 55,102 + Owner: Neutral + Actor8: oilb.weak + Location: 39,78 + Owner: Neutral + Actor82: t11 + Location: 93,75 + Owner: Neutral + Actor369: t11 + Owner: Neutral + Location: 83,49 + Actor28: tc04 + Location: 84,80 + Owner: Neutral + Actor48: t16 + Location: 84,70 + Owner: Neutral + Actor90: t11 + Location: 104,76 + Owner: Neutral + Actor92: t14 + Location: 95,88 + Owner: Neutral + Actor57: t16 + Location: 87,72 + Owner: Neutral + Actor395: mine + Owner: Neutral + Location: 59,66 + Actor85: oilb.strong + Location: 64,63 + Owner: Neutral + Actor96: t06 + Location: 83,63 + Owner: Neutral + Actor94: oilb.strong + Location: 64,68 + Owner: Neutral + Actor392: mine + Owner: Neutral + Location: 77,63 + Actor99: tc01 + Location: 89,77 + Owner: Neutral + Actor100: t10 + Location: 86,73 + Owner: Neutral + Actor84: t06 + Location: 81,80 + Owner: Neutral + Actor393: mine + Owner: Neutral + Location: 81,71 + Actor396: mine + Owner: Neutral + Location: 57,75 + Actor104: tc02 + Location: 54,27 + Owner: Neutral + Actor35: t05 + Location: 88,108 + Owner: Neutral + Actor27: tc05 + Location: 27,115 + Owner: Neutral + Actor50: tc04 + Location: 30,116 + Owner: Neutral + Actor106: tc02 + Location: 25,115 + Owner: Neutral + Actor107: t10 + Location: 24,114 + Owner: Neutral + Actor108: t10 + Location: 32,117 + Owner: Neutral + Actor109: tc05 + Location: 32,118 + Owner: Neutral + Actor110: tc04 + Location: 25,117 + Owner: Neutral + Actor111: tc04 + Location: 29,118 + Owner: Neutral + Actor112: t15 + Location: 42,117 + Owner: Neutral + Actor113: t17 + Location: 44,117 + Owner: Neutral + Actor303: t05 + Owner: Neutral + Location: 39,123 + Actor40: tc05 + Location: 16,19 + Owner: Neutral + Actor116: tc04 + Location: 40,113 + Owner: Neutral + Actor117: tc05 + Location: 108,118 + Owner: Neutral + Actor118: tc04 + Location: 112,118 + Owner: Neutral + Actor119: tc04 + Location: 115,117 + Owner: Neutral + Actor120: tc04 + Location: 113,115 + Owner: Neutral + Actor121: tc04 + Location: 72,119 + Owner: Neutral + Actor122: tc05 + Location: 60,120 + Owner: Neutral + Actor123: t17 + Location: 56,120 + Owner: Neutral + Actor105: t02 + Location: 89,106 + Owner: Neutral + Actor125: t17 + Location: 64,94 + Owner: Neutral + Actor126: t17 + Location: 63,95 + Owner: Neutral + Actor127: t17 + Location: 30,79 + Owner: Neutral + Actor128: t17 + Location: 36,48 + Owner: Neutral + Actor129: t17 + Location: 49,18 + Owner: Neutral + Actor274: tc01 + Owner: Creeps + Location: 42,114 + Actor275: tc01 + Owner: Creeps + Location: 22,116 + Actor132: t17 + Location: 29,16 + Owner: Neutral + Actor133: t17 + Location: 45,39 + Owner: Neutral + Actor134: t17 + Location: 98,56 + Owner: Neutral + Actor135: tc05 + Location: 96,54 + Owner: Neutral + Actor136: t17 + Location: 117,114 + Owner: Neutral + Actor137: t17 + Location: 114,112 + Owner: Neutral + Actor138: tc05 + Location: 20,18 + Owner: Neutral + Actor139: t15 + Location: 100,85 + Owner: Neutral + Actor140: t03 + Location: 105,86 + Owner: Neutral + Actor141: t17 + Location: 90,107 + Owner: Neutral + Actor142: t16 + Location: 90,104 + Owner: Neutral + Actor143: t16 + Location: 91,104 + Owner: Neutral + Actor144: t16 + Location: 91,103 + Owner: Neutral + Actor145: t01 + Location: 92,105 + Owner: Neutral + Actor146: t08 + Location: 88,106 + Owner: Neutral + Actor147: t05 + Location: 87,104 + Owner: Neutral + Actor148: t05 + Location: 89,101 + Owner: Neutral + Actor149: t07 + Location: 86,107 + Owner: Neutral + Actor150: t05 + Location: 86,109 + Owner: Neutral + Actor151: tc04 + Location: 83,110 + Owner: Neutral + Actor152: t05 + Location: 84,113 + Owner: Neutral + Actor153: t05 + Location: 86,112 + Owner: Neutral + Actor154: t13 + Location: 79,11 + Owner: Neutral + Actor155: t03 + Location: 80,10 + Owner: Neutral + Actor156: t02 + Location: 55,10 + Owner: Neutral + Actor157: t08 + Location: 56,11 + Owner: Neutral + Actor158: t01 + Location: 54,11 + Owner: Neutral + Actor98: t10 + Location: 72,51 + Owner: Neutral + Actor102: t10 + Location: 50,64 + Owner: Neutral + Actor103: t01 + Location: 49,65 + Owner: Neutral + Actor115: t10 + Location: 98,75 + Owner: Neutral + Actor159: tc04 + Location: 61,61 + Owner: Neutral + Actor160: tc03 + Location: 72,63 + Owner: Neutral + Actor161: tc01 + Location: 62,70 + Owner: Neutral + Actor162: t14 + Location: 61,66 + Owner: Neutral + Actor163: t17 + Location: 74,65 + Owner: Neutral + Actor164: t14 + Location: 73,66 + Owner: Neutral + Actor173: arty + Location: 69,66 + Owner: Creeps + Actor167: arty + Location: 65,66 + Owner: Creeps + Actor178: agun + Location: 67,69 + Owner: Creeps + Actor180: v2rl + Location: 73,65 + Owner: Creeps + Actor179: arty + Location: 75,66 + Owner: Creeps + Actor166: arty + Location: 67,67 + Owner: Creeps + Actor165: arty + Location: 67,65 + Owner: Creeps + Actor182: brl3 + Location: 68,69 + Owner: Neutral + Actor184: brl3 + Location: 66,63 + Owner: Neutral + Actor185: brl3 + Location: 66,62 + Owner: Neutral + Actor186: brl3 + Location: 65,62 + Owner: Neutral + Actor187: brl3 + Location: 68,63 + Owner: Neutral + Actor188: brl3 + Location: 68,62 + Owner: Neutral + Actor189: brl3 + Location: 66,70 + Owner: Neutral + Actor190: brl3 + Location: 65,70 + Owner: Neutral + Actor191: brl3 + Location: 69,70 + Owner: Neutral + Actor192: oilb.weak + Location: 68,95 + Owner: Neutral + Actor193: oilb.weak + Location: 45,96 + Owner: Neutral + Actor408: mpspawn + Owner: Neutral + Location: 31,29 + Actor195: oilb.weak + Location: 103,87 + Owner: Neutral + Actor196: oilb.weak + Location: 104,67 + Owner: Neutral + Actor197: oilb.weak + Location: 45,44 + Owner: Neutral + Actor215: cycl + Location: 89,42 + Owner: Neutral + Actor214: cycl + Location: 88,42 + Owner: Neutral + Actor218: cycl + Location: 92,42 + Owner: Neutral + Actor219: cycl + Location: 94,40 + Owner: Neutral + Actor220: cycl + Location: 95,40 + Owner: Neutral + Actor221: cycl + Location: 95,41 + Owner: Neutral + Actor222: cycl + Location: 93,42 + Owner: Neutral + Actor223: cycl + Location: 95,42 + Owner: Neutral + Actor224: cycl + Location: 95,43 + Owner: Neutral + Actor213: cycl + Location: 88,41 + Owner: Neutral + Actor212: cycl + Location: 88,40 + Owner: Neutral + Actor211: cycl + Location: 88,39 + Owner: Neutral + Actor210: cycl + Location: 88,38 + Owner: Neutral + Actor209: cycl + Location: 88,37 + Owner: Neutral + Actor208: cycl + Location: 89,37 + Owner: Neutral + Actor207: cycl + Location: 90,39 + Owner: Neutral + Actor204: cycl + Location: 91,40 + Owner: Neutral + Actor203: cycl + Location: 92,40 + Owner: Neutral + Actor202: cycl + Location: 90,37 + Owner: Neutral + Actor201: cycl + Location: 91,37 + Owner: Neutral + Actor198: cycl + Location: 93,37 + Owner: Neutral + Actor199: cycl + Location: 93,40 + Owner: Neutral + Actor200: cycl + Location: 92,37 + Owner: Neutral + Actor216: cycl + Location: 90,42 + Owner: Neutral + Actor217: cycl + Location: 91,42 + Owner: Neutral + Actor205: cycl + Location: 92,38 + Owner: Neutral + Actor206: cycl + Location: 90,40 + Owner: Neutral + Actor169: jeep + Location: 70,62 + Owner: Creeps + Actor168: jeep + Location: 71,64 + Owner: Creeps + Actor170: jeep + Location: 62,69 + Owner: Creeps + Actor171: jeep + Location: 64,70 + Owner: Creeps + Actor172: jeep + Location: 64,61 + Owner: Creeps + Actor175: jeep + Location: 62,60 + Owner: Creeps + Actor181: v2rl + Location: 59,64 + Owner: Creeps + Actor177: jeep + Location: 71,70 + Owner: Creeps + Actor176: jeep + Location: 72,69 + Owner: Creeps + Actor234: cycl + Location: 95,44 + Owner: Neutral + Actor235: cycl + Location: 94,44 + Owner: Neutral + Actor236: cycl + Location: 93,44 + Owner: Neutral + Actor237: cycl + Location: 92,44 + Owner: Neutral + Actor238: cycl + Location: 91,44 + Owner: Neutral + Actor239: cycl + Location: 87,42 + Owner: Neutral + Actor240: cycl + Location: 87,43 + Owner: Neutral + Actor241: cycl + Location: 91,45 + Owner: Neutral + Actor242: cycl + Location: 91,46 + Owner: Neutral + Actor243: cycl + Location: 91,47 + Owner: Neutral + Actor244: brl3 + Location: 62,64 + Owner: Neutral + Actor245: brl3 + Location: 61,64 + Owner: Neutral + Actor246: brl3 + Location: 64,62 + Owner: Neutral + Actor174: agun + Location: 67,61 + Owner: Creeps + Actor248: brl3 + Location: 71,63 + Owner: Neutral + Actor249: brl3 + Location: 70,71 + Owner: Neutral + Actor250: brl3 + Location: 71,71 + Owner: Neutral + Actor251: brl3 + Location: 66,71 + Owner: Neutral + Actor252: truk + Location: 90,46 + Owner: Neutral + Actor253: truk + Location: 89,46 + Owner: Neutral + Actor254: truk + Location: 90,47 + Owner: Neutral + Actor255: tc05 + Location: 67,54 + Owner: Neutral + Actor256: tc05 + Location: 68,76 + Owner: Neutral + Actor257: t06 + Location: 68,78 + Owner: Neutral + Actor258: t11 + Location: 70,78 + Owner: Neutral + Actor259: t17 + Location: 69,79 + Owner: Neutral + Actor260: tc04 + Location: 70,79 + Owner: Neutral + Actor261: t05 + Location: 68,56 + Owner: Neutral + Actor262: tc01 + Location: 58,76 + Owner: Neutral + Actor263: t06 + Location: 57,63 + Owner: Neutral + Actor264: t17 + Location: 58,60 + Owner: Neutral + Actor265: t11 + Location: 56,61 + Owner: Neutral + Actor266: t05 + Location: 58,69 + Owner: Neutral + Actor267: t06 + Location: 80,67 + Owner: Neutral + Actor268: t12 + Location: 80,68 + Owner: Neutral + Actor269: t02 + Location: 79,66 + Owner: Neutral + Actor270: tc03 + Location: 72,77 + Owner: Neutral + Actor183: gun + Location: 52,71 + Owner: Creeps + Actor225: gun + Location: 84,69 + Owner: Creeps + Actor226: gun + Location: 73,58 + Owner: Creeps + Actor227: gun + Location: 68,74 + Owner: Creeps + Actor228: t11 + Location: 50,73 + Owner: Neutral + Actor229: arty + Location: 67,74 + Owner: Creeps + Actor230: arty + Location: 77,72 + Owner: Creeps + Actor231: arty + Location: 67,60 + Owner: Creeps + Actor233: apwr + Location: 121,91 + Owner: Creeps + Actor232: apwr + Location: 121,96 + Owner: Creeps + Actor276: tc01 + Owner: Creeps + Location: 33,121 + Actor277: tc02 + Owner: Creeps + Location: 32,117 + Actor278: t05 + Owner: Creeps + Location: 33,122 + Actor279: t05 + Owner: Creeps + Location: 21,114 + Actor280: t02 + Owner: Creeps + Location: 30,120 + Actor281: t02 + Owner: Creeps + Location: 27,113 + Actor282: t02 + Owner: Creeps + Location: 39,122 + Actor283: t02 + Owner: Creeps + Location: 31,119 + Actor284: tc01 + Owner: Neutral + Location: 115,114 + Actor285: tc01 + Owner: Neutral + Location: 111,120 + Actor286: tc02 + Owner: Neutral + Location: 116,119 + Actor287: tc02 + Owner: Neutral + Location: 112,116 + Actor288: t16 + Owner: Neutral + Location: 109,121 + Actor289: t16 + Owner: Neutral + Location: 116,111 + Actor290: t02 + Owner: Neutral + Location: 118,116 + Actor291: t02 + Owner: Neutral + Location: 106,120 + Actor292: t02 + Owner: Neutral + Location: 117,110 + Actor293: t01 + Owner: Neutral + Location: 111,123 + Actor294: t01 + Owner: Neutral + Location: 119,110 + Actor295: tc01 + Owner: Neutral + Location: 82,112 + Actor296: tc01 + Owner: Neutral + Location: 42,123 + Actor297: tc01 + Owner: Neutral + Location: 21,113 + Actor298: t16 + Owner: Neutral + Location: 17,112 + Actor299: t02 + Owner: Neutral + Location: 20,112 + Actor300: t02 + Owner: Neutral + Location: 28,118 + Actor301: t02 + Owner: Neutral + Location: 32,123 + Actor302: t02 + Owner: Neutral + Location: 44,112 + Actor304: t05 + Owner: Neutral + Location: 19,111 + Actor305: tc02 + Owner: Neutral + Location: 17,105 + Actor306: t11 + Owner: Neutral + Location: 15,103 + Actor307: t12 + Owner: Neutral + Location: 28,122 + Actor308: t12 + Owner: Neutral + Location: 25,107 + Actor309: t05 + Owner: Neutral + Location: 50,105 + Actor310: t05 + Owner: Neutral + Location: 42,115 + Actor311: t03 + Owner: Neutral + Location: 49,119 + Actor312: t10 + Owner: Neutral + Location: 84,119 + Actor313: t13 + Owner: Neutral + Location: 119,103 + Actor314: t02 + Owner: Neutral + Location: 67,87 + Actor315: t02 + Owner: Neutral + Location: 18,62 + Actor316: t05 + Owner: Neutral + Location: 15,60 + Actor317: t02 + Owner: Neutral + Location: 31,45 + Actor318: t02 + Owner: Neutral + Location: 18,32 + Actor319: t17 + Owner: Neutral + Location: 21,46 + Actor320: tc02 + Owner: Neutral + Location: 17,21 + Actor321: tc04 + Owner: Neutral + Location: 14,25 + Actor322: tc04 + Owner: Neutral + Location: 16,15 + Actor323: tc01 + Owner: Neutral + Location: 18,14 + Actor324: tc01 + Owner: Neutral + Location: 21,12 + Actor325: t16 + Owner: Neutral + Location: 15,21 + Actor326: t13 + Owner: Neutral + Location: 18,17 + Actor327: t02 + Owner: Neutral + Location: 15,14 + Actor328: t05 + Owner: Neutral + Location: 22,11 + Actor329: t02 + Owner: Neutral + Location: 16,11 + Actor330: t12 + Owner: Neutral + Location: 19,11 + Actor331: t05 + Owner: Neutral + Location: 28,10 + Actor332: tc04 + Owner: Neutral + Location: 55,11 + Actor333: t05 + Owner: Neutral + Location: 57,10 + Actor334: t05 + Owner: Neutral + Location: 47,9 + Actor335: t01 + Owner: Neutral + Location: 65,9 + Actor336: tc04 + Owner: Neutral + Location: 114,16 + Actor337: tc01 + Owner: Neutral + Location: 109,14 + Actor338: tc02 + Owner: Neutral + Location: 107,14 + Actor339: tc01 + Owner: Neutral + Location: 117,13 + Actor340: tc04 + Owner: Neutral + Location: 102,11 + Actor341: tc01 + Owner: Neutral + Location: 104,11 + Actor342: tc01 + Owner: Neutral + Location: 119,26 + Actor343: t02 + Owner: Neutral + Location: 119,28 + Actor344: t02 + Owner: Neutral + Location: 119,12 + Actor345: t02 + Owner: Neutral + Location: 100,9 + Actor347: t07 + Owner: Neutral + Location: 119,14 + Actor346: tc05 + Owner: Neutral + Location: 118,10 + Actor348: t17 + Owner: Neutral + Location: 109,11 + Actor349: t05 + Owner: Neutral + Location: 110,13 + Actor350: t08 + Owner: Neutral + Location: 117,11 + Actor351: t01 + Owner: Neutral + Location: 100,12 + Actor352: t01 + Owner: Neutral + Location: 118,30 + Actor353: t02 + Owner: Neutral + Location: 118,25 + Actor354: t02 + Owner: Neutral + Location: 115,15 + Actor355: t02 + Owner: Neutral + Location: 115,9 + Actor356: t05 + Owner: Neutral + Location: 118,12 + Actor357: t05 + Owner: Neutral + Location: 101,10 + Actor358: t02 + Owner: Neutral + Location: 106,10 + Actor359: t02 + Owner: Neutral + Location: 106,10 + Actor360: tc01 + Owner: Neutral + Location: 114,39 + Actor361: t05 + Owner: Neutral + Location: 113,39 + Actor362: t05 + Owner: Neutral + Location: 106,42 + Actor363: t02 + Owner: Neutral + Location: 119,38 + Actor364: tc04 + Owner: Neutral + Location: 118,37 + Actor365: tc01 + Owner: Neutral + Location: 119,35 + Actor366: t05 + Owner: Neutral + Location: 119,29 + Actor367: t13 + Owner: Neutral + Location: 115,35 + Actor368: t17 + Owner: Neutral + Location: 118,42 + Actor371: tc03 + Owner: Neutral + Location: 15,122 + Actor372: t08 + Owner: Neutral + Location: 17,123 + Actor373: v05 + Owner: Neutral + Location: 18,118 + Actor374: t15 + Owner: Neutral + Location: 21,122 + Actor397: mine + Owner: Neutral + Location: 16,50 + Actor398: mine + Owner: Neutral + Location: 97,122 + Actor399: mine + Owner: Neutral + Location: 85,11 + Actor407: mpspawn + Owner: Neutral + Location: 70,27 + Actor406: mpspawn + Owner: Neutral + Location: 97,27 + Actor405: mpspawn + Owner: Neutral + Location: 110,51 + Actor400: mpspawn + Owner: Neutral + Location: 20,73 + Actor401: mpspawn + Owner: Neutral + Location: 31,102 + Actor402: mpspawn + Owner: Neutral + Location: 64,109 + Actor403: mpspawn + Owner: Neutral + Location: 108,107 + +Rules: rules.yaml diff --git a/mods/ura/maps/center-of-attention-redux-2/rules.yaml b/mods/ura/maps/center-of-attention-redux-2/rules.yaml new file mode 100644 index 0000000..21b5101 --- /dev/null +++ b/mods/ura/maps/center-of-attention-redux-2/rules.yaml @@ -0,0 +1,13 @@ +OILB.Strong: + Inherits: OILB + Health: + HP: 6000 + RenderSprites: + Image: OILB + +OILB.Weak: + Inherits: OILB + Health: + HP: 900 + RenderSprites: + Image: OILB diff --git a/mods/ura/maps/chaos-canyon.oramap b/mods/ura/maps/chaos-canyon.oramap new file mode 100644 index 0000000..0d82aed Binary files /dev/null and b/mods/ura/maps/chaos-canyon.oramap differ diff --git a/mods/ura/maps/coastal-influence.oramap b/mods/ura/maps/coastal-influence.oramap new file mode 100644 index 0000000..0d81db4 Binary files /dev/null and b/mods/ura/maps/coastal-influence.oramap differ diff --git a/mods/ura/maps/cold-front.oramap b/mods/ura/maps/cold-front.oramap new file mode 100644 index 0000000..1011a5e Binary files /dev/null and b/mods/ura/maps/cold-front.oramap differ diff --git a/mods/ura/maps/countercross.oramap b/mods/ura/maps/countercross.oramap new file mode 100644 index 0000000..1931b2b Binary files /dev/null and b/mods/ura/maps/countercross.oramap differ diff --git a/mods/ura/maps/crossfire.oramap b/mods/ura/maps/crossfire.oramap new file mode 100644 index 0000000..d5a49f6 Binary files /dev/null and b/mods/ura/maps/crossfire.oramap differ diff --git a/mods/ura/maps/decrepit-isles.oramap b/mods/ura/maps/decrepit-isles.oramap new file mode 100644 index 0000000..5c30100 Binary files /dev/null and b/mods/ura/maps/decrepit-isles.oramap differ diff --git a/mods/ura/maps/desert-rats/map.bin b/mods/ura/maps/desert-rats/map.bin new file mode 100644 index 0000000..fb54ac3 Binary files /dev/null and b/mods/ura/maps/desert-rats/map.bin differ diff --git a/mods/ura/maps/desert-rats/map.png b/mods/ura/maps/desert-rats/map.png new file mode 100644 index 0000000..09248fe Binary files /dev/null and b/mods/ura/maps/desert-rats/map.png differ diff --git a/mods/ura/maps/desert-rats/map.yaml b/mods/ura/maps/desert-rats/map.yaml new file mode 100644 index 0000000..1e0bc83 --- /dev/null +++ b/mods/ura/maps/desert-rats/map.yaml @@ -0,0 +1,522 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Desert Rats + +Author: Madness + +Tileset: DESERT + +MapSize: 72,72 + +Bounds: 1,1,70,70 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + Enemies: Multi0, Multi1 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + Playable: True + Faction: Random + Enemies: Creeps + +Actors: + Actor18: v25 + Owner: Neutral + Location: 68,35 + Actor19: v25 + Owner: Neutral + Location: 2,35 + Actor33: v24 + Owner: Neutral + Location: 65,35 + Actor34: tc01 + Owner: Neutral + Location: 69,34 + Actor35: tc01 + Owner: Neutral + Location: 0,35 + Actor36: v27 + Owner: Neutral + Location: 5,38 + Actor37: v27 + Owner: Neutral + Location: 66,33 + Actor40: v30 + Owner: Neutral + Location: 5,40 + Actor41: v30 + Owner: Neutral + Location: 65,31 + Actor42: v29 + Owner: Neutral + Location: 3,39 + Actor46: v28 + Owner: Neutral + Location: 66,30 + Actor47: v28 + Owner: Neutral + Location: 5,41 + Actor48: v24 + Owner: Neutral + Location: 2,40 + Actor49: v24 + Owner: Neutral + Location: 69,29 + Actor45: v29 + Owner: Neutral + Location: 68,32 + Actor38: v22 + Owner: Neutral + Location: 68,33 + Actor39: v22 + Owner: Neutral + Location: 1,38 + Actor50: v31 + Owner: Neutral + Location: 2,34 + Actor51: v31 + Owner: Neutral + Location: 68,38 + Actor52: v24 + Owner: Neutral + Location: 5,35 + Actor53: v27 + Owner: Neutral + Location: 2,43 + Actor54: v27 + Owner: Neutral + Location: 69,28 + Actor55: t08 + Owner: Neutral + Location: 69,32 + Actor56: t04 + Owner: Neutral + Location: 2,37 + Actor57: t08 + Owner: Neutral + Location: 1,39 + Actor58: tc01 + Owner: Neutral + Location: 5,41 + Actor59: tc01 + Owner: Neutral + Location: 65,28 + Actor60: t04 + Owner: Neutral + Location: 68,32 + Actor63: oilb + Owner: Neutral + Location: 23,43 + Actor64: brl3 + Owner: Neutral + Location: 22,44 + Actor65: brl3 + Owner: Neutral + Location: 49,28 + Actor66: rock1 + Owner: Neutral + Location: 19,40 + Actor67: rock1 + Owner: Neutral + Location: 50,29 + Actor70: v27 + Owner: Neutral + Location: 24,45 + Actor71: oilb + Owner: Neutral + Location: 47,27 + Actor72: v27 + Owner: Neutral + Location: 47,26 + Actor73: tc01 + Owner: Neutral + Location: 48,26 + Actor74: tc01 + Owner: Neutral + Location: 21,42 + Actor75: tc01 + Owner: Neutral + Location: 42,40 + Actor76: tc01 + Owner: Neutral + Location: 27,28 + Actor77: t08 + Owner: Neutral + Location: 23,39 + Actor78: t08 + Owner: Neutral + Location: 47,32 + Actor79: t04 + Owner: Neutral + Location: 4,25 + Actor80: t04 + Owner: Neutral + Location: 66,45 + Actor81: rock5 + Owner: Neutral + Location: 27,31 + Actor84: t08 + Owner: Neutral + Location: 8,2 + Actor85: t08 + Owner: Neutral + Location: 63,69 + Actor86: tc01 + Owner: Neutral + Location: 3,8 + Actor87: tc01 + Owner: Neutral + Location: 66,58 + Actor94: t04 + Owner: Neutral + Location: 31,57 + Actor95: t04 + Owner: Neutral + Location: 39,12 + Actor100: t08 + Owner: Neutral + Location: 21,56 + Actor106: wood + Owner: Neutral + Location: 21,60 + Actor108: wood + Owner: Neutral + Location: 21,61 + Actor110: wood + Owner: Neutral + Location: 22,61 + Actor111: wood + Owner: Neutral + Location: 23,61 + Actor112: wood + Owner: Neutral + Location: 24,61 + Actor113: wood + Owner: Neutral + Location: 25,61 + Actor114: wood + Owner: Neutral + Location: 25,60 + Actor115: wood + Owner: Neutral + Location: 20,58 + Actor116: wood + Owner: Neutral + Location: 19,58 + Actor117: wood + Owner: Neutral + Location: 19,57 + Actor118: dog + Owner: Neutral + Location: 23,58 + SubCell: 3 + Facing: 92 + Actor124: wood + Owner: Neutral + Location: 49,10 + Actor125: wood + Owner: Neutral + Location: 48,10 + Actor126: wood + Owner: Neutral + Location: 47,10 + Actor127: wood + Owner: Neutral + Location: 46,10 + Actor128: wood + Owner: Neutral + Location: 46,11 + Actor130: wood + Owner: Neutral + Location: 50,10 + Actor131: wood + Owner: Neutral + Location: 50,11 + Actor122: wood + Owner: Neutral + Location: 52,14 + Actor123: wood + Owner: Neutral + Location: 52,13 + Actor129: wood + Owner: Neutral + Location: 51,13 + Actor109: v21 + Owner: Neutral + Location: 49,12 + Actor107: v24 + Owner: Neutral + Location: 21,58 + Actor119: t08 + Owner: Neutral + Location: 50,14 + Actor121: dog + Owner: Neutral + Location: 48,13 + SubCell: 3 + Facing: 92 + Actor132: c9 + Owner: Neutral + Location: 22,60 + SubCell: 3 + Facing: 92 + Actor133: c5 + Owner: Neutral + Location: 49,11 + SubCell: 3 + Facing: 92 + Actor135: tc01 + Owner: Neutral + Location: 46,10 + Actor120: tc01 + Owner: Neutral + Location: 23,59 + Actor138: t04 + Owner: Neutral + Location: 7,69 + Actor141: tc01 + Owner: Neutral + Location: 65,7 + Actor142: tc01 + Owner: Neutral + Location: 4,61 + Actor143: t08 + Owner: Neutral + Location: 1,60 + Actor144: t08 + Owner: Neutral + Location: 70,11 + Actor145: tc01 + Owner: Neutral + Location: 42,65 + Actor146: tc01 + Owner: Neutral + Location: 27,4 + Actor147: t04 + Owner: Neutral + Location: 28,5 + Actor148: t04 + Owner: Neutral + Location: 42,64 + Actor149: t04 + Owner: Neutral + Location: 32,69 + Actor151: t04 + Owner: Neutral + Location: 38,1 + Actor150: t04 + Owner: Neutral + Location: 20,23 + Actor152: t04 + Owner: Neutral + Location: 50,46 + Actor159: t04 + Owner: Neutral + Location: 43,39 + Actor160: t04 + Owner: Neutral + Location: 26,30 + Actor161: t04 + Owner: Neutral + Location: 4,11 + Actor162: t04 + Owner: Neutral + Location: 13,5 + Actor163: t04 + Owner: Neutral + Location: 10,6 + Actor164: t04 + Owner: Neutral + Location: 8,6 + Actor165: t04 + Owner: Neutral + Location: 57,64 + Actor166: t04 + Owner: Neutral + Location: 62,63 + Actor167: t04 + Owner: Neutral + Location: 53,64 + Actor168: t04 + Owner: Neutral + Location: 66,60 + Actor169: t04 + Owner: Neutral + Location: 69,25 + Actor171: t04 + Owner: Neutral + Location: 65,8 + Actor172: t04 + Owner: Neutral + Location: 69,13 + Actor173: t04 + Owner: Neutral + Location: 5,62 + Actor176: tc01 + Owner: Neutral + Location: 33,37 + Actor177: tc01 + Owner: Neutral + Location: 36,32 + Actor174: t04 + Owner: Neutral + Location: 36,37 + Actor175: t04 + Owner: Neutral + Location: 34,33 + Actor178: t04 + Owner: Neutral + Location: 37,36 + Actor179: t04 + Owner: Neutral + Location: 32,36 + Actor180: t04 + Owner: Neutral + Location: 27,33 + Actor181: t04 + Owner: Neutral + Location: 44,33 + Actor182: t04 + Owner: Neutral + Location: 39,39 + Actor183: t04 + Owner: Neutral + Location: 26,39 + Actor185: t04 + Owner: Neutral + Location: 22,39 + Actor186: t04 + Owner: Neutral + Location: 46,31 + Actor184: t04 + Owner: Neutral + Location: 25,57 + Actor187: t04 + Owner: Neutral + Location: 45,13 + Actor190: tc01 + Owner: Neutral + Location: 5,50 + Actor191: tc01 + Owner: Neutral + Location: 62,18 + Actor192: t04 + Owner: Neutral + Location: 5,51 + Actor193: t04 + Owner: Neutral + Location: 63,19 + Actor194: v34 + Owner: Neutral + Location: 64,20 + Actor195: v36 + Owner: Neutral + Location: 5,51 + Actor196: tc01 + Owner: Neutral + Location: 0,66 + Actor197: tc01 + Owner: Neutral + Location: 0,69 + Actor198: t08 + Owner: Neutral + Location: 4,70 + Actor200: tc01 + Owner: Neutral + Location: 70,3 + Actor199: tc01 + Owner: Neutral + Location: 65,-1 + Actor201: t04 + Owner: Neutral + Location: 68,1 + Actor245: tc01 + Owner: Neutral + Location: 51,65 + Actor246: oilb + Owner: Neutral + Location: 17,4 + Actor247: oilb + Owner: Neutral + Location: 9,5 + Actor244: oilb + Owner: Neutral + Location: 61,65 + Actor248: oilb + Owner: Neutral + Location: 53,66 + Actor202: tc01 + Owner: Neutral + Location: 15,4 + Actor206: mpspawn + Owner: Neutral + Location: 22,16 + Actor207: mpspawn + Owner: Neutral + Location: 49,55 + Actor188: mine + Owner: Neutral + Location: 13,64 + Actor204: mine + Owner: Neutral + Location: 21,32 + Actor205: mine + Owner: Neutral + Location: 9,14 + Actor208: mine + Owner: Neutral + Location: 11,12 + Actor189: mine + Owner: Neutral + Location: 60,59 + Actor209: mine + Owner: Neutral + Location: 62,57 + Actor210: mine + Owner: Neutral + Location: 50,39 + Actor211: mine + Owner: Neutral + Location: 58,7 + Actor212: rock7 + Owner: Neutral + Location: 34,35 + Actor170: t08 + Owner: Neutral + Location: 56,26 + Actor203: t08 + Owner: Neutral + Location: 14,45 + Actor213: t04 + Owner: Neutral + Location: 15,44 + Actor214: t04 + Owner: Neutral + Location: 55,26 + Actor158: mine + Owner: Neutral + Location: 38,22 + Actor156: mine + Owner: Neutral + Location: 34,49 + +Rules: rules.yaml diff --git a/mods/ura/maps/desert-rats/rules.yaml b/mods/ura/maps/desert-rats/rules.yaml new file mode 100644 index 0000000..1e030c1 --- /dev/null +++ b/mods/ura/maps/desert-rats/rules.yaml @@ -0,0 +1,6 @@ +World: + GlobalLightingPaletteEffect: + Red: 1.1 + Green: 0.92 + Blue: 1.051 + Ambient: 0.9 diff --git a/mods/ura/maps/desert-shellmap/desert-shellmap.lua b/mods/ura/maps/desert-shellmap/desert-shellmap.lua new file mode 100644 index 0000000..95f0ea1 --- /dev/null +++ b/mods/ura/maps/desert-shellmap/desert-shellmap.lua @@ -0,0 +1,199 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +if DateTime.IsHalloween then + UnitTypes = { "ant", "ant", "ant" } + BeachUnitTypes = { "ant", "ant" } + ProxyType = "powerproxy.parazombies" + ProducedUnitTypes = + { + { factory = AlliedBarracks1, types = { "e1", "e3" } }, + { factory = AlliedBarracks2, types = { "e1", "e3" } }, + { factory = SovietBarracks1, types = { "ant" } }, + { factory = SovietBarracks2, types = { "ant" } }, + { factory = SovietBarracks3, types = { "ant" } }, + { factory = AlliedWarFactory1, types = { "jeep", "1tnk", "2tnk", "arty", "ctnk" } }, + { factory = SovietWarFactory1, types = { "3tnk", "4tnk", "v2rl", "ttnk", "apc" } } + } +else + UnitTypes = { "3tnk", "ftrk", "ttnk", "apc" } + BeachUnitTypes = { "e1", "e2", "e3", "e4", "e1", "e2", "e3", "e4", "e1", "e2", "e3", "e4", "e1", "e2", "e3", "e4" } + ProxyType = "powerproxy.paratroopers" + ProducedUnitTypes = + { + { factory = AlliedBarracks1, types = { "e1", "e3" } }, + { factory = AlliedBarracks2, types = { "e1", "e3" } }, + { factory = SovietBarracks1, types = { "dog", "e1", "e2", "e3", "e4", "shok" } }, + { factory = SovietBarracks2, types = { "dog", "e1", "e2", "e3", "e4", "shok" } }, + { factory = SovietBarracks3, types = { "dog", "e1", "e2", "e3", "e4", "shok" } }, + { factory = AlliedWarFactory1, types = { "jeep", "1tnk", "2tnk", "arty", "ctnk" } }, + { factory = SovietWarFactory1, types = { "3tnk", "4tnk", "v2rl", "ttnk", "apc" } } + } +end + +ShipUnitTypes = { "1tnk", "1tnk", "jeep", "2tnk", "2tnk" } +HelicopterUnitTypes = { "e1", "e1", "e1", "e1", "e3", "e3" }; + +ParadropWaypoints = { Paradrop1, Paradrop2, Paradrop3, Paradrop4, Paradrop5, Paradrop6, Paradrop7, Paradrop8 } + +Mig1Waypoints = { Mig11, Mig12, Mig13, Mig14 } +Mig2Waypoints = { Mig21, Mig22, Mig23, Mig24 } + +BindActorTriggers = function(a) + if a.HasProperty("Hunt") then + if a.Owner == allies then + Trigger.OnIdle(a, function(a) + if a.IsInWorld then + a.Hunt() + end + end) + else + Trigger.OnIdle(a, function(a) + if a.IsInWorld then + a.AttackMove(AlliedTechnologyCenter.Location) + end + end) + end + end + + if a.HasProperty("HasPassengers") then + Trigger.OnDamaged(a, function() + if a.HasPassengers then + a.Stop() + a.UnloadPassengers() + end + end) + end +end + +SendSovietUnits = function(entryCell, unitTypes, interval) + local units = Reinforcements.Reinforce(soviets, unitTypes, { entryCell }, interval) + Utils.Do(units, function(unit) + BindActorTriggers(unit) + end) + Trigger.OnAllKilled(units, function() SendSovietUnits(entryCell, unitTypes, interval) end) +end + +SendMigs = function(waypoints) + local migEntryPath = { waypoints[1].Location, waypoints[2].Location } + local migs = Reinforcements.Reinforce(soviets, { "mig" }, migEntryPath, 4) + Utils.Do(migs, function(mig) + mig.Move(waypoints[3].Location) + mig.Move(waypoints[4].Location) + mig.Destroy() + end) + + Trigger.AfterDelay(DateTime.Seconds(40), function() SendMigs(waypoints) end) +end + +ShipAlliedUnits = function() + local units = Reinforcements.ReinforceWithTransport(allies, "lst", + ShipUnitTypes, { LstEntry.Location, LstUnload.Location }, { LstEntry.Location })[2] + + Utils.Do(units, function(unit) + BindActorTriggers(unit) + end) + + Trigger.AfterDelay(DateTime.Seconds(60), ShipAlliedUnits) +end + +InsertAlliedChinookReinforcements = function(entry, hpad) + local units = Reinforcements.ReinforceWithTransport(allies, "tran", + HelicopterUnitTypes, { entry.Location, hpad.Location + CVec.New(1, 2) }, { entry.Location })[2] + + Utils.Do(units, function(unit) + BindActorTriggers(unit) + end) + + Trigger.AfterDelay(DateTime.Seconds(60), function() InsertAlliedChinookReinforcements(entry, hpad) end) +end + +ParadropSovietUnits = function() + local lz = Utils.Random(ParadropWaypoints) + local units = powerproxy.SendParatroopers(lz.CenterPosition) + + Utils.Do(units, function(a) + BindActorTriggers(a) + end) + + Trigger.AfterDelay(DateTime.Seconds(35), ParadropSovietUnits) +end + +ProduceUnits = function(t) + local factory = t.factory + if not factory.IsDead then + local unitType = t.types[Utils.RandomInteger(1, #t.types + 1)] + factory.Wait(Actor.BuildTime(unitType)) + factory.Produce(unitType) + factory.CallFunc(function() ProduceUnits(t) end) + end +end + +SetupAlliedUnits = function() + Utils.Do(Map.NamedActors, function(a) + if a.Owner == allies and a.HasProperty("AcceptsCondition") and a.AcceptsCondition("unkillable") then + a.GrantCondition("unkillable") + a.Stance = "Defend" + end + end) +end + +SetupFactories = function() + Utils.Do(ProducedUnitTypes, function(production) + Trigger.OnProduction(production.factory, function(_, a) BindActorTriggers(a) end) + end) +end + +ChronoshiftAlliedUnits = function() + local cells = Utils.ExpandFootprint({ ChronoshiftLocation.Location }, false) + local units = { } + for i = 1, #cells do + local unit = Actor.Create("2tnk", true, { Owner = allies, Facing = 0 }) + BindActorTriggers(unit) + units[unit] = cells[i] + end + Chronosphere.Chronoshift(units) + Trigger.AfterDelay(DateTime.Seconds(60), ChronoshiftAlliedUnits) +end + +ticks = 0 +speed = 5 + +Tick = function() + ticks = ticks + 1 + + local t = (ticks + 45) % (360 * speed) * (math.pi / 180) / speed; + Camera.Position = viewportOrigin + WVec.New(19200 * math.sin(t), 20480 * math.cos(t), 0) +end + +WorldLoaded = function() + allies = Player.GetPlayer("Allies") + soviets = Player.GetPlayer("Soviets") + viewportOrigin = Camera.Position + + SetupAlliedUnits() + SetupFactories() + ShipAlliedUnits() + InsertAlliedChinookReinforcements(Chinook1Entry, HeliPad1) + InsertAlliedChinookReinforcements(Chinook2Entry, HeliPad2) + powerproxy = Actor.Create(ProxyType, false, { Owner = soviets }) + ParadropSovietUnits() + Trigger.AfterDelay(DateTime.Seconds(5), ChronoshiftAlliedUnits) + Utils.Do(ProducedUnitTypes, ProduceUnits) + + Trigger.AfterDelay(DateTime.Seconds(30), function() SendMigs(Mig1Waypoints) end) + Trigger.AfterDelay(DateTime.Seconds(30), function() SendMigs(Mig2Waypoints) end) + + SendSovietUnits(Entry1.Location, UnitTypes, 50) + SendSovietUnits(Entry2.Location, UnitTypes, 50) + SendSovietUnits(Entry3.Location, UnitTypes, 50) + SendSovietUnits(Entry4.Location, UnitTypes, 50) + SendSovietUnits(Entry5.Location, UnitTypes, 50) + SendSovietUnits(Entry6.Location, UnitTypes, 50) + SendSovietUnits(Entry7.Location, BeachUnitTypes, 15) +end diff --git a/mods/ura/maps/desert-shellmap/map.bin b/mods/ura/maps/desert-shellmap/map.bin new file mode 100644 index 0000000..f8ded86 Binary files /dev/null and b/mods/ura/maps/desert-shellmap/map.bin differ diff --git a/mods/ura/maps/desert-shellmap/map.png b/mods/ura/maps/desert-shellmap/map.png new file mode 100644 index 0000000..0235328 Binary files /dev/null and b/mods/ura/maps/desert-shellmap/map.png differ diff --git a/mods/ura/maps/desert-shellmap/map.yaml b/mods/ura/maps/desert-shellmap/map.yaml new file mode 100644 index 0000000..5204343 --- /dev/null +++ b/mods/ura/maps/desert-shellmap/map.yaml @@ -0,0 +1,1269 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Desert Shellmap + +Author: Scott_NZ + +Tileset: DESERT + +MapSize: 128,128 + +Bounds: 1,1,126,126 + +Visibility: Shellmap + +Categories: Shellmap + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: allies + PlayerReference@Allies: + Name: Allies + Faction: allies + Color: ABB7E4 + Enemies: Soviets + PlayerReference@Soviets: + Name: Soviets + Faction: soviet + Color: FE1100 + Enemies: Allies + +Actors: + Actor0: rock6 + Location: 51,30 + Owner: Neutral + Actor1: rock4 + Location: 38,30 + Owner: Neutral + Actor2: rock5 + Location: 64,20 + Owner: Neutral + Actor3: rock1 + Location: 31,20 + Owner: Neutral + Actor4: rock4 + Location: 25,45 + Owner: Neutral + Actor307: brik + Location: 40,74 + Owner: Allies + Actor5: rock6 + Location: 34,45 + Owner: Neutral + Actor7: t08 + Location: 46,34 + Owner: Neutral + Actor24: v22 + Location: 31,52 + Owner: Neutral + Actor78: 2tnk + Location: 77,68 + Owner: Allies + Actor23: v23 + Location: 22,51 + Owner: Neutral + Actor12: oilb + Location: 49,42 + Owner: Neutral + Actor13: oilb + Location: 60,46 + Owner: Neutral + Actor16: oilb + Location: 41,46 + Owner: Neutral + Actor17: brl3 + Location: 51,42 + Owner: Neutral + Actor18: barl + Location: 43,48 + Owner: Neutral + Actor19: barl + Location: 60,48 + Owner: Neutral + Actor20: barl + Location: 59,48 + Owner: Neutral + Actor21: brl3 + Location: 59,49 + Owner: Neutral + Actor8: v25 + Location: 26,55 + Owner: Neutral + Actor11: v30 + Location: 29,49 + Owner: Neutral + Actor22: v29 + Location: 26,49 + Owner: Neutral + Actor14: oilb + Location: 26,37 + Owner: Neutral + Actor26: barl + Location: 63,35 + Owner: Neutral + Actor27: barl + Location: 42,45 + Owner: Neutral + Actor333: syrf + Location: 67,95 + Owner: Allies + Actor53: brik + Location: 70,63 + Owner: Allies + Actor254: fenc + Location: 96,97 + Owner: Allies + Actor90: brik + Location: 92,70 + Owner: Allies + Actor252: fenc + Location: 95,97 + Owner: Allies + Actor10: gun + Location: 64,63 + Owner: Allies + Actor153: apwr + Location: 93,88 + Owner: Allies + Actor49: brik + Location: 71,63 + Owner: Allies + Actor33: gun + Location: 85,69 + Owner: Allies + Actor40: dome + Location: 55,19 + Owner: Soviets + Actor41: brl3 + Location: 56,43 + Owner: Neutral + Actor71: brik + Location: 70,64 + Owner: Allies + Actor325: e3 + Location: 76,70 + Owner: Allies + Actor28: gun + Location: 74,67 + Owner: Allies + Actor50: apwr + Location: 51,15 + Owner: Soviets + Actor63: tsla + Location: 48,32 + Owner: Soviets + Actor56: v23 + Location: 24,36 + Owner: Neutral + Actor57: v27 + Location: 25,34 + Owner: Neutral + Actor59: v29 + Location: 21,28 + Owner: Neutral + Actor58: v21 + Location: 13,26 + Owner: Neutral + Actor61: powr + Location: 36,19 + Owner: Soviets + Actor60: hpad + Location: 46,28 + Owner: Soviets + Actor69: kenn + Location: 43,29 + Owner: Soviets + Actor68: ftur + Location: 34,23 + Owner: Soviets + Actor70: afld + Location: 47,24 + Owner: Soviets + Actor81: rock7 + Location: 53,19 + Owner: Neutral + Actor48: brik + Location: 72,63 + Owner: Allies + Actor85: powr + Location: 49,14 + Owner: Soviets + Actor83: fcom + Location: 42,18 + Owner: Soviets + Actor52: powr + Location: 54,14 + Owner: Soviets + Actor74: brik + Location: 89,70 + Owner: Allies + Actor88: t08 + Location: 87,47 + Owner: Neutral + Actor65: brik + Location: 69,64 + Owner: Allies + Actor303: mrj + Location: 61,60 + Owner: Allies + Actor87: tc01 + Location: 92,50 + Owner: Neutral + Actor306: brik + Location: 40,75 + Owner: Allies + Actor163: tran.husk2 + Location: 14,55 + Owner: Allies + Actor15: oilb + Location: 56,33 + Owner: Neutral + Actor164: flare + Location: 14,56 + Owner: Neutral + Actor62: apwr + Location: 38,18 + Owner: Soviets + Actor72: brik + Location: 87,70 + Owner: Allies + Actor253: arty + Location: 44,68 + Owner: Allies + Actor64: brik + Location: 69,63 + Owner: Allies + Actor47: brik + Location: 73,63 + Owner: Allies + Actor116: mine + Location: 78,21 + Owner: Neutral + Actor93: ca + Location: 20,86 + Owner: Allies + Facing: 64 + Actor94: ca + Location: 40,90 + Owner: Allies + Facing: 64 + Actor95: rock6 + Location: 10,76 + Owner: Neutral + Actor97: rock2 + Location: 12,75 + Owner: Neutral + Actor73: brik + Location: 88,70 + Owner: Allies + Actor51: brik + Location: 86,70 + Owner: Allies + Actor176: brik + Location: 85,70 + Owner: Allies + Actor175: brik + Location: 85,71 + Owner: Allies + Actor37: rock5 + Location: 35,43 + Owner: Neutral + Actor67: t08 + Location: 25,44 + Owner: Neutral + Actor109: stek + Location: 113,32 + Owner: Soviets + Actor102: proc + Location: 94,28 + Owner: Soviets + Actor103: apwr + Location: 118,37 + Owner: Soviets + Actor101: apwr + Location: 115,39 + Owner: Soviets + Actor110: fcom + Location: 106,44 + Owner: Soviets + Actor106: fact + Location: 114,43 + Owner: Soviets + Actor104: apwr + Location: 115,36 + Owner: Soviets + Actor91: apwr + Location: 118,40 + Owner: Soviets + Actor108: tsla + Location: 95,34 + Owner: Soviets + Actor112: ftur + Location: 93,29 + Owner: Soviets + Actor113: ftur + Location: 90,33 + Owner: Soviets + Actor114: ftur + Location: 37,28 + Owner: Soviets + Actor115: tsla + Location: 40,25 + Owner: Soviets + Actor117: fix + Location: 106,34 + Owner: Soviets + Actor136: v2rl + Location: 91,40 + Owner: Soviets + Facing: 90 + Actor122: afld + Location: 116,49 + Owner: Soviets + Actor107: hpad + Location: 112,49 + Owner: Soviets + Actor126: tsla + Location: 110,28 + Owner: Soviets + Actor124: dome + Location: 118,46 + Owner: Soviets + Actor125: tsla + Location: 111,44 + Owner: Soviets + Actor127: rock2 + Location: 103,54 + Owner: Neutral + Actor128: rock6 + Location: 99,59 + Owner: Neutral + Actor129: hpad + Location: 99,28 + Owner: Soviets + Actor130: apwr + Location: 119,34 + Owner: Soviets + Actor131: t08 + Location: 121,43 + Owner: Neutral + Actor132: apwr + Location: 116,33 + Owner: Soviets + Actor133: oilb + Location: 76,37 + Owner: Soviets + Actor134: e1 + Location: 74,37 + Owner: Soviets + Actor135: e1 + Location: 77,39 + Owner: Soviets + Actor137: 4tnk + Location: 105,33 + Owner: Soviets + Facing: 100 + Actor123: afld + Location: 119,49 + Owner: Soviets + Actor138: 4tnk + Location: 112,46 + Owner: Soviets + Actor139: 3tnk + Location: 89,32 + Owner: Soviets + Facing: 64 + Actor140: 3tnk + Location: 92,29 + Owner: Soviets + Facing: 20 + Actor141: 3tnk + Location: 36,23 + Owner: Soviets + Actor142: e1 + Location: 40,27 + Owner: Soviets + Actor143: e1 + Location: 49,17 + Owner: Soviets + Actor144: e1 + Location: 113,40 + Owner: Soviets + Actor145: e1 + Location: 102,33 + Owner: Soviets + Actor146: rock2 + Location: 125,37 + Owner: Neutral + Actor147: rock1 + Location: 118,54 + Owner: Neutral + Actor167: powr + Location: 54,74 + Owner: Allies + Actor39: pbox + Location: 70,89 + Owner: Allies + Actor152: 1tnk + Location: 69,85 + Owner: Allies + Facing: 110 + Actor150: apwr + Location: 94,91 + Owner: Allies + Actor35: pbox + Location: 68,85 + Owner: Allies + Actor178: pbox + Location: 77,76 + Owner: Allies + Actor300: brik + Location: 48,77 + Owner: Allies + Actor186: 3tnk + Location: 107,50 + Owner: Soviets + Facing: 80 + Actor174: tc01 + Location: 98,37 + Owner: Neutral + Actor25: fact + Location: 86,84 + Owner: Allies + Actor105: brik + Location: 94,70 + Owner: Allies + Actor170: kenn + Location: 104,41 + Owner: Soviets + Actor162: e1 + Location: 82,74 + Owner: Allies + Actor182: rock6 + Location: 96,45 + Owner: Neutral + Actor298: brik + Location: 48,78 + Owner: Allies + Actor156: pbox + Location: 52,71 + Owner: Allies + Actor343: brik + Location: 82,93 + Owner: Allies + Actor187: ftur + Location: 104,47 + Owner: Soviets + Actor342: lst + Location: 67,98 + Owner: Allies + Actor86: brik + Location: 91,70 + Owner: Allies + Actor216: brik + Location: 57,80 + Owner: Allies + Actor188: ftur + Location: 107,52 + Owner: Soviets + Actor54: agun + Location: 76,93 + Owner: Allies + Facing: 150 + Actor155: apwr + Location: 90,88 + Owner: Allies + Actor213: brik + Location: 60,80 + Owner: Allies + Actor196: pt + Location: 55,92 + Owner: Allies + Facing: 160 + Actor183: rock2 + Location: 93,41 + Owner: Neutral + Actor185: 3tnk + Location: 105,47 + Owner: Soviets + Actor197: dd + Location: 30,88 + Owner: Allies + Facing: 64 + Actor199: e1 + Location: 72,83 + Owner: Allies + Actor89: apwr + Location: 93,85 + Owner: Allies + Actor161: powr + Location: 89,90 + Owner: Allies + Actor84: apwr + Location: 38,10 + Owner: Soviets + Actor96: apwr + Location: 38,13 + Owner: Soviets + Actor98: apwr + Location: 34,13 + Owner: Soviets + Actor99: apwr + Location: 34,10 + Owner: Soviets + Actor100: apwr + Location: 30,13 + Owner: Soviets + Actor189: apwr + Location: 30,10 + Owner: Soviets + Actor190: apwr + Location: 26,13 + Owner: Soviets + Actor191: apwr + Location: 26,10 + Owner: Soviets + Actor120: brik + Location: 95,70 + Owner: Allies + Actor9: brik + Location: 94,71 + Owner: Allies + Actor80: brik + Location: 90,70 + Owner: Allies + Actor251: fenc + Location: 94,97 + Owner: Allies + Actor92: brik + Location: 93,70 + Owner: Allies + Actor214: brik + Location: 59,80 + Owner: Allies + Actor149: apwr + Location: 92,94 + Owner: Allies + Actor38: brik + Location: 72,67 + Owner: Allies + Actor208: e7 + Location: 39,81 + Owner: Allies + Facing: 64 + Actor209: e1 + Location: 41,79 + Owner: Allies + Actor210: e1 + Location: 46,80 + Owner: Allies + Actor211: jeep + Location: 41,82 + Owner: Allies + Facing: 90 + Actor36: brik + Location: 72,66 + Owner: Allies + Actor228: mgg + Location: 49,63 + Owner: Allies + Actor255: e1 + Location: 67,76 + Owner: Allies + Actor77: e1 + Location: 78,74 + Owner: Allies + Actor82: 2tnk + Location: 82,69 + Owner: Allies + Actor30: pbox + Location: 47,77 + Owner: Allies + Actor29: pbox + Location: 42,75 + Owner: Allies + Actor217: sbag + Location: 43,67 + Owner: Allies + Actor158: mine + Location: 110,78 + Owner: Neutral + Actor299: e1 + Location: 50,70 + Owner: Allies + Actor297: brik + Location: 49,78 + Owner: Allies + Actor234: sbag + Location: 53,63 + Owner: Allies + Actor223: sbag + Location: 53,62 + Owner: Allies + Actor151: apwr + Location: 91,91 + Owner: Allies + Actor31: t08 + Location: 56,58 + Owner: Neutral + Actor311: brik + Location: 41,74 + Owner: Allies + Actor302: brik + Location: 41,75 + Owner: Allies + Actor295: jeep + Location: 37,67 + Owner: Allies + Facing: 64 + Actor296: 1tnk + Location: 58,65 + Owner: Allies + Facing: 192 + Actor215: brik + Location: 58,80 + Owner: Allies + Actor233: 2tnk + Location: 66,62 + Owner: Allies + Actor240: sbag + Location: 54,62 + Owner: Allies + Actor241: sbag + Location: 55,62 + Owner: Allies + Actor242: sbag + Location: 56,62 + Owner: Allies + Actor243: sbag + Location: 57,62 + Owner: Allies + Actor244: sbag + Location: 58,62 + Owner: Allies + Actor245: sbag + Location: 58,63 + Owner: Allies + Actor249: arty + Location: 57,63 + Owner: Allies + Facing: 240 + Actor248: arty + Location: 54,63 + Owner: Allies + Facing: 16 + Actor250: sbag + Location: 44,67 + Owner: Allies + Actor66: gap + Location: 62,71 + Owner: Allies + Actor218: sbag + Location: 43,68 + Owner: Allies + Actor229: fenc + Location: 93,97 + Owner: Allies + Actor264: v27 + Location: 20,49 + Owner: Neutral + Actor265: v20 + Location: 26,52 + Owner: Neutral + Actor266: v21 + Location: 32,54 + Owner: Neutral + Actor267: v27 + Location: 21,48 + Owner: Neutral + Actor268: v24 + Location: 26,58 + Owner: Neutral + Actor269: v26 + Location: 21,54 + Owner: Neutral + Actor270: v28 + Location: 18,49 + Owner: Neutral + Actor271: oilb + Location: 18,59 + Owner: Neutral + Actor272: brl3 + Location: 19,61 + Owner: Neutral + Actor273: barl + Location: 19,58 + Owner: Neutral + Actor274: delphi + Location: 19,51 + Owner: Neutral + Actor275: chan + Location: 28,50 + Owner: Neutral + Actor276: c1 + Location: 30,57 + Owner: Neutral + Actor277: c2 + Location: 20,50 + Owner: Neutral + Actor278: c3 + Location: 24,53 + Owner: Neutral + Actor279: c7 + Location: 29,51 + Owner: Neutral + Actor280: c10 + Location: 23,55 + Owner: Neutral + Actor282: e1 + Location: 42,62 + Owner: Allies + Actor283: e1 + Location: 47,63 + Owner: Allies + Actor284: e1 + Location: 61,63 + Owner: Allies + Actor285: e1 + Location: 67,65 + Owner: Allies + Actor286: e1 + Location: 39,67 + Owner: Allies + Actor287: brik + Location: 50,62 + Owner: Allies + Actor288: e3 + Location: 40,63 + Owner: Allies + Actor289: brik + Location: 60,60 + Owner: Allies + Actor291: brik + Location: 59,61 + Owner: Allies + Actor290: brik + Location: 60,61 + Owner: Allies + Actor292: e3 + Location: 68,64 + Owner: Allies + Actor293: e3 + Location: 36,69 + Owner: Allies + Actor219: brik + Location: 57,79 + Owner: Allies + Actor45: brik + Location: 73,64 + Owner: Allies + Actor226: 2tnk + Location: 62,60 + Owner: Allies + Facing: 240 + Actor225: 2tnk + Location: 47,61 + Owner: Allies + Actor239: 1tnk + Location: 44,65 + Owner: Allies + Facing: 30 + Actor236: jeep + Location: 45,62 + Owner: Allies + Facing: 16 + Actor238: 2tnk + Location: 36,65 + Owner: Allies + Facing: 40 + Actor224: 2tnk + Location: 41,62 + Owner: Allies + Actor237: jeep + Location: 63,63 + Owner: Allies + Actor304: e1 + Location: 57,72 + Owner: Allies + Actor305: e1 + Location: 61,70 + Owner: Allies + Actor43: brik + Location: 73,65 + Owner: Allies + Actor294: e1 + Location: 58,76 + Owner: Allies + Actor34: brik + Location: 73,66 + Owner: Allies + Actor220: brik + Location: 57,78 + Owner: Allies + Actor222: brik + Location: 57,77 + Owner: Allies + Actor230: brik + Location: 56,77 + Owner: Allies + Actor231: brik + Location: 55,77 + Owner: Allies + Actor232: brik + Location: 54,77 + Owner: Allies + Actor246: brik + Location: 52,77 + Owner: Allies + Actor160: brik + Location: 86,71 + Owner: Allies + Actor179: brik + Location: 68,84 + Owner: Allies + Actor180: brik + Location: 69,84 + Owner: Allies + Actor181: brik + Location: 69,83 + Owner: Allies + Actor192: brik + Location: 68,83 + Owner: Allies + Actor198: brik + Location: 68,82 + Owner: Allies + Actor321: e1 + Location: 45,76 + Owner: Allies + Actor165: powr + Location: 50,74 + Owner: Allies + Actor257: arty + Location: 72,68 + Owner: Allies + Actor344: e1 + Location: 78,69 + Owner: Allies + Actor301: brik + Location: 49,77 + Owner: Allies + Actor256: gap + Location: 74,76 + Owner: Allies + Actor313: brik + Location: 37,70 + Owner: Allies + Actor46: tc01 + Location: 49,79 + Owner: Neutral + Actor258: brik + Location: 76,94 + Owner: Allies + Actor259: rock6 + Location: 53,81 + Owner: Neutral + Actor260: rock2 + Location: 46,85 + Owner: Neutral + Actor32: proc + Location: 90,72 + Owner: Allies + Actor168: brik + Location: 95,71 + Owner: Allies + Actor322: oilb + Location: 58,78 + Owner: Allies + Actor121: mine + Location: 103,76 + Owner: Neutral + Actor329: mine + Location: 90,21 + Owner: Neutral + Actor341: dome + Location: 63,73 + Owner: Allies + Actor166: wood + Location: 17,52 + Owner: Neutral + Actor281: brik + Location: 50,78 + Owner: Allies + Actor235: brik + Location: 53,77 + Owner: Allies + Actor200: brik + Location: 68,81 + Owner: Allies + Actor201: brik + Location: 67,81 + Owner: Allies + Actor202: brik + Location: 66,81 + Owner: Allies + Actor203: brik + Location: 65,81 + Owner: Allies + Actor204: brik + Location: 64,81 + Owner: Allies + Actor205: brik + Location: 63,81 + Owner: Allies + Actor148: apwr + Location: 95,94 + Owner: Allies + Actor324: e3 + Location: 73,68 + Owner: Allies + Actor206: brik + Location: 63,80 + Owner: Allies + Actor207: brik + Location: 62,80 + Owner: Allies + Actor263: brik + Location: 51,78 + Owner: Allies + Actor247: brik + Location: 51,77 + Owner: Allies + Actor212: brik + Location: 61,80 + Owner: Allies + Actor361: pbox + Location: 71,96 + Owner: Allies + Actor221: fenc + Location: 92,97 + Owner: Allies + Actor345: e1 + Location: 80,69 + Owner: Allies + Actor193: fix + Location: 69,70 + Owner: Allies + Actor42: pbox + Location: 67,70 + Owner: Allies + Actor262: fenc + Location: 97,97 + Owner: Allies + Actor309: fenc + Location: 98,97 + Owner: Allies + Actor310: fenc + Location: 98,96 + Owner: Allies + Actor6: brik + Location: 73,67 + Owner: Allies + Actor312: brik + Location: 40,73 + Owner: Allies + Actor314: brik + Location: 37,69 + Owner: Allies + Actor319: brik + Location: 38,69 + Owner: Allies + Actor316: brik + Location: 38,73 + Owner: Allies + Actor315: brik + Location: 39,73 + Owner: Allies + Actor317: brik + Location: 37,73 + Owner: Allies + Actor318: brik + Location: 37,72 + Owner: Allies + Actor44: brik + Location: 37,71 + Owner: Allies + Actor320: brik + Location: 38,70 + Owner: Allies + Actor330: brik + Location: 79,94 + Owner: Allies + Actor328: brik + Location: 78,94 + Owner: Allies + Actor327: brik + Location: 77,94 + Owner: Allies + Actor331: brik + Location: 80,94 + Owner: Allies + Actor332: brik + Location: 80,93 + Owner: Allies + Actor157: brik + Location: 81,93 + Owner: Allies + Actor346: brik + Location: 75,94 + Owner: Allies + Actor347: brik + Location: 75,93 + Owner: Allies + Actor348: brik + Location: 75,92 + Owner: Allies + Actor349: brik + Location: 75,91 + Owner: Allies + Actor350: brik + Location: 75,90 + Owner: Allies + Actor351: brik + Location: 74,90 + Owner: Allies + Actor352: brik + Location: 73,90 + Owner: Allies + Actor353: brik + Location: 72,90 + Owner: Allies + Actor354: brik + Location: 72,89 + Owner: Allies + Actor355: brik + Location: 71,89 + Owner: Allies + Actor356: brik + Location: 72,88 + Owner: Allies + Actor357: brik + Location: 71,88 + Owner: Allies + Actor358: brik + Location: 82,92 + Owner: Allies + Actor359: brik + Location: 82,91 + Owner: Allies + Actor360: brik + Location: 82,90 + Owner: Allies + Actor362: brik + Location: 81,90 + Owner: Allies + Actor363: brik + Location: 81,91 + Owner: Allies + Actor364: gap + Location: 77,91 + Owner: Allies + Actor366: brik + Location: 59,60 + Owner: Allies + Actor367: brik + Location: 58,60 + Owner: Allies + Actor368: brik + Location: 57,60 + Owner: Allies + Actor369: brik + Location: 56,60 + Owner: Allies + Actor370: brik + Location: 55,60 + Owner: Allies + Actor371: brik + Location: 54,60 + Owner: Allies + Actor372: brik + Location: 53,60 + Owner: Allies + Actor373: brik + Location: 52,60 + Owner: Allies + Actor374: brik + Location: 52,61 + Owner: Allies + Actor375: brik + Location: 51,61 + Owner: Allies + Actor376: brik + Location: 50,61 + Owner: Allies + Actor377: brik + Location: 49,61 + Owner: Allies + Actor378: brik + Location: 49,62 + Owner: Allies + Actor379: gun + Location: 37,68 + Owner: Allies + Actor380: gun + Location: 48,61 + Owner: Allies + Actor381: atek + Location: 76,87 + Owner: Allies + Actor194: powr + Location: 52,74 + Owner: Allies + Actor171: wood + Location: 17,53 + Owner: Neutral + Actor172: wood + Location: 17,54 + Owner: Neutral + Actor173: wood + Location: 17,55 + Owner: Neutral + Actor177: wood + Location: 17,56 + Owner: Neutral + Actor184: pbox + Location: 96,79 + Owner: Allies + Actor79: agun + Location: 70,66 + Owner: Allies + Actor118: agun + Location: 47,70 + Owner: Allies + Facing: 64 + SovietWarFactory1: weap + Location: 106,29 + Owner: Soviets + SovietBarracks1: barr + Location: 109,48 + Owner: Soviets + SovietBarracks2: barr + Location: 102,30 + Owner: Soviets + SovietBarracks3: barr + Location: 41,27 + Owner: Soviets + IronCurtain: iron + Location: 110,40 + Owner: Soviets + AlliedTechnologyCenter: miss + Location: 56,68 + Owner: Neutral + Chronosphere: pdox + Location: 78,91 + Owner: Allies + AlliedWarFactory1: weap + Location: 75,81 + Owner: Allies + AlliedBarracks1: tent + Location: 83,75 + Owner: Allies + AlliedBarracks2: tent + Location: 50,66 + Owner: Allies + HeliPad1: hpad + Location: 70,76 + Owner: Allies + HeliPad2: hpad + Location: 64,78 + Owner: Allies + Entry1: waypoint + Location: 1,50 + Owner: Neutral + Entry2: waypoint + Location: 1,27 + Owner: Neutral + Entry3: waypoint + Location: 10,1 + Owner: Neutral + Entry4: waypoint + Location: 84,1 + Owner: Neutral + Entry5: waypoint + Location: 126,27 + Owner: Neutral + Entry6: waypoint + Location: 46,1 + Owner: Neutral + Entry7: waypoint + Location: 1,79 + Owner: Neutral + AttackDest: waypoint + Location: 55,69 + Owner: Neutral + LstEntry: waypoint + Location: 33,126 + Owner: Neutral + LstUnload: waypoint + Location: 60,93 + Owner: Neutral + Chinook1Entry: waypoint + Location: 44,126 + Owner: Neutral + Chinook2Entry: waypoint + Location: 47,126 + Owner: Neutral + Paradrop1: waypoint + Location: 70,50 + Owner: Neutral + Paradrop2: waypoint + Location: 39,50 + Owner: Neutral + Paradrop3: waypoint + Location: 81,60 + Owner: Neutral + Paradrop4: waypoint + Location: 28,64 + Owner: Neutral + Paradrop5: waypoint + Location: 63,89 + Owner: Neutral + Paradrop6: waypoint + Location: 22,77 + Owner: Neutral + Paradrop7: waypoint + Location: 64,69 + Owner: Neutral + Paradrop8: waypoint + Location: 80,78 + Owner: Neutral + ChronoshiftLocation: waypoint + Location: 80,65 + Owner: Neutral + Mig11: waypoint + Location: 94,1 + Owner: Neutral + Mig12: waypoint + Location: 68,33 + Owner: Neutral + Mig13: waypoint + Location: 41,38 + Owner: Neutral + Mig14: waypoint + Location: 1,26 + Owner: Neutral + Mig21: waypoint + Location: 96,3 + Owner: Neutral + Mig22: waypoint + Location: 70,35 + Owner: Neutral + Mig23: waypoint + Location: 41,40 + Owner: Neutral + Mig24: waypoint + Location: 1,28 + Owner: Neutral + +Rules: ura|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ura/maps/desert-shellmap/rules.yaml b/mods/ura/maps/desert-shellmap/rules.yaml new file mode 100644 index 0000000..6551f4d --- /dev/null +++ b/mods/ura/maps/desert-shellmap/rules.yaml @@ -0,0 +1,111 @@ +Player: + -ConquestVictoryConditions: + LobbyPrerequisiteCheckbox@GLOBALBOUNTY: + Enabled: False + Locked: True + +World: + -CrateSpawner: + -SpawnMPUnits: + -MPStartLocations: + MusicPlaylist: + BackgroundMusic: intro + DisableWorldSounds: true + ResourceType@ore: + ValuePerUnit: 0 + LuaScript: + Scripts: desert-shellmap.lua + -StartGameNotification: + GlobalLightingPaletteEffect: + Red: 1.05 + Green: 0.92 + Blue: 1.00 + Ambient: 0.9 + +^Palettes: + IndexedPlayerPalette: + PlayerIndex: + Soviets: 229, 230, 231, 232, 233, 234, 235, 8, 236, 237, 238, 239, 221, 222, 223, 223 + Allies: 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175 + +^Vehicle: + GainsExperience: + Conditions: + DamageMultiplier@UNKILLABLE: + RequiresCondition: unkillable + Modifier: 0 + ExternalCondition@UNKILLABLE: + Condition: unkillable + +^Infantry: + GainsExperience: + Conditions: + DeathSounds@NORMAL: + VolumeMultiplier: 0.1 + DeathSounds@BURNED: + VolumeMultiplier: 0.1 + DeathSounds@ZAPPED: + VolumeMultiplier: 0.1 + DamageMultiplier@UNKILLABLE: + RequiresCondition: unkillable + Modifier: 0 + ExternalCondition@UNKILLABLE: + Condition: unkillable + +^Ship: + GainsExperience: + Conditions: + DamageMultiplier@UNKILLABLE: + RequiresCondition: unkillable + Modifier: 0 + ExternalCondition@UNKILLABLE: + Condition: unkillable + +^Plane: + DamageMultiplier@UNKILLABLE: + RequiresCondition: unkillable + Modifier: 0 + ExternalCondition@UNKILLABLE: + Condition: unkillable + +^Building: + DamageMultiplier@UNKILLABLE: + RequiresCondition: unkillable + Modifier: 0 + ExternalCondition@UNKILLABLE: + Condition: unkillable + +OILB: + CashTrickler: + ShowTicks: false + +TRAN.Husk2: + Burns: + Damage: 0 + +MISS: + DamageMultiplier@INVULNERABLE: + Modifier: 0 + +APC: + Cargo: + InitialUnits: e1, e1, e2, e3, e4 + +Ant: + Buildable: + Prerequisites: barr + Health: + HP: 200 + +E7: + -AnnounceOnKill: + +powerproxy.paratroopers: + ParatroopersPower: + DisplayBeacon: false + DropItems: E1,E1,E2,E3,E4 + +powerproxy.parazombies: + Inherits: powerproxy.paratroopers + ParatroopersPower: + DropItems: ZOMBIE,ZOMBIE,ZOMBIE,ZOMBIE,ZOMBIE diff --git a/mods/ura/maps/desert-shellmap/weapons.yaml b/mods/ura/maps/desert-shellmap/weapons.yaml new file mode 100644 index 0000000..d33bc5e --- /dev/null +++ b/mods/ura/maps/desert-shellmap/weapons.yaml @@ -0,0 +1,8 @@ +2Inch: + Range: 10c0 + +TTankZap: + Range: 4c768 + +FLAK-23-AG: + Range: 4c0 diff --git a/mods/ura/maps/doubles.oramap b/mods/ura/maps/doubles.oramap new file mode 100644 index 0000000..08a1e92 Binary files /dev/null and b/mods/ura/maps/doubles.oramap differ diff --git a/mods/ura/maps/doublestep.oramap b/mods/ura/maps/doublestep.oramap new file mode 100644 index 0000000..d7edcd5 Binary files /dev/null and b/mods/ura/maps/doublestep.oramap differ diff --git a/mods/ura/maps/doughnut.oramap b/mods/ura/maps/doughnut.oramap new file mode 100644 index 0000000..c351468 Binary files /dev/null and b/mods/ura/maps/doughnut.oramap differ diff --git a/mods/ura/maps/drop-zone-battle-of-tikiaki/map.bin b/mods/ura/maps/drop-zone-battle-of-tikiaki/map.bin new file mode 100644 index 0000000..b4ac451 Binary files /dev/null and b/mods/ura/maps/drop-zone-battle-of-tikiaki/map.bin differ diff --git a/mods/ura/maps/drop-zone-battle-of-tikiaki/map.png b/mods/ura/maps/drop-zone-battle-of-tikiaki/map.png new file mode 100644 index 0000000..bebcde5 Binary files /dev/null and b/mods/ura/maps/drop-zone-battle-of-tikiaki/map.png differ diff --git a/mods/ura/maps/drop-zone-battle-of-tikiaki/map.yaml b/mods/ura/maps/drop-zone-battle-of-tikiaki/map.yaml new file mode 100644 index 0000000..b62a5c6 --- /dev/null +++ b/mods/ura/maps/drop-zone-battle-of-tikiaki/map.yaml @@ -0,0 +1,267 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Drop Zone - Battle of Tikiaki + +Author: Knivesron + +Tileset: TEMPERAT + +MapSize: 64,64 + +Bounds: 16,16,32,32 + +Visibility: Lobby + +Categories: Drop Zone + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Multi0: + Name: Multi0 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi1: + Name: Multi1 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi2: + Name: Multi2 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi3: + Name: Multi3 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi4: + Name: Multi4 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi5: + Name: Multi5 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi6: + Name: Multi6 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi7: + Name: Multi7 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + +Actors: + Actor0: apc + Location: 28,28 + Owner: Multi0 + Actor1: apc + Location: 30,28 + Owner: Multi1 + Actor2: apc + Location: 32,28 + Owner: Multi2 + Actor3: apc + Location: 32,30 + Owner: Multi3 + Actor4: apc + Location: 32,32 + Owner: Multi4 + Actor5: apc + Location: 30,32 + Owner: Multi5 + Actor6: apc + Location: 28,32 + Owner: Multi6 + Actor7: apc + Location: 28,30 + Owner: Multi7 + Actor10: v08 + Location: 42,40 + Owner: Neutral + Actor17: v17 + Location: 37,41 + Owner: Neutral + Actor13: v14 + Location: 37,39 + Owner: Neutral + Actor14: v15 + Location: 38,39 + Owner: Neutral + Actor15: v17 + Location: 37,40 + Owner: Neutral + Actor16: v17 + Location: 38,40 + Owner: Neutral + Actor19: brl3 + Location: 43,45 + Owner: Neutral + Actor12: v07 + Location: 37,38 + Owner: Neutral + Actor9: v08 + Location: 44,40 + Owner: Neutral + Actor11: v03 + Location: 43,43 + Owner: Neutral + Actor18: brl3 + Location: 42,38 + Owner: Neutral + Actor20: brl3 + Location: 37,44 + Owner: Neutral + Actor8: mpspawn + Location: 29,29 + Owner: Neutral + Actor21: mpspawn + Location: 29,30 + Owner: Neutral + Actor22: mpspawn + Location: 29,31 + Owner: Neutral + Actor23: mpspawn + Location: 30,31 + Owner: Neutral + Actor24: mpspawn + Location: 31,31 + Owner: Neutral + Actor25: mpspawn + Location: 31,30 + Owner: Neutral + Actor26: mpspawn + Location: 31,29 + Owner: Neutral + Actor27: mpspawn + Location: 30,29 + Owner: Neutral + Actor28: barl + Location: 37,43 + Owner: Neutral + Actor29: barl + Location: 44,38 + Owner: Neutral + Actor30: barl + Location: 43,38 + Owner: Neutral + Actor31: t15 + Location: 43,41 + Owner: Neutral + Actor32: t15 + Location: 34,17 + Owner: Neutral + Actor33: t12 + Location: 37,17 + Owner: Neutral + Actor34: t10 + Location: 40,17 + Owner: Neutral + Actor35: t10 + Location: 42,17 + Owner: Neutral + Actor36: t10 + Location: 43,17 + Owner: Neutral + Actor37: t16 + Location: 44,18 + Owner: Neutral + Actor38: t16 + Location: 43,18 + Owner: Neutral + Actor39: t08 + Location: 43,19 + Owner: Neutral + Actor40: t08 + Location: 35,18 + Owner: Neutral + Actor41: t08 + Location: 37,18 + Owner: Neutral + Actor42: t08 + Location: 36,18 + Owner: Neutral + Actor43: syrf + Location: 47,24 + Owner: Neutral + Actor44: syrf + Location: 14,25 + Owner: Neutral + Actor45: spef + Location: 28,15 + Owner: Neutral + Actor46: spef + Location: 23,47 + Owner: Neutral + Actor47: sbag + Location: 38,35 + Owner: Neutral + Actor48: sbag + Location: 37,35 + Owner: Neutral + Actor49: sbag + Location: 36,35 + Owner: Neutral + Actor50: sbag + Location: 35,35 + Owner: Neutral + Actor51: sbag + Location: 34,35 + Owner: Neutral + Actor52: sbag + Location: 40,35 + Owner: Neutral + Actor53: sbag + Location: 40,34 + Owner: Neutral + Actor54: sbag + Location: 40,33 + Owner: Neutral + Actor55: sbag + Location: 41,33 + Owner: Neutral + Actor56: sbag + Location: 34,43 + Owner: Neutral + Actor57: sbag + Location: 34,44 + Owner: Neutral + Actor58: sbag + Location: 34,45 + Owner: Neutral + Actor59: sbag + Location: 34,41 + Owner: Neutral + Actor60: sbag + Location: 34,40 + Owner: Neutral + Actor62: t05 + Location: 20,18 + Owner: Neutral + Actor61: t05 + Location: 41,17 + Owner: Neutral + +Rules: rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ura/maps/drop-zone-battle-of-tikiaki/rules.yaml b/mods/ura/maps/drop-zone-battle-of-tikiaki/rules.yaml new file mode 100644 index 0000000..596a863 --- /dev/null +++ b/mods/ura/maps/drop-zone-battle-of-tikiaki/rules.yaml @@ -0,0 +1,79 @@ +World: + CrateSpawner: + Maximum: 3 + SpawnInterval: 125 + CrateActors: unitcrate + InitialSpawnDelay: 0 + -SpawnMPUnits: + -MPStartLocations: + MapBuildRadius: + AllyBuildRadiusCheckboxLocked: True + AllyBuildRadiusCheckboxEnabled: False + BuildRadiusCheckboxLocked: True + BuildRadiusCheckboxEnabled: True + MapOptions: + TechLevelDropdownLocked: True + TechLevel: unrestricted + +UNITCRATE: + Inherits: ^Crate + GiveUnitCrateAction@ttnk: + SelectionShares: 4 + Units: ttnk + GiveUnitCrateAction@ftrk: + SelectionShares: 6 + Units: ftrk + GiveUnitCrateAction@harv: + SelectionShares: 1 + Units: harv + GiveUnitCrateAction@shok: + SelectionShares: 1 + Units: shok + GiveUnitCrateAction@dog: + SelectionShares: 1 + Units: dog + Crate: + TerrainTypes: Clear, Road, Ore, Beach + +APC: + Inherits@AUTOTARGET: ^AutoTargetGround + Health: + HP: 1000 + MustBeDestroyed: + RequiredForShortGame: true + -AttackMove: + +HARV: + Tooltip: + Name: Bomb Truck + Health: + HP: 100 + Explodes: + Weapon: CrateNuke + EmptyWeapon: CrateNuke + AttackSuicides: + Buildable: + Description: Explodes like a damn nuke! + +SHOK: + Health: + HP: 800 + +DOG: + Health: + HP: 120 + Mobile: + Speed: 99 + +Player: + Shroud: + FogCheckboxLocked: True + FogCheckboxEnabled: False + ExploredMapCheckboxLocked: True + ExploredMapCheckboxEnabled: True + PlayerResources: + DefaultCashLocked: True + DefaultCash: 5000 + LobbyPrerequisiteCheckbox@GLOBALBOUNTY: + Enabled: False + Locked: True diff --git a/mods/ura/maps/drop-zone-battle-of-tikiaki/weapons.yaml b/mods/ura/maps/drop-zone-battle-of-tikiaki/weapons.yaml new file mode 100644 index 0000000..edf0a3a --- /dev/null +++ b/mods/ura/maps/drop-zone-battle-of-tikiaki/weapons.yaml @@ -0,0 +1,5 @@ +PortaTesla: + ReloadDelay: 20 + Range: 10c0 + Warhead@1Dam: SpreadDamage + Damage: 80 diff --git a/mods/ura/maps/drop-zone-w/map.bin b/mods/ura/maps/drop-zone-w/map.bin new file mode 100644 index 0000000..931f1ce Binary files /dev/null and b/mods/ura/maps/drop-zone-w/map.bin differ diff --git a/mods/ura/maps/drop-zone-w/map.png b/mods/ura/maps/drop-zone-w/map.png new file mode 100644 index 0000000..f8d6e03 Binary files /dev/null and b/mods/ura/maps/drop-zone-w/map.png differ diff --git a/mods/ura/maps/drop-zone-w/map.yaml b/mods/ura/maps/drop-zone-w/map.yaml new file mode 100644 index 0000000..1399607 --- /dev/null +++ b/mods/ura/maps/drop-zone-w/map.yaml @@ -0,0 +1,186 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Drop Zone W + +Author: riderr3 + +Tileset: SNOW + +MapSize: 64,64 + +Bounds: 16,16,32,32 + +Visibility: Lobby + +Categories: Drop Zone + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: allies + Enemies: Multi0, Multi1, Multi2, Multi3, Multi4, Multi5, Multi6, Multi7 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + AllowBots: False + LockFaction: True + Faction: allies + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + Playable: True + AllowBots: False + LockFaction: True + Faction: allies + Enemies: Creeps + PlayerReference@Multi2: + Name: Multi2 + Playable: True + AllowBots: False + LockFaction: True + Faction: allies + Enemies: Creeps + PlayerReference@Multi3: + Name: Multi3 + Playable: True + AllowBots: False + LockFaction: True + Faction: allies + Enemies: Creeps + PlayerReference@Multi4: + Name: Multi4 + Playable: True + AllowBots: False + LockFaction: True + Faction: allies + Enemies: Creeps + PlayerReference@Multi5: + Name: Multi5 + Playable: True + AllowBots: False + LockFaction: True + Faction: allies + Enemies: Creeps + PlayerReference@Multi6: + Name: Multi6 + Playable: True + AllowBots: False + LockFaction: True + Faction: allies + Enemies: Creeps + PlayerReference@Multi7: + Name: Multi7 + Playable: True + AllowBots: False + LockFaction: True + Faction: allies + Enemies: Creeps + +Actors: + Actor2: mpspawn + Location: 34,30 + Owner: Neutral + Actor4: mpspawn + Location: 30,32 + Owner: Neutral + Actor6: mpspawn + Location: 32,34 + Owner: Neutral + Actor0: mpspawn + Location: 30,30 + Owner: Neutral + Actor12: lst + Location: 35,29 + Owner: Multi0 + Actor14: lst + Location: 29,29 + Owner: Multi1 + Actor8: lst + Location: 29,35 + Owner: Multi2 + Actor10: lst + Location: 35,35 + Owner: Multi3 + Actor9: lst + Location: 32,35 + Owner: Multi4 + Actor13: lst + Location: 32,29 + Owner: Multi5 + Actor11: lst + Location: 35,32 + Owner: Multi6 + Actor15: lst + Location: 29,32 + Owner: Multi7 + Actor7: mpspawn + Location: 34,34 + Owner: Neutral + Actor3: mpspawn + Location: 34,32 + Owner: Neutral + Actor1: mpspawn + Location: 32,30 + Owner: Neutral + Actor5: mpspawn + Location: 30,34 + Owner: Neutral + Actor16: v12 + Location: 37,24 + Owner: Neutral + Actor17: v11 + Location: 38,23 + Owner: Neutral + Actor18: v17 + Location: 38,25 + Owner: Neutral + Actor19: brl3 + Location: 47,21 + Owner: Neutral + Actor20: v15 + Location: 39,22 + Owner: Neutral + Actor21: t12 + Location: 39,20 + Owner: Neutral + Actor22: t08 + Location: 29,47 + Owner: Neutral + Actor23: tc02 + Location: 15,46 + Owner: Neutral + Actor24: t07 + Location: 16,44 + Owner: Neutral + Actor25: tc05 + Location: 14,38 + Owner: Neutral + Actor26: t07 + Location: 36,25 + Owner: Neutral + Actor28: v14 + Location: 38,24 + Owner: Neutral + Actor27: t08 + Location: 37,25 + Owner: Neutral + Actor30: t10 + Location: 21,36 + Owner: Neutral + Actor31: t01 + Location: 23,34 + Owner: Neutral + +Rules: rules.yaml + +Sequences: sequences.yaml + +Weapons: weapons.yaml diff --git a/mods/ura/maps/drop-zone-w/rules.yaml b/mods/ura/maps/drop-zone-w/rules.yaml new file mode 100644 index 0000000..443e9ed --- /dev/null +++ b/mods/ura/maps/drop-zone-w/rules.yaml @@ -0,0 +1,69 @@ +World: + CrateSpawner: + Maximum: 3 + SpawnInterval: 125 + WaterChance: 100 + CrateActors: unitcrate + InitialSpawnDelay: 0 + -SpawnMPUnits: + -MPStartLocations: + MapBuildRadius: + AllyBuildRadiusCheckboxLocked: True + AllyBuildRadiusCheckboxEnabled: False + BuildRadiusCheckboxLocked: True + BuildRadiusCheckboxEnabled: True + MapOptions: + TechLevelDropdownLocked: True + TechLevel: unrestricted + +UNITCRATE: + Inherits: ^Crate + GiveUnitCrateAction@pt: + SelectionShares: 7 + Units: pt + GiveUnitCrateAction@dd: + SelectionShares: 6 + Units: dd + GiveUnitCrateAction@ca: + SelectionShares: 4 + Units: ca + GiveUnitCrateAction@ss: + SelectionShares: 6 + Units: ss + GiveUnitCrateAction@msub: + SelectionShares: 4 + Units: msub + Crate: + TerrainTypes: Water + +LST: + Tooltip: + Name: Naval Mobile HQ + Health: + HP: 1000 + Mobile: + Speed: 170 + Armament@PRIMARY: + Weapon: M60mg + Armament@SECONDARY: + Name: secondary + Weapon: M60mg + AttackFrontal: + WithMuzzleOverlay@PRIMARY: + WithMuzzleOverlay@SECONDARY: + Armament: secondary + MustBeDestroyed: + RequiredForShortGame: true + +Player: + Shroud: + FogCheckboxLocked: True + FogCheckboxEnabled: False + ExploredMapCheckboxLocked: True + ExploredMapCheckboxEnabled: True + PlayerResources: + DefaultCashLocked: True + DefaultCash: 5000 + LobbyPrerequisiteCheckbox@GLOBALBOUNTY: + Enabled: False + Locked: True diff --git a/mods/ura/maps/drop-zone-w/sequences.yaml b/mods/ura/maps/drop-zone-w/sequences.yaml new file mode 100644 index 0000000..7360366 --- /dev/null +++ b/mods/ura/maps/drop-zone-w/sequences.yaml @@ -0,0 +1,8 @@ +lst: + muzzle: minigun + Start: 0 + Length: 6 + Facings: 8 + turret: mgun + Start: 0 + Facings: 32 diff --git a/mods/ura/maps/drop-zone-w/weapons.yaml b/mods/ura/maps/drop-zone-w/weapons.yaml new file mode 100644 index 0000000..f638624 --- /dev/null +++ b/mods/ura/maps/drop-zone-w/weapons.yaml @@ -0,0 +1,20 @@ +8Inch: + ReloadDelay: 200 + Range: 32c0 + Burst: 4 + Projectile: Bullet + Speed: 546 + Inaccuracy: 3c341 + Warhead@1Dam: SpreadDamage + Spread: 128 + Damage: 250 + +SubMissile: + ReloadDelay: 250 + Range: 32c0 + Burst: 4 + Projectile: Bullet + Speed: 409 + LaunchAngle: 62 + Warhead@1Dam: SpreadDamage + Damage: 400 diff --git a/mods/ura/maps/drop-zone/map.bin b/mods/ura/maps/drop-zone/map.bin new file mode 100644 index 0000000..cf77f6c Binary files /dev/null and b/mods/ura/maps/drop-zone/map.bin differ diff --git a/mods/ura/maps/drop-zone/map.png b/mods/ura/maps/drop-zone/map.png new file mode 100644 index 0000000..d206892 Binary files /dev/null and b/mods/ura/maps/drop-zone/map.png differ diff --git a/mods/ura/maps/drop-zone/map.yaml b/mods/ura/maps/drop-zone/map.yaml new file mode 100644 index 0000000..9afb4fe --- /dev/null +++ b/mods/ura/maps/drop-zone/map.yaml @@ -0,0 +1,162 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Drop Zone + +Author: Holloweye + +Tileset: TEMPERAT + +MapSize: 64,64 + +Bounds: 16,16,32,32 + +Visibility: Lobby + +Categories: Drop Zone + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Multi0: + Name: Multi0 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi1: + Name: Multi1 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi2: + Name: Multi2 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi3: + Name: Multi3 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi4: + Name: Multi4 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi5: + Name: Multi5 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi6: + Name: Multi6 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi7: + Name: Multi7 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + +Actors: + Actor0: apc + Location: 28,28 + Owner: Multi0 + Actor1: apc + Location: 30,28 + Owner: Multi1 + Actor2: apc + Location: 32,28 + Owner: Multi2 + Actor3: apc + Location: 32,30 + Owner: Multi3 + Actor4: apc + Location: 32,32 + Owner: Multi4 + Actor5: apc + Location: 30,32 + Owner: Multi5 + Actor6: apc + Location: 28,32 + Owner: Multi6 + Actor7: apc + Location: 28,30 + Owner: Multi7 + Actor9: tc04 + Location: 18,43 + Owner: Neutral + Actor10: tc02 + Location: 44,44 + Owner: Neutral + Actor11: t10 + Location: 23,24 + Owner: Neutral + Actor12: t08 + Location: 34,23 + Owner: Neutral + Actor13: t12 + Location: 38,27 + Owner: Neutral + Actor14: t12 + Location: 35,35 + Owner: Neutral + Actor15: tc04 + Location: 43,18 + Owner: Neutral + Actor16: tc05 + Location: 18,18 + Owner: Neutral + Actor17: t12 + Location: 22,35 + Owner: Neutral + Actor18: t07 + Location: 18,28 + Owner: Neutral + Actor19: t07 + Location: 45,39 + Owner: Neutral + Actor20: t07 + Location: 40,18 + Owner: Neutral + Actor8: mpspawn + Location: 29,29 + Owner: Neutral + Actor21: mpspawn + Location: 29,30 + Owner: Neutral + Actor22: mpspawn + Location: 29,31 + Owner: Neutral + Actor23: mpspawn + Location: 30,31 + Owner: Neutral + Actor24: mpspawn + Location: 31,31 + Owner: Neutral + Actor25: mpspawn + Location: 31,30 + Owner: Neutral + Actor26: mpspawn + Location: 31,29 + Owner: Neutral + Actor27: mpspawn + Location: 30,29 + Owner: Neutral + +Rules: rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ura/maps/drop-zone/rules.yaml b/mods/ura/maps/drop-zone/rules.yaml new file mode 100644 index 0000000..596a863 --- /dev/null +++ b/mods/ura/maps/drop-zone/rules.yaml @@ -0,0 +1,79 @@ +World: + CrateSpawner: + Maximum: 3 + SpawnInterval: 125 + CrateActors: unitcrate + InitialSpawnDelay: 0 + -SpawnMPUnits: + -MPStartLocations: + MapBuildRadius: + AllyBuildRadiusCheckboxLocked: True + AllyBuildRadiusCheckboxEnabled: False + BuildRadiusCheckboxLocked: True + BuildRadiusCheckboxEnabled: True + MapOptions: + TechLevelDropdownLocked: True + TechLevel: unrestricted + +UNITCRATE: + Inherits: ^Crate + GiveUnitCrateAction@ttnk: + SelectionShares: 4 + Units: ttnk + GiveUnitCrateAction@ftrk: + SelectionShares: 6 + Units: ftrk + GiveUnitCrateAction@harv: + SelectionShares: 1 + Units: harv + GiveUnitCrateAction@shok: + SelectionShares: 1 + Units: shok + GiveUnitCrateAction@dog: + SelectionShares: 1 + Units: dog + Crate: + TerrainTypes: Clear, Road, Ore, Beach + +APC: + Inherits@AUTOTARGET: ^AutoTargetGround + Health: + HP: 1000 + MustBeDestroyed: + RequiredForShortGame: true + -AttackMove: + +HARV: + Tooltip: + Name: Bomb Truck + Health: + HP: 100 + Explodes: + Weapon: CrateNuke + EmptyWeapon: CrateNuke + AttackSuicides: + Buildable: + Description: Explodes like a damn nuke! + +SHOK: + Health: + HP: 800 + +DOG: + Health: + HP: 120 + Mobile: + Speed: 99 + +Player: + Shroud: + FogCheckboxLocked: True + FogCheckboxEnabled: False + ExploredMapCheckboxLocked: True + ExploredMapCheckboxEnabled: True + PlayerResources: + DefaultCashLocked: True + DefaultCash: 5000 + LobbyPrerequisiteCheckbox@GLOBALBOUNTY: + Enabled: False + Locked: True diff --git a/mods/ura/maps/drop-zone/weapons.yaml b/mods/ura/maps/drop-zone/weapons.yaml new file mode 100644 index 0000000..edf0a3a --- /dev/null +++ b/mods/ura/maps/drop-zone/weapons.yaml @@ -0,0 +1,5 @@ +PortaTesla: + ReloadDelay: 20 + Range: 10c0 + Warhead@1Dam: SpreadDamage + Damage: 80 diff --git a/mods/ura/maps/dual-cold-front.oramap b/mods/ura/maps/dual-cold-front.oramap new file mode 100644 index 0000000..c552092 Binary files /dev/null and b/mods/ura/maps/dual-cold-front.oramap differ diff --git a/mods/ura/maps/east-vs-west.oramap b/mods/ura/maps/east-vs-west.oramap new file mode 100644 index 0000000..7632ff6 Binary files /dev/null and b/mods/ura/maps/east-vs-west.oramap differ diff --git a/mods/ura/maps/encounter.oramap b/mods/ura/maps/encounter.oramap new file mode 100644 index 0000000..13567af Binary files /dev/null and b/mods/ura/maps/encounter.oramap differ diff --git a/mods/ura/maps/engagement.oramap b/mods/ura/maps/engagement.oramap new file mode 100644 index 0000000..94ee3e1 Binary files /dev/null and b/mods/ura/maps/engagement.oramap differ diff --git a/mods/ura/maps/ensio-kaivo.oramap b/mods/ura/maps/ensio-kaivo.oramap new file mode 100644 index 0000000..c47bb65 Binary files /dev/null and b/mods/ura/maps/ensio-kaivo.oramap differ diff --git a/mods/ura/maps/evacuation/evacuation.lua b/mods/ura/maps/evacuation/evacuation.lua new file mode 100644 index 0000000..0c61715 --- /dev/null +++ b/mods/ura/maps/evacuation/evacuation.lua @@ -0,0 +1,370 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +DeathThreshold = +{ + easy = 200, + normal = 100, +} + +TanyaType = "e7" +if Map.LobbyOption("difficulty") ~= "easy" then + TanyaType = "e7.noautotarget" +end + +RepairTriggerThreshold = +{ + easy = 50, + normal = 75, +} + +Sams = { Sam1, Sam2, Sam3, Sam4 } +TownUnits = +{ + Einstein, Engineer, + TownUnit01, TownUnit02, TownUnit03, TownUnit04, TownUnit05, TownUnit06, TownUnit07, + TownUnit08, TownUnit09, TownUnit10, TownUnit11, TownUnit12, TownUnit13, TownUnit14, +} + +ParabombDelay = DateTime.Seconds(30) +ParatroopersDelay = DateTime.Minutes(5) +Paratroopers = +{ + { + proxy = "powerproxy.paras1", + entry = BadgerEntryPoint1.Location, + drop = BadgerDropPoint1.Location, + }, + { + proxy = "powerproxy.paras2", + entry = BadgerEntryPoint1.Location + CVec.New(3, 0), + drop = BadgerDropPoint2.Location, + }, + { + proxy = "powerproxy.paras2", + entry = BadgerEntryPoint1.Location + CVec.New(6, 0), + drop = BadgerDropPoint3.Location, + }, +} + +AttackGroup = { } +AttackGroupSize = 5 +SovietInfantry = { "e1", "e2", "e3" } +SovietVehiclesUpgradeDelay = DateTime.Minutes(4) +SovietVehicleType = "Normal" +SovietVehicles = +{ + Normal = { "3tnk" }, + Upgraded = { "3tnk", "v2rl" }, +} +ProductionInterval = +{ + easy = DateTime.Seconds(10), + normal = DateTime.Seconds(2), +} + +ReinforcementsDelay = DateTime.Minutes(16) +ReinforcementsUnits = { "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "1tnk", "1tnk", "jeep", "e1", + "e1", "e1", "e1", "e3", "e3", "mcv", "truk", "truk", "truk", "truk", "truk", "truk" } + +SpawnAlliedReinforcements = function() + if allies2.IsLocalPlayer then + UserInterface.SetMissionText("") + Media.PlaySpeechNotification(allies2, "AlliedReinforcementsArrived") + end + Reinforcements.Reinforce(allies2, ReinforcementsUnits, { ReinforcementsEntryPoint.Location, Allies2BasePoint.Location }) +end + +Yak = nil +YakAttack = function() + local targets = Map.ActorsInCircle(YakAttackPoint.CenterPosition, WDist.FromCells(10), function(a) + return a.Owner == allies1 and not a.IsDead and a ~= Einstein and a ~= Tanya and a ~= Engineer and Yak.CanTarget(a) + end) + + if (#targets > 0) then + Yak.Attack(Utils.Random(targets)) + end + Yak.Move(Map.ClosestEdgeCell(Yak.Location)) + Yak.Destroy() + Trigger.OnRemovedFromWorld(Yak, function() + Yak = nil + end) +end + +SovietTownAttack = function() + local units = Utils.Shuffle(Utils.Where(Map.ActorsWithTag("TownAttacker"), function(a) return not a.IsDead end)) + + Utils.Do(Utils.Take(5, units), function(unit) + unit.AttackMove(TownPoint.Location) + Trigger.OnIdle(unit, unit.Hunt) + end) +end + +SendParabombs = function() + local proxy = Actor.Create("powerproxy.parabombs", false, { Owner = soviets }) + proxy.SendAirstrikeFrom(BadgerEntryPoint2.Location, ParabombPoint1.Location) + proxy.SendAirstrikeFrom(BadgerEntryPoint2.Location + CVec.New(0, 3), ParabombPoint2.Location) + proxy.Destroy() +end + +SendParatroopers = function() + Utils.Do(Paratroopers, function(para) + local proxy = Actor.Create(para.proxy, false, { Owner = soviets }) + local units = proxy.SendParatroopersFrom(para.entry, para.drop) + proxy.Destroy() + + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function(a) + if a.IsInWorld then + a.Hunt() + end + end) + end) + end) +end + +SendAttackGroup = function() + if #AttackGroup < AttackGroupSize then + return + end + + Utils.Do(AttackGroup, function(unit) + if not unit.IsDead then + Trigger.OnIdle(unit, unit.Hunt) + end + end) + + AttackGroup = { } +end + +ProduceInfantry = function() + if SovietBarracks.IsDead or SovietBarracks.Owner ~= soviets then + return + end + + soviets.Build({ Utils.Random(SovietInfantry) }, function(units) + table.insert(AttackGroup, units[1]) + SendAttackGroup() + Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceInfantry) + end) +end + +ProduceVehicles = function() + if SovietWarFactory.IsDead or SovietWarFactory.Owner ~= soviets then + return + end + + soviets.Build({ Utils.Random(SovietVehicles[SovietVehicleType]) }, function(units) + table.insert(AttackGroup, units[1]) + SendAttackGroup() + Trigger.AfterDelay(ProductionInterval[Map.LobbyOption("difficulty")], ProduceVehicles) + end) +end + +NumBaseBuildings = function() + local buildings = Map.ActorsInBox(AlliedBaseTopLeft.CenterPosition, AlliedBaseBottomRight.CenterPosition, function(a) + return not a.IsDead and a.Owner == allies2 and a.HasProperty("StartBuildingRepairs") + end) + + return #buildings +end + +Tick = function() + if DateTime.GameTime > 1 and DateTime.GameTime % 25 == 0 and NumBaseBuildings() == 0 then + allies2.MarkFailedObjective(objHoldPosition) + end + + if not allies2.IsObjectiveCompleted(objCutSovietPower) and soviets.PowerState ~= "Normal" then + allies2.MarkCompletedObjective(objCutSovietPower) + end + + if not allies2.IsObjectiveCompleted(objLimitLosses) and allies2.UnitsLost > DeathThreshold[Map.LobbyOption("difficulty")] then + allies2.MarkFailedObjective(objLimitLosses) + end + + if allies2.IsLocalPlayer and DateTime.GameTime <= ReinforcementsDelay then + UserInterface.SetMissionText("Allied reinforcements arrive in " .. Utils.FormatTime(ReinforcementsDelay - DateTime.GameTime)) + else + UserInterface.SetMissionText("") + end +end + +SetupSoviets = function() + soviets.Cash = 1000 + + if Map.LobbyOption("difficulty") == "easy" then + Utils.Do(Sams, function(sam) + local camera = Actor.Create("Camera.SAM", true, { Owner = allies1, Location = sam.Location }) + Trigger.OnKilledOrCaptured(sam, function() + camera.Destroy() + end) + end) + end + + local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == soviets and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(buildings, function(actor) + Trigger.OnDamaged(actor, function(building) + if building.Owner == soviets and building.Health < (building.MaxHealth * RepairTriggerThreshold[Map.LobbyOption("difficulty")] / 100) then + building.StartBuildingRepairs() + end + end) + end) + + SovietBarracks.IsPrimaryBuilding = true + SovietBarracks.RallyPoint = SovietRallyPoint.Location + SovietWarFactory.IsPrimaryBuilding = true + SovietWarFactory.RallyPoint = SovietRallyPoint.Location + + Trigger.AfterDelay(SovietVehiclesUpgradeDelay, function() SovietVehicleType = "Upgraded" end) + Trigger.AfterDelay(0, function() + ProduceInfantry() + ProduceVehicles() + end) +end + +SetupTriggers = function() + Trigger.OnKilled(Tanya, function() + allies1.MarkFailedObjective(objTanyaMustSurvive) + end) + + Trigger.OnAllKilledOrCaptured(Sams, function() + allies1.MarkCompletedObjective(objDestroySamSites) + objExtractEinstein = allies1.AddPrimaryObjective("Wait for a helicopter at the LZ and extract Einstein.") + Actor.Create("flare", true, { Owner = allies1, Location = ExtractionLZ.Location + CVec.New(1, -1) }) + Beacon.New(allies1, ExtractionLZ.CenterPosition) + Media.PlaySpeechNotification(allies1, "SignalFlareNorth") + + ExtractionHeli = Reinforcements.ReinforceWithTransport(allies1, "tran", nil, { ExtractionLZEntryPoint.Location, ExtractionLZ.Location })[1] + Trigger.OnKilled(ExtractionHeli, function() + allies1.MarkFailedObjective(objExtractEinstein) + end) + Trigger.OnPassengerEntered(ExtractionHeli, function(heli, passenger) + if passenger == Einstein then + heli.Move(ExtractionLZEntryPoint.Location) + heli.Destroy() + Trigger.OnRemovedFromWorld(heli, function() + allies2.MarkCompletedObjective(objLimitLosses) + allies2.MarkCompletedObjective(objHoldPosition) + allies1.MarkCompletedObjective(objTanyaMustSurvive) + allies1.MarkCompletedObjective(objEinsteinSurvival) + allies1.MarkCompletedObjective(objExtractEinstein) + end) + end + end) + end) + + Trigger.OnEnteredProximityTrigger(TownPoint.CenterPosition, WDist.FromCells(15), function(actor, trigger) + if actor.Owner == allies1 then + ReassignActors(TownUnits, neutral, allies1) + Utils.Do(TownUnits, function(a) a.Stance = "Defend" end) + allies1.MarkCompletedObjective(objFindEinstein) + objEinsteinSurvival = allies1.AddPrimaryObjective("Keep Einstein alive at all costs.") + Trigger.OnKilled(Einstein, function() + allies1.MarkFailedObjective(objEinsteinSurvival) + end) + Trigger.RemoveProximityTrigger(trigger) + SovietTownAttack() + end + end) + + Trigger.OnEnteredProximityTrigger(YakAttackPoint.CenterPosition, WDist.FromCells(5), function(actor, trigger) + if not (Yak == nil or Yak.IsDead) or actor.Owner ~= allies1 then + return + end + + Yak = Actor.Create("yak", true, { Owner = soviets, Location = YakEntryPoint.Location, CenterPosition = YakEntryPoint.CenterPosition + WVec.New(0, 0, Actor.CruiseAltitude("yak")) }) + Yak.Move(YakAttackPoint.Location + CVec.New(0, -10)) + Yak.CallFunc(YakAttack) + end) + + Trigger.AfterDelay(ParabombDelay, SendParabombs) + Trigger.AfterDelay(ParatroopersDelay, SendParatroopers) + Trigger.AfterDelay(ReinforcementsDelay, SpawnAlliedReinforcements) +end + +SpawnTanya = function() + Tanya = Actor.Create(TanyaType, true, { Owner = allies1, Location = TanyaLocation.Location }) + + if Map.LobbyOption("difficulty") ~= "easy" and allies1.IsLocalPlayer then + Trigger.AfterDelay(DateTime.Seconds(2), function() + Media.DisplayMessage("According to the rules of engagement I need your explicit orders to fire, Commander!", "Tanya") + end) + end +end + +ReassignActors = function(actors, from, to) + Utils.Do(actors, function(a) + if a.Owner == from then + a.Owner = to + a.Stance = "Defend" + end + end) +end + +WorldLoaded = function() + neutral = Player.GetPlayer("Neutral") + + -- Allies is the pre-set owner of units that get assigned to either the second player, if any, or the first player otherwise. + allies = Player.GetPlayer("Allies") + + -- Allies1 is the player starting on the right, controlling Tanya + allies1 = Player.GetPlayer("Allies1") + + -- Allies2 is the player starting on the left, defending the base + allies2 = Player.GetPlayer("Allies2") + + soviets = Player.GetPlayer("Soviets") + + Utils.Do({ allies1, allies2 }, function(player) + if player and player.IsLocalPlayer then + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + end + end) + + if not allies2 or allies2.IsLocalPlayer then + Camera.Position = Allies2BasePoint.CenterPosition + else + Camera.Position = ChinookHusk.CenterPosition + end + + if not allies2 then + allies2 = allies1 + end + + ReassignActors(Map.ActorsInWorld, allies, allies2) + SpawnTanya() + + objTanyaMustSurvive = allies1.AddPrimaryObjective("Tanya must survive.") + objFindEinstein = allies1.AddPrimaryObjective("Find Einstein's crashed helicopter.") + objDestroySamSites = allies1.AddPrimaryObjective("Destroy the SAM sites.") + + objHoldPosition = allies2.AddPrimaryObjective("Hold your position and protect the base.") + objLimitLosses = allies2.AddSecondaryObjective("Do not lose more than " .. DeathThreshold[Map.LobbyOption("difficulty")] .. " units.") + objCutSovietPower = allies2.AddSecondaryObjective("Take out the Soviet power grid.") + + SetupTriggers() + SetupSoviets() +end diff --git a/mods/ura/maps/evacuation/map.bin b/mods/ura/maps/evacuation/map.bin new file mode 100644 index 0000000..45e732c Binary files /dev/null and b/mods/ura/maps/evacuation/map.bin differ diff --git a/mods/ura/maps/evacuation/map.png b/mods/ura/maps/evacuation/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/evacuation/map.png differ diff --git a/mods/ura/maps/evacuation/map.yaml b/mods/ura/maps/evacuation/map.yaml new file mode 100644 index 0000000..3229dd2 --- /dev/null +++ b/mods/ura/maps/evacuation/map.yaml @@ -0,0 +1,1754 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Evacuation + +Author: Scott_NZ + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 16,16,96,96 + +Visibility: Lobby, MissionSelector + +Categories: Mission, Cooperative Mission + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Allies1: + Name: Allies1 + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: ABB7E4 + LockSpawn: True + LockTeam: True + Allies: Allies2, Allies + Enemies: Soviets + PlayerReference@Allies2: + Name: Allies2 + AllowBots: False + Playable: True + LockFaction: True + Faction: allies + LockColor: True + Color: A1EF8C + LockSpawn: True + LockTeam: True + Allies: Allies1, Allies + Enemies: Soviets + PlayerReference@Allies: + Name: Allies + Faction: allies + NonCombatant: True + Color: 5CC1A3 + Allies: Allies1, Allies2 + Enemies: Soviets + PlayerReference@Soviets: + Name: Soviets + Faction: soviet + Color: FE1100 + Enemies: Allies1, Allies2, Allies + +Actors: + Actor1: v07 + Location: 71,91 + Owner: Neutral + Actor2: v04 + Location: 77,90 + Owner: Neutral + Actor3: v03 + Location: 66,90 + Owner: Neutral + Actor4: v02 + Location: 73,94 + Owner: Neutral + Actor5: v01 + Location: 77,94 + Owner: Neutral + Actor6: v07 + Location: 77,87 + Owner: Neutral + Actor7: v09 + Location: 61,95 + Owner: Neutral + Actor8: v08 + Location: 60,91 + Owner: Neutral + Actor15: t16 + Location: 60,104 + Owner: Neutral + Actor33: t06 + Location: 59,95 + Owner: Neutral + Actor11: wood + Location: 68,100 + Owner: Neutral + Actor12: v05 + Location: 72,87 + Owner: Neutral + Actor20: t05 + Location: 74,76 + Owner: Neutral + Actor10: tc03 + Location: 60,99 + Owner: Neutral + Actor16: wood + Location: 67,100 + Owner: Neutral + Actor17: wood + Location: 66,100 + Owner: Neutral + Actor18: wood + Location: 66,99 + Owner: Neutral + Actor19: wood + Location: 66,98 + Owner: Neutral + Actor29: wood + Location: 65,96 + Owner: Neutral + Actor13: t06 + Location: 65,82 + Owner: Neutral + Actor22: v08 + Location: 83,94 + Owner: Neutral + Actor23: v04 + Location: 64,93 + Owner: Neutral + Actor24: v04 + Location: 83,91 + Owner: Neutral + Actor25: tc04 + Location: 93,86 + Owner: Neutral + Actor26: v12 + Location: 79,91 + Owner: Neutral + Actor31: wood + Location: 63,96 + Owner: Neutral + Actor30: wood + Location: 64,96 + Owner: Neutral + Actor194: sbag + Location: 94,50 + Owner: Soviets + Actor27: wood + Location: 66,97 + Owner: Neutral + Actor14: tc05 + Location: 59,101 + Owner: Neutral + Actor28: wood + Location: 66,96 + Owner: Neutral + Actor9: t12 + Location: 59,98 + Owner: Neutral + Actor34: t14 + Location: 68,98 + Owner: Neutral + Actor35: t11 + Location: 71,89 + Owner: Neutral + Actor36: t15 + Location: 83,95 + Owner: Neutral + Actor115: fenc + Location: 100,99 + Owner: Soviets + Actor38: t14 + Location: 89,97 + Owner: Neutral + Actor39: t15 + Location: 84,108 + Owner: Neutral + Actor41: t01 + Location: 71,80 + Owner: Neutral + Actor43: t02 + Location: 79,102 + Owner: Neutral + Actor132: fenc + Location: 100,100 + Owner: Soviets + Actor45: tc04 + Location: 64,108 + Owner: Neutral + Actor46: tc01 + Location: 64,105 + Owner: Neutral + Actor47: t07 + Location: 77,107 + Owner: Neutral + Actor48: t05 + Location: 92,80 + Owner: Neutral + Actor49: t03 + Location: 87,88 + Owner: Neutral + Actor50: t06 + Location: 96,82 + Owner: Neutral + Actor669: fenc + Location: 95,79 + Owner: Soviets + Actor135: tc05 + Location: 106,109 + Owner: Neutral + Actor58: t06 + Location: 85,105 + Owner: Neutral + Actor125: e2 + Location: 99,86 + Owner: Soviets + Actor599: tc01 + Location: 70,32 + Owner: Neutral + Actor62: t12 + Location: 96,79 + Owner: Neutral + Actor66: t17 + Location: 85,71 + Owner: Neutral + Actor65: t14 + Location: 89,70 + Owner: Neutral + Actor87: t03 + Location: 69,34 + Owner: Neutral + Actor598: t08 + Location: 71,31 + Owner: Neutral + Actor154: e1 + Location: 105,95 + Owner: Soviets + Actor149: sbag + Location: 92,50 + Owner: Soviets + Actor99: e1 + Location: 82,72 + Owner: Soviets + Actor75: t06 + Location: 73,64 + Owner: Neutral + Actor76: t14 + Location: 71,71 + Owner: Neutral + Actor77: tc04 + Location: 93,96 + Owner: Neutral + Actor95: fenc + Location: 83,71 + Owner: Soviets + Actor642: t10 + Location: 66,29 + Owner: Neutral + Actor603: fenc + Location: 84,71 + Owner: Soviets + Actor85: medi + Location: 110,86 + Owner: Allies1 + Actor88: t07 + Location: 93,80 + Owner: Neutral + Actor469: e2 + Location: 97,20 + Owner: Soviets + Actor438: fenc + Location: 88,19 + Owner: Soviets + Actor56: e1 + Location: 78,74 + Owner: Soviets + Actor549: t16 + Location: 111,50 + Owner: Neutral + Actor242: fenc + Location: 88,50 + Owner: Soviets + Actor104: t10 + Location: 107,46 + Owner: Neutral + Actor163: e2 + Location: 109,96 + Owner: Soviets + Actor90: t02 + Location: 90,72 + Owner: Neutral + Actor106: fenc + Location: 111,94 + Owner: Soviets + Actor590: e1 + Location: 102,97 + Owner: Soviets + Actor64: e1 + Location: 96,93 + Owner: Soviets + Actor169: v2rl + Location: 53,20 + Owner: Soviets + Actor122: e1 + Location: 89,66 + Owner: Soviets + Actor137: t01 + Location: 111,92 + Owner: Neutral + Actor98: fenc + Location: 109,93 + Owner: Soviets + Actor105: fenc + Location: 110,94 + Owner: Soviets + Actor146: t16 + Location: 62,85 + Owner: Neutral + Actor159: brl3 + Location: 93,64 + Owner: Soviets + Actor160: tc05 + Location: 15,108 + Owner: Neutral + Actor155: t05 + Location: 110,40 + Owner: Neutral + Actor157: tc05 + Location: 91,36 + Owner: Neutral + Actor330: oilb + Location: 65,31 + Owner: Neutral + Actor114: fenc + Location: 100,98 + Owner: Soviets + Actor136: t15 + Location: 110,103 + Owner: Neutral + Actor226: fenc + Location: 97,39 + Owner: Soviets + Actor113: fenc + Location: 100,97 + Owner: Soviets + Actor110: fenc + Location: 98,97 + Owner: Soviets + Actor152: t01 + Location: 109,39 + Owner: Neutral + Actor439: fenc + Location: 88,18 + Owner: Soviets + Actor127: fenc + Location: 109,101 + Owner: Soviets + Actor153: t08 + Location: 108,58 + Owner: Neutral + Actor130: e1 + Location: 100,77 + Owner: Soviets + Actor118: fenc + Location: 109,102 + Owner: Soviets + Actor158: t07 + Location: 110,48 + Owner: Neutral + Actor126: t03 + Location: 107,79 + Owner: Neutral + Actor143: dome + Location: 102,74 + Owner: Soviets + Actor156: e1 + Location: 98,72 + Owner: Soviets + Actor142: e2 + Location: 101,69 + Owner: Soviets + Actor247: silo + Location: 39,33 + Owner: Soviets + Actor61: tc05 + Location: 87,109 + Owner: Neutral + Actor174: t06 + Location: 51,78 + Owner: Neutral + Actor711: e1 + Location: 74,36 + Owner: Soviets + Actor306: apwr + Location: 54,67 + Owner: Soviets + Actor134: tc03 + Location: 110,107 + Owner: Neutral + Actor215: tc01 + Location: 16,62 + Owner: Neutral + Actor188: t02 + Location: 55,24 + Owner: Neutral + Actor37: fenc + Location: 99,97 + Owner: Soviets + Actor195: tc03 + Location: 16,16 + Owner: Neutral + Actor196: t17 + Location: 21,15 + Owner: Neutral + Actor198: tc03 + Location: 18,106 + Owner: Neutral + Actor200: tc01 + Location: 19,110 + Owner: Neutral + Actor203: t11 + Location: 45,91 + Owner: Neutral + Actor356: proc + Location: 26,90 + Owner: Allies + FreeActor: False + Actor147: mine + Location: 20,98 + Owner: Neutral + Actor459: tc01 + Location: 41,99 + Owner: Neutral + Actor216: tc05 + Location: 23,45 + Owner: Neutral + Actor217: t07 + Location: 49,32 + Owner: Neutral + Actor218: t16 + Location: 55,34 + Owner: Neutral + Actor53: e1 + Location: 109,89 + Owner: Allies1 + Actor182: tc02 + Location: 53,35 + Owner: Neutral + Actor52: e1 + Location: 106,88 + Owner: Allies1 + Actor239: t06 + Location: 48,75 + Owner: Neutral + Actor292: ftur + Location: 36,56 + Owner: Soviets + Actor71: e1 + Location: 86,102 + Owner: Soviets + Actor44: t16 + Location: 87,105 + Owner: Neutral + Actor133: v04 + Location: 83,101 + Owner: Neutral + Actor259: tc01 + Location: 110,109 + Owner: Neutral + Actor140: t11 + Location: 110,82 + Owner: Neutral + Actor610: e2 + Location: 101,79 + Owner: Soviets + Actor109: fenc + Location: 111,95 + Owner: Soviets + Actor70: dog + Location: 87,99 + Owner: Soviets + Actor141: t13 + Location: 104,85 + Owner: Neutral + Actor236: 3tnk + Location: 91,45 + Owner: Soviets + Actor254: tc02 + Location: 89,34 + Owner: Neutral + Actor138: tc01 + Location: 104,82 + Owner: Neutral + Actor164: e1 + Location: 107,99 + Owner: Soviets + Actor442: e2 + Location: 91,19 + Owner: Soviets + Actor251: fenc + Location: 63,41 + Owner: Soviets + Actor199: t01 + Location: 108,49 + Owner: Neutral + Actor440: fenc + Location: 88,17 + Owner: Soviets + Actor222: fenc + Location: 94,63 + Owner: Soviets + Actor441: e1 + Location: 89,19 + Owner: Soviets + Actor287: fenc + Location: 93,63 + Owner: Soviets + Actor93: fenc + Location: 96,65 + Owner: Soviets + Actor223: e2 + Location: 94,64 + Owner: Soviets + Actor224: e2 + Location: 92,67 + Owner: Soviets + Actor437: fenc + Location: 98,21 + Owner: Soviets + Actor21: fenc + Location: 97,47 + Owner: Soviets + Actor227: fenc + Location: 96,39 + Owner: Soviets + Actor208: oilb + Location: 105,43 + Owner: Soviets + Actor231: fenc + Location: 94,38 + Owner: Soviets + Actor201: oilb + Location: 105,40 + Owner: Soviets + Actor210: powr + Location: 105,46 + Owner: Soviets + Actor78: barr + Location: 101,40 + Owner: Soviets + Actor151: fenc + Location: 97,45 + Owner: Soviets + Actor235: tc05 + Location: 106,51 + Owner: Neutral + Actor74: fenc + Location: 97,46 + Owner: Soviets + Actor234: tc03 + Location: 107,54 + Owner: Neutral + Actor219: fenc + Location: 97,41 + Owner: Soviets + Actor221: fenc + Location: 97,40 + Owner: Soviets + Actor228: fenc + Location: 95,39 + Owner: Soviets + Actor248: barl + Location: 100,41 + Owner: Soviets + Actor229: fenc + Location: 94,39 + Owner: Soviets + Actor245: e1 + Location: 101,43 + Owner: Soviets + Actor249: brl3 + Location: 100,40 + Owner: Soviets + Actor250: brl3 + Location: 101,39 + Owner: Soviets + Actor258: e2 + Location: 103,45 + Owner: Soviets + Actor443: e1 + Location: 97,105 + Owner: Soviets + Actor260: e1 + Location: 97,43 + Owner: Soviets + Actor108: e1 + Location: 99,47 + Owner: Soviets + Actor266: e1 + Location: 96,47 + Owner: Soviets + Actor279: brl3 + Location: 106,39 + Owner: Soviets + Actor280: barl + Location: 106,42 + Owner: Soviets + Actor331: e1 + Location: 36,88 + Owner: Soviets + Actor193: fenc + Location: 95,63 + Owner: Soviets + Actor192: fenc + Location: 95,64 + Owner: Soviets + Actor94: fenc + Location: 96,64 + Owner: Soviets + Actor640: tc04 + Location: 72,31 + Owner: Neutral + Actor641: t02 + Location: 71,29 + Owner: Neutral + Actor181: mine + Location: 109,76 + Owner: Neutral + Actor348: e3 + Location: 87,48 + Owner: Soviets + Actor244: fenc + Location: 86,50 + Owner: Soviets + Actor246: fenc + Location: 85,50 + Owner: Soviets + Actor243: fenc + Location: 87,50 + Owner: Soviets + Actor284: fenc + Location: 85,49 + Owner: Soviets + Actor366: e1 + Location: 88,51 + Owner: Soviets + Actor367: e1 + Location: 92,51 + Owner: Soviets + Actor368: e1 + Location: 91,49 + Owner: Soviets + Actor347: e3 + Location: 86,49 + Owner: Soviets + Actor370: e2 + Location: 94,49 + Owner: Soviets + Actor281: fenc + Location: 56,38 + Owner: Soviets + Actor376: e1 + Location: 107,89 + Owner: Allies1 + Actor377: e1 + Location: 108,89 + Owner: Allies1 + Actor378: e1 + Location: 110,88 + Owner: Allies1 + Actor327: t06 + Location: 37,73 + Owner: Neutral + Actor189: t13 + Location: 88,57 + Owner: Neutral + Actor328: t14 + Location: 26,57 + Owner: Neutral + Actor297: e1 + Location: 33,25 + Owner: Soviets + Actor124: mine + Location: 49,25 + Owner: Neutral + Actor112: e1 + Location: 98,87 + Owner: Soviets + Actor428: e1 + Location: 90,100 + Owner: Soviets + Actor298: e2 + Location: 33,23 + Owner: Soviets + Actor510: e1 + Location: 94,20 + Owner: Soviets + Actor508: e1 + Location: 79,19 + Owner: Soviets + Actor57: cycl + Location: 74,16 + Owner: Soviets + Actor511: sbag + Location: 96,19 + Owner: Soviets + Actor515: tc05 + Location: 108,17 + Owner: Neutral + Actor516: t13 + Location: 72,20 + Owner: Neutral + Actor121: cycl + Location: 75,23 + Owner: Soviets + Actor519: sbag + Location: 93,18 + Owner: Soviets + Actor489: apwr + Location: 76,20 + Owner: Soviets + Actor517: sbag + Location: 96,17 + Owner: Soviets + Actor520: sbag + Location: 93,19 + Owner: Soviets + Actor488: apwr + Location: 80,20 + Owner: Soviets + Actor116: cycl + Location: 74,20 + Owner: Soviets + Actor117: cycl + Location: 74,21 + Owner: Soviets + Actor107: oilb + Location: 68,29 + Owner: Neutral + Actor232: fenc + Location: 94,37 + Owner: Soviets + Actor102: spen + Location: 101,35 + Owner: Soviets + Actor487: apwr + Location: 80,17 + Owner: Soviets + Actor523: t17 + Location: 85,20 + Owner: Neutral + Actor522: t05 + Location: 90,16 + Owner: Neutral + Actor119: cycl + Location: 74,22 + Owner: Soviets + Actor120: cycl + Location: 74,23 + Owner: Soviets + Actor518: sbag + Location: 94,17 + Owner: Soviets + Actor521: sbag + Location: 93,17 + Owner: Soviets + Actor237: tc04 + Location: 99,53 + Owner: Neutral + Actor139: cycl + Location: 77,23 + Owner: Soviets + Actor123: cycl + Location: 76,23 + Owner: Soviets + Actor504: e2 + Location: 78,23 + Owner: Soviets + Actor505: e1 + Location: 84,18 + Owner: Soviets + Actor289: sbag + Location: 95,17 + Owner: Soviets + Actor512: sbag + Location: 96,18 + Owner: Soviets + Actor486: apwr + Location: 76,17 + Owner: Soviets + Actor514: tc03 + Location: 104,20 + Owner: Neutral + Actor307: apwr + Location: 54,60 + Owner: Soviets + Actor91: cycl + Location: 74,17 + Owner: Soviets + Actor103: cycl + Location: 74,18 + Owner: Soviets + Actor111: cycl + Location: 74,19 + Owner: Soviets + Actor413: e1 + Location: 104,38 + Owner: Soviets + Actor626: barl + Location: 80,72 + Owner: Soviets + Actor419: e1 + Location: 82,62 + Owner: Soviets + Actor150: sbag + Location: 93,50 + Owner: Soviets + Actor608: brl3 + Location: 81,72 + Owner: Soviets + Actor427: e1 + Location: 76,71 + Owner: Soviets + Actor429: e2 + Location: 78,70 + Owner: Soviets + Actor611: t05 + Location: 81,65 + Owner: Neutral + Actor336: fenc + Location: 90,20 + Owner: Soviets + Actor422: fenc + Location: 96,21 + Owner: Soviets + Actor335: fenc + Location: 89,20 + Owner: Soviets + Actor436: fenc + Location: 97,21 + Owner: Soviets + Actor421: fenc + Location: 91,20 + Owner: Soviets + Actor334: fenc + Location: 88,20 + Owner: Soviets + Actor295: e1 + Location: 28,25 + Owner: Soviets + Actor299: dog + Location: 31,23 + Owner: Soviets + Actor170: weap + Location: 23,103 + Owner: Allies + Actor460: t08 + Location: 40,110 + Owner: Neutral + Actor206: dome + Location: 35,99 + Owner: Allies + Actor204: apwr + Location: 37,108 + Owner: Allies + Actor92: powr + Location: 101,46 + Owner: Soviets + Actor84: fenc + Location: 110,93 + Owner: Soviets + Actor83: apwr + Location: 37,105 + Owner: Allies + Actor162: mine + Location: 20,91 + Owner: Neutral + Actor96: fenc + Location: 82,71 + Owner: Soviets + Actor97: fenc + Location: 111,66 + Owner: Soviets + Actor42: t07 + Location: 92,110 + Owner: Neutral + Actor558: v10 + Location: 64,90 + Owner: Neutral + Actor414: t13 + Location: 74,43 + Owner: Neutral + Actor361: silo + Location: 25,89 + Owner: Allies + Actor446: spen + Location: 58,17 + Owner: Soviets + Actor273: t13 + Location: 45,38 + Owner: Neutral + Actor253: gun + Location: 27,88 + Owner: Allies + Actor534: 1tnk + Location: 37,90 + Owner: Allies + Facing: 0 + Actor398: 1tnk + Location: 36,90 + Owner: Allies + Facing: 0 + Actor485: tc03 + Location: 41,101 + Owner: Neutral + Actor495: tc02 + Location: 40,102 + Owner: Neutral + Actor51: t13 + Location: 66,80 + Owner: Neutral + Actor873: brl3 + Location: 45,79 + Owner: Neutral + Actor171: tsla + Location: 41,57 + Owner: Soviets + Actor570: oilb + Location: 43,80 + Owner: Neutral + Actor263: dome + Location: 61,45 + Owner: Soviets + Actor584: tc04 + Location: 52,70 + Owner: Neutral + Actor586: tc01 + Location: 45,70 + Owner: Neutral + Actor587: t17 + Location: 31,84 + Owner: Neutral + Actor605: barl + Location: 91,68 + Owner: Soviets + Actor498: barl + Location: 94,65 + Owner: Soviets + Actor67: tc01 + Location: 97,65 + Owner: Neutral + Actor462: t02 + Location: 65,89 + Owner: Neutral + Actor529: fenc + Location: 107,102 + Owner: Soviets + Actor535: fenc + Location: 101,100 + Owner: Soviets + Actor211: e1 + Location: 105,107 + Owner: Soviets + Actor530: fenc + Location: 106,102 + Owner: Soviets + Actor128: fenc + Location: 108,102 + Owner: Soviets + Actor592: dog + Location: 108,97 + Owner: Soviets + Actor604: brl3 + Location: 90,67 + Owner: Soviets + Actor720: fenc + Location: 110,66 + Owner: Soviets + Actor556: e1 + Location: 110,89 + Owner: Allies1 + Actor600: barl + Location: 92,68 + Owner: Soviets + Actor647: fenc + Location: 84,72 + Owner: Soviets + Actor532: e1 + Location: 106,89 + Owner: Allies1 + Actor464: t05 + Location: 64,82 + Owner: Neutral + Actor463: tc04 + Location: 60,83 + Owner: Neutral + Actor609: e2 + Location: 99,79 + Owner: Soviets + Actor721: fenc + Location: 109,66 + Owner: Soviets + Actor606: brl3 + Location: 89,67 + Owner: Soviets + Actor144: t01 + Location: 98,107 + Owner: Neutral + Actor129: e1 + Location: 102,78 + Owner: Soviets + Actor283: apwr + Location: 51,59 + Owner: Soviets + Actor72: dog + Location: 81,71 + Owner: Soviets + Actor617: truk + Location: 104,43 + Owner: Soviets + Actor220: sbag + Location: 92,48 + Owner: Soviets + Actor275: fenc + Location: 64,44 + Owner: Soviets + Actor225: fenc + Location: 84,49 + Owner: Soviets + Actor597: t16 + Location: 82,67 + Owner: Neutral + Actor596: tc01 + Location: 83,65 + Owner: Neutral + Actor559: tc02 + Location: 84,66 + Owner: Neutral + Actor418: tc04 + Location: 81,68 + Owner: Neutral + Actor32: tc05 + Location: 83,67 + Owner: Neutral + Actor496: 3tnk + Location: 86,20 + Owner: Soviets + Actor646: fenc + Location: 84,70 + Owner: Soviets + Actor649: fenc + Location: 86,70 + Owner: Soviets + Actor648: fenc + Location: 85,70 + Owner: Soviets + Actor100: e1 + Location: 87,61 + Owner: Soviets + Actor339: e1 + Location: 80,59 + Owner: Soviets + Actor589: dog + Location: 80,57 + Owner: Soviets + Actor340: e1 + Location: 77,58 + Owner: Soviets + Actor55: wood + Location: 79,94 + Owner: Neutral + Actor168: wood + Location: 79,95 + Owner: Neutral + Actor172: wood + Location: 79,96 + Owner: Neutral + Actor324: t05 + Location: 64,63 + Owner: Neutral + Actor265: tsla + Location: 61,65 + Owner: Soviets + Actor257: proc + Location: 35,28 + Owner: Soviets + Actor325: t12 + Location: 48,52 + Owner: Neutral + Actor661: tc03 + Location: 54,16 + Owner: Neutral + Actor326: t17 + Location: 34,50 + Owner: Neutral + Actor667: tc04 + Location: 88,106 + Owner: Neutral + Actor668: t16 + Location: 80,106 + Owner: Neutral + Actor670: fenc + Location: 95,78 + Owner: Soviets + Actor671: fenc + Location: 94,78 + Owner: Soviets + Actor672: fenc + Location: 93,78 + Owner: Soviets + Actor69: e1 + Location: 90,102 + Owner: Soviets + Actor68: e2 + Location: 92,102 + Owner: Soviets + Actor63: e1 + Location: 92,104 + Owner: Soviets + Actor673: wood + Location: 82,97 + Owner: Neutral + Actor674: wood + Location: 81,97 + Owner: Neutral + Actor176: tsla + Location: 56,37 + Owner: Soviets + Actor681: wood + Location: 70,100 + Owner: Neutral + Actor680: wood + Location: 69,100 + Owner: Neutral + Actor308: apwr + Location: 54,63 + Owner: Soviets + Actor262: t06 + Location: 20,51 + Owner: Neutral + Actor676: wood + Location: 79,97 + Owner: Neutral + Actor185: ftur + Location: 42,62 + Owner: Soviets + Actor675: wood + Location: 80,97 + Owner: Neutral + Actor686: brl3 + Location: 82,73 + Owner: Soviets + Actor148: proc + Location: 40,36 + Owner: Soviets + Actor707: v18 + Location: 68,97 + Owner: Neutral + Actor612: t07 + Location: 80,67 + Owner: Neutral + Actor601: t11 + Location: 74,72 + Owner: Neutral + Actor627: t01 + Location: 84,59 + Owner: Neutral + Actor131: sbag + Location: 92,49 + Owner: Soviets + Actor264: t10 + Location: 17,45 + Owner: Neutral + Actor177: hpad + Location: 45,44 + Owner: Soviets + Actor179: tsla + Location: 25,53 + Owner: Soviets + Actor180: ftur + Location: 32,25 + Owner: Soviets + Actor700: tsla + Location: 55,18 + Owner: Soviets + Actor183: ftur + Location: 22,40 + Owner: Soviets + Actor708: v17 + Location: 69,97 + Owner: Neutral + Actor101: dog + Location: 98,74 + Owner: Soviets + Actor715: e2 + Location: 75,34 + Owner: Soviets + Actor0: silo + Location: 94,72 + Owner: Soviets + Actor602: fenc + Location: 99,80 + Owner: Soviets + Actor346: fenc + Location: 100,80 + Owner: Soviets + Actor166: fenc + Location: 101,80 + Owner: Soviets + Actor54: ftur + Location: 97,77 + Owner: Soviets + Actor725: fenc + Location: 75,74 + Owner: Soviets + Actor724: fenc + Location: 76,74 + Owner: Soviets + Actor726: fenc + Location: 74,74 + Owner: Soviets + Actor727: fenc + Location: 73,74 + Owner: Soviets + Actor728: fenc + Location: 72,74 + Owner: Soviets + Actor729: fenc + Location: 72,73 + Owner: Soviets + Actor730: fenc + Location: 72,72 + Owner: Soviets + Actor40: tran.husk1 + Location: 69,87 + Owner: Neutral + Actor333: brl3 + Location: 21,73 + Owner: Neutral + Actor145: mine + Location: 44,29 + Owner: Neutral + Actor270: e1 + Location: 31,87 + Owner: Soviets + Actor573: 2tnk + Location: 34,92 + Owner: Allies + Facing: 0 + Actor577: tc02 + Location: 81,87 + Owner: Neutral + Actor329: e1 + Location: 41,87 + Owner: Soviets + Actor574: 2tnk + Location: 35,92 + Owner: Allies + Facing: 0 + Actor578: v11 + Location: 64,84 + Owner: Neutral + Actor546: 1tnk + Location: 38,90 + Owner: Allies + Facing: 0 + Actor342: e1 + Location: 99,38 + Owner: Soviets + Actor286: e1 + Location: 104,67 + Owner: Soviets + Actor755: e1 + Location: 107,70 + Owner: Soviets + Actor756: e2 + Location: 107,67 + Owner: Soviets + Actor161: proc + Location: 108,69 + Owner: Soviets + Actor285: powr + Location: 102,68 + Owner: Soviets + Actor309: apwr + Location: 51,65 + Owner: Soviets + Actor316: fact + Location: 59,61 + Owner: Soviets + Actor323: t06 + Location: 29,43 + Owner: Neutral + Actor722: t14 + Location: 67,52 + Owner: Neutral + Actor763: tsla + Location: 79,25 + Owner: Soviets + Actor764: e1 + Location: 95,59 + Owner: Soviets + Actor765: e1 + Location: 98,56 + Owner: Soviets + Actor207: fenc + Location: 61,39 + Owner: Soviets + Actor767: dog + Location: 95,57 + Owner: Soviets + Actor766: e1 + Location: 93,56 + Owner: Soviets + Actor205: fenc + Location: 60,39 + Owner: Soviets + Actor187: afld + Location: 35,37 + Owner: Soviets + Actor213: v2rl + Location: 52,44 + Owner: Soviets + Actor272: t16 + Location: 26,30 + Owner: Neutral + Actor214: fenc + Location: 62,41 + Owner: Soviets + Actor233: tc01 + Location: 29,53 + Owner: Neutral + Actor212: fenc + Location: 61,41 + Owner: Soviets + Actor776: e1 + Location: 74,69 + Owner: Soviets + Actor230: tc03 + Location: 16,55 + Owner: Neutral + Actor167: fix + Location: 57,50 + Owner: Soviets + Actor802: t06 + Location: 22,64 + Owner: Neutral + Actor165: mine + Location: 40,24 + Owner: Neutral + Actor322: tsla + Location: 48,65 + Owner: Soviets + Actor255: gun + Location: 42,91 + Owner: Allies + Actor268: e1 + Location: 33,90 + Owner: Allies + Actor269: e1 + Location: 34,90 + Owner: Allies + Actor267: pbox + Location: 30,90 + Owner: Allies + Actor882: barl + Location: 46,81 + Owner: Neutral + Actor202: kenn + Location: 45,49 + Owner: Soviets + Actor184: fenc + Location: 59,39 + Owner: Soviets + Actor256: fenc + Location: 64,42 + Owner: Soviets + Actor240: silo + Location: 38,34 + Owner: Soviets + Actor173: ftur + Location: 66,44 + Owner: Soviets + Actor305: ftur + Location: 46,21 + Owner: Soviets + Actor261: tc01 + Location: 42,77 + Owner: Neutral + Actor778: t05 + Location: 48,78 + Owner: Neutral + Actor831: t15 + Location: 47,82 + Owner: Neutral + Actor865: t08 + Location: 24,110 + Owner: Neutral + Actor864: t01 + Location: 33,109 + Owner: Neutral + Actor862: t07 + Location: 41,71 + Owner: Neutral + Actor867: t01 + Location: 16,68 + Owner: Neutral + Actor883: barl + Location: 44,79 + Owner: Neutral + Actor905: v01 + Location: 20,74 + Owner: Neutral + Actor209: fenc + Location: 61,40 + Owner: Soviets + Actor276: fenc + Location: 65,44 + Owner: Soviets + Actor197: tsla + Location: 55,45 + Owner: Soviets + Actor277: fenc + Location: 57,39 + Owner: Soviets + Actor288: apwr + Location: 51,62 + Owner: Soviets + Actor278: fenc + Location: 56,39 + Owner: Soviets + Actor274: fenc + Location: 64,43 + Owner: Soviets + Actor252: fenc + Location: 64,41 + Owner: Soviets + Actor906: v03 + Location: 16,72 + Owner: Neutral + Actor175: fenc + Location: 58,39 + Owner: Soviets + Actor271: v2rl + Location: 29,33 + Owner: Soviets + Facing: 0 + Actor186: afld + Location: 53,40 + Owner: Soviets + Actor238: silo + Location: 39,34 + Owner: Soviets + Actor241: silo + Location: 38,33 + Owner: Soviets + Actor178: e3 + Location: 37,43 + Owner: Soviets + Actor190: e3 + Location: 35,35 + Owner: Soviets + Actor191: e3 + Location: 38,52 + Owner: Soviets + Actor337: e3 + Location: 37,53 + Owner: Soviets + Actor338: e3 + Location: 45,58 + Owner: Soviets + Actor341: e3 + Location: 54,50 + Owner: Soviets + Actor343: e3 + Location: 66,49 + Owner: Soviets + Actor344: e3 + Location: 62,60 + Owner: Soviets + Actor345: e2 + Location: 42,51 + Owner: Soviets + Actor349: e2 + Location: 55,55 + Owner: Soviets + Actor350: e2 + Location: 43,35 + Owner: Soviets + Actor351: dog + Location: 43,55 + Owner: Soviets + Actor352: dog + Location: 45,60 + Owner: Soviets + Actor353: dog + Location: 41,42 + Owner: Soviets + Actor354: dog + Location: 57,46 + Owner: Soviets + Actor355: dog + Location: 40,31 + Owner: Soviets + Actor357: 3tnk + Location: 43,59 + Owner: Soviets + Facing: 90 + Actor537: harv + Location: 25,94 + Owner: Allies + Facing: 96 + Actor358: 3tnk + Location: 38,55 + Owner: Soviets + Facing: 110 + Actor359: v2rl + Location: 44,53 + Owner: Soviets + Actor282: tent + Location: 40,94 + Owner: Allies + Actor290: pbox + Location: 39,92 + Owner: Allies + ChinookHusk: tran.husk2 + Location: 108,87 + Owner: Neutral + Einstein: einstein + Location: 66,85 + Owner: Neutral + TanyaLocation: waypoint + Location: 106,86 + Owner: Allies1 + Engineer: e6 + Location: 68,86 + Owner: Neutral + Sam1: sam + Location: 105,97 + Owner: Soviets + Sam2: sam + Location: 91,65 + Owner: Soviets + Sam3: sam + Location: 94,18 + Owner: Soviets + Sam4: sam + Location: 31,37 + Owner: Soviets + Allies2BasePoint: waypoint + Location: 34,96 + Owner: Neutral + AlliedBaseBottomRight: waypoint + Location: 51,111 + Owner: Neutral + AlliedBaseTopLeft: waypoint + Location: 16,84 + Owner: Neutral + ReinforcementsEntryPoint: waypoint + Location: 31,111 + Owner: Neutral + ExtractionLZEntryPoint: waypoint + Location: 16,16 + Owner: Neutral + ExtractionLZ: waypoint + Location: 30,38 + Owner: Neutral + TanksEntryPoint: waypoint + Location: 16,86 + Owner: Neutral + SovietRallyPoint: waypoint + Location: 36,65 + Owner: Neutral + TownPoint: waypoint + Location: 70,89 + Owner: Neutral + SovietTownAttackPoint1: waypoint + Location: 72,110 + Owner: Neutral + SovietTownAttackPoint2: waypoint + Location: 86,78 + Owner: Neutral + BadgerEntryPoint1: waypoint + Location: 40,16 + Owner: Neutral + BadgerEntryPoint2: waypoint + Location: 111,77 + Owner: Neutral + BadgerDropPoint1: waypoint + Location: 19,96 + Owner: Neutral + BadgerDropPoint2: waypoint + Location: 34,106 + Owner: Neutral + BadgerDropPoint3: waypoint + Location: 26,100 + Owner: Neutral + ParabombPoint1: waypoint + Location: 39,105 + Owner: Neutral + ParabombPoint2: waypoint + Location: 39,108 + Owner: Neutral + YakEntryPoint: waypoint + Location: 99,16 + Owner: Neutral + YakAttackPoint: waypoint + Location: 78,62 + Owner: Neutral + FlamersEntryPoint: waypoint + Location: 16,74 + Owner: Neutral + SovietBarracks: barr + Location: 39,49 + Owner: Soviets + SovietWarFactory: weap + Location: 51,47 + Owner: Soviets + TownUnit01: e1 + Location: 67,88 + Owner: Neutral + TownUnit02: e1 + Location: 69,89 + Owner: Neutral + TownUnit03: e1 + Location: 69,93 + Owner: Neutral + TownUnit04: e1 + Location: 73,85 + Owner: Neutral + TownUnit05: e1 + Location: 71,86 + Owner: Neutral + TownUnit06: e1 + Location: 68,91 + Owner: Neutral + TownUnit07: e1 + Location: 73,88 + Owner: Neutral + TownUnit08: e1 + Location: 70,86 + Owner: Neutral + TownUnit09: e1 + Location: 69,84 + Owner: Neutral + TownUnit10: e1 + Location: 73,90 + Owner: Neutral + TownUnit11: e3 + Location: 66,89 + Owner: Neutral + TownUnit12: e3 + Location: 66,87 + Owner: Neutral + TownUnit13: e3 + Location: 64,88 + Owner: Neutral + TownUnit14: e1 + Location: 70,88 + Owner: Neutral + TownAttacker01: e1 + Location: 73,83 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker02: e1 + Location: 80,87 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker03: e2 + Location: 104,101 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker04: e2 + Location: 77,96 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker05: e1 + Location: 71,99 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker06: e1 + Location: 69,110 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker07: e1 + Location: 74,109 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker08: e1 + Location: 73,110 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker09: e1 + Location: 71,109 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker10: e2 + Location: 74,110 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker11: e2 + Location: 70,109 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker12: e2 + Location: 73,109 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker13: e1 + Location: 72,109 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker14: e1 + Location: 70,110 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker15: e1 + Location: 82,77 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker16: e1 + Location: 85,76 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker17: e1 + Location: 89,79 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker18: e1 + Location: 84,79 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker19: e1 + Location: 89,80 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker20: e2 + Location: 86,77 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker21: dog + Location: 87,79 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker22: 3tnk + Location: 84,77 + Owner: Soviets + ScriptTags: TownAttacker + TownAttacker23: e2 + Location: 74,92 + Owner: Soviets + ScriptTags: TownAttacker + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/evacuation/rules.yaml b/mods/ura/maps/evacuation/rules.yaml new file mode 100644 index 0000000..23708f0 --- /dev/null +++ b/mods/ura/maps/evacuation/rules.yaml @@ -0,0 +1,221 @@ +Player: + MissionObjectives: + Cooperative: True + PlayerResources: + DefaultCash: 5000 + +World: + MissionData: + Briefing: One of our outposts is under heavy attack by a nearby Soviet base. Einstein, Tanya and many of our forces have been evacuated via helicopters, but those were shot down on the other side of the river. Fortunately they survived the crash, but are now in enemy territory. Tanya and the rest of the surviving forces need to fight their way out of there. The air defenses must be eliminated before another Search & Rescue helicopter can arrive.\n\nMeanwhile, the forces remaining at the base need to fend off the Soviet attacks.\n + LuaScript: + Scripts: evacuation.lua + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + Default: normal + +^Palettes: + IndexedPlayerPalette: + PlayerIndex: + Soviets: 229, 230, 231, 232, 233, 234, 235, 8, 236, 237, 238, 239, 221, 222, 223, 223 + Allies: 224, 224, 225, 225, 226, 184, 185, 186, 187, 188, 188, 189, 190, 190, 191, 191 + Allies1: 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175 + Allies2: 208, 208, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 154, 155, 143 + +^Tanks: + Demolishable: + +^Vehicles: + Demolishable: + +E1: + ScriptTags: + +E2: + ScriptTags: + +DOG: + ScriptTags: + +3TNK: + ScriptTags: + +TRAN.Husk1: + Burns: + Damage: 0 + +TRAN.Husk2: + Burns: + Damage: 0 + +E7: + Passenger: + Weight: 0 + Buildable: + Prerequisites: ~disabled + +EINSTEIN: + Passenger: + Weight: 0 + +V01: + SpawnActorOnDeath: + Actor: healcrate + +TRAN: + -Selectable: + Buildable: + Prerequisites: ~disabled + RevealsShroud: + Range: 0c0 + Interactable: + +2TNK: + Buildable: + Prerequisites: ~vehicles.allies + +MECH: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +SPEN: + Buildable: + Prerequisites: ~disabled + +SYRD: + Buildable: + Prerequisites: ~disabled + +TSLA: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +ATEK: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled + +HELI: + Buildable: + Prerequisites: ~disabled + +4TNK: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +ARTY: + Buildable: + Prerequisites: ~disabled + +APC: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +MGG: + Buildable: + Prerequisites: ~disabled + +TTNK: + Buildable: + Prerequisites: ~disabled + +QTNK: + Buildable: + Prerequisites: ~disabled + +DTRK: + Buildable: + Prerequisites: ~disabled + +CTNK: + Buildable: + Prerequisites: ~disabled + +STNK: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +Camera.SAM: + Inherits: CAMERA + RevealsShroud: + Range: 2c0 + +powerproxy.paras1: + Inherits: powerproxy.paratroopers + ParatroopersPower: + DropItems: E1,E1,E1,E2,3TNK + +powerproxy.paras2: + Inherits: powerproxy.paratroopers + ParatroopersPower: + DropItems: E1,E1,E1,E2,E2 diff --git a/mods/ura/maps/exodus/exodus.lua b/mods/ura/maps/exodus/exodus.lua new file mode 100644 index 0000000..0e4a213 --- /dev/null +++ b/mods/ura/maps/exodus/exodus.lua @@ -0,0 +1,379 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +Difficulty = Map.LobbyOption("difficulty") + +UnitsEvacuatedThreshold = +{ + hard = 200, + normal = 100, + easy = 50 +} + +AttackAtFrame = +{ + hard = 500, + normal = 500, + easy = 600 +} + +MinAttackAtFrame = +{ + hard = 100, + normal = 100, + easy = 150 +} + +MaxSovietYaks = +{ + hard = 4, + normal = 2, + easy = 0 +} + +SovietParadrops = +{ + hard = 40, + normal = 20, + easy = 0 +} + +SovietParadropTicks = +{ + hard = DateTime.Minutes(17), + normal = DateTime.Minutes(20), + easy = DateTime.Minutes(20) +} + +SovietUnits2Ticks = +{ + hard = DateTime.Minutes(12), + normal = DateTime.Minutes(15), + easy = DateTime.Minutes(15) +} + +SovietEntryPoints = +{ + SovietEntryPoint1, SovietEntryPoint2, SovietEntryPoint3, SovietEntryPoint4, SovietEntryPoint5, SovietEntryPoint6 +} + +SovietRallyPoints = +{ + SovietRallyPoint1, SovietRallyPoint2, SovietRallyPoint3, SovietRallyPoint4, SovietRallyPoint5, SovietRallyPoint6 +} + +SovietAirfields = +{ + SovietAirfield1, SovietAirfield2, SovietAirfield3, SovietAirfield4, + SovietAirfield5, SovietAirfield6, SovietAirfield7, SovietAirfield8 +} + +MountainEntry = +{ + MountainEntry1.Location, MountainEntry2.Location, MountainEntry3.Location, MountainEntry4.Location, + MountainEntry5.Location, MountainEntry6.Location, MountainEntry7.Location, MountainEntry8.Location +} + +BridgeEntry = +{ + BridgeEntry1.Location, BridgeEntry2.Location, BridgeEntry3.Location, BridgeEntry4.Location +} + +MobileConstructionVehicle = { "mcv" } +Yak = { "yak" } + +ReinforcementsTicks1 = DateTime.Minutes(5) +Reinforcements1 = +{ + "mgg", "2tnk", "2tnk", "2tnk", "2tnk", "1tnk", "1tnk", + "jeep", "jeep", "e1", "e1", "e1", "e1", "e3", "e3" +} + +ReinforcementsTicks2 = DateTime.Minutes(10) +Reinforcements2 = +{ + "mgg", "2tnk", "2tnk", "2tnk", "2tnk", "truk", "truk", "truk", + "truk", "truk", "truk", "1tnk", "1tnk", "jeep", "jeep" +} + +SovietUnits1 = +{ + "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "v2rl", "v2rl", "ftrk", + "apc", "e1", "e1", "e2", "e3", "e3", "e4" +} + +SovietUnits2 = +{ + "4tnk", "4tnk", "4tnk", "4tnk", "3tnk", "3tnk", "3tnk", "3tnk", "v2rl", + "v2rl", "ftrk", "apc", "e1", "e1", "e2", "e3", "e3", "e4" +} + +CurrentReinforcement1 = 0 +CurrentReinforcement2 = 0 +SpawnAlliedUnit = function(units) + Reinforcements.Reinforce(allies1, units, { Allies1EntryPoint.Location, Allies1MovePoint.Location }) + + if allies2 then + Reinforcements.Reinforce(allies2, units, { Allies2EntryPoint.Location, Allies2MovePoint.Location }) + end + + Utils.Do(humans, function(player) + Trigger.AfterDelay(DateTime.Seconds(2), function() + Media.PlaySpeechNotification(player, "AlliedReinforcementsNorth") + end) + end) + + if CurrentReinforcement1 < #Reinforcements1 then + CurrentReinforcement1 = CurrentReinforcement1 + 1 + Trigger.AfterDelay(ReinforcementsTicks1, function() + reinforcements1 = { Reinforcements1[CurrentReinforcement1] } + SpawnAlliedUnit(reinforcements1) + end) + end + + if CurrentReinforcement2 < #Reinforcements2 then + CurrentReinforcement2 = CurrentReinforcement2 + 1 + Trigger.AfterDelay(ReinforcementsTicks2, function() + reinforcements2 = { Reinforcements2[CurrentReinforcement2] } + SpawnAlliedUnit(reinforcements2) + end) + end +end + +SovietGroupSize = 5 +SpawnSovietUnits = function() + + local units = SovietUnits1 + if DateTime.GameTime >= SovietUnits2Ticks[Difficulty] then + units = SovietUnits2 + end + + local unitType = Utils.Random(units) + local spawnPoint = Utils.Random(SovietEntryPoints) + local rallyPoint = Utils.Random(SovietRallyPoints) + local actor = Actor.Create(unitType, true, { Owner = soviets, Location = spawnPoint.Location }) + actor.AttackMove(rallyPoint.Location) + IdleHunt(actor) + + local delay = math.max(attackAtFrame - 5, minAttackAtFrame) + Trigger.AfterDelay(delay, SpawnSovietUnits) +end + +SovietParadrop = 0 +SendSovietParadrop = function() + local sovietParadrops = SovietParadrops[Difficulty] + + if (SovietParadrop > sovietParadrops) then + return + end + + SovietParadrop = SovietParadrop + 1 + + Utils.Do(humans, function(player) + Media.PlaySpeechNotification(player, "SovietForcesApproaching") + end) + + local x = Utils.RandomInteger(ParadropBoxTopLeft.Location.X, ParadropBoxBottomRight.Location.X) + local y = Utils.RandomInteger(ParadropBoxBottomRight.Location.Y, ParadropBoxTopLeft.Location.Y) + + local randomParadropCell = CPos.New(x, y) + local lz = Map.CenterOfCell(randomParadropCell) + + local powerproxy = Actor.Create("powerproxy.paratroopers", false, { Owner = soviets }) + powerproxy.SendParatroopers(lz) + powerproxy.Destroy() + + Trigger.AfterDelay(sovietParadropTicks, SendSovietParadrop) +end + +IdleHunt = function(unit) + Trigger.OnIdle(unit, unit.Hunt) + Trigger.OnCapture(unit, function() + Trigger.ClearAll(unit) + end) +end + +AircraftTargets = function(yak) + local targets = Utils.Where(Map.ActorsInWorld, function(a) + return (a.Owner == allies1 or a.Owner == allies2) and a.HasProperty("Health") and yak.CanTarget(a) + end) + + -- Prefer mobile units + table.sort(targets, function(a, b) return a.HasProperty("Move") and not b.HasProperty("Move") end) + + return targets +end + +YakAttack = function(yak, target) + if not target or target.IsDead or (not target.IsInWorld) or (not yak.CanTarget(target)) then + local targets = AircraftTargets(yak) + if #targets > 0 then + target = Utils.Random(targets) + end + end + + if target and yak.AmmoCount() > 0 and yak.CanTarget(target) then + yak.Attack(target) + else + -- Includes yak.Resupply() + yak.ReturnToBase() + end + + yak.CallFunc(function() + YakAttack(yak, target) + end) +end + +ManageSovietAircraft = function() + if allies1.IsObjectiveCompleted(destroyAirbases) then + return + end + + local maxSovietYaks = MaxSovietYaks[Difficulty] + local sovietYaks = soviets.GetActorsByType('yak') + if #sovietYaks < maxSovietYaks then + soviets.Build(Yak, function(units) + local yak = units[1] + YakAttack(yak) + end) + end +end + +UnitsEvacuated = 0 +EvacuateAlliedUnit = function(unit) + if (unit.Owner == allies1 or unit.Owner == allies2) and unit.HasProperty("Move") then + unit.Stop() + unit.Owner = allies + + if unit.Type == 'mgg' then + Utils.Do(humans, function(player) + if player then + player.MarkCompletedObjective(evacuateMgg) + end + end) + end + + UnitsEvacuated = UnitsEvacuated + 1 + if unit.HasProperty("HasPassengers") then + UnitsEvacuated = UnitsEvacuated + unit.PassengerCount + end + + local exitCell = Map.ClosestEdgeCell(unit.Location) + Trigger.OnIdle(unit, function() + unit.ScriptedMove(exitCell) + end) + + local exit = Map.CenterOfCell(exitCell) + Trigger.OnEnteredProximityTrigger(exit, WDist.FromCells(1), function(a) + a.Destroy() + end) + + UserInterface.SetMissionText(UnitsEvacuated .. "/" .. unitsEvacuatedThreshold .. " units evacuated.", TextColor) + + if UnitsEvacuated >= unitsEvacuatedThreshold then + Utils.Do(humans, function(player) + if player then + player.MarkCompletedObjective(evacuateUnits) + end + end) + end + end +end + +Tick = function() + if DateTime.GameTime % 100 == 0 then + ManageSovietAircraft() + + Utils.Do(humans, function(player) + if player and player.HasNoRequiredUnits() then + soviets.MarkCompletedObjective(sovietObjective) + end + end) + end +end + +WorldLoaded = function() + -- NPC + neutral = Player.GetPlayer("Neutral") + allies = Player.GetPlayer("Allies") + soviets = Player.GetPlayer("Soviets") + + -- Player controlled + allies1 = Player.GetPlayer("Allies1") + allies2 = Player.GetPlayer("Allies2") + + humans = { allies1, allies2 } + Utils.Do(humans, function(player) + if player and player.IsLocalPlayer then + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + + TextColor = player.Color + end + end) + + unitsEvacuatedThreshold = UnitsEvacuatedThreshold[Difficulty] + UserInterface.SetMissionText(UnitsEvacuated .. "/" .. unitsEvacuatedThreshold .. " units evacuated.", TextColor) + Utils.Do(humans, function(player) + if player then + evacuateUnits = player.AddPrimaryObjective("Evacuate " .. unitsEvacuatedThreshold .. " units.") + destroyAirbases = player.AddSecondaryObjective("Destroy the nearby Soviet airbases.") + evacuateMgg = player.AddSecondaryObjective("Evacuate at least one mobile gap generator.") + end + end) + + Trigger.OnAllKilledOrCaptured(SovietAirfields, function() + Utils.Do(humans, function(player) + if player then + player.MarkCompletedObjective(destroyAirbases) + end + end) + end) + + sovietObjective = soviets.AddPrimaryObjective("Eradicate all allied troops.") + + if not allies2 or allies1.IsLocalPlayer then + Camera.Position = Allies1EntryPoint.CenterPosition + else + Camera.Position = Allies2EntryPoint.CenterPosition + end + + if not allies2 then + allies1.Cash = 10000 + Media.DisplayMessage("Transferring funds.", "Co-Commander is missing") + end + + SpawnAlliedUnit(MobileConstructionVehicle) + + minAttackAtFrame = MinAttackAtFrame[Difficulty] + attackAtFrame = AttackAtFrame[Difficulty] + Trigger.AfterDelay(attackAtFrame, SpawnSovietUnits) + + sovietParadropTicks = SovietParadropTicks[Difficulty] + Trigger.AfterDelay(sovietParadropTicks, SendSovietParadrop) + + Trigger.OnEnteredFootprint(MountainEntry, EvacuateAlliedUnit) + Trigger.OnEnteredFootprint(BridgeEntry, EvacuateAlliedUnit) +end diff --git a/mods/ura/maps/exodus/map.bin b/mods/ura/maps/exodus/map.bin new file mode 100644 index 0000000..1889cec Binary files /dev/null and b/mods/ura/maps/exodus/map.bin differ diff --git a/mods/ura/maps/exodus/map.png b/mods/ura/maps/exodus/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/exodus/map.png differ diff --git a/mods/ura/maps/exodus/map.yaml b/mods/ura/maps/exodus/map.yaml new file mode 100644 index 0000000..585ae88 --- /dev/null +++ b/mods/ura/maps/exodus/map.yaml @@ -0,0 +1,1429 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Exodus + +Author: Scott_NZ + +Tileset: SNOW + +MapSize: 192,96 + +Bounds: 16,16,160,64 + +Visibility: Lobby, MissionSelector + +Categories: Mission, Cooperative Mission + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Allies1: + Name: Allies1 + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: ABB7E4 + LockSpawn: True + LockTeam: True + Allies: Allies2, Allies + Enemies: Soviets + PlayerReference@Allies2: + Name: Allies2 + AllowBots: False + Playable: True + LockFaction: True + Faction: allies + LockColor: True + Color: A1EF8C + LockSpawn: True + LockTeam: True + Allies: Allies1, Allies + Enemies: Soviets + PlayerReference@Allies: + Name: Allies + Faction: allies + Color: 5CC1A3 + Allies: Allies1, Allies2 + Enemies: Soviets + PlayerReference@Soviets: + Name: Soviets + Faction: soviet + Color: FE1100 + Enemies: Allies1, Allies2 + +Actors: + Actor239: dog + Location: 169,60 + Owner: Soviets + Actor12: t08 + Location: 163,57 + Owner: Neutral + Actor14: t14 + Location: 148,59 + Owner: Neutral + Actor25: t07 + Location: 142,77 + Owner: Neutral + Actor29: t07 + Location: 165,78 + Owner: Neutral + Actor21: mine + Location: 169,71 + Owner: Neutral + Actor23: t08 + Location: 124,40 + Owner: Neutral + Actor10: tc04 + Location: 43,67 + Owner: Neutral + Actor28: t02 + Location: 151,51 + Owner: Neutral + Actor34: t17 + Location: 148,52 + Owner: Neutral + Actor36: tc04 + Location: 172,46 + Owner: Neutral + Actor37: t02 + Location: 169,46 + Owner: Neutral + Actor39: t02 + Location: 148,45 + Owner: Neutral + Actor42: t10 + Location: 151,47 + Owner: Neutral + Actor9: tc04 + Location: 33,41 + Owner: Neutral + Actor52: t05 + Location: 163,47 + Owner: Neutral + Actor53: tc03 + Location: 138,53 + Owner: Neutral + SovietAirfield5: afld + Location: 62,47 + Owner: Soviets + Actor57: tc04 + Location: 43,19 + Owner: Neutral + Actor58: tc04 + Location: 56,18 + Owner: Neutral + Actor59: tc04 + Location: 69,28 + Owner: Neutral + Actor60: tc05 + Location: 63,19 + Owner: Neutral + Actor61: tc05 + Location: 48,19 + Owner: Neutral + Actor62: tc05 + Location: 37,18 + Owner: Neutral + Actor63: tc05 + Location: 78,14 + Owner: Neutral + Actor64: tc03 + Location: 70,19 + Owner: Neutral + Actor65: tc03 + Location: 55,26 + Owner: Neutral + Actor66: tc03 + Location: 45,24 + Owner: Neutral + Actor67: tc03 + Location: 38,23 + Owner: Neutral + Actor68: tc02 + Location: 39,21 + Owner: Neutral + Actor69: tc02 + Location: 42,16 + Owner: Neutral + Actor70: tc02 + Location: 50,16 + Owner: Neutral + Actor71: tc02 + Location: 51,22 + Owner: Neutral + Actor72: tc02 + Location: 64,29 + Owner: Neutral + Actor73: tc02 + Location: 67,24 + Owner: Neutral + Actor74: tc02 + Location: 74,17 + Owner: Neutral + Actor75: tc01 + Location: 61,16 + Owner: Neutral + Actor76: tc01 + Location: 57,22 + Owner: Neutral + Actor77: tc01 + Location: 48,23 + Owner: Neutral + Actor78: tc01 + Location: 38,26 + Owner: Neutral + Actor79: t05 + Location: 38,20 + Owner: Neutral + Actor80: t05 + Location: 42,17 + Owner: Neutral + Actor81: t05 + Location: 47,20 + Owner: Neutral + Actor82: t05 + Location: 53,25 + Owner: Neutral + Actor83: t05 + Location: 57,16 + Owner: Neutral + Actor84: t05 + Location: 56,22 + Owner: Neutral + Actor85: t05 + Location: 64,27 + Owner: Neutral + Actor86: t05 + Location: 70,22 + Owner: Neutral + Actor87: t05 + Location: 68,15 + Owner: Neutral + Actor88: t05 + Location: 81,18 + Owner: Neutral + Actor89: t16 + Location: 79,18 + Owner: Neutral + Actor90: t16 + Location: 68,16 + Owner: Neutral + Actor91: t16 + Location: 67,22 + Owner: Neutral + Actor92: t16 + Location: 53,16 + Owner: Neutral + Actor93: t16 + Location: 51,23 + Owner: Neutral + Actor94: t16 + Location: 47,16 + Owner: Neutral + Actor95: t16 + Location: 42,27 + Owner: Neutral + Actor96: t16 + Location: 38,16 + Owner: Neutral + Actor97: t16 + Location: 34,20 + Owner: Neutral + Actor98: t02 + Location: 54,19 + Owner: Neutral + Actor99: t02 + Location: 64,24 + Owner: Neutral + Actor100: t02 + Location: 48,26 + Owner: Neutral + Actor101: t02 + Location: 42,18 + Owner: Neutral + Actor102: t02 + Location: 37,16 + Owner: Neutral + Actor103: t06 + Location: 42,24 + Owner: Neutral + Actor104: t06 + Location: 45,21 + Owner: Neutral + Actor105: t06 + Location: 58,16 + Owner: Neutral + Actor106: t06 + Location: 59,28 + Owner: Neutral + Actor107: t06 + Location: 63,24 + Owner: Neutral + Actor108: t06 + Location: 67,29 + Owner: Neutral + Actor109: t10 + Location: 66,17 + Owner: Neutral + Actor110: t10 + Location: 65,28 + Owner: Neutral + Actor111: t10 + Location: 54,22 + Owner: Neutral + Actor112: t11 + Location: 40,23 + Owner: Neutral + Actor113: t11 + Location: 52,26 + Owner: Neutral + Actor114: t11 + Location: 69,20 + Owner: Neutral + Actor115: t12 + Location: 68,30 + Owner: Neutral + Actor116: t12 + Location: 60,20 + Owner: Neutral + Actor117: t17 + Location: 44,17 + Owner: Neutral + Actor118: t17 + Location: 36,19 + Owner: Neutral + Actor119: t08 + Location: 52,20 + Owner: Neutral + Actor120: t08 + Location: 70,27 + Owner: Neutral + Actor121: t08 + Location: 48,16 + Owner: Neutral + Actor123: tc03 + Location: 17,25 + Owner: Neutral + SovietAirfield4: afld + Location: 151,67 + Owner: Soviets + Actor127: t05 + Location: 17,21 + Owner: Neutral + Actor48: fenc + Location: 29,27 + Owner: Allies + Actor130: t02 + Location: 28,16 + Owner: Neutral + Actor131: t06 + Location: 48,32 + Owner: Neutral + Actor132: t02 + Location: 30,35 + Owner: Neutral + Actor133: t03 + Location: 28,34 + Owner: Neutral + Actor134: t17 + Location: 55,31 + Owner: Neutral + Actor135: t03 + Location: 60,37 + Owner: Neutral + Actor136: t11 + Location: 64,38 + Owner: Neutral + Actor137: t10 + Location: 65,33 + Owner: Neutral + Actor140: tc05 + Location: 163,42 + Owner: Neutral + Actor51: t01 + Location: 48,62 + Owner: Neutral + Actor142: t05 + Location: 175,43 + Owner: Neutral + Actor143: t02 + Location: 173,41 + Owner: Neutral + Actor20: mine + Location: 158,26 + Owner: Neutral + Actor147: t10 + Location: 139,41 + Owner: Neutral + Actor148: t13 + Location: 129,40 + Owner: Neutral + Actor149: t17 + Location: 134,47 + Owner: Neutral + Actor156: t05 + Location: 139,44 + Owner: Neutral + Actor150: t05 + Location: 146,37 + Owner: Neutral + Actor162: t06 + Location: 126,37 + Owner: Neutral + Actor178: t16 + Location: 137,77 + Owner: Neutral + Actor370: tc02 + Location: 25,65 + Owner: Neutral + Actor165: tc03 + Location: 157,77 + Owner: Neutral + Actor181: t13 + Location: 137,71 + Owner: Neutral + Actor182: t16 + Location: 135,57 + Owner: Neutral + Actor184: tc01 + Location: 124,38 + Owner: Neutral + Actor363: t12 + Location: 81,50 + Owner: Neutral + Actor345: t08 + Location: 90,23 + Owner: Neutral + Actor364: t12 + Location: 83,27 + Owner: Neutral + Actor346: t08 + Location: 107,28 + Owner: Neutral + Actor153: apwr + Location: 55,43 + Owner: Soviets + Actor298: t06 + Location: 72,50 + Owner: Neutral + Actor30: t01 + Location: 173,61 + Owner: Neutral + Actor224: ftur + Location: 66,60 + Owner: Soviets + Actor203: t16 + Location: 54,41 + Owner: Neutral + Actor338: tc04 + Location: 28,76 + Owner: Neutral + Actor1: tc02 + Location: 95,73 + Owner: Neutral + Actor333: t07 + Location: 133,36 + Owner: Neutral + Actor238: t01 + Location: 111,60 + Owner: Neutral + Actor283: t05 + Location: 102,59 + Owner: Neutral + SovietAirfield6: afld + Location: 62,53 + Owner: Soviets + Actor284: t05 + Location: 82,70 + Owner: Neutral + Actor369: tc02 + Location: 30,60 + Owner: Neutral + Actor289: t05 + Location: 71,33 + Owner: Neutral + Actor157: tc05 + Location: 23,39 + Owner: Neutral + Actor226: tc01 + Location: 98,24 + Owner: Neutral + Actor194: tc05 + Location: 103,62 + Owner: Neutral + Actor371: tc02 + Location: 37,77 + Owner: Neutral + Actor367: tc03 + Location: 35,71 + Owner: Neutral + Actor236: ftur + Location: 62,61 + Owner: Soviets + Actor302: t06 + Location: 71,73 + Owner: Neutral + Actor329: t07 + Location: 97,28 + Owner: Neutral + Actor331: t07 + Location: 124,48 + Owner: Neutral + Actor296: t05 + Location: 63,63 + Owner: Neutral + Actor155: tc04 + Location: 18,37 + Owner: Neutral + Actor279: t03 + Location: 72,32 + Owner: Neutral + Actor274: t03 + Location: 71,78 + Owner: Neutral + Actor280: t03 + Location: 121,19 + Owner: Neutral + Actor315: t06 + Location: 88,17 + Owner: Neutral + Actor312: t06 + Location: 110,24 + Owner: Neutral + Actor314: t06 + Location: 125,20 + Owner: Neutral + Actor307: t06 + Location: 119,50 + Owner: Neutral + Actor310: t06 + Location: 80,41 + Owner: Neutral + Actor323: t07 + Location: 113,76 + Owner: Neutral + Actor322: t07 + Location: 112,65 + Owner: Neutral + Actor246: t06 + Location: 94,64 + Owner: Neutral + Actor303: t06 + Location: 101,69 + Owner: Neutral + Actor234: t01 + Location: 79,77 + Owner: Neutral + Actor354: t11 + Location: 73,71 + Owner: Neutral + Actor212: barr + Location: 69,57 + Owner: Soviets + Actor365: tc04 + Location: 18,56 + Owner: Neutral + Actor196: t06 + Location: 129,52 + Owner: Neutral + Actor356: t11 + Location: 119,43 + Owner: Neutral + Actor360: t11 + Location: 122,76 + Owner: Neutral + Actor187: tc04 + Location: 99,27 + Owner: Neutral + Actor186: tc04 + Location: 79,34 + Owner: Neutral + Actor179: tc05 + Location: 59,43 + Owner: Neutral + Actor350: t10 + Location: 87,22 + Owner: Neutral + Actor17: proc + Location: 168,62 + Owner: Soviets + Actor291: t05 + Location: 91,33 + Owner: Neutral + Actor254: t02 + Location: 72,63 + Owner: Neutral + Actor43: t05 + Location: 58,62 + Owner: Neutral + Actor257: t02 + Location: 119,53 + Owner: Neutral + Actor8: e1 + Location: 26,46 + Owner: Allies + Actor264: t02 + Location: 127,17 + Owner: Neutral + Actor269: t03 + Location: 84,37 + Owner: Neutral + Actor271: t03 + Location: 79,57 + Owner: Neutral + SovietEntryPoint4: waypoint + Location: 115,16 + Owner: Neutral + Actor278: t03 + Location: 122,33 + Owner: Neutral + Actor221: tc01 + Location: 113,73 + Owner: Neutral + Actor215: t05 + Location: 72,40 + Owner: Neutral + Actor267: t02 + Location: 123,62 + Owner: Neutral + Actor253: t02 + Location: 118,77 + Owner: Neutral + Actor220: tc01 + Location: 117,40 + Owner: Neutral + Actor158: tc01 + Location: 23,35 + Owner: Neutral + Actor160: t06 + Location: 21,40 + Owner: Neutral + Actor164: t16 + Location: 18,41 + Owner: Neutral + Actor163: t05 + Location: 20,35 + Owner: Neutral + Actor211: tc02 + Location: 75,74 + Owner: Neutral + Actor174: apwr + Location: 58,45 + Owner: Soviets + Actor214: tc02 + Location: 79,47 + Owner: Neutral + Actor38: t15 + Location: 30,52 + Owner: Neutral + Actor407: t13 + Location: 32,62 + Owner: Neutral + Actor139: t01 + Location: 111,35 + Owner: Neutral + Actor410: t15 + Location: 17,55 + Owner: Neutral + Actor141: t14 + Location: 36,56 + Owner: Neutral + Actor386: t07 + Location: 30,62 + Owner: Neutral + Actor2: tc05 + Location: 153,77 + Owner: Neutral + Actor54: t01 + Location: 56,76 + Owner: Neutral + Actor391: t06 + Location: 25,75 + Owner: Neutral + Actor403: t01 + Location: 34,74 + Owner: Neutral + Actor402: t02 + Location: 21,65 + Owner: Neutral + Actor175: tc01 + Location: 62,44 + Owner: Neutral + Actor375: tc01 + Location: 20,61 + Owner: Neutral + Actor712: t07 + Location: 170,34 + Owner: Neutral + Actor0: mine + Location: 160,27 + Owner: Neutral + Actor385: t07 + Location: 17,58 + Owner: Neutral + Actor401: t02 + Location: 30,74 + Owner: Neutral + Actor400: t05 + Location: 32,69 + Owner: Neutral + Actor382: t16 + Location: 27,60 + Owner: Neutral + Actor374: tc01 + Location: 34,68 + Owner: Neutral + Actor376: tc01 + Location: 16,65 + Owner: Neutral + Actor409: t15 + Location: 24,67 + Owner: Neutral + Actor405: t03 + Location: 24,58 + Owner: Neutral + Actor373: tc01 + Location: 25,68 + Owner: Neutral + Actor406: t13 + Location: 35,72 + Owner: Neutral + Actor55: t01 + Location: 37,37 + Owner: Neutral + Actor760: t03 + Location: 175,27 + Owner: Neutral + Actor399: t05 + Location: 22,68 + Owner: Neutral + Actor408: t14 + Location: 20,59 + Owner: Neutral + Actor390: t07 + Location: 18,72 + Owner: Neutral + Actor767: t10 + Location: 158,15 + Owner: Neutral + Actor381: t16 + Location: 23,65 + Owner: Neutral + Actor775: t02 + Location: 171,15 + Owner: Neutral + Actor392: t06 + Location: 31,70 + Owner: Neutral + Actor366: tc03 + Location: 17,68 + Owner: Neutral + Actor368: tc03 + Location: 25,56 + Owner: Neutral + Actor780: t03 + Location: 79,39 + Owner: Neutral + Actor398: t05 + Location: 32,64 + Owner: Neutral + Actor796: t02 + Location: 154,40 + Owner: Neutral + SovietAirfield3: afld + Location: 154,67 + Owner: Soviets + Actor383: t16 + Location: 22,52 + Owner: Neutral + Actor372: tc02 + Location: 20,77 + Owner: Neutral + SovietEntryPoint5: waypoint + Location: 130,79 + Owner: Neutral + Actor804: t13 + Location: 125,68 + Owner: Neutral + SovietAirfield8: afld + Location: 62,51 + Owner: Soviets + Actor268: t03 + Location: 95,23 + Owner: Neutral + Actor812: tc03 + Location: 133,25 + Owner: Neutral + Actor818: t16 + Location: 138,15 + Owner: Neutral + Actor819: t16 + Location: 139,29 + Owner: Neutral + Actor820: t02 + Location: 147,16 + Owner: Neutral + Actor396: t05 + Location: 27,70 + Owner: Neutral + Actor387: t07 + Location: 22,63 + Owner: Neutral + Actor393: t06 + Location: 25,61 + Owner: Neutral + Actor32: t05 + Location: 42,40 + Owner: Neutral + Actor378: t16 + Location: 26,73 + Owner: Neutral + Actor31: t05 + Location: 53,51 + Owner: Neutral + Actor395: t06 + Location: 35,78 + Owner: Neutral + Actor826: t01 + Location: 136,15 + Owner: Neutral + Actor827: t01 + Location: 142,24 + Owner: Neutral + Actor829: t03 + Location: 146,15 + Owner: Neutral + Actor379: t16 + Location: 37,74 + Owner: Neutral + Actor411: t15 + Location: 31,77 + Owner: Neutral + Actor397: t05 + Location: 21,58 + Owner: Neutral + Actor394: t06 + Location: 18,52 + Owner: Neutral + Actor13: tc02 + Location: 38,61 + Owner: Neutral + Actor27: t05 + Location: 41,55 + Owner: Neutral + Actor377: t16 + Location: 16,78 + Owner: Neutral + Actor380: t16 + Location: 31,66 + Owner: Neutral + Actor845: t14 + Location: 136,21 + Owner: Neutral + Actor16: tc02 + Location: 52,39 + Owner: Neutral + Actor404: t03 + Location: 24,71 + Owner: Neutral + Actor389: t07 + Location: 25,71 + Owner: Neutral + Actor388: t07 + Location: 37,68 + Owner: Neutral + Actor412: t15 + Location: 28,73 + Owner: Neutral + Actor384: t07 + Location: 22,67 + Owner: Neutral + Actor26: t05 + Location: 45,72 + Owner: Neutral + Actor856: t16 + Location: 133,23 + Owner: Neutral + Actor15: tc04 + Location: 144,73 + Owner: Neutral + Actor861: t16 + Location: 128,62 + Owner: Neutral + Actor7: e1 + Location: 27,50 + Owner: Allies + Actor5: gun + Location: 28,51 + Owner: Allies + Actor6: gun + Location: 28,44 + Owner: Allies + Actor47: powr + Location: 3,37 + Owner: Allies + Actor45: 2tnk + Location: 28,28 + Owner: Allies + Actor35: gun + Location: 29,29 + Owner: Allies + Actor24: gun + Location: 25,30 + Owner: Allies + Actor41: e1 + Location: 30,28 + Owner: Allies + Actor4: jeep + Location: 27,45 + Owner: Allies + Actor40: e1 + Location: 24,30 + Owner: Allies + Actor46: powr + Location: 1,37 + Owner: Allies + Actor49: fenc + Location: 28,27 + Owner: Allies + Actor50: fenc + Location: 27,27 + Owner: Allies + Actor122: fenc + Location: 30,27 + Owner: Allies + Actor124: fenc + Location: 31,27 + Owner: Allies + Actor125: fenc + Location: 32,27 + Owner: Allies + Actor126: fenc + Location: 32,25 + Owner: Allies + Actor128: fenc + Location: 32,26 + Owner: Allies + Actor129: fenc + Location: 33,25 + Owner: Allies + Actor145: fenc + Location: 34,25 + Owner: Allies + Actor146: fenc + Location: 35,25 + Owner: Allies + Allies1MovePoint: waypoint + Location: 149,24 + Owner: Neutral + Allies1EntryPoint: waypoint + Location: 149,16 + Owner: Neutral + Allies2EntryPoint: waypoint + Location: 175,38 + Owner: Neutral + Actor255: ftur + Location: 68,45 + Owner: Soviets + SovietEntryPoint3: waypoint + Location: 105,79 + Owner: Neutral + SovietEntryPoint2: waypoint + Location: 93,16 + Owner: Neutral + SovietEntryPoint1: waypoint + Location: 89,79 + Owner: Neutral + SovietRallyPoint2: waypoint + Location: 93,20 + Owner: Neutral + SovietRallyPoint1: waypoint + Location: 89,75 + Owner: Neutral + SovietRallyPoint3: waypoint + Location: 105,75 + Owner: Neutral + SovietRallyPoint4: waypoint + Location: 115,20 + Owner: Neutral + SovietRallyPoint5: waypoint + Location: 130,75 + Owner: Neutral + Actor152: brl3 + Location: 157,66 + Owner: Soviets + Actor151: barl + Location: 159,58 + Owner: Soviets + Actor138: brl3 + Location: 154,58 + Owner: Soviets + Actor144: brl3 + Location: 159,59 + Owner: Soviets + Actor19: oilb + Location: 154,59 + Owner: Soviets + Actor22: oilb + Location: 157,57 + Owner: Soviets + Actor154: oilb + Location: 169,18 + Owner: Neutral + Actor159: oilb + Location: 172,22 + Owner: Neutral + Actor166: brl3 + Location: 171,18 + Owner: Neutral + Actor167: barl + Location: 173,24 + Owner: Neutral + Actor168: powr + Location: 1,34 + Owner: Allies + Actor183: powr + Location: 3,34 + Owner: Allies + Actor185: apwr + Location: 154,72 + Owner: Soviets + Actor190: ftur + Location: 160,53 + Owner: Soviets + Actor227: e3 + Location: 157,54 + Owner: Soviets + Actor225: e3 + Location: 148,68 + Owner: Soviets + Actor223: e1 + Location: 163,55 + Owner: Soviets + Actor209: fenc + Location: 156,52 + Owner: Soviets + Actor200: e1 + Location: 171,61 + Owner: Soviets + Actor201: e2 + Location: 165,64 + Owner: Soviets + Actor222: e2 + Location: 154,53 + Owner: Soviets + Actor216: fenc + Location: 154,52 + Owner: Soviets + Actor217: fenc + Location: 153,52 + Owner: Soviets + Actor219: fenc + Location: 152,52 + Owner: Soviets + Actor210: fenc + Location: 155,52 + Owner: Soviets + Actor188: brl3 + Location: 160,54 + Owner: Soviets + Actor189: ftur + Location: 147,64 + Owner: Soviets + Actor191: barl + Location: 160,55 + Owner: Soviets + SovietAirfield1: afld + Location: 151,69 + Owner: Soviets + SovietAirfield2: afld + Location: 154,69 + Owner: Soviets + Actor228: e3 + Location: 158,66 + Owner: Soviets + Actor241: barl + Location: 157,67 + Owner: Soviets + Actor242: barr + Location: 159,61 + Owner: Soviets + Actor56: tc01 + Location: 145,71 + Owner: Neutral + Actor237: dog + Location: 151,62 + Owner: Soviets + Actor11: e1 + Location: 149,64 + Owner: Soviets + Actor192: fenc + Location: 147,65 + Owner: Soviets + Actor244: e1 + Location: 160,60 + Owner: Soviets + Actor206: fenc + Location: 158,53 + Owner: Soviets + Actor18: apwr + Location: 149,72 + Owner: Soviets + Actor230: 3tnk + Location: 157,60 + Owner: Soviets + Actor231: kenn + Location: 162,59 + Owner: Soviets + Actor235: waypoint + Location: 147,51 + Owner: Neutral + Actor205: fenc + Location: 159,53 + Owner: Soviets + Actor207: fenc + Location: 158,52 + Owner: Soviets + Actor208: fenc + Location: 157,52 + Owner: Soviets + Actor204: fenc + Location: 147,70 + Owner: Soviets + Actor193: fenc + Location: 147,66 + Owner: Soviets + Actor195: fenc + Location: 147,67 + Owner: Soviets + Actor197: fenc + Location: 146,67 + Owner: Soviets + Actor199: fenc + Location: 146,69 + Owner: Soviets + Actor198: fenc + Location: 146,68 + Owner: Soviets + Actor202: fenc + Location: 147,69 + Owner: Soviets + Actor292: e2 + Location: 165,59 + Owner: Soviets + Actor232: t01 + Location: 72,43 + Owner: Neutral + Actor176: tc05 + Location: 69,46 + Owner: Neutral + Actor170: mine + Location: 114,55 + Owner: Neutral + Actor169: mine + Location: 113,57 + Owner: Neutral + Allies2MovePoint: waypoint + Location: 167,38 + Owner: Neutral + Actor3: silo + Location: 172,59 + Owner: Soviets + Actor33: fact + Location: 162,67 + Owner: Soviets + SovietEntryPoint6: waypoint + Location: 53,79 + Owner: Neutral + SovietRallyPoint6: waypoint + Location: 53,75 + Owner: Neutral + Actor171: mine + Location: 168,73 + Owner: Neutral + Actor248: ftur + Location: 64,44 + Owner: Soviets + SovietAirfield7: afld + Location: 62,49 + Owner: Soviets + Actor256: ftur + Location: 74,57 + Owner: Soviets + Actor273: brik + Location: 72,61 + Owner: Soviets + Actor44: t11 + Location: 57,54 + Owner: Neutral + Actor249: t11 + Location: 98,58 + Owner: Neutral + Actor245: tc05 + Location: 106,43 + Owner: Neutral + Actor233: ftur + Location: 75,54 + Owner: Soviets + Actor287: brik + Location: 72,60 + Owner: Soviets + Actor258: brik + Location: 71,61 + Owner: Soviets + Actor293: brik + Location: 70,61 + Owner: Soviets + Actor177: tc04 + Location: 59,50 + Owner: Neutral + Actor294: brik + Location: 72,59 + Owner: Soviets + Actor213: tsla + Location: 71,59 + Owner: Soviets + Actor295: brik + Location: 73,59 + Owner: Soviets + Actor180: v01 + Location: 100,29 + Owner: Neutral + Actor218: v03 + Location: 90,30 + Owner: Neutral + Actor243: v02 + Location: 95,30 + Owner: Neutral + Actor247: v04 + Location: 102,30 + Owner: Neutral + Actor250: v07 + Location: 104,33 + Owner: Neutral + Actor252: v13 + Location: 101,33 + Owner: Neutral + Actor251: truk + Location: 105,30 + Owner: Neutral + Actor259: v18 + Location: 105,28 + Owner: Neutral + Actor260: v09 + Location: 110,30 + Owner: Neutral + Actor261: v08 + Location: 109,33 + Owner: Neutral + Actor262: v17 + Location: 104,28 + Owner: Neutral + Actor263: e1 + Location: 108,34 + Owner: Soviets + Actor265: e1 + Location: 97,30 + Owner: Soviets + Actor266: e1 + Location: 92,34 + Owner: Soviets + Actor270: e2 + Location: 102,33 + Owner: Soviets + Actor272: e3 + Location: 94,30 + Owner: Soviets + Actor275: e3 + Location: 100,31 + Owner: Soviets + Actor276: 3tnk + Location: 107,30 + Owner: Soviets + Actor277: dome + Location: 165,56 + Owner: Soviets + Actor281: ftur + Location: 166,51 + Owner: Soviets + Actor282: ftur + Location: 147,58 + Owner: Soviets + Actor286: t12 + Location: 154,65 + Owner: Neutral + Actor285: t05 + Location: 148,76 + Owner: Neutral + Actor288: tc02 + Location: 168,51 + Owner: Neutral + Actor240: mine + Location: 159,27 + Owner: Neutral + Actor290: mine + Location: 159,26 + Owner: Neutral + Actor297: brik + Location: 69,61 + Owner: Soviets + Actor299: brik + Location: 73,58 + Owner: Soviets + Actor300: brik + Location: 69,60 + Owner: Soviets + Actor301: brik + Location: 68,60 + Owner: Soviets + Actor304: e1 + Location: 63,59 + Owner: Soviets + Actor305: e1 + Location: 71,56 + Owner: Soviets + Actor306: e1 + Location: 66,46 + Owner: Soviets + Actor308: e2 + Location: 63,57 + Owner: Soviets + Actor309: e2 + Location: 69,51 + Owner: Soviets + Actor311: e1 + Location: 68,58 + Owner: Soviets + Actor313: e1 + Location: 63,46 + Owner: Soviets + Actor316: oilb + Location: 91,50 + Owner: Soviets + Actor317: oilb + Location: 91,53 + Owner: Soviets + Actor318: oilb + Location: 94,50 + Owner: Soviets + Actor319: oilb + Location: 94,53 + Owner: Soviets + Actor320: sbag + Location: 91,56 + Owner: Soviets + Actor321: sbag + Location: 93,56 + Owner: Soviets + Actor324: sbag + Location: 94,56 + Owner: Soviets + Actor325: sbag + Location: 95,56 + Owner: Soviets + Actor326: sbag + Location: 96,56 + Owner: Soviets + Actor327: sbag + Location: 92,56 + Owner: Soviets + Actor328: sbag + Location: 97,56 + Owner: Soviets + Actor330: sbag + Location: 97,55 + Owner: Soviets + Actor332: sbag + Location: 97,54 + Owner: Soviets + Actor334: sbag + Location: 97,53 + Owner: Soviets + Actor335: sbag + Location: 97,52 + Owner: Soviets + Actor336: sbag + Location: 97,51 + Owner: Soviets + Actor337: sbag + Location: 97,50 + Owner: Soviets + Actor339: e1 + Location: 96,49 + Owner: Soviets + Actor340: e1 + Location: 93,47 + Owner: Soviets + Actor341: e1 + Location: 89,56 + Owner: Soviets + Actor342: e2 + Location: 88,55 + Owner: Soviets + Actor343: apc + Location: 91,48 + Owner: Soviets + Actor344: 3tnk + Location: 67,52 + Owner: Soviets + Actor161: brl3 + Location: 93,50 + Owner: Soviets + Actor172: barl + Location: 90,55 + Owner: Soviets + ParadropBoxBottomRight: waypoint + Location: 170,72 + Owner: Neutral + ParadropBoxTopLeft: waypoint + Location: 78,27 + Owner: Neutral + MountainEntry1: waypoint + Location: 25,44 + Owner: Neutral + MountainEntry2: waypoint + Owner: Neutral + Location: 25,45 + MountainEntry3: waypoint + Owner: Neutral + Location: 25,46 + MountainEntry4: waypoint + Owner: Neutral + Location: 25,47 + MountainEntry5: waypoint + Owner: Neutral + Location: 25,48 + MountainEntry6: waypoint + Owner: Neutral + Location: 25,49 + MountainEntry7: waypoint + Location: 25,50 + Owner: Neutral + MountainEntry8: waypoint + Owner: Neutral + Location: 25,51 + BridgeEntry1: waypoint + Owner: Neutral + Location: 28,29 + BridgeEntry2: waypoint + Owner: Neutral + Location: 27,29 + BridgeEntry3: waypoint + Owner: Neutral + Location: 26,29 + BridgeEntry4: waypoint + Owner: Neutral + Location: 25,29 + SovietIntel: camera.large + Owner: Soviets + Location: 130, 45 + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/exodus/rules.yaml b/mods/ura/maps/exodus/rules.yaml new file mode 100644 index 0000000..943320a --- /dev/null +++ b/mods/ura/maps/exodus/rules.yaml @@ -0,0 +1,188 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + MissionData: + Briefing: The Allies are now being flanked from both sides. Evacuate before the remaining Allied forces in the area are wiped out. Einstein has recently developed a technology which allows us to obscure units from the enemy. Pull out at least one prototype mobile gap generator intact. + LuaScript: + Scripts: exodus.lua + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: normal + +^Palettes: + IndexedPlayerPalette: + PlayerIndex: + Soviets: 229, 230, 231, 232, 233, 234, 235, 8, 236, 237, 238, 239, 221, 222, 223, 223 + Allies: 224, 224, 225, 225, 226, 184, 185, 186, 187, 188, 188, 189, 190, 190, 191, 191 + Allies1: 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175 + Allies2: 208, 208, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 154, 155, 143 + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E3,E3,E4 + +HBOX: + Buildable: + Prerequisites: ~disabled + EditorOnlyTooltip: + Description: invalid targets for YakAttack + +E7: + Buildable: + Prerequisites: ~disabled + +TRAN: + Buildable: + Prerequisites: ~disabled + +BARR: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled + +HELI: + Buildable: + Prerequisites: ~disabled + +HIND: + Buildable: + Prerequisites: ~disabled + +SS: + Buildable: + Prerequisites: ~disabled + +ARTY: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +DD: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +PT: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +SPEN: + Buildable: + Prerequisites: ~disabled + +SYRD: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +TSLA: + Buildable: + Prerequisites: ~disabled + +FTUR: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +ATEK: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +4TNK: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +APC: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +TTNK: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +CTNK: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +MGG: + Buildable: + Prerequisites: ~disabled + CreatesShroud: + Range: 6c0 + +GAP: + Buildable: + Prerequisites: ~disabled + +CAMERA.Large: + Inherits: CAMERA + RevealsShroud: + Range: 49c0 + EditorOnlyTooltip: + Description: required for YakAttack to work diff --git a/mods/ura/maps/fort-lonestar/fort-lonestar-AI.lua b/mods/ura/maps/fort-lonestar/fort-lonestar-AI.lua new file mode 100644 index 0000000..18e400c --- /dev/null +++ b/mods/ura/maps/fort-lonestar/fort-lonestar-AI.lua @@ -0,0 +1,188 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] + +AIPlayers = { } +AIBarracks = { } +AIDerricks = { } +AIBaseLocation = { } +IdlingAIActors = { } +IdlingAISupportActors = { } +AIOnDefense = { } + +-- It's good to start with 10 rifle man, one medic and 5 rocket soldiers +InitialUnitsToBuild = { "e1", "e1", "e1", "e1", "e1", "medi", "e1", "e1", "e1", "e1", "e1", "e3", "e3", "e3", "e3", "e3" } +UnitsToBuild = { "e1", "e1", "e1", "e1", "e1", "e3", "e3", "e3", "medi" } + +ActivateAI = function(player, id) + AIPlayers[id] = player + + Trigger.AfterDelay(0, function() + local barracks = player.GetActorsByType("tent") + if #barracks > 0 then + AIBarracks[id] = barracks[1] + AIBaseLocation[id] = barracks[1].Location + CVec.New(2, 1) + IdlingAIActors[id] = { } + IdlingAISupportActors[id] = { } + InitialInfantryProduction(id, InitialUnitsToBuild) + DefendActor(id, barracks[1]) + RepairBarracks(id) + SellWalls(id) + + Trigger.AfterDelay(DateTime.Seconds(10), function() LookOutForCrates(id) end) + end + + local derricks = player.GetActorsByType("oilb") + if #derricks > 0 then + AIDerricks[id] = derricks[1] + DefendActor(id, derricks[1]) + end + end) +end + +InitialInfantryProduction = function(id, units) + local productionComplete = AIPlayers[id].Build(units, function(actors) + InfantryProduction(id) + end) + + Trigger.OnProduction(AIBarracks[id], function(producer, produced) + BuildComplete(id, produced) + end) +end + +InfantryProduction = function(id) + local productionComplete = AIPlayers[id].Build({ Utils.Random(UnitsToBuild) }, function(actors) + Trigger.AfterDelay(0, function() InfantryProduction(id) end) + end) + + if not productionComplete then + Trigger.AfterDelay(0, function() InfantryProduction(id) end) + end +end + +BuildComplete = function(id, actor) + if actor.Type == "medi" then + local number = #IdlingAISupportActors[id] + 1 + IdlingAISupportActors[id][number] = actor + + Trigger.OnKilled(actor, function() + table.remove(IdlingAISupportActors[id], number) + end) + else + local number = #IdlingAIActors[id] + 1 + IdlingAIActors[id][number] = actor + + Trigger.OnKilled(actor, function() + table.remove(IdlingAIActors[id], number) + end) + end + + Trigger.AfterDelay(0, function() DefendActor(id, actor) end) +end + +AttackGroupSize = 5 +SetupAttackGroup = function(id) + local units = { } + + for i = 0, AttackGroupSize, 1 do + if (#IdlingAIActors[id] == 0) then + return units + end + + local number = Utils.RandomInteger(0, #IdlingAIActors[id]) + 1 + units[#units + 1] = IdlingAIActors[id][number] + table.remove(IdlingAIActors[id], number) + end + + return units +end + +DefendActor = function(id, actorToDefend) + if not actorToDefend or actorToDefend.IsDead or not actorToDefend.IsInWorld then + return + end + + Trigger.OnDamaged(actorToDefend, function(self, attacker) + if AIOnDefense[id] or not attacker or attacker.IsDead then + return + end + + -- Don't try to kill something you can't kill + if attacker.Type == "sniper.soviets" then + return + end + + AIOnDefense[id] = true + local attackLoc = attacker.Location + + local defenders = SetupAttackGroup(id) + if not defenders or #defenders == 0 then + Trigger.AfterDelay(DateTime.Seconds(30), function() AIOnDefense[id] = false end) + return + end + + Utils.Do(defenders, function(unit) + if unit.IsDead then + return + end + + unit.AttackMove(attackLoc) + + local home = AIBaseLocation[id] + Trigger.OnIdle(unit, function() + if unit.Location == home then + IdlingAIActors[id][#IdlingAIActors[id] + 1] = unit + Trigger.Clear(unit, "OnIdle") + AIOnDefense[id] = false + else + unit.AttackMove(home) + end + end) + end) + end) +end + +RepairBarracks = function(id) + Trigger.OnDamaged(AIBarracks[id], function(self, attacker) + self.StartBuildingRepairs(AIPlayers[id]) + end) +end + +SellWalls = function(id) + Media.DisplayMessage("Lonestar AI " .. id .. " sold its walls for better combat experience.") + + local walls = AIPlayers[id].GetActorsByType("brik") + Utils.Do(walls, function(wall) + wall.Sell() + end) +end + +LookOutForCrates = function(id) + Trigger.OnEnteredProximityTrigger(AIBarracks[id].CenterPosition, WDist.New(12 * 1024), function(actor) + if actor.Type ~= "fortcrate" or #IdlingAIActors[id] == 0 then + return + end + + local unit = Utils.Random(IdlingAIActors[id]) + local home = AIBaseLocation[id] + local aim = actor.Location + if unit.IsDead then + return + end + + unit.AttackMove(aim) + Trigger.OnIdle(unit, function() + if unit.Location == aim or not actor.IsInWorld then + unit.AttackMove(home) + Trigger.Clear(unit, "OnIdle") + else + unit.AttackMove(aim) + end + end) + end) +end diff --git a/mods/ura/maps/fort-lonestar/fort-lonestar.lua b/mods/ura/maps/fort-lonestar/fort-lonestar.lua new file mode 100644 index 0000000..84dfc77 --- /dev/null +++ b/mods/ura/maps/fort-lonestar/fort-lonestar.lua @@ -0,0 +1,223 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] + +SovietEntryPoints = { Entry1, Entry2, Entry3, Entry4, Entry5, Entry6, Entry7, Entry8 } +PatrolWaypoints = { Entry2, Entry4, Entry6, Entry8 } +ParadropWaypoints = { Paradrop1, Paradrop2, Paradrop3, Paradrop4 } +SpawnPoints = { Spawn1, Spawn2, Spawn3, Spawn4 } +Snipers = { Sniper1, Sniper2, Sniper3, Sniper4, Sniper5, Sniper6, Sniper7, Sniper8, Sniper9, Sniper10, Sniper11, Sniper12 } + +Walls = +{ + { WallTopRight1, WallTopRight2, WallTopRight3, WallTopRight4, WallTopRight5, WallTopRight6, WallTopRight7, WallTopRight8, WallTopRight9 }, + { WallTopLeft1, WallTopLeft2, WallTopLeft3, WallTopLeft4, WallTopLeft5, WallTopLeft6, WallTopLeft7, WallTopLeft8, WallTopLeft9 }, + { WallBottomLeft1, WallBottomLeft2, WallBottomLeft3, WallBottomLeft4, WallBottomLeft5, WallBottomLeft6, WallBottomLeft7, WallBottomLeft8, WallBottomLeft9 }, + { WallBottomRight1, WallBottomRight2, WallBottomRight3, WallBottomRight4, WallBottomRight5, WallBottomRight6, WallBottomRight7, WallBottomRight8, WallBottomRight9 } +} + +if Map.LobbyOption("difficulty") == "veryeasy" then + ParaChance = 20 + Patrol = { "e1", "e2", "e1" } + Infantry = { "e4", "e1", "e1", "e2", "e2" } + Vehicles = { "apc" } + Tank = { "3tnk" } + LongRange = { "arty" } + Boss = { "v2rl" } + Swarm = { "shok", "shok", "shok" } +elseif Map.LobbyOption("difficulty") == "easy" then + ParaChance = 25 + Patrol = { "e1", "e2", "e1" } + Infantry = { "e4", "e1", "e1", "e2", "e1", "e2", "e1" } + Vehicles = { "ftrk", "apc", "arty" } + Tank = { "3tnk" } + LongRange = { "v2rl" } + Boss = { "4tnk" } + Swarm = { "shok", "shok", "shok", "shok", "ttnk" } +elseif Map.LobbyOption("difficulty") == "normal" then + ParaChance = 30 + Patrol = { "e1", "e2", "e1", "e1" } + Infantry = { "e4", "e1", "e1", "e2", "e1", "e2", "e1" } + Vehicles = { "ftrk", "ftrk", "apc", "arty" } + Tank = { "3tnk" } + LongRange = { "v2rl" } + Boss = { "4tnk" } + Swarm = { "shok", "shok", "shok", "shok", "ttnk", "ttnk", "ttnk" } +elseif Map.LobbyOption("difficulty") == "hard" then + ParaChance = 35 + Patrol = { "e1", "e2", "e1", "e1", "e4" } + Infantry = { "e4", "e1", "e1", "e2", "e1", "e2", "e1" } + Vehicles = { "arty", "ftrk", "ftrk", "apc", "apc" } + Tank = { "3tnk" } + LongRange = { "v2rl" } + Boss = { "4tnk" } + Swarm = { "shok", "shok", "shok", "shok", "shok", "ttnk", "ttnk", "ttnk", "ttnk" } +else + ParaChance = 40 + Patrol = { "e1", "e2", "e1", "e1", "e4", "e4" } + Infantry = { "e4", "e1", "e1", "e2", "e1", "e2", "e1", "e1" } + Vehicles = { "arty", "arty", "ftrk", "apc", "apc" } + Tank = { "ftrk", "3tnk" } + LongRange = { "v2rl" } + Boss = { "4tnk" } + Swarm = { "shok", "shok", "shok", "shok", "shok", "shok", "ttnk", "ttnk", "ttnk", "ttnk", "ttnk" } +end + +Wave = 0 +Waves = +{ + { delay = 500, units = { Infantry } }, + { delay = 500, units = { Patrol, Patrol } }, + { delay = 700, units = { Infantry, Infantry, Vehicles }, }, + { delay = 1500, units = { Infantry, Infantry, Infantry, Infantry } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Vehicles } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Tank, Vehicles } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Tank, Tank, Swarm } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry, LongRange } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry, Infantry, LongRange, Tank, LongRange } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry, Infantry, Infantry, LongRange, LongRange, Tank, Tank, Vehicles } }, + { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry, Infantry, Infantry, Infantry, Boss, Swarm } } +} + +-- Now do some adjustments to the waves +if Map.LobbyOption("difficulty") == "tough" or Map.LobbyOption("difficulty") == "endless" then + Waves[8] = { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry }, ironUnits = { LongRange } } + Waves[9] = { delay = 1500, units = { Infantry, Infantry, Patrol, Infantry, Infantry, Infantry, Infantry, Infantry, LongRange, LongRange, Vehicles, Tank }, ironUnits = { Tank } } + Waves[11] = { delay = 1500, units = { Vehicles, Infantry, Patrol, Patrol, Patrol, Infantry, LongRange, Tank, Boss, Infantry, Infantry, Patrol } } +end + +SendUnits = function(entryCell, unitTypes, targetCell, extraData) + Reinforcements.Reinforce(soviets, unitTypes, { entryCell }, 40, function(a) + if not a.HasProperty("AttackMove") then + Trigger.OnIdle(a, function(a) + a.Move(targetCell) + end) + return + end + + a.AttackMove(targetCell) + Trigger.OnIdle(a, function(a) + a.Hunt() + end) + + if extraData == "IronCurtain" then + a.GrantCondition("invulnerability", DateTime.Seconds(25)) + end + end) +end + +SendWave = function() + Wave = Wave + 1 + local wave = Waves[Wave] + + Trigger.AfterDelay(wave.delay, function() + Utils.Do(wave.units, function(units) + local entry = Utils.Random(SovietEntryPoints).Location + local target = Utils.Random(SpawnPoints).Location + + SendUnits(entry, units, target) + end) + + if wave.ironUnits then + Utils.Do(wave.ironUnits, function(units) + local entry = Utils.Random(SovietEntryPoints).Location + local target = Utils.Random(SpawnPoints).Location + + SendUnits(entry, units, target, "IronCurtain") + end) + end + + Utils.Do(players, function(player) + Media.PlaySpeechNotification(player, "EnemyUnitsApproaching") + end) + + if (Wave < #Waves) then + if Utils.RandomInteger(1, 100) < ParaChance then + local units = ParaProxy.SendParatroopers(Utils.Random(ParadropWaypoints).CenterPosition) + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function(a) + if a.IsInWorld then + a.Hunt() + end + end) + end) + + local delay = Utils.RandomInteger(DateTime.Seconds(20), DateTime.Seconds(45)) + Trigger.AfterDelay(delay, SendWave) + else + SendWave() + end + else + if Map.LobbyOption("difficulty") == "endless" then + Wave = 0 + IncreaseDifficulty() + SendWave() + return + end + + Trigger.AfterDelay(DateTime.Minutes(1), SovietsRetreating) + Media.DisplayMessage("You almost survived the onslaught! No more waves incoming.") + end + end) +end + +SovietsRetreating = function() + Utils.Do(Snipers, function(a) + if not a.IsDead and a.Owner == soviets then + a.Destroy() + end + end) +end + +IncreaseDifficulty = function() + local additions = { Infantry, Patrol, Vehicles, Tank, LongRange, Boss, Swarm } + Utils.Do(Waves, function(wave) + wave.units[#wave.units + 1] = Utils.Random(additions) + end) +end + +Tick = function() + if (Utils.RandomInteger(1, 200) == 10) then + local delay = Utils.RandomInteger(1, 10) + Lighting.Flash("LightningStrike", delay) + Trigger.AfterDelay(delay, function() + Media.PlaySound("thunder" .. Utils.RandomInteger(1,6) .. ".aud") + end) + end + if (Utils.RandomInteger(1, 200) == 10) then + Media.PlaySound("thunder-ambient.aud") + end +end + +SetupWallOwners = function() + Utils.Do(players, function(player) + Utils.Do(Walls[player.Spawn], function(wall) + wall.Owner = player + end) + end) +end + +WorldLoaded = function() + soviets = Player.GetPlayer("Soviets") + players = { } + for i = 0, 4 do + local player = Player.GetPlayer("Multi" ..i) + players[i] = player + + if players[i] and players[i].IsBot then + ActivateAI(players[i], i) + end + end + + Media.DisplayMessage("Defend Fort Lonestar at all costs!") + + SetupWallOwners() + + ParaProxy = Actor.Create("powerproxy.paratroopers", false, { Owner = soviets }) + SendWave() +end diff --git a/mods/ura/maps/fort-lonestar/map.bin b/mods/ura/maps/fort-lonestar/map.bin new file mode 100644 index 0000000..6115d4d Binary files /dev/null and b/mods/ura/maps/fort-lonestar/map.bin differ diff --git a/mods/ura/maps/fort-lonestar/map.png b/mods/ura/maps/fort-lonestar/map.png new file mode 100644 index 0000000..482d8c9 Binary files /dev/null and b/mods/ura/maps/fort-lonestar/map.png differ diff --git a/mods/ura/maps/fort-lonestar/map.yaml b/mods/ura/maps/fort-lonestar/map.yaml new file mode 100644 index 0000000..fcdb8fa --- /dev/null +++ b/mods/ura/maps/fort-lonestar/map.yaml @@ -0,0 +1,468 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Fort Lonestar + +Author: Nuke'm Bro, abcdefg30 + +Tileset: TEMPERAT + +MapSize: 96,96 + +Bounds: 8,8,48,48 + +Visibility: Lobby + +Categories: Minigame + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Multi0: + Name: Multi0 + Playable: True + LockTeam: True + Team: 1 + LockFaction: True + Faction: allies + Allies: Multi1, Multi2, Multi3 + Enemies: Soviets + PlayerReference@Multi1: + Name: Multi1 + Playable: True + LockTeam: True + Team: 1 + LockFaction: True + Faction: allies + Allies: Multi0, Multi2, Multi3 + Enemies: Soviets + PlayerReference@Multi2: + Name: Multi2 + Playable: True + LockTeam: True + Team: 1 + LockFaction: True + Faction: allies + Allies: Multi0, Multi1, Multi3 + Enemies: Soviets + PlayerReference@Multi3: + Name: Multi3 + Playable: True + LockTeam: True + Team: 1 + LockFaction: True + Faction: allies + Allies: Multi0, Multi1, Multi2 + Enemies: Soviets + PlayerReference@Soviets: + Name: Soviets + Faction: soviet + LockTeam: True + Team: 2 + Color: FF0101 + Enemies: Multi0, Multi1, Multi2, Multi3 + +Actors: + Actor76: t11 + Location: 47,27 + Owner: Neutral + Actor47: t12 + Location: 55,24 + Owner: Neutral + Actor25: tc03 + Location: 54,49 + Owner: Neutral + Actor14: tc04 + Location: 24,7 + Owner: Neutral + Actor10: tc04 + Location: 38,53 + Owner: Neutral + Actor0: t14 + Location: 32,16 + Owner: Neutral + Actor75: tc04 + Location: 45,25 + Owner: Neutral + Actor72: tc01 + Location: 49,16 + Owner: Neutral + Actor58: t10 + Location: 22,54 + Owner: Neutral + Actor26: tc01 + Location: 54,41 + Owner: Neutral + Actor37: tc01 + Location: 54,21 + Owner: Neutral + Actor60: tc05 + Location: 7,16 + Owner: Neutral + Actor69: t17 + Location: 23,8 + Owner: Neutral + Actor4: tc04 + Location: 29,45 + Owner: Neutral + Actor6: t17 + Location: 33,43 + Owner: Neutral + Actor16: tc04 + Location: 53,16 + Owner: Neutral + Actor21: tc03 + Location: 8,14 + Owner: Neutral + Actor8: t14 + Location: 49,37 + Owner: Neutral + Actor29: tc01 + Location: 8,42 + Owner: Neutral + Actor49: t15 + Location: 54,47 + Owner: Neutral + Actor62: tc05 + Location: 6,43 + Owner: Neutral + Actor73: tc05 + Location: 16,34 + Owner: Neutral + Actor32: tc01 + Location: 8,24 + Owner: Neutral + Actor59: tc05 + Location: 7,39 + Owner: Neutral + Actor5: tc01 + Location: 44,44 + Owner: Neutral + Actor51: t08 + Location: 55,46 + Owner: Neutral + Actor57: t12 + Location: 19,54 + Owner: Neutral + Actor54: t11 + Location: 26,54 + Owner: Neutral + Actor33: tc01 + Location: 21,7 + Owner: Neutral + Actor27: tc01 + Location: 42,54 + Owner: Neutral + Actor23: tc03 + Location: 16,54 + Owner: Neutral + Actor15: tc04 + Location: 38,8 + Owner: Neutral + Actor19: tc03 + Location: 18,7 + Owner: Neutral + Actor17: tc03 + Location: 54,26 + Owner: Neutral + Actor11: tc04 + Location: 20,53 + Owner: Neutral + Actor9: tc04 + Location: 53,37 + Owner: Neutral + Actor7: tc02 + Location: 44,36 + Owner: Neutral + Actor3: t15 + Location: 19,25 + Owner: Neutral + Actor1: t05 + Location: 29,16 + Owner: Neutral + Actor71: tc02 + Location: 15,40 + Owner: Neutral + Actor64: t06 + Location: 18,16 + Owner: Neutral + Actor63: t14 + Location: 8,22 + Owner: Neutral + Actor53: t08 + Location: 41,55 + Owner: Neutral + Actor61: tc05 + Location: 54,39 + Owner: Neutral + Actor48: t01 + Location: 54,23 + Owner: Neutral + Actor50: t17 + Location: 54,44 + Owner: Neutral + Actor36: tc01 + Location: 42,8 + Owner: Neutral + Actor52: t12 + Location: 44,53 + Owner: Neutral + Actor28: tc01 + Location: 24,54 + Owner: Neutral + Actor22: tc03 + Location: 7,46 + Owner: Neutral + Actor24: tc03 + Location: 45,54 + Owner: Neutral + Actor18: tc03 + Location: 45,8 + Owner: Neutral + Actor12: tc04 + Location: 7,37 + Owner: Neutral + Actor13: tc04 + Location: 8,19 + Owner: Neutral + Actor2: tc04 + Location: 14,23 + Owner: Neutral + Actor74: t06 + Location: 19,36 + Owner: Neutral + Actor46: t11 + Location: 54,19 + Owner: Neutral + Actor42: t16 + Location: 53,19 + Owner: Neutral + Actor68: tc05 + Location: 35,7 + Owner: Neutral + WallTopLeft1: brik + Location: 25,28 + Owner: Neutral + WallTopLeft2: brik + Location: 25,27 + Owner: Neutral + WallTopLeft3: brik + Location: 25,26 + Owner: Neutral + WallTopLeft4: brik + Location: 25,29 + Owner: Neutral + WallTopLeft5: brik + Location: 29,25 + Owner: Neutral + WallTopLeft6: brik + Location: 25,25 + Owner: Neutral + WallTopLeft7: brik + Location: 26,25 + Owner: Neutral + WallTopLeft8: brik + Location: 27,25 + Owner: Neutral + WallTopLeft9: brik + Location: 28,25 + Owner: Neutral + WallTopRight1: brik + Location: 35,25 + Owner: Neutral + WallTopRight2: brik + Location: 36,25 + Owner: Neutral + WallTopRight3: brik + Location: 37,25 + Owner: Neutral + WallTopRight4: brik + Location: 38,25 + Owner: Neutral + WallTopRight5: brik + Location: 39,25 + Owner: Neutral + WallTopRight6: brik + Location: 39,26 + Owner: Neutral + WallTopRight7: brik + Location: 39,27 + Owner: Neutral + WallTopRight8: brik + Location: 39,28 + Owner: Neutral + WallTopRight9: brik + Location: 39,29 + Owner: Neutral + WallBottomRight1: brik + Location: 39,37 + Owner: Neutral + WallBottomRight2: brik + Location: 37,39 + Owner: Neutral + WallBottomRight3: brik + Location: 39,38 + Owner: Neutral + WallBottomRight4: brik + Location: 39,39 + Owner: Neutral + WallBottomRight5: brik + Location: 38,39 + Owner: Neutral + WallBottomRight6: brik + Location: 39,35 + Owner: Neutral + WallBottomRight7: brik + Location: 39,36 + Owner: Neutral + WallBottomRight8: brik + Location: 35,39 + Owner: Neutral + WallBottomRight9: brik + Location: 36,39 + Owner: Neutral + WallBottomLeft1: brik + Location: 25,39 + Owner: Neutral + WallBottomLeft2: brik + Location: 28,39 + Owner: Neutral + WallBottomLeft3: brik + Location: 29,39 + Owner: Neutral + WallBottomLeft4: brik + Location: 27,39 + Owner: Neutral + WallBottomLeft5: brik + Location: 25,35 + Owner: Neutral + WallBottomLeft6: brik + Location: 25,36 + Owner: Neutral + WallBottomLeft7: brik + Location: 25,37 + Owner: Neutral + WallBottomLeft8: brik + Location: 25,38 + Owner: Neutral + WallBottomLeft9: brik + Location: 26,39 + Owner: Neutral + Sniper1: sniper.soviets + Location: 9,26 + Owner: Soviets + Sniper2: sniper.soviets + Location: 10,21 + Owner: Soviets + Sniper3: sniper.soviets + Location: 26,9 + Owner: Soviets + Sniper4: sniper.soviets + Location: 40,10 + Owner: Soviets + Sniper5: sniper.soviets + Location: 53,21 + Owner: Soviets + Sniper6: sniper.soviets + Location: 54,25 + Owner: Soviets + Sniper7: sniper.soviets + Location: 53,40 + Owner: Soviets + Sniper8: sniper.soviets + Location: 54,43 + Owner: Soviets + Sniper9: sniper.soviets + Location: 54,46 + Owner: Soviets + Sniper10: sniper.soviets + Location: 43,53 + Owner: Soviets + Sniper11: sniper.soviets + Location: 8,36 + Owner: Soviets + Sniper12: sniper.soviets + Location: 28,55 + Owner: Soviets + OilDerrick1: oilb + Location: 32,30 + Owner: Multi0 + OilDerrick2: oilb + Location: 32,32 + Owner: Multi1 + OilDerrick3: oilb + Location: 30,32 + Owner: Multi2 + OilDerrick4: oilb + Location: 30,30 + Owner: Multi3 + Spawn1: mpspawn + Location: 36,26 + Owner: Neutral + Spawn2: mpspawn + Location: 27,26 + Owner: Neutral + Spawn3: mpspawn + Location: 27,36 + Owner: Neutral + Spawn4: mpspawn + Location: 36,36 + Owner: Neutral + Entry1: waypoint + Location: 8,8 + Owner: Neutral + Entry2: waypoint + Location: 31,8 + Owner: Neutral + Entry3: waypoint + Location: 55,8 + Owner: Neutral + Entry4: waypoint + Location: 55,32 + Owner: Neutral + Entry5: waypoint + Location: 55,55 + Owner: Neutral + Entry6: waypoint + Location: 32,55 + Owner: Neutral + Entry7: waypoint + Location: 8,55 + Owner: Neutral + Entry8: waypoint + Location: 8,32 + Owner: Neutral + Paradrop1: waypoint + Location: 32,28 + Owner: Neutral + Paradrop2: waypoint + Location: 27,32 + Owner: Neutral + Paradrop3: waypoint + Location: 32,36 + Owner: Neutral + Paradrop4: waypoint + Location: 36,32 + Owner: Neutral + Patrol1: waypoint + Location: 32,18 + Owner: Neutral + Patrol2: waypoint + Location: 17,32 + Owner: Neutral + Patrol3: waypoint + Location: 32,46 + Owner: Neutral + Patrol4: waypoint + Location: 46,32 + Owner: Neutral + +Rules: rules.yaml + +Weapons: weapons.yaml + +Music: music.yaml diff --git a/mods/ura/maps/fort-lonestar/music.yaml b/mods/ura/maps/fort-lonestar/music.yaml new file mode 100644 index 0000000..71ace56 --- /dev/null +++ b/mods/ura/maps/fort-lonestar/music.yaml @@ -0,0 +1,2 @@ +rain: Rain (ambient) + Hidden: true \ No newline at end of file diff --git a/mods/ura/maps/fort-lonestar/rain.aud b/mods/ura/maps/fort-lonestar/rain.aud new file mode 100644 index 0000000..6d14c5d Binary files /dev/null and b/mods/ura/maps/fort-lonestar/rain.aud differ diff --git a/mods/ura/maps/fort-lonestar/rules.yaml b/mods/ura/maps/fort-lonestar/rules.yaml new file mode 100644 index 0000000..c577be1 --- /dev/null +++ b/mods/ura/maps/fort-lonestar/rules.yaml @@ -0,0 +1,416 @@ +World: + CrateSpawner: + InitialSpawnDelay: 0 + Maximum: 4 + SpawnInterval: 1000 + CrateActors: fortcrate + MPStartUnits@mcvonly: + BaseActor: tent + WeatherOverlay: + WindTick: 150, 550 + UseSquares: false + ScatterDirection: 0, 0 + Gravity: 8.00, 12.00 + SwingOffset: 0, 0 + SwingSpeed: 0, 0 + SwingAmplitude: 0, 0 + ParticleColors: 304074, 28386C, 202C60, 182C54 + LineTailAlphaValue: 150 + ParticleSize: 1, 1 + GlobalLightingPaletteEffect: + Red: 0.75 + Green: 0.85 + Blue: 1.5 + Ambient: 0.45 + MusicPlaylist: + BackgroundMusic: rain + FlashPaletteEffect@LIGHTNINGSTRIKE: + Type: LightningStrike + LuaScript: + Scripts: fort-lonestar.lua, fort-lonestar-AI.lua + MapBuildRadius: + AllyBuildRadiusCheckboxLocked: True + AllyBuildRadiusCheckboxEnabled: True + BuildRadiusCheckboxLocked: True + BuildRadiusCheckboxEnabled: True + SpawnMPUnits: + DropdownLocked: True + MapOptions: + TechLevelDropdownLocked: True + TechLevel: unrestricted + ShortGameCheckboxLocked: True + ShortGameCheckboxEnabled: False + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Description: Change the difficulty of the mission + Values: + hard: Hard (4P) + normal: Normal (3P) + easy: Easy (2P) + veryeasy: Very Easy (1P) + tough: Real tough guy + endless: Endless mode + Default: hard + DisplayOrder: 5 + +FORTCRATE: + Inherits: ^Crate + SupportPowerCrateAction@parabombs: + SelectionShares: 30 + Proxy: powerproxy.parabombs + Effect: parabombs + HealUnitsCrateAction: + SelectionShares: 30 + Notification: heal2.aud + Effect: heal + GiveCashCrateAction: + Amount: 400 + UseCashTick: true + SelectionShares: 30 + GiveUnitCrateAction@e7: + Units: e7 + SelectionShares: 10 + GrantExternalConditionCrateAction@ironcurtain: + SelectionShares: 10 + Effect: invuln + Notification: ironcur9.aud + Condition: invulnerability + Duration: 1200 + ExplodeCrateAction@bigboom: + Weapon: SCUD + SelectionShares: 5 + GiveMcvCrateAction: + SelectionShares: 0 + NoBaseSelectionShares: 1000 + Units: mobiletent + ValidFactions: allies + +Player: + ClassicProductionQueue@Infantry: + BuildDurationModifier: 250 + -EnemyWatcher: + Shroud: + FogCheckboxLocked: True + FogCheckboxEnabled: True + ExploredMapCheckboxLocked: True + ExploredMapCheckboxEnabled: False + PlayerResources: + DefaultCashLocked: True + DefaultCash: 50 + -HackyAI@RushAI: + -HackyAI@NormalAI: + -HackyAI@NavalAI: + -HackyAI@TurtleAI: + DummyAI@LonestarAI: + Name: Lonestar AI + Type: lonestar + +^Infantry: + Inherits@IC: ^IronCurtainable + +^Husk: + TransformOnCapture: + ForceHealthPercentage: 80 + +OILB: + Health: + HP: 3000 + Armor: + Type: Wood + WithBuildingBib: + RevealsShroud: + Range: 3c0 + CashTrickler: + Interval: 250 + Amount: 50 + +MOBILETENT: + Inherits: ^Vehicle + Valued: + Cost: 2000 + Tooltip: + Name: Mobile Tent + Selectable: + Priority: 4 + DecorationBounds: 21,21 + SelectionDecorations: + Health: + HP: 600 + Armor: + Type: Light + Mobile: + Speed: 85 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 4c0 + MustBeDestroyed: + RequiredForShortGame: true + BaseBuilding: + Transforms: + IntoActor: tent + Offset: 0,0 + Facing: 96 + TransformSounds: placbldg.aud, build5.aud + NoTransformNotification: BuildingCannotPlaceAudio + RenderSprites: + Image: TRUK + +TENT: + Health: + HP: 1000 + Production: + Produces: Infantry, Soldier, Dog, Defense + -Sellable: + BaseProvider: + Range: 12c0 + Power: + Amount: 0 + ProductionBar@Defense: + ProductionType: Defense + Color: 8A8A8A + BaseBuilding: + +FTUR: + Buildable: + Prerequisites: barracks + Valued: + Cost: 400 + Power: + Amount: 0 + GivesBuildableArea: + AreaTypes: building + +PBOX: + Buildable: + Prerequisites: barracks + Valued: + Cost: 400 + Health: + HP: 200 + Armor: + Type: Heavy + Power: + Amount: 0 + GivesBuildableArea: + AreaTypes: building + +DOG: + Buildable: + Prerequisites: barracks + Valued: + Cost: 20 + +E1: + Buildable: + Prerequisites: barracks + Valued: + Cost: 20 + +E2: + Buildable: + Prerequisites: barracks + Valued: + Cost: 40 + Explodes: + Chance: 20 + +E3: + Buildable: + Prerequisites: barracks + Valued: + Cost: 60 + +E4: + Buildable: + Prerequisites: barracks + Valued: + Cost: 100 + +E6: + Buildable: + Prerequisites: barracks + Valued: + Cost: 100 + +E7: + Buildable: + Prerequisites: barracks + Valued: + Cost: 750 + +3TNK: + Armament: + Weapon: TankNapalm + Recoil: 200 + RecoilRecovery: 38 + +MEDI: + Buildable: + Prerequisites: barracks + Valued: + Cost: 100 + +SHOK: + Buildable: + Prerequisites: barracks + Valued: + Cost: 150 + +SNIPER: + Valued: + Cost: 200 + Buildable: + Prerequisites: barracks + Health: + HP: 200 + +SNIPER.soviets: + Inherits: SNIPER + Buildable: + Prerequisites: ~disabled + MustBeDestroyed: + Targetable: + TargetTypes: Disguise + AutoTarget: + InitialStanceAI: AttackAnything + RenderSprites: + Image: SNIPER + +SPY: + Buildable: + BuildPaletteOrder: 60 + Prerequisites: barracks + Valued: + Cost: 300 + -MustBeDestroyed: + +FTRK: + -Armament@AA: + -Armament@AG: + Armament: + Weapon: FLAK-23 + Recoil: 85 + LocalOffset: 512,0,192 + MuzzleSequence: muzzle + +ARTY: + Valued: + Cost: 600 + Health: + HP: 75 + RevealsShroud: + Range: 7c0 + +V2RL: + Health: + HP: 100 + ReloadAmmoPool: + Delay: 280 + +4TNK: + Health: + HP: 2500 + Mobile: + Speed: 56 + RevealsShroud: + Range: 14c0 + Turreted: + TurnSpeed: 1 + Armament@PRIMARY: + Recoil: 8 + RecoilRecovery: 0c7 + Armament@SECONDARY: + Recoil: 2 + Explodes: + Weapon: napalm + EmptyWeapon: napalm + SelfHealing: + Step: 2 + Delay: 1 + HealIfBelow: 40 + +powerproxy.parabombs: + AirstrikePower: + LongDesc: A MiG bomber drops a load of parachuted bombs on your target. + CameraRemoveDelay: 50 + +BADR.Bomber: + Health: + HP: 60 + Aircraft: + Speed: 280 + AmmoPool: + Ammo: 30 + Tooltip: + Name: MiG Bomber + SpawnActorOnDeath: + Actor: MIG.Husk + RenderSprites: + Image: mig + +MECH: + Buildable: + Prerequisites: barracks + Valued: + Cost: 1500 + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E1,E2,E2 + +SILO: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +HBOX: + Buildable: + Prerequisites: ~disabled + +GUN: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +SBAG: + Buildable: + Prerequisites: ~disabled + +FENC: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled + +TSLA: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/fort-lonestar/thunder-ambient.aud b/mods/ura/maps/fort-lonestar/thunder-ambient.aud new file mode 100644 index 0000000..06d99c0 Binary files /dev/null and b/mods/ura/maps/fort-lonestar/thunder-ambient.aud differ diff --git a/mods/ura/maps/fort-lonestar/thunder1.aud b/mods/ura/maps/fort-lonestar/thunder1.aud new file mode 100644 index 0000000..c45d3fc Binary files /dev/null and b/mods/ura/maps/fort-lonestar/thunder1.aud differ diff --git a/mods/ura/maps/fort-lonestar/thunder2.aud b/mods/ura/maps/fort-lonestar/thunder2.aud new file mode 100644 index 0000000..07d78b1 Binary files /dev/null and b/mods/ura/maps/fort-lonestar/thunder2.aud differ diff --git a/mods/ura/maps/fort-lonestar/thunder3.aud b/mods/ura/maps/fort-lonestar/thunder3.aud new file mode 100644 index 0000000..e81b9aa Binary files /dev/null and b/mods/ura/maps/fort-lonestar/thunder3.aud differ diff --git a/mods/ura/maps/fort-lonestar/thunder4.aud b/mods/ura/maps/fort-lonestar/thunder4.aud new file mode 100644 index 0000000..db9202a Binary files /dev/null and b/mods/ura/maps/fort-lonestar/thunder4.aud differ diff --git a/mods/ura/maps/fort-lonestar/thunder5.aud b/mods/ura/maps/fort-lonestar/thunder5.aud new file mode 100644 index 0000000..b13f81f Binary files /dev/null and b/mods/ura/maps/fort-lonestar/thunder5.aud differ diff --git a/mods/ura/maps/fort-lonestar/weapons.yaml b/mods/ura/maps/fort-lonestar/weapons.yaml new file mode 100644 index 0000000..0c2ce16 --- /dev/null +++ b/mods/ura/maps/fort-lonestar/weapons.yaml @@ -0,0 +1,173 @@ +120mm: + ReloadDelay: 150 + Range: 10c0 + Burst: 6 + Projectile: Bullet + Speed: 204 + Blockable: false + Inaccuracy: 1c682 + Image: 120MM + ContrailLength: 50 + Warhead@1Dam: SpreadDamage + Spread: 256 + Versus: + None: 75 + Concrete: 100 + Damage: 150 + Warhead@3Eff: CreateEffect + Explosions: self_destruct + +MammothTusk: + ReloadDelay: 300 + Range: 10c0 + ValidTargets: Ground, Air + Projectile: Missile + Blockable: false + Speed: 128 + TrailImage: smokey + ContrailLength: 150 + Inaccuracy: 0c853 + HorizontalRateOfTurn: 10 + RangeLimit: 12c0 + Warhead@1Dam: SpreadDamage + Spread: 640 + ValidTargets: Ground, Air + Versus: + None: 125 + Wood: 110 + Light: 110 + Heavy: 100 + Concrete: 200 + Damage: 250 + Warhead@3Eff: CreateEffect + Explosions: nuke + +TankNapalm: + ReloadDelay: 40 + Range: 8c0 + Report: aacanon3.aud + ValidTargets: Ground + Burst: 6 + BurstDelays: 1 + Projectile: Bullet + Speed: 426 + Image: 120MM + Inaccuracy: 2c512 + TrailImage: smokey + ContrailLength: 2 + Blockable: false + Warhead: SpreadDamage + Spread: 341 + ValidTargets: Ground + Versus: + None: 90 + Wood: 170 + Light: 100 + Heavy: 100 + Concrete: 100 + Damage: 15 + DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath + Warhead@2Smu: LeaveSmudge + SmudgeType: Scorch + Warhead@3Eff: CreateEffect + Explosions: small_explosion + ImpactSounds: firebl3.aud + +ParaBomb: + ReloadDelay: 5 + Range: 5c0 + Projectile: GravityBomb + Image: BOMBLET + OpenSequence: idle + Warhead@1Dam: SpreadDamage + Spread: 426 + Versus: + None: 125 + Wood: 100 + Light: 60 + Concrete: 25 + Damage: 200 + DamageTypes: Prone50Percent, TriggerProne, FireDeath + Warhead@3Eff: CreateEffect + Explosions: napalm + ImpactSounds: firebl3.aud + +155mm: + ReloadDelay: 10 + Range: 7c0 + Burst: 20 + -Report: + Projectile: Bullet + Speed: 170 + TrailImage: fb4 + Image: fb3 + Blockable: false + LaunchAngle: 30 + Inaccuracy: 1c682 + ContrailLength: 2 + Warhead@1Dam: SpreadDamage + Versus: + None: 80 + Wood: 100 + Heavy: 75 + Concrete: 35 + Damage: 20 + DamageTypes: Prone50Percent, TriggerProne, FireDeath + Warhead@3Eff: CreateEffect + Explosions: small_napalm + ImpactSounds: firebl3.aud + +FLAK-23: + ReloadDelay: 10 + Range: 8c0 + Report: aacanon3.aud + ValidTargets: Air, Ground + Projectile: Bullet + Speed: 1c682 + Blockable: false + Warhead: SpreadDamage + Spread: 213 + ValidTargets: Air, Ground + Versus: + None: 35 + Wood: 30 + Light: 30 + Heavy: 40 + Concrete: 30 + Damage: 25 + DamageTypes: Prone50Percent, TriggerProne, DefaultDeath + Warhead@2Smu: LeaveSmudge + SmudgeType: Scorch + Warhead@3Eff: CreateEffect + Explosions: med_explosion + +SCUD: + Range: 7c0 + Projectile: Bullet + Arm: 10 + TrailImage: smokey + Blockable: false + Inaccuracy: 0c426 + LaunchAngle: 216 + Warhead@1Dam: SpreadDamage + Spread: 853 + Falloff: 100, 37, 14, 5, 0 + Versus: + None: 100 + Wood: 90 + Light: 80 + Heavy: 70 + Damage: 500 + AffectsParent: true + Warhead@3Eff: CreateEffect + Explosions: nuke + ImpactSounds: kaboom1.aud + +SilencedPPK: + Range: 25c0 + ValidTargets: Infantry, Vehicle, Husk + InvalidTargets: Water, Structure, Wall + Warhead@1Dam: SpreadDamage + ValidTargets: Infantry, Vehicle, Husk + Versus: + Heavy: 50 diff --git a/mods/ura/maps/great-sahara-2.oramap b/mods/ura/maps/great-sahara-2.oramap new file mode 100644 index 0000000..8b828cd Binary files /dev/null and b/mods/ura/maps/great-sahara-2.oramap differ diff --git a/mods/ura/maps/green-belt.oramap b/mods/ura/maps/green-belt.oramap new file mode 100644 index 0000000..2d56309 Binary files /dev/null and b/mods/ura/maps/green-belt.oramap differ diff --git a/mods/ura/maps/haos-ridges.oramap b/mods/ura/maps/haos-ridges.oramap new file mode 100644 index 0000000..d06c04d Binary files /dev/null and b/mods/ura/maps/haos-ridges.oramap differ diff --git a/mods/ura/maps/hypothermia.oramap b/mods/ura/maps/hypothermia.oramap new file mode 100644 index 0000000..208f989 Binary files /dev/null and b/mods/ura/maps/hypothermia.oramap differ diff --git a/mods/ura/maps/icy-ridge.oramap b/mods/ura/maps/icy-ridge.oramap new file mode 100644 index 0000000..82af158 Binary files /dev/null and b/mods/ura/maps/icy-ridge.oramap differ diff --git a/mods/ura/maps/imminent-destruction.oramap b/mods/ura/maps/imminent-destruction.oramap new file mode 100644 index 0000000..243d391 Binary files /dev/null and b/mods/ura/maps/imminent-destruction.oramap differ diff --git a/mods/ura/maps/infiltration/infiltration.lua b/mods/ura/maps/infiltration/infiltration.lua new file mode 100644 index 0000000..a2ec3fd --- /dev/null +++ b/mods/ura/maps/infiltration/infiltration.lua @@ -0,0 +1,391 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +Difficulty = Map.LobbyOption("difficulty") + +if Difficulty == "hard" then + TimerTicks = DateTime.Minutes(25) +elseif Difficulty == "normal" then + TimerTicks = DateTime.Minutes(28) +else + TimerTicks = DateTime.Minutes(31) +end + +Announcements = +{ + { speech = "TwentyMinutesRemaining", delay = DateTime.Minutes(20) }, + { speech = "TenMinutesRemaining", delay = DateTime.Minutes(10) }, + { speech = "WarningFiveMinutesRemaining", delay = DateTime.Minutes(5) }, + { speech = "WarningFourMinutesRemaining", delay = DateTime.Minutes(4) }, + { speech = "WarningThreeMinutesRemaining", delay = DateTime.Minutes(3) }, + { speech = "WarningTwoMinutesRemaining", delay = DateTime.Minutes(2) }, + { speech = "WarningOneMinuteRemaining", delay = DateTime.Minutes(1) } +} + +TownAttackers = { TownAttacker1, TownAttacker2, TownAttacker3, TownAttacker4, TownAttacker5, TownAttacker6, TownAttacker7 } + +PatrolPoints1 = { PatrolPoint11.Location, PatrolPoint12.Location, PatrolPoint13.Location, PatrolPoint14.Location, PatrolPoint15.Location } +PatrolPoints2 = { PatrolPoint21.Location, PatrolPoint22.Location, PatrolPoint23.Location, PatrolPoint24.Location, PatrolPoint25.Location } +PatrolPoints3 = { PatrolPoint31.Location, PatrolPoint32.Location, PatrolPoint33.Location, PatrolPoint34.Location } +PatrolPoints4 = { PatrolPoint41.Location, PatrolPoint42.Location, PatrolPoint43.Location, PatrolPoint44.Location, PatrolPoint45.Location } + +Patrol1 = { "e1", "e1", "e1", "e1", "e1" } +Patrol2 = { "e1", "dog.patrol", "dog.patrol" } +Patrol3 = { "e1", "e1", "dog.patrol" } + +TransportType = "lst.unselectable.unloadonly" + +SecureLabFailed = function() + Utils.Do(humans, function(player) + if player then + player.MarkFailedObjective(secureLab) + end + end) +end + +timerStarted = false +StartTimer = function() + Utils.Do(humans, function(player) + if player.IsLocalPlayer then + TimerColor = player.Color + end + end) + CountDownTimerAnnouncements() + ticked = TimerTicks + timerStarted = true + Trigger.AfterDelay(DateTime.Seconds(3), function() + Utils.Do(humans, function(player) + Media.PlaySpeechNotification(player, "TimerStarted") + end) + end) +end + +CountDownTimerAnnouncements = function() + for i = #Announcements, 1, -1 do + local delay = TimerTicks - Announcements[i].delay + Trigger.AfterDelay(delay, function() + if not labSecured then + Utils.Do(humans, function(player) + Media.PlaySpeechNotification(player, Announcements[i].speech) + end) + end + end) + end +end + +reinforcementsHaveArrived = false +LabInfiltrated = function() + Utils.Do(humans, function(player) + if player then + secureLab = player.AddPrimaryObjective("Eliminate all units guarding the lab.") + destroyBase = player.AddPrimaryObjective("Destroy the soviet installation.") + player.MarkCompletedObjective(infiltrateLab) + Trigger.ClearAll(Lab) + Trigger.AfterDelay(0, function() + Trigger.OnKilled(Lab, SecureLabFailed) + end) + end + end) + + Camera.Position = ReinforcementsUnloadPoint.CenterPosition + local entryPath = { ReinforcementsEntryPoint.Location, ReinforcementsUnloadPoint.Location } + local exit = { ReinforcementsEntryPoint.Location } + + mcvActors = { "mcv" } + if player2 then + mcvActors = { "mcv", "mcv" } + end + + local reinforcements = Reinforcements.ReinforceWithTransport(allies, TransportType, mcvActors, entryPath, exit) + local mcvs = reinforcements[2] + + Trigger.OnAddedToWorld(mcvs[1], function(mcvUnloaded) + + -- Don't call this twice (because of the owner change) + if mcvUnloaded.Owner == player1 then + return + end + + mcvUnloaded.Owner = player1 + if not player2 then + player1.Cash = 5000 + end + Media.PlaySpeechNotification(player, "AlliedReinforcementsSouth") + StartTimer() + HijackTruck.Destroy() + reinforcementsHaveArrived = true + end) + + if player2 then + Trigger.OnAddedToWorld(mcvs[2], function(mcvUnloaded) + + -- Don't call this twice (because of the owner change) + if mcvUnloaded.Owner == player2 then + return + end + + mcvUnloaded.Owner = player2 + player1.Cash = 2500 + player2.Cash = 2500 + end) + end + + Utils.Do(humans, function(player) + for i = 0, 2 do + Trigger.AfterDelay(DateTime.Seconds(i), function() + Media.PlaySoundNotification(player, "AlertBuzzer") + end) + end + end) + + local attackPoint = BridgeAttackPoint.CenterPosition + local radius = WDist.FromCells(5) + local bridge = Map.ActorsInCircle(attackPoint, radius, function(actor) + return actor.Type == "br3" + end)[1] + BridgeTank.Attack(bridge, true, true) +end + +InfiltrateLabFailed = function() + Utils.Do(humans, function(player) + if player then + player.MarkFailedObjective(infiltrateLab) + end + end) +end + +ChangeOwnerOnAddedToWorld = function(actor, newOwner) + Trigger.OnAddedToWorld(actor, function(unloadedActor) + unloadedActor.Owner = newOwner + Trigger.Clear(unloadedActor, "OnAddedToWorld") + end) +end + +InsertSpies = function() + Utils.Do(humans, function(player) + if player then + infiltrateLab = player.AddPrimaryObjective("Get our spy into the laboratory undetected.") + end + end) + + Trigger.OnKilled(Lab, function() + if not player1.IsObjectiveCompleted(infiltrateLab) then + InfiltrateLabFailed() + end + end) + + -- The delay isn't purely cosmetic, but also prevents a System.InvalidOperationException + -- "Collection was modified after the enumerator was instantiated." in tick_activities + local infiltrationCount = 0 + Trigger.OnInfiltrated(Lab, function() + infiltrationCount = infiltrationCount + 1 + + if (player2 and infiltrationCount == 2) or not player2 then + Trigger.AfterDelay(DateTime.Seconds(3), LabInfiltrated) + end + end) + + spyActors = { "spy.strong" } + if player2 then + spyActors = { "spy.strong", "spy.strong" } + end + + local entryPath = { SpyReinforcementsEntryPoint.Location, SpyReinforcementsUnloadPoint.Location } + local exit = { SpyReinforcementsExitPoint.Location } + local reinforcements = Reinforcements.ReinforceWithTransport(allies, TransportType, spyActors, entryPath, exit) + + local transport = reinforcements[1] + Camera.Position = transport.CenterPosition + + spies = reinforcements[2] + Trigger.OnAnyKilled(spies, InfiltrateLabFailed) + + ChangeOwnerOnAddedToWorld(spies[1], player1) + + if player2 then + ChangeOwnerOnAddedToWorld(spies[2], player2) + end +end + +IdleHunt = function(unit) + Trigger.OnIdle(unit, unit.Hunt) +end + +StopHunt = function(unit) + if not unit.IsDead then + Trigger.Clear(unit, "OnIdle") + end +end + +AttackTown = function() + Utils.Do(TownAttackers, IdleHunt) + + Trigger.OnRemovedFromWorld(Hospital, function() + Utils.Do(TownAttackers, StopHunt) + end) +end + +CapOre = function(player) + if player.Resources > player.ResourceCapacity * 0.9 then + player.Resources = player.ResourceCapacity * 0.8 + end +end + +NewPatrol = function(actorType, start, waypoints) + local guard = Actor.Create(actorType, true, { Owner = soviets, Location = start }) + guard.Patrol(waypoints, true, Utils.RandomInteger(50, 75)) +end + +SetupPatrols = function() + Utils.Do(Patrol1, function(patrol1) NewPatrol(patrol1, PatrolPoints1[1], PatrolPoints1) end) + Utils.Do(Patrol2, function(patrol2) NewPatrol(patrol2, PatrolPoints1[3], PatrolPoints1) end) + Utils.Do(Patrol2, function(patrol3) NewPatrol(patrol3, PatrolPoints3[1], PatrolPoints3) end) + Utils.Do(Patrol2, function(patrol4) NewPatrol(patrol4, PatrolPoints4[1], PatrolPoints4) end) + + if Difficulty == "hard" then + Utils.Do(Patrol3, function(patrol5) NewPatrol(patrol5, PatrolPoints2[1], PatrolPoints2) end) + end + + local checkpoint = { BaseGuardTruckPos.Location } + Trigger.OnEnteredFootprint(checkpoint, function(a, id) + Trigger.RemoveFootprintTrigger(id) + if not BaseGuard.IsDead then + BaseGuard.ScriptedMove(BaseGuardMovePos.Location) + end + end) +end + +ticked = 0 +SecureLabTimer = function() + if not timerStarted or labSecured then + return + end + + if ticked > 0 then + UserInterface.SetMissionText("Secure lab in: " .. Utils.FormatTime(ticked), TimerColor) + ticked = ticked - 1 + elseif ticked <= 0 then + TimerColor = soviets.Color + UserInterface.SetMissionText("The Soviet research laboratory was not secured in time.", TimerColor) + SecureLabFailed() + end +end + +SovietBaseMaintenanceSetup = function() + local sovietbuildings = Utils.Where(Map.NamedActors, function(a) + return a.Owner == soviets + and a.HasProperty("StartBuildingRepairs") and a.HasProperty("Sell") + end) + + -- This includes killed, captured (actor is temporarily removed) and sold. + Trigger.OnAllRemovedFromWorld(sovietbuildings, function() + Utils.Do(humans, function(player) + player.MarkCompletedObjective(destroyBase) + end) + end) + + Utils.Do(sovietbuildings, function(sovietbuilding) + Trigger.OnDamaged(sovietbuilding, function(building) + if building.Owner ~= soviets then + return + end + if building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + if building.Health < building.MaxHealth * 1/4 then + building.Sell() + end + end) + end) +end + +CheckPlayerDefeat = function() + if not reinforcementsHaveArrived then + return + end + + Utils.Do(humans, function(player) + if player.HasNoRequiredUnits() then + player.MarkFailedObjective(destroyBase) + end + end) +end + +labSecured = false +CheckLabSecured = function() + if not reinforcementsHaveArrived or labSecured then + return + end + + if player1.HasNoRequiredUnits() or (player2 and player2.HasNoRequiredUnits()) then + Utils.Do(humans, function(player) + player.MarkFailedObjective(secureLab) + end) + end + + local radius = WDist.FromCells(10) + local labGuards = Utils.Where(Map.ActorsInCircle(LabWaypoint.CenterPosition, radius), function(a) + return a.Owner == soviets and a.HasProperty("Move") + end) + + if #labGuards < 1 then + labSecured = true + Utils.Do(humans, function(player) + player.MarkCompletedObjective(secureLab) + end) + UserInterface.SetMissionText("") + end +end + +Tick = function() + CapOre(soviets) + SecureLabTimer() + CheckLabSecured() + CheckPlayerDefeat() +end + +WorldLoaded = function() + allies = Player.GetPlayer("Allies") + neutral = Player.GetPlayer("Neutral") + creeps = Player.GetPlayer("Creeps") + soviets = Player.GetPlayer("Soviets") + + player1 = Player.GetPlayer("Allies1") + player2 = Player.GetPlayer("Allies2") + humans = { player1, player2 } + + Utils.Do(humans, function(player) + if player and player.IsLocalPlayer then + Trigger.OnObjectiveAdded(player, function(p, id) + local objectiveType = string.lower(p.GetObjectiveType(id)) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. objectiveType .. " objective") + end) + + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + end + end) + + InsertSpies() + AttackTown() + SetupPatrols() + SovietBaseMaintenanceSetup() +end diff --git a/mods/ura/maps/infiltration/map.bin b/mods/ura/maps/infiltration/map.bin new file mode 100644 index 0000000..3fc82e3 Binary files /dev/null and b/mods/ura/maps/infiltration/map.bin differ diff --git a/mods/ura/maps/infiltration/map.png b/mods/ura/maps/infiltration/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/infiltration/map.png differ diff --git a/mods/ura/maps/infiltration/map.yaml b/mods/ura/maps/infiltration/map.yaml new file mode 100644 index 0000000..7b4d387 --- /dev/null +++ b/mods/ura/maps/infiltration/map.yaml @@ -0,0 +1,1788 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Infiltration + +Author: Scott_NZ + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 16,16,96,96 + +Visibility: Lobby, MissionSelector + +Categories: Mission, Cooperative Mission + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: allies + Enemies: Soviets + PlayerReference@Allies1: + Name: Allies1 + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: ABB7E4 + LockSpawn: True + LockTeam: True + Allies: Allies2, Allies + Enemies: Soviets + PlayerReference@Allies2: + Name: Allies2 + AllowBots: False + Playable: True + LockFaction: True + Faction: allies + LockColor: True + Color: A1EF8C + LockSpawn: True + LockTeam: True + Allies: Allies1, Allies + Enemies: Soviets + PlayerReference@Allies: + Name: Allies + Faction: allies + Color: 5CC1A3 + Allies: Allies1, Allies2 + Enemies: Soviets + PlayerReference@Soviets: + Name: Soviets + Faction: soviet + Color: FE1100 + Enemies: Allies1, Allies2, Allies, Creeps + +Actors: + Actor2: v07 + Location: 58,83 + Owner: Creeps + Actor1: v05 + Location: 54,89 + Owner: Creeps + Actor56: t01 + Location: 68,97 + Owner: Neutral + Actor5: v03 + Location: 66,84 + Owner: Creeps + Actor25: t16 + Location: 69,64 + Owner: Neutral + Actor68: t08 + Location: 65,93 + Owner: Neutral + Actor26: tc04 + Location: 69,61 + Owner: Neutral + Actor27: t02 + Location: 68,63 + Owner: Neutral + Actor28: t07 + Location: 67,78 + Owner: Neutral + Actor30: t08 + Location: 81,88 + Owner: Neutral + Actor31: t14 + Location: 84,88 + Owner: Neutral + Actor33: t10 + Location: 73,83 + Owner: Neutral + Actor8: v07 + Location: 66,95 + Owner: Creeps + Actor0: v04 + Location: 58,90 + Owner: Creeps + Actor41: t12 + Location: 73,69 + Owner: Neutral + Actor44: t13 + Location: 83,78 + Owner: Neutral + Actor47: v01 + Location: 70,84 + Owner: Creeps + Actor10: v02 + Location: 73,90 + Owner: Creeps + Actor236: sbag + Location: 66,36 + Owner: Soviets + Actor233: sbag + Location: 66,35 + Owner: Soviets + Actor235: sbag + Location: 68,35 + Owner: Soviets + Actor234: sbag + Location: 67,35 + Owner: Soviets + Actor222: hpad + Location: 56,36 + Owner: Soviets + Actor57: t07 + Location: 74,64 + Owner: Neutral + Actor49: tc02 + Location: 63,79 + Owner: Neutral + Actor48: t14 + Location: 63,90 + Owner: Neutral + Actor66: tc03 + Location: 87,89 + Owner: Neutral + Actor77: mine + Location: 96,85 + Owner: Neutral + Actor78: tc04 + Location: 103,78 + Owner: Neutral + Actor80: t07 + Location: 81,81 + Owner: Neutral + Actor81: t06 + Location: 111,82 + Owner: Neutral + Actor82: t03 + Location: 110,76 + Owner: Neutral + Actor84: tc02 + Location: 94,75 + Owner: Neutral + Actor9: v01 + Location: 64,94 + Owner: Creeps + Actor53: powr + Location: 86,65 + Owner: Soviets + Actor113: tc05 + Location: 86,59 + Owner: Neutral + Actor51: barr + Location: 93,70 + Owner: Soviets + Lab: miss + Location: 34,30 + Owner: Soviets + LabWaypoint: waypoint + Location: 34,30 + Owner: Neutral + Actor45: brik + Location: 39,34 + Owner: Soviets + Actor43: brik + Location: 39,33 + Owner: Soviets + Actor42: brik + Location: 39,32 + Owner: Soviets + Actor39: brik + Location: 39,31 + Owner: Soviets + Actor38: brik + Location: 39,30 + Owner: Soviets + Actor34: brik + Location: 38,28 + Owner: Soviets + Actor36: brik + Location: 39,29 + Owner: Soviets + Actor494: e4 + Location: 98,38 + Owner: Soviets + Actor495: e4 + Location: 48,34 + Owner: Soviets + Actor58: brik + Location: 32,28 + Owner: Soviets + Actor35: brik + Location: 39,28 + Owner: Soviets + Actor110: e1 + Location: 33,28 + Owner: Soviets + Actor60: apwr + Location: 44,46 + Owner: Soviets + Actor22: brik + Location: 32,34 + Owner: Soviets + Actor95: brik + Location: 32,29 + Owner: Soviets + Actor97: brik + Location: 32,30 + Owner: Soviets + Actor98: brik + Location: 32,31 + Owner: Soviets + Actor100: brik + Location: 32,33 + Owner: Soviets + Actor263: 3tnk + Location: 37,35 + Owner: Soviets + Actor138: e2 + Location: 39,37 + Owner: Soviets + Actor99: brik + Location: 32,32 + Owner: Soviets + Actor106: hpad + Location: 34,42 + Owner: Soviets + Actor21: brik + Location: 33,34 + Owner: Soviets + Actor14: brik + Location: 32,35 + Owner: Soviets + Actor55: brik + Location: 32,26 + Owner: Soviets + Actor40: apwr + Location: 44,43 + Owner: Soviets + Actor69: barr + Location: 60,33 + Owner: Soviets + Actor96: barr + Location: 107,36 + Owner: Soviets + Actor94: barr + Location: 39,41 + Owner: Soviets + Actor102: ftur + Location: 46,39 + Owner: Soviets + Actor4: brik + Location: 38,34 + Owner: Soviets + Actor121: e1 + Location: 100,21 + Owner: Soviets + Actor59: sam + Location: 47,60 + Owner: Soviets + TurretFacing: 160 + Actor61: apwr + Location: 45,49 + Owner: Soviets + Actor62: apwr + Location: 46,52 + Owner: Soviets + Actor29: brik + Location: 35,26 + Owner: Soviets + Actor76: ftur + Location: 78,22 + Owner: Soviets + Actor83: ftur + Location: 67,34 + Owner: Soviets + Actor73: spen + Location: 31,82 + Owner: Soviets + Actor37: dome + Location: 44,57 + Owner: Soviets + Actor65: sam + Location: 50,37 + Owner: Soviets + TurretFacing: 192 + Actor70: spen + Location: 39,71 + Owner: Soviets + Actor71: spen + Location: 25,68 + Owner: Soviets + Actor64: sam + Location: 28,43 + Owner: Soviets + TurretFacing: 48 + Actor72: spen + Location: 23,76 + Owner: Soviets + Actor67: fact + Location: 42,52 + Owner: Soviets + Actor85: kenn + Location: 58,32 + Owner: Soviets + Actor103: afld + Location: 34,51 + Owner: Soviets + Actor20: fcom + Location: 39,50 + Owner: Soviets + Actor18: afld + Location: 34,45 + Owner: Soviets + Actor79: afld + Location: 34,47 + Owner: Soviets + Actor74: ftur + Location: 31,36 + Owner: Soviets + Actor32: brik + Location: 34,26 + Owner: Soviets + Actor493: e4 + Location: 102,24 + Owner: Soviets + Actor274: e3 + Location: 34,41 + Owner: Soviets + Actor452: e4 + Location: 34,32 + Owner: Soviets + Actor112: fenc + Location: 96,39 + Owner: Soviets + Actor15: brik + Location: 33,35 + Owner: Soviets + Actor126: e1 + Location: 109,22 + Owner: Soviets + Actor107: hpad + Location: 36,42 + Owner: Soviets + Actor129: kenn + Location: 110,37 + Owner: Soviets + Actor108: stek + Location: 38,55 + Owner: Soviets + Actor7: brik + Location: 38,35 + Owner: Soviets + Actor46: brik + Location: 33,26 + Owner: Soviets + Actor6: brik + Location: 39,35 + Owner: Soviets + Actor117: fenc + Location: 98,39 + Owner: Soviets + Actor116: fenc + Location: 97,39 + Owner: Soviets + Actor111: fenc + Location: 95,37 + Owner: Soviets + Actor16: fenc + Location: 95,38 + Owner: Soviets + Actor13: fenc + Location: 95,39 + Owner: Soviets + Actor120: e1 + Location: 107,41 + Owner: Soviets + Actor119: e1 + Location: 99,41 + Owner: Soviets + Actor279: dog + Location: 101,38 + Owner: Soviets + Actor151: fenc + Location: 111,39 + Owner: Soviets + Actor125: fenc + Location: 110,39 + Owner: Soviets + Actor124: fenc + Location: 109,39 + Owner: Soviets + Actor127: fenc + Location: 99,39 + Owner: Soviets + Actor148: e1 + Location: 92,20 + Owner: Soviets + Actor128: ftur + Location: 42,61 + Owner: Soviets + Actor93: afld + Location: 34,49 + Owner: Soviets + Actor101: kenn + Location: 41,47 + Owner: Soviets + Actor133: apwr + Location: 97,16 + Owner: Soviets + Actor131: apwr + Location: 107,16 + Owner: Soviets + Actor132: apwr + Location: 107,19 + Owner: Soviets + Actor130: apwr + Location: 101,16 + Owner: Soviets + Actor134: proc + Location: 106,30 + Owner: Soviets + Actor135: fix + Location: 102,25 + Owner: Soviets + Actor136: dome + Location: 107,25 + Owner: Soviets + HijackFactory: weap + Location: 98,32 + Owner: Soviets + Actor12: sam + Location: 34,27 + Owner: Soviets + Actor297: v08 + Location: 68,95 + Owner: Creeps + Actor142: fenc + Location: 91,16 + Owner: Soviets + Actor141: fenc + Location: 91,17 + Owner: Soviets + Actor140: fenc + Location: 91,18 + Owner: Soviets + Actor139: fenc + Location: 91,19 + Owner: Soviets + Actor145: ftur + Location: 90,23 + Owner: Soviets + Actor146: ftur + Location: 90,19 + Owner: Soviets + Actor147: e1 + Location: 92,23 + Owner: Soviets + Actor118: ftur + Location: 99,40 + Owner: Soviets + Actor149: fact + Location: 95,25 + Owner: Soviets + Actor304: 3tnk + Location: 106,38 + Owner: Soviets + Facing: 96 + Actor488: t02 + Location: 110,28 + Owner: Neutral + Actor123: fenc + Location: 108,39 + Owner: Soviets + Actor153: apwr + Location: 101,19 + Owner: Soviets + Actor154: apwr + Location: 93,16 + Owner: Soviets + Actor155: powr + Location: 45,41 + Owner: Soviets + Actor156: apwr + Location: 47,55 + Owner: Soviets + Actor157: tc02 + Location: 27,46 + Owner: Neutral + Actor158: t12 + Location: 26,46 + Owner: Neutral + Actor159: tc05 + Location: 23,45 + Owner: Neutral + Actor160: tc04 + Location: 23,43 + Owner: Neutral + Actor161: e1 + Location: 22,42 + Owner: Soviets + Actor162: t12 + Location: 22,39 + Owner: Neutral + Actor163: t03 + Location: 24,36 + Owner: Neutral + Actor164: t01 + Location: 23,38 + Owner: Neutral + Actor165: t15 + Location: 23,36 + Owner: Neutral + Actor166: tc05 + Location: 22,33 + Owner: Neutral + Actor167: t02 + Location: 25,31 + Owner: Neutral + Actor168: t03 + Location: 26,26 + Owner: Neutral + Actor169: tc04 + Location: 28,19 + Owner: Neutral + Actor170: t11 + Location: 25,28 + Owner: Neutral + Actor171: tc02 + Location: 23,30 + Owner: Neutral + Actor172: tc05 + Location: 26,24 + Owner: Neutral + Actor173: t01 + Location: 28,21 + Owner: Neutral + Actor174: t03 + Location: 31,20 + Owner: Neutral + Actor63: apwr + Location: 32,53 + Owner: Soviets + Actor176: tc02 + Location: 50,62 + Owner: Neutral + Actor177: tc01 + Location: 52,51 + Owner: Neutral + Actor178: t17 + Location: 51,44 + Owner: Neutral + Actor179: t07 + Location: 30,39 + Owner: Neutral + Actor175: sam + Location: 30,58 + Owner: Soviets + TurretFacing: 96 + Actor181: t12 + Location: 27,54 + Owner: Neutral + Actor182: t08 + Location: 28,56 + Owner: Neutral + Actor183: t06 + Location: 47,25 + Owner: Neutral + Actor184: t05 + Location: 41,26 + Owner: Neutral + Actor185: tc02 + Location: 43,22 + Owner: Neutral + Actor186: tc05 + Location: 49,20 + Owner: Neutral + Actor187: t15 + Location: 44,19 + Owner: Neutral + Actor188: tc05 + Location: 46,21 + Owner: Neutral + Actor189: tc04 + Location: 41,20 + Owner: Neutral + Actor190: t03 + Location: 37,20 + Owner: Neutral + Actor191: tc04 + Location: 54,38 + Owner: Neutral + Actor192: tc05 + Location: 59,38 + Owner: Neutral + Actor193: tc02 + Location: 49,45 + Owner: Neutral + Actor194: t03 + Location: 54,40 + Owner: Neutral + Actor195: t03 + Location: 35,72 + Owner: Neutral + Actor196: tc01 + Location: 30,71 + Owner: Neutral + Actor197: t08 + Location: 27,79 + Owner: Neutral + Actor198: t15 + Location: 52,57 + Owner: Neutral + Actor199: tc01 + Location: 49,34 + Owner: Neutral + Actor200: t11 + Location: 28,28 + Owner: Neutral + Actor201: t07 + Location: 38,64 + Owner: Neutral + Actor202: t06 + Location: 50,54 + Owner: Neutral + Actor203: t12 + Location: 60,31 + Owner: Neutral + Actor204: tc02 + Location: 74,16 + Owner: Neutral + Actor205: t07 + Location: 69,19 + Owner: Neutral + Actor206: tc04 + Location: 87,16 + Owner: Neutral + Actor207: tc05 + Location: 84,16 + Owner: Neutral + Actor208: tc03 + Location: 82,18 + Owner: Neutral + Actor209: t16 + Location: 84,18 + Owner: Neutral + Actor210: tc02 + Location: 82,15 + Owner: Neutral + Actor211: t02 + Location: 74,18 + Owner: Neutral + Actor212: t01 + Location: 92,29 + Owner: Neutral + Actor213: t16 + Location: 102,22 + Owner: Neutral + Actor214: silo + Location: 109,29 + Owner: Soviets + Actor215: t01 + Location: 96,36 + Owner: Neutral + Actor216: mine + Location: 103,57 + Owner: Neutral + Actor218: fenc + Location: 81,65 + Owner: Soviets + Actor219: fenc + Location: 81,66 + Owner: Soviets + Actor220: fenc + Location: 81,67 + Owner: Soviets + Actor221: 4tnk + Location: 39,46 + Owner: Soviets + Facing: 0 + Actor228: brik + Location: 102,34 + Owner: Soviets + Actor514: brik + Location: 103,34 + Owner: Soviets + Actor227: e1 + Location: 98,28 + Owner: Soviets + Actor226: fenc + Location: 95,35 + Owner: Soviets + Actor225: fenc + Location: 95,36 + Owner: Soviets + Actor224: 4tnk + Location: 103,30 + Owner: Soviets + Actor144: 4tnk + Location: 42,58 + Owner: Soviets + Actor52: hpad + Location: 83,65 + Owner: Soviets + Actor387: powr + Location: 89,64 + Owner: Soviets + Actor231: e1 + Location: 104,40 + Owner: Soviets + Actor238: sbag + Location: 65,37 + Owner: Soviets + Actor237: sbag + Location: 66,37 + Owner: Soviets + Actor229: v2rl + Location: 96,19 + Owner: Soviets + Facing: 64 + Actor137: e1 + Location: 66,34 + Owner: Soviets + Actor50: fenc + Location: 81,68 + Owner: Soviets + Actor242: ftur + Location: 90,74 + Owner: Soviets + Actor241: fenc + Location: 93,74 + Owner: Soviets + Actor240: fenc + Location: 94,74 + Owner: Soviets + Actor239: fenc + Location: 95,74 + Owner: Soviets + Actor232: fenc + Location: 96,74 + Owner: Soviets + Actor244: sbag + Location: 64,37 + Owner: Soviets + Actor245: e3 + Location: 67,36 + Owner: Soviets + Actor246: e3 + Location: 63,38 + Owner: Soviets + Actor247: e1 + Location: 69,34 + Owner: Soviets + Actor248: e1 + Location: 57,35 + Owner: Soviets + Actor249: e1 + Location: 59,33 + Owner: Soviets + Actor250: e1 + Location: 47,31 + Owner: Soviets + Actor251: e1 + Location: 42,38 + Owner: Soviets + Actor252: e1 + Location: 46,38 + Owner: Soviets + Actor253: e1 + Location: 49,27 + Owner: Soviets + Actor254: e1 + Location: 37,64 + Owner: Soviets + Actor255: e1 + Location: 32,63 + Owner: Soviets + Actor256: e1 + Location: 40,58 + Owner: Soviets + Actor257: e1 + Location: 44,61 + Owner: Soviets + Actor322: v2rl + Location: 36,57 + Owner: Soviets + Actor259: e1 + Location: 43,48 + Owner: Soviets + Actor260: e1 + Location: 37,45 + Owner: Soviets + Actor261: e1 + Location: 31,40 + Owner: Soviets + Actor262: e1 + Location: 37,31 + Owner: Soviets + Actor17: brik + Location: 37,28 + Owner: Soviets + Actor264: v2rl + Location: 50,36 + Owner: Soviets + Facing: 192 + Actor266: 3tnk + Location: 88,70 + Owner: Soviets + Actor268: dog + Location: 64,34 + Owner: Soviets + Actor269: dog + Location: 44,38 + Owner: Soviets + Actor180: apwr + Location: 31,59 + Owner: Soviets + Actor270: dog + Location: 43,60 + Owner: Soviets + Actor265: 3tnk + Location: 90,46 + Owner: Soviets + Actor271: dog + Location: 37,40 + Owner: Soviets + Actor122: fenc + Location: 107,39 + Owner: Soviets + Actor152: ftur + Location: 107,40 + Owner: Soviets + Actor275: tc02 + Location: 74,48 + Owner: Neutral + Actor276: t03 + Location: 91,43 + Owner: Neutral + Actor272: 3tnk + Location: 102,37 + Owner: Soviets + Facing: 160 + Actor280: t16 + Location: 87,41 + Owner: Neutral + Actor281: tc02 + Location: 85,42 + Owner: Neutral + Actor282: t02 + Location: 85,48 + Owner: Neutral + Actor283: t13 + Location: 72,54 + Owner: Neutral + Actor284: t03 + Location: 84,56 + Owner: Neutral + Actor285: tc02 + Location: 109,52 + Owner: Neutral + Actor286: t03 + Location: 110,61 + Owner: Neutral + Actor287: t07 + Location: 100,62 + Owner: Neutral + Actor288: t06 + Location: 91,53 + Owner: Neutral + Actor289: t13 + Location: 81,47 + Owner: Neutral + Actor290: t12 + Location: 110,42 + Owner: Neutral + Actor291: t02 + Location: 102,49 + Owner: Neutral + Actor292: tc04 + Location: 87,38 + Owner: Neutral + Actor293: t02 + Location: 86,40 + Owner: Neutral + Actor294: t11 + Location: 89,42 + Owner: Neutral + Actor295: t07 + Location: 84,40 + Owner: Neutral + PatrolPoint22: waypoint + Location: 92,49 + Owner: Neutral + Actor515: wood + Location: 66,100 + Owner: Neutral + Actor298: t01 + Location: 90,61 + Owner: Neutral + Actor299: t13 + Location: 108,66 + Owner: Neutral + Actor300: dog + Location: 41,49 + Owner: Soviets + Actor338: ss + Location: 57,64 + Owner: Soviets + Actor301: mine + Location: 101,55 + Owner: Neutral + Actor337: ss + Location: 19,80 + Owner: Soviets + Actor316: ss + Location: 32,92 + Owner: Soviets + Actor336: ss + Location: 46,80 + Owner: Soviets + Actor308: tc02 + Location: 78,104 + Owner: Neutral + Actor309: t15 + Location: 72,101 + Owner: Neutral + Actor310: oilb + Location: 77,17 + Owner: Soviets + Actor307: tc02 + Location: 82,97 + Owner: Neutral + Actor311: oilb + Location: 32,76 + Owner: Soviets + Actor114: c1 + Location: 69,84 + Owner: Creeps + Actor217: c3 + Location: 63,96 + Owner: Creeps + Actor54: c1 + Location: 67,99 + Owner: Creeps + Actor317: e2 + Location: 106,26 + Owner: Soviets + Actor318: e2 + Location: 94,20 + Owner: Soviets + Actor319: e3 + Location: 97,29 + Owner: Soviets + Actor320: e3 + Location: 109,27 + Owner: Soviets + Actor321: e3 + Location: 48,36 + Owner: Soviets + Actor267: dog + Location: 35,61 + Owner: Soviets + Actor323: e3 + Location: 30,43 + Owner: Soviets + Actor324: e3 + Location: 38,30 + Owner: Soviets + Actor325: e2 + Location: 32,36 + Owner: Soviets + Actor326: e2 + Location: 62,35 + Owner: Soviets + Actor327: e2 + Location: 37,48 + Owner: Soviets + Actor329: e2 + Location: 46,28 + Owner: Soviets + Actor330: e2 + Location: 35,67 + Owner: Soviets + Actor331: e1 + Location: 27,78 + Owner: Soviets + Actor332: e2 + Location: 29,79 + Owner: Soviets + Actor333: e1 + Location: 75,22 + Owner: Soviets + Actor334: e2 + Location: 101,29 + Owner: Soviets + Actor335: e2 + Location: 77,20 + Owner: Soviets + SpyReinforcementsExitPoint: waypoint + Location: 48,111 + Owner: Neutral + Actor305: ss + Location: 19,101 + Owner: Soviets + Actor258: apwr + Location: 32,56 + Owner: Soviets + Actor340: v09 + Location: 72,86 + Owner: Creeps + Actor339: e1 + Location: 21,35 + Owner: Soviets + Actor342: v05 + Location: 68,88 + Owner: Creeps + Actor341: e1 + Location: 24,27 + Owner: Soviets + Actor344: v08 + Location: 65,99 + Owner: Creeps + Actor345: v16 + Location: 59,97 + Owner: Neutral + Actor346: v18 + Location: 60,97 + Owner: Neutral + Actor347: v17 + Location: 61,97 + Owner: Neutral + Actor348: v06 + Location: 60,96 + Owner: Creeps + Actor349: v14 + Location: 66,83 + Owner: Neutral + Actor351: t11 + Location: 62,100 + Owner: Neutral + Actor352: tc04 + Location: 55,94 + Owner: Neutral + Actor353: tc03 + Location: 56,96 + Owner: Neutral + Actor354: t12 + Location: 68,99 + Owner: Neutral + Actor355: tc01 + Location: 66,93 + Owner: Neutral + Actor356: tc02 + Location: 66,89 + Owner: Neutral + Actor357: t10 + Location: 60,88 + Owner: Neutral + Actor358: t14 + Location: 59,87 + Owner: Neutral + Actor359: tc04 + Location: 58,88 + Owner: Neutral + Actor360: tc02 + Location: 58,80 + Owner: Neutral + Actor361: tc01 + Location: 79,92 + Owner: Neutral + Actor362: t07 + Location: 77,89 + Owner: Neutral + Actor363: t02 + Location: 77,84 + Owner: Neutral + Actor364: t01 + Location: 73,91 + Owner: Neutral + Actor273: v10 + Location: 58,86 + Owner: Creeps + Actor343: e1 + Location: 28,49 + Owner: Soviets + Actor367: e1 + Location: 27,60 + Owner: Soviets + Actor368: t02 + Location: 75,92 + Owner: Neutral + Actor369: tc03 + Location: 75,84 + Owner: Neutral + Actor370: t16 + Location: 99,98 + Owner: Neutral + Actor371: t02 + Location: 110,92 + Owner: Neutral + Actor372: t08 + Location: 89,96 + Owner: Neutral + Actor373: tc03 + Location: 94,100 + Owner: Neutral + Actor374: wood + Location: 67,100 + Owner: Neutral + Actor375: e1 + Location: 89,47 + Owner: Soviets + Actor376: e1 + Location: 91,46 + Owner: Soviets + Actor377: dog + Location: 91,48 + Owner: Soviets + Actor378: t10 + Location: 81,74 + Owner: Neutral + Actor379: tc02 + Location: 100,75 + Owner: Neutral + Actor380: tc05 + Location: 99,72 + Owner: Neutral + Actor381: tc04 + Location: 103,74 + Owner: Neutral + Actor382: tc03 + Location: 104,72 + Owner: Neutral + Actor383: tc02 + Location: 109,65 + Owner: Neutral + Actor384: t07 + Location: 103,65 + Owner: Neutral + Actor385: t06 + Location: 91,64 + Owner: Neutral + Actor386: t05 + Location: 100,68 + Owner: Neutral + Actor243: ftur + Location: 81,69 + Owner: Soviets + Actor223: e3 + Location: 39,53 + Owner: Soviets + Actor278: ftur + Location: 37,58 + Owner: Soviets + Actor391: ftur + Location: 94,66 + Owner: Soviets + Actor392: e1 + Location: 83,69 + Owner: Soviets + Actor393: e1 + Location: 90,76 + Owner: Soviets + Actor394: e1 + Location: 92,67 + Owner: Soviets + Actor395: e2 + Location: 88,67 + Owner: Soviets + Actor396: e2 + Location: 85,75 + Owner: Soviets + Actor397: e1 + Location: 96,72 + Owner: Soviets + Actor398: e1 + Location: 89,71 + Owner: Soviets + Actor399: tsla + Location: 94,22 + Owner: Soviets + Actor400: e1 + Location: 49,66 + Owner: Soviets + Actor402: ftur + Location: 26,40 + Owner: Soviets + Actor328: v2rl + Location: 27,37 + Owner: Soviets + Facing: 64 + Actor366: powr + Location: 35,54 + Owner: Soviets + Actor403: powr + Location: 56,31 + Owner: Soviets + SpyReinforcementsEntryPoint: waypoint + Location: 16,107 + Owner: Neutral + Actor404: ss + Location: 80,33 + Owner: Soviets + Actor405: ss + Location: 65,47 + Owner: Soviets + Actor406: ss + Location: 20,56 + Owner: Soviets + Actor312: t17 + Location: 88,100 + Owner: Neutral + PatrolPoint13: waypoint + Location: 81,86 + Owner: Neutral + PatrolPoint12: waypoint + Location: 74,78 + Owner: Neutral + PatrolPoint11: waypoint + Location: 77,70 + Owner: Neutral + PatrolPoint15: waypoint + Location: 88,73 + Owner: Neutral + PatrolPoint14: waypoint + Location: 91,83 + Owner: Neutral + PatrolPoint21: waypoint + Location: 105,45 + Owner: Neutral + PatrolPoint23: waypoint + Location: 78,53 + Owner: Neutral + PatrolPoint24: waypoint + Location: 92,56 + Owner: Neutral + PatrolPoint25: waypoint + Location: 106,53 + Owner: Neutral + Actor409: e1 + Location: 76,59 + Owner: Soviets + Actor410: v2rl + Location: 74,59 + Owner: Soviets + Actor3: dog + Location: 74,52 + Owner: Soviets + Actor416: dog + Location: 82,73 + Owner: Soviets + Actor413: sbag + Location: 75,60 + Owner: Soviets + Actor414: sbag + Location: 74,60 + Owner: Soviets + Actor412: proc + Location: 84,68 + Owner: Soviets + Actor472: brl3 + Location: 77,101 + Owner: Soviets + Actor417: sbag + Location: 73,60 + Owner: Soviets + Actor296: kenn + Location: 90,68 + Owner: Soviets + Actor303: e2 + Location: 100,38 + Owner: Soviets + Actor408: dog + Location: 108,42 + Owner: Soviets + Actor418: dog + Location: 109,74 + Owner: Soviets + Actor419: e1 + Location: 108,75 + Owner: Soviets + Actor420: e1 + Location: 110,75 + Owner: Soviets + Actor421: sbag + Location: 108,73 + Owner: Soviets + Actor422: sbag + Location: 109,73 + Owner: Soviets + Actor423: sbag + Location: 110,73 + Owner: Soviets + Actor424: sbag + Location: 111,73 + Owner: Soviets + PatrolPoint43: waypoint + Location: 109,51 + Owner: Neutral + PatrolPoint42: waypoint + Location: 109,44 + Owner: Neutral + PatrolPoint41: waypoint + Location: 102,41 + Owner: Neutral + PatrolPoint45: waypoint + Location: 93,42 + Owner: Neutral + PatrolPoint44: waypoint + Location: 96,53 + Owner: Neutral + Actor425: dog + Location: 79,22 + Owner: Soviets + Actor426: dog + Location: 93,19 + Owner: Soviets + Actor427: dog + Location: 104,24 + Owner: Soviets + HijackTruck: truk.hijackable + Location: 99,34 + Owner: Soviets + Facing: 160 + BaseGuard: e1 + Location: 63,36 + Owner: Soviets + Actor429: cycl + Location: 63,33 + Owner: Soviets + Actor428: cycl + Location: 63,34 + Owner: Soviets + Actor230: cycl + Location: 63,35 + Owner: Soviets + Actor430: sbag + Location: 68,34 + Owner: Soviets + Actor431: sbag + Location: 68,33 + Owner: Soviets + Actor432: cycl + Location: 63,32 + Owner: Soviets + Actor433: sbag + Location: 63,37 + Owner: Soviets + BaseGuardMovePos: waypoint + Location: 62,37 + Owner: Neutral + BaseGuardTruckPos: waypoint + Location: 64,36 + Owner: Neutral + Actor411: e2 + Location: 73,53 + Owner: Soviets + Actor434: e1 + Location: 94,54 + Owner: Soviets + Actor435: dog + Location: 95,54 + Owner: Soviets + Actor436: e1 + Location: 82,44 + Owner: Soviets + Actor437: e1 + Location: 80,43 + Owner: Soviets + Actor438: dog + Location: 81,43 + Owner: Soviets + Actor439: e1 + Location: 109,48 + Owner: Soviets + Actor440: dog + Location: 108,48 + Owner: Soviets + Actor441: 3tnk + Location: 108,47 + Owner: Soviets + Actor442: brl3 + Location: 82,65 + Owner: Soviets + Actor443: brl3 + Location: 82,66 + Owner: Soviets + Actor444: barl + Location: 83,67 + Owner: Soviets + Actor445: brl3 + Location: 88,65 + Owner: Soviets + Actor446: barl + Location: 89,66 + Owner: Soviets + Actor447: barl + Location: 87,67 + Owner: Soviets + Actor448: brl3 + Location: 89,67 + Owner: Soviets + Actor450: barl + Location: 109,28 + Owner: Soviets + Actor449: brl3 + Location: 107,27 + Owner: Soviets + Actor454: e2 + Location: 38,32 + Owner: Soviets + Actor451: barl + Location: 108,29 + Owner: Soviets + Actor453: brl3 + Location: 38,31 + Owner: Soviets + LabTruck: truk + Location: 36,32 + Owner: Soviets + Actor455: silo + Location: 82,67 + Owner: Soviets + Actor456: e1 + Location: 85,66 + Owner: Soviets + Actor457: t06 + Location: 101,92 + Owner: Neutral + Actor115: c2 + Location: 56,89 + Owner: Creeps + Actor459: e1 + Location: 79,102 + Owner: Soviets + Actor460: sbag + Location: 80,103 + Owner: Soviets + Actor462: hpad + Location: 75,100 + Owner: Soviets + Actor463: sbag + Location: 79,103 + Owner: Soviets + Actor464: sbag + Location: 78,103 + Owner: Soviets + Actor465: sbag + Location: 77,103 + Owner: Soviets + Actor466: sbag + Location: 76,103 + Owner: Soviets + Actor467: sbag + Location: 76,102 + Owner: Soviets + Actor468: sbag + Location: 75,102 + Owner: Soviets + Actor469: sbag + Location: 74,102 + Owner: Soviets + Actor470: sbag + Location: 74,101 + Owner: Soviets + Actor471: powr + Location: 79,98 + Owner: Soviets + Actor415: sam + Location: 77,102 + Owner: Soviets + TurretFacing: 128 + Actor475: brl3 + Location: 79,97 + Owner: Soviets + Actor407: ftur + Location: 76,98 + Owner: Soviets + Actor473: barl + Location: 78,98 + Owner: Soviets + Actor461: e2 + Location: 78,97 + Owner: Soviets + Actor481: fenc + Location: 82,99 + Owner: Soviets + Actor482: fenc + Location: 82,100 + Owner: Soviets + Actor483: fenc + Location: 81,99 + Owner: Soviets + Actor484: fenc + Location: 81,98 + Owner: Soviets + ReinforcementsEntryPoint: waypoint + Location: 92,111 + Owner: Neutral + ReinforcementsUnloadPoint: waypoint + Location: 92,103 + Owner: Neutral + Actor474: mine + Location: 95,86 + Owner: Neutral + Actor480: fenc + Location: 87,74 + Owner: Soviets + Actor485: fenc + Location: 86,74 + Owner: Soviets + Actor486: fenc + Location: 85,74 + Owner: Soviets + Actor487: fenc + Location: 84,74 + Owner: Soviets + Actor313: c3 + Location: 65,86 + Owner: Creeps + Actor314: c4 + Location: 72,91 + Owner: Creeps + Actor315: c4 + Location: 58,92 + Owner: Creeps + Actor458: c8 + Location: 68,94 + Owner: Creeps + Actor476: c9 + Location: 59,98 + Owner: Creeps + Actor477: c10 + Location: 57,82 + Owner: Creeps + Actor478: c7 + Location: 69,89 + Owner: Creeps + Actor479: c6 + Location: 73,89 + Owner: Creeps + Actor150: silo + Location: 109,31 + Owner: Soviets + Actor489: silo + Location: 110,30 + Owner: Soviets + Actor490: silo + Location: 108,30 + Owner: Soviets + Actor306: e2 + Location: 43,56 + Owner: Soviets + Actor365: e3 + Location: 40,54 + Owner: Soviets + Actor388: e1 + Location: 38,50 + Owner: Soviets + Actor389: e1 + Location: 48,58 + Owner: Soviets + Actor390: e2 + Location: 42,43 + Owner: Soviets + Actor491: e1 + Location: 42,41 + Owner: Soviets + Actor492: e1 + Location: 35,35 + Owner: Soviets + BridgeTank: 3tnk + Location: 76,20 + Owner: Soviets + BridgeAttackPoint: waypoint + Location: 74,25 + Owner: Neutral + Actor19: brik + Location: 37,27 + Owner: Soviets + Actor23: brik + Location: 37,26 + Owner: Soviets + Actor24: brik + Location: 36,26 + Owner: Soviets + Actor109: brik + Location: 32,27 + Owner: Soviets + Actor496: e4 + Location: 57,38 + Owner: Soviets + Actor497: e4 + Location: 38,60 + Owner: Soviets + Actor498: apc + Location: 78,99 + Owner: Soviets + Actor499: 3tnk + Location: 106,23 + Owner: Soviets + Actor500: sbag + Location: 44,30 + Owner: Soviets + Actor501: sbag + Location: 44,31 + Owner: Soviets + Actor502: sbag + Location: 44,32 + Owner: Soviets + Actor503: sbag + Location: 44,33 + Owner: Soviets + Actor504: sbag + Location: 43,30 + Owner: Soviets + Actor505: e1 + Location: 43,32 + Owner: Soviets + Actor506: e3 + Location: 43,31 + Owner: Soviets + Actor507: brik + Location: 104,36 + Owner: Soviets + Actor508: brik + Location: 104,35 + Owner: Soviets + Actor509: brik + Location: 104,34 + Owner: Soviets + Actor510: brik + Location: 102,35 + Owner: Soviets + Actor511: brik + Location: 102,36 + Owner: Soviets + Actor512: brik + Location: 103,36 + Owner: Soviets + Actor513: e1 + Location: 110,34 + Owner: Soviets + PatrolPoint31: waypoint + Location: 79,71 + Owner: Neutral + PatrolPoint32: waypoint + Location: 78,46 + Owner: Neutral + PatrolPoint33: waypoint + Location: 100,48 + Owner: Neutral + PatrolPoint34: waypoint + Location: 92,70 + Owner: Neutral + Actor516: wood + Location: 65,100 + Owner: Neutral + Actor143: v11 + Location: 72,95 + Owner: Creeps + Actor517: wood + Location: 64,100 + Owner: Neutral + Actor518: wood + Location: 63,100 + Owner: Neutral + Actor519: wood + Location: 63,99 + Owner: Neutral + Actor520: wood + Location: 63,98 + Owner: Neutral + Actor521: v18 + Location: 59,96 + Owner: Neutral + TownAttacker6: e4 + Location: 70,97 + Owner: Soviets + TownAttacker4: e4 + Location: 70,91 + Owner: Soviets + TownAttacker1: e4 + Location: 70,82 + Owner: Soviets + TownAttacker2: e1 + Location: 70,87 + Owner: Soviets + TownAttacker5: e1 + Location: 70,93 + Owner: Soviets + TownAttacker3: 3tnk + Location: 74,87 + Owner: Soviets + TownAttacker7: 3tnk + Location: 73,97 + Owner: Soviets + SpyReinforcementsUnloadPoint: waypoint + Location: 52,94 + Owner: Neutral + Actor522: ss + Location: 43,100 + Owner: Soviets + Hospital: hosp + Location: 57,78 + Owner: Creeps + Actor523: v02 + Location: 56,87 + Owner: Creeps + Actor524: v03 + Location: 60,90 + Owner: Creeps + Actor525: c1 + Location: 55,90 + Owner: Creeps + Actor526: c9 + Location: 60,94 + Owner: Creeps + Actor527: v11 + Location: 59,94 + Owner: Creeps + Actor528: brl3 + Location: 60,95 + Owner: Neutral + Actor529: barl + Location: 59,95 + Owner: Neutral + Actor530: brl3 + Location: 58,94 + Owner: Neutral + Actor533: brl3 + Location: 54,88 + Owner: Neutral + Actor570: tsla + Owner: Soviets + Location: 103,35 + Actor571: tsla + Owner: Soviets + Location: 71,34 + Actor569: tsla + Owner: Soviets + Location: 37,66 + Actor572: tsla + Owner: Soviets + Location: 31,62 + Actor573: tsla + Owner: Soviets + Location: 28,81 + Actor574: tsla + Owner: Soviets + Location: 49,26 + Actor575: tsla + Owner: Soviets + Location: 49,33 + Actor576: tsla + Owner: Soviets + Location: 40,38 + Actor577: tsla + Owner: Soviets + Location: 31,43 + Actor578: tsla + Owner: Soviets + Location: 43,50 + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/infiltration/rules.yaml b/mods/ura/maps/infiltration/rules.yaml new file mode 100644 index 0000000..6891b65 --- /dev/null +++ b/mods/ura/maps/infiltration/rules.yaml @@ -0,0 +1,226 @@ +World: + GlobalLightingPaletteEffect@HAZE: + Red: 1 + Green: 0.55 + Blue: 0 + MissionData: + Briefing: The Soviets are currently developing a new weapon system at a secret research laboratory. This is a reconnaissance mission. Do not engage until we know what we are up against and wait for reinforcements. Our civilian contacts reported a heavily guarded installation under ruthless command. + LuaScript: + Scripts: infiltration.lua + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: normal + +^Palettes: + FixedColorPalette@SovietTruk: + Base: player + Name: truk-soviets + RemapIndex: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 + Color: FE1100 + IndexedPlayerPalette: + PlayerIndex: + Soviets: 229, 230, 231, 232, 233, 234, 235, 8, 236, 237, 238, 239, 221, 222, 223, 223 + Allies: 224, 224, 225, 225, 226, 184, 185, 186, 187, 188, 188, 189, 190, 190, 191, 191 + Allies1: 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175 + Allies2: 208, 208, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 154, 155, 143 + +MISS: + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, MissionObjective, NoAutoTarget + +LST.Unselectable.UnloadOnly: + Inherits: LST + -Selectable: + RenderSprites: + Image: LST + Buildable: + Prerequisites: ~disabled + Cargo: + MaxWeight: 0 + PipCount: 0 + Targetable: + TargetTypes: Ground, Water, Repair, NoAutoTarget + Interactable: + +SPY.Strong: + Inherits: SPY + Buildable: + Prerequisites: ~disabled + RenderSprites: + Image: SPY + Health: + HP: 100 + RevealsShroud: + Range: 6c0 + Infiltrates: + Types: MissionObjective + ExternalCaptures: + CaptureTypes: MissionObjective + Passenger: + +DOG.Patrol: + Inherits: DOG + Buildable: + Prerequisites: ~disabled + Mobile: + Speed: 56 + RenderSprites: + Image: DOG + +TRUK.Hijackable: + Inherits: TRUK + Buildable: + Prerequisites: ~disabled + Mobile: + RequiresCondition: mobile + Cargo: + Types: Infantry + MaxWeight: 5 + PipCount: 5 + PassengerConditions: + spy.strong: mobile + Targetable: + TargetTypes: Ground, Repair, Vehicle, NoAutoTarget + -Huntable: + ExternalCapturable: + Types: MissionObjective + CaptureCompleteTime: 1 + -DeliversCash: + RenderSprites: + Image: TRUK + Palette: truk-soviets + RevealsShroud: + Range: 6c0 + Voiced: + VoiceSet: SpyVoice + +E7: + Buildable: + Prerequisites: ~disabled + +TRAN: + Buildable: + Prerequisites: ~disabled + +BARR: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled + +HELI: + Buildable: + Prerequisites: ~disabled + +SS: + Buildable: + Prerequisites: ~disabled + AutoTarget: + InitialStanceAI: Defend + +ARTY: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +SPEN: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +TSLA: + Buildable: + Prerequisites: ~disabled + +FTUR: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +ATEK: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +4TNK: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +APC: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +TTNK: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +CTNK: + Buildable: + Prerequisites: ~disabled + +MGG: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/intervention/intervention.lua b/mods/ura/maps/intervention/intervention.lua new file mode 100644 index 0000000..40742f6 --- /dev/null +++ b/mods/ura/maps/intervention/intervention.lua @@ -0,0 +1,338 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +BeachheadTrigger = +{ + CPos.New(120, 90), CPos.New(120, 89), CPos.New(120, 88), CPos.New(121, 88), CPos.New(122, 88), CPos.New(123, 88), CPos.New(124, 88), + CPos.New(125, 88), CPos.New(126, 88), CPos.New(126, 89), CPos.New(127, 89), CPos.New(128, 89), CPos.New(128, 90), CPos.New(129, 90), + CPos.New(130, 90), CPos.New(130, 91), CPos.New(131, 91), CPos.New(132, 91), CPos.New(133, 91), CPos.New(134, 91), CPos.New(134, 92), + CPos.New(135, 92), CPos.New(136, 92), CPos.New(137, 92), CPos.New(137, 93), CPos.New(138, 93), CPos.New(139, 93), CPos.New(140, 93), + CPos.New(140, 94), CPos.New(140, 95), CPos.New(140, 96), CPos.New(140, 97), CPos.New(140, 98), CPos.New(140, 99), CPos.New(140, 100), + CPos.New(139, 100), CPos.New(139, 101), CPos.New(139, 102), CPos.New(138, 102), CPos.New(138, 103), CPos.New(138, 104), + CPos.New(137, 104), CPos.New(137, 105), CPos.New(137, 106), CPos.New(136, 106), CPos.New(136, 107) +} + +Difficulty = Map.LobbyOption("difficulty") + +if Difficulty == "normal" then + BaseRaidInterval = DateTime.Minutes(3) + BaseFrontAttackInterval = DateTime.Minutes(3) + DateTime.Seconds(30) + BaseRearAttackInterval = DateTime.Minutes(8) + UBoatPatrolDelay = DateTime.Minutes(2) + DateTime.Seconds(30) + BaseFrontAttackWpts = { PatrolWpt1.Location, BaseRaidWpt1.Location } +else + BaseRaidInterval = DateTime.Minutes(2) + BaseFrontAttackInterval = DateTime.Minutes(2) + DateTime.Seconds(30) + BaseRearAttackInterval = DateTime.Minutes(5) + UBoatPatrolDelay = DateTime.Minutes(2) + BaseFrontAttackWpts = { PatrolWpt1.Location } +end + +Village = { FarmHouse1, FarmHouse2, FarmHouse3, FarmHouse4, FarmHouse5, FarmHouse6, FarmHouse7, FarmHouse8, FarmHouse9, Church } +VillageRaidInterval = DateTime.Minutes(3) +VillageRaidAircraft = { "mig", "mig" } +VillageRaidWpts = { VillageRaidEntrypoint.Location, VillageRaidWpt1.Location, VillageRaidWpt2.Location } + +BaseRaidAircraft = { "mig", "mig" } +BaseRaidWpts = { BaseRaidEntrypoint.Location, UboatPatrolWpt1.Location, BaseRaidWpt2.Location } + +BaseFrontAttackUnits = { "e3", "e3", "e1", "e1", "e1", "3tnk", "3tnk", "apc" } +BaseRearAttackUnits = { "e3", "e3", "e1", "e1", "3tnk", "3tnk", "v2rl" } +BaseRearAttackWpts = { GroundAttackWpt1.Location, BaseRearAttackWpt1.Location, BaseRearAttackWpt2.Location, BaseRearAttackWpt3.Location } + +SovietHarvesters = { Harvester1, Harvester2, Harvester3 } +HarvesterGuard = { HarvGuard1, HarvGuard2, HarvGuard3 } + +UboatPatrolWpts1 = { UboatPatrolWpt1.Location, UboatPatrolWpt2.Location, UboatPatrolWpt3.Location, UboatPatrolWpt4.Location } +UboatPatrolWpts2 = { UboatPatrolWpt4.Location, UboatPatrolWpt2.Location, UboatPatrolWpt1.Location } +UBoatPatrolUnits = { "ss" } + +HunterSubs = { "ss", "ss" } + +GroundPatrolWpts = { PatrolWpt1.Location, PatrolWpt2.Location } +GroundPatrolUnits = +{ + { "e1", "e1", "e1", "e3", "e3", "dog" }, + { "apc", "apc", "ftrk" }, + { "3tnk", "3tnk" } +} + +ParadropSovietUnits = function() + local powerproxy = Actor.Create("powerproxy.paratroopers", false, { Owner = soviets }) + local units = powerproxy.SendParatroopers(MCVDeployLocation.CenterPosition, false, 256 - 53) + + Utils.Do(units, function(a) + Trigger.OnIdle(a, function(actor) + if actor.IsInWorld then + actor.Hunt() + end + end) + end) + + powerproxy.Destroy() +end + +AirRaid = function(planeTypes, ingress, egress, target) + if target == nil then + return + end + + for i = 1, #planeTypes do + Trigger.AfterDelay((i - 1) * DateTime.Seconds(1), function() + local start = Map.CenterOfCell(ingress[1]) + WVec.New(0, 0, Actor.CruiseAltitude(planeTypes[i])) + local plane = Actor.Create(planeTypes[i], true, { CenterPosition = start, Owner = soviets, Facing = (Map.CenterOfCell(ingress[2]) - start).Facing }) + + Utils.Do(ingress, function(wpt) plane.Move(wpt) end) + plane.Attack(target) + Utils.Do(egress, function(wpt) plane.Move(wpt) end) + plane.Destroy() + end) + end +end + +BaseRaid = function() + local targets = Map.ActorsInBox(AlliedAreaTopLeft.CenterPosition, AlliedAreaBottomRight.CenterPosition, function(actor) + return actor.Owner == player and actor.HasProperty("StartBuildingRepairs") + end) + + if #targets == 0 then + return + end + + local target = Utils.Random(targets) + + AirRaid(BaseRaidAircraft, BaseRaidWpts, { VillageRaidEntrypoint.Location }, target) + + Trigger.AfterDelay(BaseRaidInterval, BaseRaid) +end + +VillageRaid = function() + local target = nil + Utils.Do(Village, function(tgt) + if target == nil and not tgt.IsDead then + target = tgt + return + end + end) + + if target == nil then + return + end + + AirRaid(VillageRaidAircraft, VillageRaidWpts, { BaseRaidEntrypoint.Location }, target) + + Trigger.AfterDelay(VillageRaidInterval, VillageRaid) +end + +SendUboatPatrol = function(team) + Trigger.AfterDelay(UBoatPatrolDelay, function() + Utils.Do(team, function(uboat) + if not uboat.IsDead then + uboat.PatrolUntil(UboatPatrolWpts1, function() + return DateTime.GameTime > DateTime.Minutes(2) + UBoatPatrolDelay + end) + uboat.Patrol(UboatPatrolWpts2) + end + end) + end) +end + +SendGroundPatrol = function(team) + Utils.Do(team, function(unit) unit.Patrol(GroundPatrolWpts, true, DateTime.Seconds(3)) end) + Utils.Do(team, function(unit) + Trigger.OnIdle(unit, function(actor) actor.Hunt() end) + end) + Trigger.OnAllKilled(team, function() + Build(Utils.Random(GroundPatrolUnits), SendGroundPatrol) + end) +end + +BaseFrontAttack = function(team) + Utils.Do(team, function(unit) unit.Patrol(BaseFrontAttackWpts, false) end) + Utils.Do(team, function(unit) + Trigger.OnIdle(unit, function(actor) actor.Hunt() end) + end) + Trigger.AfterDelay(BaseFrontAttackInterval, function() Build(BaseFrontAttackUnits, BaseFrontAttack) end) +end + +BaseRearAttack = function(team) + Utils.Do(team, function(unit) unit.Patrol(BaseRearAttackWpts, false) end) + Utils.Do(team, function(unit) + Trigger.OnIdle(unit, function(actor) actor.Hunt() end) + end) + Trigger.AfterDelay(BaseRearAttackInterval, function() Build(BaseRearAttackUnits, BaseRearAttack) end) +end + +Build = function(units, action) + if not soviets.Build(units, action) then + Trigger.AfterDelay(DateTime.Seconds(15), function() + Build(units, action) + end) + end +end + +SetupWorld = function() + Utils.Do(SovietHarvesters, function(a) a.FindResources() end) + + Utils.Do(SovietHarvesters, function(harvester) + Trigger.OnDamaged(harvester, function(h) + Utils.Do(HarvesterGuard, function(g) + if not g.IsDead then + g.Stop() + g.AttackMove(h.Location, 3) + end + end) + end) + end) + + Utils.Do(Map.NamedActors, function(actor) + if actor.Owner == soviets and actor.HasProperty("StartBuildingRepairs") then + Trigger.OnDamaged(actor, function(building) + if building.Owner == soviets then + building.StartBuildingRepairs() + end + end) + end + end) + + WarFactory.RallyPoint = Rallypoint.Location + WarFactory.IsPrimaryBuilding = true + Barracks.IsPrimaryBuilding = true + SubPen.IsPrimaryBuilding = true +end + +SetupMissionText = function() + TextColorNormal = HSLColor.White + TextColorDamaged = HSLColor.Yellow + TextColorCritical = HSLColor.Red + + CurrentColor = TextColorNormal + local villageHousesLeft = #Village + VillagePercentage = 100 - villageHousesLeft * 10 + + Utils.Do(Village, function(house) + Trigger.OnKilled(house, function() + villageHousesLeft = villageHousesLeft - 1 + VillagePercentage = 100 - villageHousesLeft * 10 + + if VillagePercentage > 69 then + CurrentColor = TextColorCritical + elseif VillagePercentage > 49 then + CurrentColor = TextColorDamaged + else + CurrentColor = TextColorNormal + end + end) + end) +end + +Tick = function() + if DateTime.GameTime > 2 then + if soviets.Resources > soviets.ResourceCapacity * 0.75 then + soviets.Resources = soviets.Resources - ((soviets.ResourceCapacity * 0.01) / 25) + end + + if player.HasNoRequiredUnits() then + player.MarkFailedObjective(villageObjective) + end + + UserInterface.SetMissionText(VillagePercentage .. "% of the village destroyed.", CurrentColor) + end +end + +WorldLoaded = function() + player = Player.GetPlayer("Allies") + soviets = Player.GetPlayer("Soviets") + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + + sovietObjective = soviets.AddPrimaryObjective("Destroy the village.") + villageObjective = player.AddPrimaryObjective("Save the village.") + beachheadObjective = player.AddPrimaryObjective("Get your MCV to the main island.") + + beachheadTrigger = false + Trigger.OnExitedFootprint(BeachheadTrigger, function(a, id) + if not beachheadTrigger and a.Owner == player and a.Type == "mcv" then + beachheadTrigger = true + Trigger.RemoveFootprintTrigger(id) + player.MarkCompletedObjective(beachheadObjective) + + captureObjective = player.AddPrimaryObjective("Locate and capture the enemy's Air Force HQ.") + + if AirForceHQ.IsDead then + player.MarkFailedObjective(captureObjective) + return + end + if AirForceHQ.Owner == player then + player.MarkCompletedObjective(captureObjective) + player.MarkCompletedObjective(villageObjective) + return + end + + Trigger.OnCapture(AirForceHQ, function() + Trigger.AfterDelay(DateTime.Seconds(3), function() + player.MarkCompletedObjective(captureObjective) + player.MarkCompletedObjective(villageObjective) + end) + end) + Trigger.OnKilled(AirForceHQ, function() player.MarkFailedObjective(captureObjective) end) + + Actor.Create("mainland", true, { Owner = player }) + + Trigger.AfterDelay(BaseFrontAttackInterval, function() + Build(BaseFrontAttackUnits, BaseFrontAttack) + ParadropSovietUnits() + end) + Trigger.AfterDelay(BaseRearAttackInterval, function() + Build(BaseRearAttackUnits, BaseRearAttack) + end) + Trigger.AfterDelay(BaseRaidInterval, BaseRaid) + + Trigger.AfterDelay(UBoatPatrolDelay, function() + Build(HunterSubs, function(subs) + Utils.Do(subs, function(sub) + Trigger.OnIdle(sub, function(s) s.Hunt() end) + end) + end) + end) + end + end) + + Trigger.OnAllKilled(Village, function() player.MarkFailedObjective(villageObjective) end) + + SetupWorld() + SetupMissionText() + + Trigger.AfterDelay(VillageRaidInterval, VillageRaid) + + Trigger.AfterDelay(1, function() Build(UBoatPatrolUnits, SendUboatPatrol) end) + Trigger.AfterDelay(1, function() Build(Utils.Random(GroundPatrolUnits), SendGroundPatrol) end) + + Reinforcements.Reinforce(player, { "mcv" }, { MCVInsertLocation.Location, MCVDeployLocation.Location }, 0, function(mcv) + mcv.Deploy() + end) + + Camera.Position = CameraSpot.CenterPosition + Trigger.AfterDelay(DateTime.Seconds(5), function() CameraSpot.Destroy() end) +end diff --git a/mods/ura/maps/intervention/map.bin b/mods/ura/maps/intervention/map.bin new file mode 100644 index 0000000..cb9e93f Binary files /dev/null and b/mods/ura/maps/intervention/map.bin differ diff --git a/mods/ura/maps/intervention/map.png b/mods/ura/maps/intervention/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/intervention/map.png differ diff --git a/mods/ura/maps/intervention/map.yaml b/mods/ura/maps/intervention/map.yaml new file mode 100644 index 0000000..8c55ddc --- /dev/null +++ b/mods/ura/maps/intervention/map.yaml @@ -0,0 +1,2204 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Intervention + +Author: Antares79 + +Tileset: TEMPERAT + +MapSize: 160,160 + +Bounds: 16,16,128,128 + +Visibility: MissionSelector + +Categories: Mission + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Civilians: + Name: Civilians + NonCombatant: True + Faction: allies + Color: 000000 + Allies: Allies + PlayerReference@Allies: + Name: Allies + Playable: True + AllowBots: False + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: ABB7E4 + LockSpawn: True + LockTeam: True + Allies: Civilians + Enemies: Soviets + PlayerReference@Soviets: + Name: Soviets + Faction: soviet + Color: FE1100 + Enemies: Civilians, Allies + +Actors: + Actor1: mine + Location: 66,103 + Owner: Neutral + Actor2: tc04 + Location: 78,132 + Owner: Neutral + Actor3: tc04 + Location: 83,135 + Owner: Neutral + Actor4: t11 + Location: 80,136 + Owner: Neutral + Actor5: t06 + Location: 82,133 + Owner: Neutral + Actor6: tc03 + Location: 85,139 + Owner: Neutral + Actor7: tc05 + Location: 86,141 + Owner: Neutral + Actor8: tc05 + Location: 67,134 + Owner: Neutral + Actor9: tc02 + Location: 81,141 + Owner: Neutral + Actor10: tc02 + Location: 88,134 + Owner: Neutral + Actor11: v06 + Location: 91,141 + Owner: Neutral + Actor12: v11 + Location: 90,142 + Owner: Neutral + Actor13: tc01 + Location: 91,142 + Owner: Neutral + Actor15: gun + Location: 18,116 + Owner: Soviets + Facing: 192 + Actor16: gun + Location: 19,119 + Owner: Soviets + Facing: 192 + Actor17: sam + Location: 16,118 + Owner: Soviets + Facing: 192 + Actor18: t10 + Location: 18,117 + Owner: Neutral + Actor19: tc04 + Location: 16,119 + Owner: Neutral + Actor20: tc03 + Location: 16,116 + Owner: Neutral + Actor21: tc02 + Location: 17,126 + Owner: Neutral + Actor22: tc01 + Location: 16,124 + Owner: Neutral + Actor23: t12 + Location: 18,122 + Owner: Neutral + Actor24: gun + Location: 23,110 + Owner: Soviets + Facing: 92 + Actor25: gun + Location: 25,115 + Owner: Soviets + Facing: 92 + Actor26: gun + Location: 24,113 + Owner: Soviets + Facing: 92 + Actor27: sam + Location: 26,113 + Owner: Soviets + Facing: 160 + Actor28: tc02 + Location: 26,114 + Owner: Neutral + Actor29: tc02 + Location: 23,108 + Owner: Neutral + Actor30: tc03 + Location: 24,111 + Owner: Neutral + Actor31: tc05 + Location: 27,111 + Owner: Neutral + Actor32: dome + Location: 28,108 + Owner: Soviets + Actor33: t15 + Location: 31,113 + Owner: Neutral + Actor34: t08 + Location: 30,115 + Owner: Neutral + Actor203: t13 + Location: 134,82 + Owner: Neutral + Actor43: sam + Location: 54,103 + Owner: Soviets + Facing: 192 + Actor44: tc02 + Location: 51,98 + Owner: Neutral + Actor45: tc05 + Location: 53,100 + Owner: Neutral + Actor46: t15 + Location: 54,94 + Owner: Neutral + Actor47: tc01 + Location: 55,96 + Owner: Neutral + Actor48: t03 + Location: 54,98 + Owner: Neutral + Actor51: gun + Location: 58,104 + Owner: Soviets + Facing: 160 + Actor50: tc02 + Location: 112,108 + Owner: Neutral + Actor49: gun + Location: 54,107 + Owner: Soviets + Facing: 160 + Actor52: tc05 + Location: 113,107 + Owner: Neutral + Actor210: t11 + Location: 121,38 + Owner: Neutral + Actor54: tc02 + Location: 85,82 + Owner: Neutral + Actor55: tc02 + Location: 80,92 + Owner: Neutral + Actor56: tc05 + Location: 82,83 + Owner: Neutral + Actor57: tc05 + Location: 81,104 + Owner: Neutral + Actor58: tc03 + Location: 85,85 + Owner: Neutral + Actor59: sam + Location: 80,87 + Owner: Soviets + Facing: 192 + Actor60: tc01 + Location: 84,90 + Owner: Neutral + Actor61: tc04 + Location: 84,102 + Owner: Neutral + Actor62: tc02 + Location: 141,131 + Owner: Neutral + Actor63: tc04 + Location: 140,133 + Owner: Neutral + Actor64: tc01 + Location: 130,127 + Owner: Neutral + Actor65: tc05 + Location: 127,130 + Owner: Neutral + Actor66: t03 + Location: 128,127 + Owner: Neutral + Actor67: t11 + Location: 109,123 + Owner: Neutral + Actor68: t03 + Location: 110,113 + Owner: Neutral + Actor69: t12 + Location: 109,117 + Owner: Neutral + Actor70: t14 + Location: 111,119 + Owner: Neutral + Actor71: t17 + Location: 111,115 + Owner: Neutral + Actor72: tc02 + Location: 108,120 + Owner: Neutral + Actor73: t08 + Location: 110,108 + Owner: Neutral + Actor74: tc01 + Location: 110,121 + Owner: Neutral + Actor75: tc03 + Location: 110,117 + Owner: Neutral + Actor76: v08 + Location: 109,119 + Owner: Neutral + Actor77: t08 + Location: 128,129 + Owner: Neutral + Actor78: t07 + Location: 130,129 + Owner: Neutral + Actor79: sam + Location: 80,100 + Owner: Soviets + Facing: 192 + Actor80: gun + Location: 80,106 + Owner: Soviets + Facing: 160 + Actor81: gun + Location: 85,105 + Owner: Soviets + Facing: 160 + Actor209: tc05 + Location: 141,47 + Owner: Neutral + Actor117: t15 + Location: 32,17 + Owner: Neutral + Actor110: v15 + Location: 31,18 + Owner: Neutral + Actor101: wood + Location: 30,20 + Owner: Neutral + Actor100: wood + Location: 29,19 + Owner: Neutral + Actor99: wood + Location: 29,20 + Owner: Neutral + Actor125: t08 + Location: 30,17 + Owner: Neutral + Actor196: tc01 + Location: 142,77 + Owner: Neutral + Actor85: wood + Location: 20,20 + Owner: Neutral + Actor458: t06 + Location: 83,19 + Owner: Neutral + Actor102: wood + Location: 31,20 + Owner: Neutral + Actor103: wood + Location: 32,20 + Owner: Neutral + Actor104: wood + Location: 29,18 + Owner: Neutral + Actor98: wood + Location: 20,18 + Owner: Neutral + Actor105: tc02 + Location: 22,17 + Owner: Neutral + Actor107: v16 + Location: 28,17 + Owner: Neutral + Actor97: wood + Location: 20,19 + Owner: Neutral + Actor109: v18 + Location: 32,19 + Owner: Neutral + Actor96: wood + Location: 23,19 + Owner: Neutral + Actor111: v12 + Location: 30,19 + Owner: Neutral + Actor131: tc01 + Location: 17,17 + Owner: Neutral + Actor113: t11 + Location: 22,21 + Owner: Neutral + Actor114: t12 + Location: 20,22 + Owner: Neutral + Actor115: t08 + Location: 23,24 + Owner: Neutral + Actor116: utilpol2 + Location: 18,20 + Owner: Neutral + Actor93: wood + Location: 21,20 + Owner: Neutral + Actor118: utilpol2 + Location: 27,20 + Owner: Neutral + Actor119: utilpol2 + Location: 30,23 + Owner: Neutral + Actor120: utilpol2 + Location: 25,26 + Owner: Neutral + Actor121: utilpol2 + Location: 20,26 + Owner: Neutral + Actor122: utilpol2 + Location: 16,28 + Owner: Neutral + Actor123: tc03 + Location: 20,29 + Owner: Neutral + Actor153: t03 + Location: 26,21 + Owner: Neutral + Actor108: rice + Location: 21,18 + Owner: Neutral + Actor152: t01 + Location: 17,26 + Owner: Neutral + Actor94: wood + Location: 23,20 + Owner: Neutral + Actor106: v14 + Location: 26,18 + Owner: Neutral + Actor112: tc02 + Location: 36,16 + Owner: Neutral + Actor130: tc04 + Location: 34,18 + Owner: Neutral + Actor126: tc02 + Location: 43,19 + Owner: Neutral + Actor132: tc01 + Location: 39,19 + Owner: Neutral + Actor133: t14 + Location: 36,22 + Owner: Neutral + Actor134: t02 + Location: 17,31 + Owner: Neutral + Actor135: t17 + Location: 22,31 + Owner: Neutral + Actor136: t11 + Location: 32,29 + Owner: Neutral + Actor137: wood + Location: 22,27 + Owner: Neutral + Actor138: wood + Location: 22,28 + Owner: Neutral + Actor139: wood + Location: 22,29 + Owner: Neutral + Actor140: wood + Location: 23,29 + Owner: Neutral + Actor141: wood + Location: 24,29 + Owner: Neutral + Actor142: wood + Location: 25,29 + Owner: Neutral + Actor143: wood + Location: 25,28 + Owner: Neutral + Actor144: wood + Location: 19,28 + Owner: Neutral + Actor145: wood + Location: 20,28 + Owner: Neutral + Actor146: wood + Location: 21,28 + Owner: Neutral + Actor147: tc05 + Location: 29,25 + Owner: Neutral + Actor148: t02 + Location: 33,22 + Owner: Neutral + Actor149: t08 + Location: 28,28 + Owner: Neutral + Actor150: t17 + Location: 26,26 + Owner: Neutral + Actor156: t07 + Location: 27,23 + Owner: Neutral + Actor154: t12 + Location: 25,22 + Owner: Neutral + Actor124: tc03 + Location: 39,16 + Owner: Neutral + Actor129: t15 + Location: 17,22 + Owner: Neutral + Actor155: v14 + Location: 19,31 + Owner: Neutral + Actor151: v18 + Location: 17,20 + Owner: Neutral + Actor157: v18 + Location: 27,29 + Owner: Neutral + Actor158: t11 + Location: 23,30 + Owner: Neutral + Actor160: apwr + Location: 32,89 + Owner: Soviets + Actor162: apwr + Location: 41,93 + Owner: Soviets + Actor161: apwr + Location: 24,97 + Owner: Soviets + Actor128: apwr + Location: 37,91 + Owner: Soviets + Actor159: apwr + Location: 28,93 + Owner: Soviets + Actor127: apwr + Location: 34,95 + Owner: Soviets + Actor174: brik + Location: 47,85 + Owner: Soviets + Actor171: brik + Location: 48,85 + Owner: Soviets + Actor175: sam + Location: 45,88 + Owner: Soviets + Facing: 224 + Actor173: brik + Location: 45,85 + Owner: Soviets + Actor181: brik + Location: 38,85 + Owner: Soviets + Actor177: brik + Location: 37,84 + Owner: Soviets + Actor172: tsla + Location: 46,85 + Owner: Soviets + Actor176: tsla + Location: 37,85 + Owner: Soviets + Actor178: brik + Location: 38,84 + Owner: Soviets + Actor170: brik + Location: 36,85 + Owner: Soviets + Actor184: brik + Location: 44,85 + Owner: Soviets + Actor588: tc05 + Location: 135,110 + Owner: Neutral + Actor180: brik + Location: 39,85 + Owner: Soviets + Actor591: tc05 + Location: 104,61 + Owner: Neutral + Actor188: brik + Location: 47,84 + Owner: Soviets + Actor169: brik + Location: 36,84 + Owner: Soviets + Actor185: ftur + Location: 41,88 + Owner: Soviets + Actor179: brik + Location: 39,84 + Owner: Soviets + Actor584: tc05 + Location: 128,60 + Owner: Neutral + Actor168: brik + Location: 35,85 + Owner: Soviets + Actor165: mine + Location: 33,105 + Owner: Neutral + Actor166: proc + Location: 30,97 + Owner: Soviets + FreeActor: False + Actor167: brik + Location: 35,84 + Owner: Soviets + Actor187: brik + Location: 48,84 + Owner: Soviets + Actor189: tc05 + Location: 41,99 + Owner: Neutral + Actor190: brik + Location: 46,84 + Owner: Soviets + Actor191: brik + Location: 45,84 + Owner: Soviets + Actor192: brik + Location: 44,84 + Owner: Soviets + Actor590: tc01 + Location: 136,108 + Owner: Neutral + Actor164: tc04 + Location: 132,70 + Owner: Neutral + Actor163: tc04 + Location: 133,68 + Owner: Neutral + Actor581: t06 + Location: 140,81 + Owner: Neutral + Actor183: t15 + Location: 126,65 + Owner: Neutral + Actor198: tc05 + Location: 141,80 + Owner: Neutral + Actor424: tc05 + Location: 131,75 + Owner: Neutral + Actor583: t06 + Location: 137,81 + Owner: Neutral + Actor580: t08 + Location: 139,68 + Owner: Neutral + Actor425: tc05 + Location: 134,78 + Owner: Neutral + Actor582: t06 + Location: 138,82 + Owner: Neutral + Actor182: tc05 + Location: 135,70 + Owner: Neutral + Actor194: tc01 + Location: 130,70 + Owner: Neutral + Actor206: sam + Location: 40,101 + Owner: Soviets + Facing: 160 + Actor193: t13 + Location: 130,63 + Owner: Neutral + Actor589: tc01 + Location: 136,119 + Owner: Neutral + Actor82: tc02 + Location: 78,57 + Owner: Neutral + Actor195: tc01 + Location: 137,74 + Owner: Neutral + Actor211: sam + Location: 35,111 + Owner: Soviets + Facing: 160 + Actor212: tc03 + Location: 142,52 + Owner: Neutral + Actor213: tc02 + Location: 137,48 + Owner: Neutral + Actor35: tc02 + Location: 134,66 + Owner: Neutral + Actor215: t10 + Location: 125,54 + Owner: Neutral + Actor216: tc04 + Location: 133,54 + Owner: Neutral + Actor217: tc01 + Location: 139,55 + Owner: Neutral + Actor218: t11 + Location: 135,57 + Owner: Neutral + Actor219: t03 + Location: 138,58 + Owner: Neutral + Actor220: t08 + Location: 136,60 + Owner: Neutral + Actor221: t12 + Location: 138,61 + Owner: Neutral + Actor222: t16 + Location: 127,60 + Owner: Neutral + Actor223: t11 + Location: 108,25 + Owner: Neutral + Actor224: t05 + Location: 110,37 + Owner: Neutral + Actor225: t05 + Location: 137,35 + Owner: Neutral + Actor226: t17 + Location: 123,33 + Owner: Neutral + Actor227: t17 + Location: 109,27 + Owner: Neutral + Actor53: tc04 + Location: 131,67 + Owner: Neutral + Actor229: tc02 + Location: 112,38 + Owner: Neutral + Actor230: t08 + Location: 101,24 + Owner: Neutral + Actor232: t07 + Location: 101,17 + Owner: Neutral + Actor233: tc05 + Location: 121,35 + Owner: Neutral + Actor234: t12 + Location: 118,38 + Owner: Neutral + Actor235: t03 + Location: 111,33 + Owner: Neutral + Actor236: brik + Location: 74,80 + Owner: Soviets + Actor237: brik + Location: 74,81 + Owner: Soviets + Actor238: brik + Location: 73,81 + Owner: Soviets + Actor239: brik + Location: 73,80 + Owner: Soviets + Actor243: brik + Location: 60,81 + Owner: Soviets + Actor240: brik + Location: 59,81 + Owner: Soviets + Actor241: brik + Location: 59,80 + Owner: Soviets + Actor242: brik + Location: 60,80 + Owner: Soviets + Actor362: brik + Location: 57,60 + Owner: Soviets + Actor361: brik + Location: 57,61 + Owner: Soviets + Actor290: v16 + Location: 21,58 + Owner: Neutral + Actor369: brik + Location: 57,59 + Owner: Soviets + Actor248: brik + Location: 62,81 + Owner: Soviets + Actor249: brik + Location: 63,81 + Owner: Soviets + Actor250: brik + Location: 64,81 + Owner: Soviets + Actor251: brik + Location: 66,81 + Owner: Soviets + Actor252: brik + Location: 65,81 + Owner: Soviets + Actor257: brik + Location: 70,80 + Owner: Soviets + Actor254: brik + Location: 67,81 + Owner: Soviets + Actor255: brik + Location: 72,81 + Owner: Soviets + Actor256: brik + Location: 71,81 + Owner: Soviets + Actor253: brik + Location: 70,81 + Owner: Soviets + Actor258: brik + Location: 67,80 + Owner: Soviets + Actor259: brik + Location: 71,80 + Owner: Soviets + Actor260: brik + Location: 66,80 + Owner: Soviets + Actor261: tsla + Location: 72,80 + Owner: Soviets + Actor360: brik + Location: 57,62 + Owner: Soviets + Actor263: brik + Location: 74,79 + Owner: Soviets + Actor264: brik + Location: 74,78 + Owner: Soviets + Actor265: brik + Location: 74,77 + Owner: Soviets + Actor266: brik + Location: 74,76 + Owner: Soviets + Actor267: brik + Location: 74,75 + Owner: Soviets + Actor268: brik + Location: 74,74 + Owner: Soviets + Actor269: brik + Location: 74,73 + Owner: Soviets + Actor270: brik + Location: 74,72 + Owner: Soviets + Actor271: brik + Location: 75,72 + Owner: Soviets + Actor272: brik + Location: 75,71 + Owner: Soviets + Actor273: brik + Location: 75,70 + Owner: Soviets + Actor274: brik + Location: 76,70 + Owner: Soviets + Actor275: brik + Location: 77,70 + Owner: Soviets + Actor276: brik + Location: 79,70 + Owner: Soviets + Actor277: brik + Location: 78,70 + Owner: Soviets + Actor278: brik + Location: 79,69 + Owner: Soviets + Actor279: brik + Location: 79,68 + Owner: Soviets + Actor281: tc01 + Location: 28,52 + Owner: Neutral + Actor282: tc03 + Location: 27,62 + Owner: Neutral + Actor283: tc04 + Location: 26,60 + Owner: Neutral + Actor284: tc02 + Location: 25,58 + Owner: Neutral + Actor285: tc01 + Location: 24,61 + Owner: Neutral + Actor286: t15 + Location: 22,62 + Owner: Neutral + Actor291: wood + Location: 23,61 + Owner: Neutral + Actor292: wood + Location: 23,60 + Owner: Neutral + Actor293: wood + Location: 23,59 + Owner: Neutral + Actor294: wood + Location: 23,58 + Owner: Neutral + Actor295: tc03 + Location: 19,38 + Owner: Neutral + Actor296: wood + Location: 18,57 + Owner: Neutral + Actor298: wood + Location: 20,57 + Owner: Neutral + Actor297: wood + Location: 19,57 + Owner: Neutral + Actor300: wood + Location: 21,57 + Owner: Neutral + Actor299: tsla + Location: 78,65 + Owner: Soviets + Actor302: wood + Location: 18,58 + Owner: Neutral + Actor301: wood + Location: 22,57 + Owner: Neutral + Actor289: v14 + Location: 22,61 + Owner: Neutral + Actor304: wood + Location: 18,60 + Owner: Neutral + Actor303: wood + Location: 18,59 + Owner: Neutral + Actor305: t08 + Location: 22,59 + Owner: Neutral + Actor310: v13 + Location: 21,66 + Owner: Neutral + Actor306: t03 + Location: 17,59 + Owner: Neutral + Actor308: v12 + Location: 20,67 + Owner: Neutral + Actor311: v14 + Location: 18,68 + Owner: Neutral + Actor307: v03 + Location: 17,64 + Owner: Neutral + Actor288: v18 + Location: 19,59 + Owner: Neutral + Actor287: v10 + Location: 20,61 + Owner: Neutral + Actor309: sam + Location: 72,77 + Owner: Soviets + Facing: 192 + Actor246: tc02 + Location: 24,47 + Owner: Neutral + Actor280: t15 + Location: 20,43 + Owner: Neutral + Actor312: v14 + Location: 24,66 + Owner: Neutral + Actor313: v16 + Location: 22,68 + Owner: Neutral + Actor314: v04 + Location: 26,66 + Owner: Neutral + Actor315: tc03 + Location: 19,69 + Owner: Neutral + Actor316: tc01 + Location: 32,71 + Owner: Neutral + Actor317: t11 + Location: 30,67 + Owner: Neutral + Actor318: tc02 + Location: 36,70 + Owner: Neutral + Actor319: t11 + Location: 36,72 + Owner: Neutral + Actor320: tc02 + Location: 39,74 + Owner: Neutral + Actor321: t03 + Location: 34,80 + Owner: Neutral + Actor322: tc01 + Location: 24,77 + Owner: Neutral + Actor323: t11 + Location: 17,75 + Owner: Neutral + Actor324: t08 + Location: 23,77 + Owner: Neutral + Actor325: tc02 + Location: 18,72 + Owner: Neutral + Actor326: t12 + Location: 20,74 + Owner: Neutral + Actor327: tc04 + Location: 78,72 + Owner: Neutral + Actor328: t14 + Location: 77,77 + Owner: Neutral + Actor329: t12 + Location: 87,73 + Owner: Neutral + Actor330: tc01 + Location: 90,70 + Owner: Neutral + Actor331: tc05 + Location: 84,75 + Owner: Neutral + Actor332: t06 + Location: 90,85 + Owner: Neutral + Actor333: tc01 + Location: 91,84 + Owner: Neutral + Actor334: t01 + Location: 90,83 + Owner: Neutral + Actor335: t07 + Location: 91,82 + Owner: Neutral + Actor336: t16 + Location: 90,81 + Owner: Neutral + Actor337: tc05 + Location: 95,84 + Owner: Neutral + Actor338: t02 + Location: 91,74 + Owner: Neutral + Actor339: t17 + Location: 90,77 + Owner: Neutral + Actor340: tc01 + Location: 100,88 + Owner: Neutral + Actor341: t02 + Location: 103,90 + Owner: Neutral + Actor342: proc + Location: 66,75 + Owner: Soviets + FreeActor: False + Actor343: tsla + Location: 65,80 + Owner: Soviets + Actor344: fact + Location: 64,68 + Owner: Soviets + Actor345: fix + Location: 70,68 + Owner: Soviets + Actor359: brik + Location: 57,63 + Owner: Soviets + Actor358: brik + Location: 57,64 + Owner: Soviets + Actor357: brik + Location: 57,65 + Owner: Soviets + Actor356: brik + Location: 57,66 + Owner: Soviets + Actor355: brik + Location: 57,67 + Owner: Soviets + Actor354: brik + Location: 57,68 + Owner: Soviets + Actor353: brik + Location: 57,69 + Owner: Soviets + Actor352: brik + Location: 57,70 + Owner: Soviets + Actor351: brik + Location: 57,71 + Owner: Soviets + Actor350: brik + Location: 57,72 + Owner: Soviets + Actor349: brik + Location: 57,73 + Owner: Soviets + Actor348: brik + Location: 57,74 + Owner: Soviets + Actor262: brik + Location: 58,75 + Owner: Soviets + Actor247: brik + Location: 57,75 + Owner: Soviets + Actor244: brik + Location: 58,76 + Owner: Soviets + Actor363: brik + Location: 62,59 + Owner: Soviets + Actor364: brik + Location: 63,59 + Owner: Soviets + Actor365: brik + Location: 64,59 + Owner: Soviets + Actor366: brik + Location: 65,59 + Owner: Soviets + Actor367: brik + Location: 66,59 + Owner: Soviets + Actor368: brik + Location: 67,59 + Owner: Soviets + Actor245: brik + Location: 57,76 + Owner: Soviets + Actor370: brik + Location: 68,59 + Owner: Soviets + Actor395: ftur + Location: 71,82 + Owner: Soviets + Actor372: brik + Location: 79,67 + Owner: Soviets + Actor373: brik + Location: 79,66 + Owner: Soviets + Actor374: brik + Location: 79,65 + Owner: Soviets + Actor375: brik + Location: 79,64 + Owner: Soviets + Actor376: brik + Location: 79,63 + Owner: Soviets + Actor377: brik + Location: 79,62 + Owner: Soviets + Actor378: brik + Location: 58,59 + Owner: Soviets + Actor379: brik + Location: 78,60 + Owner: Soviets + Actor380: brik + Location: 78,59 + Owner: Soviets + Actor381: brik + Location: 79,59 + Owner: Soviets + Actor382: brik + Location: 79,60 + Owner: Soviets + Actor383: brik + Location: 79,61 + Owner: Soviets + Actor384: ftur + Location: 68,58 + Owner: Soviets + Actor385: brik + Location: 68,60 + Owner: Soviets + Actor386: brik + Location: 73,60 + Owner: Soviets + Actor387: brik + Location: 67,60 + Owner: Soviets + Actor388: brik + Location: 73,59 + Owner: Soviets + Actor389: ftur + Location: 73,58 + Owner: Soviets + Actor390: brik + Location: 74,59 + Owner: Soviets + Actor391: brik + Location: 74,60 + Owner: Soviets + Actor392: brik + Location: 75,59 + Owner: Soviets + Actor393: brik + Location: 76,59 + Owner: Soviets + Actor394: brik + Location: 77,59 + Owner: Soviets + Actor371: ftur + Location: 67,82 + Owner: Soviets + Actor346: proc + Location: 73,63 + Owner: Soviets + FreeActor: False + Actor484: silo + Location: 35,100 + Owner: Soviets + Actor637: silo + Location: 35,99 + Owner: Soviets + Actor402: silo + Location: 34,100 + Owner: Soviets + Actor400: apwr + Location: 24,105 + Owner: Soviets + Actor399: apwr + Location: 24,101 + Owner: Soviets + Actor398: apwr + Location: 24,93 + Owner: Soviets + Actor406: apwr + Location: 59,70 + Owner: Soviets + Actor405: apwr + Location: 59,66 + Owner: Soviets + Actor404: apwr + Location: 59,62 + Owner: Soviets + Actor407: sam + Location: 77,61 + Owner: Soviets + Facing: 192 + Actor408: sam + Location: 77,69 + Owner: Soviets + Facing: 192 + Actor409: brik + Location: 59,59 + Owner: Soviets + Actor410: brik + Location: 60,59 + Owner: Soviets + Actor411: brik + Location: 61,59 + Owner: Soviets + Actor412: brik + Location: 58,60 + Owner: Soviets + Actor413: silo + Location: 60,75 + Owner: Soviets + Actor414: silo + Location: 60,74 + Owner: Soviets + Actor415: silo + Location: 61,74 + Owner: Soviets + Actor416: silo + Location: 61,75 + Owner: Soviets + Actor417: brik + Location: 61,81 + Owner: Soviets + Actor418: silo + Location: 62,79 + Owner: Soviets + Actor419: silo + Location: 63,79 + Owner: Soviets + Actor426: tc01 + Location: 136,82 + Owner: Neutral + Actor428: tc04 + Location: 133,72 + Owner: Neutral + Actor427: tc01 + Location: 141,83 + Owner: Neutral + Actor200: t02 + Location: 136,73 + Owner: Neutral + Actor214: tc01 + Location: 134,80 + Owner: Neutral + Actor201: t05 + Location: 140,82 + Owner: Neutral + Actor197: tc03 + Location: 141,79 + Owner: Neutral + Actor204: t13 + Location: 129,78 + Owner: Neutral + Actor202: t05 + Location: 132,79 + Owner: Neutral + Actor205: tc02 + Location: 131,77 + Owner: Neutral + Actor89: tc04 + Location: 78,54 + Owner: Neutral + Actor431: tc03 + Location: 76,56 + Owner: Neutral + Actor432: tc05 + Location: 83,55 + Owner: Neutral + Actor433: t15 + Location: 81,67 + Owner: Neutral + Actor434: t12 + Location: 83,62 + Owner: Neutral + Actor435: t16 + Location: 88,58 + Owner: Neutral + Actor436: tc01 + Location: 45,78 + Owner: Neutral + Actor437: tc05 + Location: 47,76 + Owner: Neutral + Actor438: tc04 + Location: 52,68 + Owner: Neutral + Actor439: tc01 + Location: 55,62 + Owner: Neutral + Actor440: tc03 + Location: 52,63 + Owner: Neutral + Actor441: t06 + Location: 50,64 + Owner: Neutral + Actor442: tc02 + Location: 53,59 + Owner: Neutral + Actor228: tc01 + Location: 134,76 + Owner: Neutral + Actor199: t10 + Location: 135,75 + Owner: Neutral + Actor429: tc04 + Location: 137,83 + Owner: Neutral + Actor587: t11 + Location: 138,127 + Owner: Neutral + Actor586: t02 + Location: 135,63 + Owner: Neutral + Actor585: tc04 + Location: 132,62 + Owner: Neutral + Actor451: mine + Location: 83,50 + Owner: Neutral + Actor0: tc05 + Location: 28,49 + Owner: Neutral + Actor36: tc05 + Location: 38,50 + Owner: Neutral + Actor37: tc01 + Location: 44,51 + Owner: Neutral + Actor38: tc01 + Location: 53,55 + Owner: Neutral + Actor39: tc02 + Location: 52,53 + Owner: Neutral + Actor40: tc04 + Location: 43,54 + Owner: Neutral + Actor41: t03 + Location: 48,62 + Owner: Neutral + Actor207: t15 + Location: 34,59 + Owner: Neutral + Actor208: t14 + Location: 54,84 + Owner: Neutral + Actor420: t16 + Location: 59,83 + Owner: Neutral + Actor421: tc01 + Location: 60,84 + Owner: Neutral + Actor422: tc05 + Location: 63,84 + Owner: Neutral + Actor423: t13 + Location: 26,90 + Owner: Neutral + Actor443: t15 + Location: 43,44 + Owner: Neutral + Actor444: tc04 + Location: 46,46 + Owner: Neutral + Actor445: t03 + Location: 51,47 + Owner: Neutral + Actor446: t08 + Location: 51,51 + Owner: Neutral + Actor447: tc04 + Location: 66,47 + Owner: Neutral + Actor448: tc05 + Location: 58,48 + Owner: Neutral + Actor452: tc03 + Location: 62,43 + Owner: Neutral + Actor453: tc01 + Location: 66,43 + Owner: Neutral + Actor454: tc05 + Location: 64,35 + Owner: Neutral + Actor455: t06 + Location: 67,36 + Owner: Neutral + Actor456: sam + Location: 87,35 + Owner: Soviets + Facing: 160 + Actor457: sam + Location: 85,26 + Owner: Soviets + Facing: 160 + Actor87: t11 + Location: 63,31 + Owner: Neutral + Actor459: sam + Location: 68,39 + Owner: Soviets + Facing: 96 + Actor460: tc05 + Location: 88,33 + Owner: Neutral + Actor461: t15 + Location: 90,35 + Owner: Neutral + Actor462: t15 + Location: 86,35 + Owner: Neutral + Actor463: t05 + Location: 87,33 + Owner: Neutral + Actor464: tc02 + Location: 90,30 + Owner: Neutral + Actor465: tc01 + Location: 92,31 + Owner: Neutral + Actor466: t02 + Location: 88,22 + Owner: Neutral + Actor467: t07 + Location: 90,23 + Owner: Neutral + Actor468: t17 + Location: 89,23 + Owner: Neutral + Actor469: t13 + Location: 90,25 + Owner: Neutral + Actor470: t11 + Location: 89,26 + Owner: Neutral + Actor471: t14 + Location: 91,27 + Owner: Neutral + Actor472: t10 + Location: 90,28 + Owner: Neutral + Actor473: t07 + Location: 85,23 + Owner: Neutral + Actor474: t02 + Location: 86,26 + Owner: Neutral + Actor475: t01 + Location: 87,29 + Owner: Neutral + Actor476: t17 + Location: 86,27 + Owner: Neutral + Actor477: t08 + Location: 85,25 + Owner: Neutral + Actor478: tc03 + Location: 64,24 + Owner: Neutral + Actor479: tc02 + Location: 66,31 + Owner: Neutral + Actor480: tc02 + Location: 67,24 + Owner: Neutral + Actor481: tc01 + Location: 67,28 + Owner: Neutral + Actor42: t13 + Location: 63,29 + Owner: Neutral + Actor483: t14 + Location: 68,26 + Owner: Neutral + Actor86: t05 + Location: 63,26 + Owner: Neutral + Actor485: t16 + Location: 66,25 + Owner: Neutral + Actor486: tc03 + Location: 74,23 + Owner: Neutral + Actor487: tc05 + Location: 69,20 + Owner: Neutral + Actor488: tc02 + Location: 73,20 + Owner: Neutral + Actor489: tc01 + Location: 81,20 + Owner: Neutral + Actor490: tc02 + Location: 85,20 + Owner: Neutral + Actor491: tc03 + Location: 83,20 + Owner: Neutral + Actor492: t15 + Location: 59,39 + Owner: Neutral + Actor493: t06 + Location: 61,39 + Owner: Neutral + Actor494: tc02 + Location: 60,36 + Owner: Neutral + Actor495: t15 + Location: 67,20 + Owner: Neutral + Actor496: t06 + Location: 66,20 + Owner: Neutral + Actor497: t14 + Location: 64,20 + Owner: Neutral + Actor498: t13 + Location: 60,22 + Owner: Neutral + Actor499: t17 + Location: 62,20 + Owner: Neutral + Actor500: t07 + Location: 61,20 + Owner: Neutral + Actor501: t02 + Location: 63,19 + Owner: Neutral + Actor502: tc04 + Location: 78,20 + Owner: Neutral + Actor503: t15 + Location: 76,20 + Owner: Neutral + Actor504: ftur + Location: 72,41 + Owner: Soviets + Actor505: ftur + Location: 77,41 + Owner: Soviets + Actor506: sam + Location: 82,44 + Owner: Soviets + Facing: 160 + Actor507: t11 + Location: 86,42 + Owner: Soviets + Actor508: t03 + Location: 85,43 + Owner: Soviets + Actor509: tc01 + Location: 84,39 + Owner: Soviets + Actor510: t14 + Location: 79,43 + Owner: Soviets + Actor511: tc04 + Location: 81,42 + Owner: Soviets + Actor512: t12 + Location: 84,43 + Owner: Soviets + Actor513: t01 + Location: 67,38 + Owner: Soviets + Actor514: tc02 + Location: 68,40 + Owner: Soviets + Actor515: t15 + Location: 69,36 + Owner: Soviets + Actor516: t11 + Location: 66,39 + Owner: Soviets + Actor517: tc04 + Location: 35,40 + Owner: Neutral + Actor518: tc05 + Location: 35,37 + Owner: Neutral + Actor519: t03 + Location: 27,37 + Owner: Neutral + Actor520: tc01 + Location: 59,23 + Owner: Neutral + Actor521: tc04 + Location: 59,27 + Owner: Neutral + Actor522: t15 + Location: 59,25 + Owner: Neutral + Actor523: t05 + Location: 60,30 + Owner: Neutral + Actor524: t11 + Location: 59,31 + Owner: Neutral + Actor525: t03 + Location: 59,29 + Owner: Neutral + Actor526: tc01 + Location: 60,33 + Owner: Neutral + Actor527: tc05 + Location: 57,35 + Owner: Neutral + Actor528: tc03 + Location: 56,38 + Owner: Neutral + Actor529: t17 + Location: 58,42 + Owner: Neutral + Actor530: t07 + Location: 54,42 + Owner: Neutral + Actor531: gun + Location: 68,30 + Owner: Soviets + Facing: 160 + Actor532: gun + Location: 87,32 + Owner: Soviets + Facing: 192 + Actor533: gun + Location: 83,24 + Owner: Soviets + Actor534: gun + Location: 73,24 + Owner: Soviets + Actor535: ftur + Location: 58,81 + Owner: Soviets + Actor536: ftur + Location: 56,76 + Owner: Soviets + Actor537: t11 + Location: 76,16 + Owner: Neutral + Actor538: t05 + Location: 70,15 + Owner: Neutral + Actor539: tc04 + Location: 46,16 + Owner: Neutral + Actor540: t14 + Location: 52,17 + Owner: Neutral + Actor541: tc04 + Location: 49,30 + Owner: Neutral + Actor542: tc04 + Location: 52,38 + Owner: Neutral + Actor543: tc04 + Location: 56,22 + Owner: Neutral + Actor544: t05 + Location: 57,25 + Owner: Neutral + Actor545: tc05 + Location: 50,24 + Owner: Neutral + Actor546: tc02 + Location: 48,21 + Owner: Neutral + Actor547: t15 + Location: 50,22 + Owner: Neutral + Actor548: v04 + Location: 45,31 + Owner: Neutral + Actor549: v15 + Location: 42,29 + Owner: Neutral + Actor550: v17 + Location: 43,34 + Owner: Neutral + Actor551: v18 + Location: 41,32 + Owner: Neutral + Actor552: tc04 + Location: 39,34 + Owner: Neutral + Actor553: tc01 + Location: 40,37 + Owner: Neutral + Actor554: v12 + Location: 43,31 + Owner: Neutral + Actor555: v13 + Location: 42,33 + Owner: Neutral + Actor556: wood + Location: 43,28 + Owner: Neutral + Actor557: wood + Location: 43,29 + Owner: Neutral + Actor558: wood + Location: 43,30 + Owner: Neutral + Actor559: wood + Location: 44,30 + Owner: Neutral + Actor560: wood + Location: 45,30 + Owner: Neutral + Actor561: wood + Location: 46,30 + Owner: Neutral + Actor562: wood + Location: 47,30 + Owner: Neutral + Actor563: wood + Location: 47,31 + Owner: Neutral + Actor564: wood + Location: 47,32 + Owner: Neutral + Actor565: tc05 + Location: 44,23 + Owner: Neutral + Actor566: tc03 + Location: 41,23 + Owner: Neutral + Actor567: tc04 + Location: 87,38 + Owner: Neutral + Actor568: t16 + Location: 90,38 + Owner: Neutral + Actor569: tc02 + Location: 93,36 + Owner: Neutral + Actor570: tc04 + Location: 94,33 + Owner: Neutral + Actor571: t15 + Location: 94,31 + Owner: Neutral + Actor572: t17 + Location: 95,35 + Owner: Neutral + Actor573: tc05 + Location: 88,46 + Owner: Neutral + Actor574: tc01 + Location: 88,48 + Owner: Neutral + Actor575: t11 + Location: 89,50 + Owner: Neutral + Actor576: tc05 + Location: 88,20 + Owner: Neutral + Actor577: t16 + Location: 87,19 + Owner: Neutral + Actor578: t07 + Location: 80,19 + Owner: Neutral + Actor579: t17 + Location: 75,19 + Owner: Neutral + Actor83: sam + Location: 75,24 + Owner: Soviets + Actor84: sam + Location: 63,28 + Owner: Soviets + Facing: 64 + Actor88: t17 + Location: 64,26 + Owner: Neutral + Actor90: sam + Location: 79,53 + Owner: Soviets + Facing: 160 + Actor91: tc02 + Location: 81,52 + Owner: Neutral + Actor92: t06 + Location: 78,53 + Owner: Neutral + Actor95: t14 + Location: 79,51 + Owner: Neutral + Actor430: t16 + Location: 82,56 + Owner: Neutral + Actor482: 3tnk + Location: 24,43 + Owner: Soviets + Facing: 160 + Actor641: 3tnk + Location: 23,48 + Owner: Soviets + Actor642: v2rl + Location: 20,45 + Owner: Soviets + Facing: 160 + Actor593: tc01 + Location: 97,64 + Owner: Neutral + Actor592: tc03 + Location: 101,62 + Owner: Neutral + Actor594: tc04 + Location: 96,16 + Owner: Neutral + Actor595: tc04 + Location: 97,18 + Owner: Neutral + Actor596: tc01 + Location: 94,16 + Owner: Neutral + Actor597: tc01 + Location: 98,20 + Owner: Neutral + Actor598: tc05 + Location: 91,24 + Owner: Neutral + Actor599: tc01 + Location: 104,43 + Owner: Neutral + Actor600: t10 + Location: 101,39 + Owner: Neutral + Actor601: t10 + Location: 102,43 + Owner: Neutral + Actor602: t11 + Location: 100,32 + Owner: Neutral + Actor603: tc03 + Location: 107,44 + Owner: Neutral + Actor604: tc04 + Location: 102,47 + Owner: Neutral + Actor605: tc05 + Location: 103,57 + Owner: Neutral + Actor606: tc02 + Location: 102,54 + Owner: Neutral + Actor607: tc04 + Location: 100,58 + Owner: Neutral + Actor608: tc01 + Location: 102,52 + Owner: Neutral + Actor609: tc01 + Location: 100,51 + Owner: Neutral + Actor610: t06 + Location: 102,50 + Owner: Neutral + Actor611: t06 + Location: 100,49 + Owner: Neutral + Actor612: t02 + Location: 100,54 + Owner: Neutral + Actor613: t02 + Location: 118,47 + Owner: Neutral + Actor614: tc01 + Location: 111,51 + Owner: Neutral + Actor615: tc02 + Location: 122,52 + Owner: Neutral + Actor616: t02 + Location: 117,52 + Owner: Neutral + Actor617: t11 + Location: 106,47 + Owner: Neutral + Actor618: tc02 + Location: 142,40 + Owner: Neutral + Actor619: tc02 + Location: 135,43 + Owner: Neutral + Actor620: tc02 + Location: 132,36 + Owner: Neutral + Actor621: tc04 + Location: 140,38 + Owner: Neutral + Actor622: tc04 + Location: 138,43 + Owner: Neutral + Actor623: tc04 + Location: 125,37 + Owner: Neutral + Actor624: t02 + Location: 131,40 + Owner: Neutral + Actor625: t07 + Location: 132,42 + Owner: Neutral + Actor626: tc01 + Location: 130,42 + Owner: Neutral + Actor627: tc01 + Location: 129,41 + Owner: Neutral + Actor628: t12 + Location: 135,39 + Owner: Neutral + Actor629: t11 + Location: 114,51 + Owner: Neutral + Actor630: t08 + Location: 120,53 + Owner: Neutral + Actor631: t02 + Location: 117,40 + Owner: Neutral + Actor632: t15 + Location: 123,41 + Owner: Neutral + Actor633: tc05 + Location: 128,45 + Owner: Neutral + Actor634: tc03 + Location: 121,46 + Owner: Neutral + Actor635: t02 + Location: 122,47 + Owner: Neutral + Actor636: t02 + Location: 123,46 + Owner: Neutral + Actor644: e1 + Location: 45,39 + Owner: Soviets + Actor645: e1 + Location: 47,35 + Owner: Soviets + Actor646: e1 + Location: 45,34 + Owner: Soviets + Actor647: e3 + Location: 47,39 + Owner: Soviets + Actor648: e3 + Location: 44,37 + Owner: Soviets + Actor649: apc + Location: 127,43 + Owner: Soviets + Actor650: e1 + Location: 124,43 + Owner: Soviets + Actor651: e1 + Location: 125,44 + Owner: Soviets + Actor652: e1 + Location: 126,44 + Owner: Soviets + Actor653: e3 + Location: 126,43 + Owner: Soviets + Actor654: e3 + Location: 128,44 + Owner: Soviets + Actor403: silo + Location: 36,99 + Owner: Soviets + Actor638: mine + Location: 139,54 + Owner: Neutral + Actor655: mine + Location: 120,61 + Owner: Neutral + Actor639: silo + Location: 34,99 + Owner: Soviets + Actor401: silo + Location: 36,100 + Owner: Soviets + Actor656: tc01 + Location: 26,109 + Owner: Neutral + Actor14: wood + Location: 23,57 + Owner: Neutral + CameraSpot: CAMERA + Location: 79,137 + Owner: Allies + EasyMine: mine + Location: 122,112 + Owner: Neutral + SubPen: spen + Location: 26,84 + Owner: Soviets + Uboat1: ss + Location: 17,92 + Owner: Soviets + Facing: 128 + Stance: Defend + Uboat2: ss + Location: 20,91 + Owner: Soviets + Facing: 128 + Stance: Defend + Uboat3: ss + Location: 17,112 + Owner: Soviets + Facing: 192 + Stance: Defend + Uboat4: ss + Location: 34,120 + Owner: Soviets + Facing: 160 + Stance: Defend + Uboat5: ss + Location: 24,126 + Owner: Soviets + Facing: 160 + Stance: Defend + Uboat6: ss + Location: 29,131 + Owner: Soviets + Facing: 192 + Stance: Defend + WarFactory: weap + Location: 70,72 + Owner: Soviets + Barracks: barr + Location: 67,63 + Owner: Soviets + AirForceHQ: miss + Location: 77,32 + Owner: Soviets + Kennel: kenn + Location: 64,61 + Owner: Soviets + Harvester1: harv + Location: 73,96 + Owner: Soviets + Harvester2: harv + Location: 80,51 + Owner: Soviets + Harvester3: harv + Location: 32,103 + Owner: Soviets + HarvGuard1: apc + Location: 37,98 + Owner: Soviets + HarvGuard2: 3tnk + Location: 39,96 + Owner: Soviets + HarvGuard3: ftrk + Location: 46,95 + Owner: Soviets + FarmHouse1: asianhut + Location: 26,23 + Owner: Civilians + FarmHouse2: v10 + Location: 26,30 + Owner: Civilians + FarmHouse3: v06 + Location: 21,19 + Owner: Civilians + FarmHouse4: v09 + Location: 19,29 + Owner: Civilians + FarmHouse5: v03 + Location: 17,21 + Owner: Civilians + FarmHouse6: v02 + Location: 24,19 + Owner: Civilians + FarmHouse7: v04 + Location: 17,24 + Owner: Civilians + FarmHouse8: v07 + Location: 29,21 + Owner: Civilians + FarmHouse9: v05 + Location: 23,28 + Owner: Civilians + Church: v01 + Location: 21,23 + Owner: Civilians + GroundAttackWpt1: waypoint + Location: 29,64 + Owner: Soviets + MCVInsertLocation: waypoint + Location: 71,143 + Owner: Allies + MCVDeployLocation: waypoint + Location: 73,133 + Owner: Allies + AlliedAreaTopLeft: waypoint + Location: 97,66 + Owner: Neutral + AlliedAreaBottomRight: waypoint + Location: 143,110 + Owner: Neutral + Rallypoint: waypoint + Location: 64,74 + Owner: Soviets + PatrolWpt1: waypoint + Location: 80,78 + Owner: Soviets + PatrolWpt2: waypoint + Location: 95,55 + Owner: Soviets + UboatPatrolWpt1: waypoint + Location: 52,129 + Owner: Soviets + UboatPatrolWpt2: waypoint + Location: 64,123 + Owner: Soviets + UboatPatrolWpt3: waypoint + Location: 97,123 + Owner: Soviets + UboatPatrolWpt4: waypoint + Location: 61,112 + Owner: Soviets + VillageRaidEntrypoint: waypoint + Location: 143,16 + Owner: Soviets + VillageRaidWpt1: waypoint + Location: 77,30 + Owner: Soviets + VillageRaidWpt2: waypoint + Location: 59,52 + Owner: Soviets + BaseRaidEntrypoint: waypoint + Location: 16,143 + Owner: Soviets + BaseRaidWpt1: waypoint + Location: 105,74 + Owner: Soviets + BaseRaidWpt2: waypoint + Location: 128,130 + Owner: Soviets + BaseRaidWpt3: waypoint + Location: 118,106 + Owner: Soviets + BaseRaidWpt4: waypoint + Location: 116,69 + Owner: Soviets + BaseRaidWpt5: waypoint + Location: 141,104 + Owner: Soviets + BaseRearAttackWpt1: waypoint + Location: 22,45 + Owner: Soviets + BaseRearAttackWpt2: waypoint + Location: 104,33 + Owner: Soviets + BaseRearAttackWpt3: waypoint + Location: 129,57 + Owner: Soviets + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ura/maps/intervention/rules.yaml b/mods/ura/maps/intervention/rules.yaml new file mode 100644 index 0000000..622aa58 --- /dev/null +++ b/mods/ura/maps/intervention/rules.yaml @@ -0,0 +1,200 @@ +Player: + PlayerResources: + DefaultCash: 2000 + +World: + LuaScript: + Scripts: intervention.lua + MissionData: + Briefing: The Soviet Air Force is flying air raids against a civilian village.\n\nWe have to do everything in our power to stop them!\n\nYour job is to establish a base on the mainland ASAP. We can prevent the village's destruction by capturing the enemy's Air Force Headquarters building. The enemy base is heavily guarded, though. You will not have enough time to build a force big enough to overpower the Soviet defences. You will have to find a way to sneak in!\n\nGood luck, Commander!\n + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + normal: Normal + hard: Hard + Default: normal + +^Palettes: + IndexedPlayerPalette: + PlayerIndex: + Soviets: 229, 230, 231, 232, 233, 234, 235, 8, 236, 237, 238, 239, 221, 222, 223, 223 + Allies: 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175 + Allies1: 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175 + Allies2: 208, 208, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 154, 155, 143 + +CAMERA: + RevealsShroud: + Range: 18c0 + +MISS: + Tooltip: + Name: Soviet Air Force HQ + Capturable: + Types: building + CaptureThreshold: 100 + ValidStances: Enemy + +E6.MOD: + Inherits: E6 + Buildable: + Prerequisites: ~barracks + Captures: + CaptureTypes: building + Sabotage: False + RenderSprites: + Image: e6 + +E6: + Buildable: + Prerequisites: ~disabled + +TENT: + Buildable: + Prerequisites: anypower, ~structures.allies, ~techlevel.infonly, mainland + +DOME: + Buildable: + Prerequisites: proc, ~techlevel.medium, mainland + +WEAP: + Buildable: + Prerequisites: proc, ~techlevel.low, mainland + ProvidesPrerequisite: + Prerequisite: givefix + +MAINLAND: + AlwaysVisible: + Interactable: + Tooltip: + Name: Reach the mainland + ProvidesPrerequisite: + Prerequisite: mainland + +HPAD: + ProvidesPrerequisite: + Prerequisite: givefix + +FIX: + Buildable: + Prerequisites: givefix + +GIVEFIX: + AlwaysVisible: + Interactable: + Tooltip: + Name: Weapons Factory or Helipad + +MIG: + Buildable: + Prerequisites: ~afld + AmmoPool: + Ammo: 2 + +HELI: + Buildable: + Prerequisites: ~hpad + Valued: + Cost: 1500 + +SAM: + RevealsShroud: + Range: 7c0 + Power: + Amount: -5 + +TSLA: + Power: + Amount: -50 + +ATEK: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +E4: + Buildable: + Prerequisites: ~disabled + +E7: + Buildable: + Prerequisites: ~disabled + +THF: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +SHOK: + Buildable: + Prerequisites: ~disabled + +SNIPER: + Buildable: + Prerequisites: ~disabled + +2TNK: + Buildable: + Prerequisites: ~disabled + +ARTY: + Buildable: + Prerequisites: ~disabled + +CTNK: + Buildable: + Prerequisites: ~disabled + +MGG: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +HIND: + Buildable: + Prerequisites: ~disabled + +YAK: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +DD: + Buildable: + Prerequisites: ~disabled + +STNK: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/intervention/weapons.yaml b/mods/ura/maps/intervention/weapons.yaml new file mode 100644 index 0000000..331f0bb --- /dev/null +++ b/mods/ura/maps/intervention/weapons.yaml @@ -0,0 +1,6 @@ +Nike: + Range: 9c0 + +Maverick: + Warhead@1Dam: SpreadDamage + Damage: 175 diff --git a/mods/ura/maps/jungle-law.oramap b/mods/ura/maps/jungle-law.oramap new file mode 100644 index 0000000..b196211 Binary files /dev/null and b/mods/ura/maps/jungle-law.oramap differ diff --git a/mods/ura/maps/keep-off-the-grass-2.oramap b/mods/ura/maps/keep-off-the-grass-2.oramap new file mode 100644 index 0000000..03ab2b0 Binary files /dev/null and b/mods/ura/maps/keep-off-the-grass-2.oramap differ diff --git a/mods/ura/maps/mad-science.oramap b/mods/ura/maps/mad-science.oramap new file mode 100644 index 0000000..2e2eeb7 Binary files /dev/null and b/mods/ura/maps/mad-science.oramap differ diff --git a/mods/ura/maps/maelstrom.oramap b/mods/ura/maps/maelstrom.oramap new file mode 100644 index 0000000..b3d0f6d Binary files /dev/null and b/mods/ura/maps/maelstrom.oramap differ diff --git a/mods/ura/maps/mass-confliction.oramap b/mods/ura/maps/mass-confliction.oramap new file mode 100644 index 0000000..f1b04b1 Binary files /dev/null and b/mods/ura/maps/mass-confliction.oramap differ diff --git a/mods/ura/maps/minor-pressure.oramap b/mods/ura/maps/minor-pressure.oramap new file mode 100644 index 0000000..87064d8 Binary files /dev/null and b/mods/ura/maps/minor-pressure.oramap differ diff --git a/mods/ura/maps/monster-tank-madness/map.bin b/mods/ura/maps/monster-tank-madness/map.bin new file mode 100644 index 0000000..f0fefe7 Binary files /dev/null and b/mods/ura/maps/monster-tank-madness/map.bin differ diff --git a/mods/ura/maps/monster-tank-madness/map.png b/mods/ura/maps/monster-tank-madness/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/monster-tank-madness/map.png differ diff --git a/mods/ura/maps/monster-tank-madness/map.yaml b/mods/ura/maps/monster-tank-madness/map.yaml new file mode 100644 index 0000000..46e850f --- /dev/null +++ b/mods/ura/maps/monster-tank-madness/map.yaml @@ -0,0 +1,2094 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Monster Tank Madness + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 19,16,87,88 + +Visibility: MissionSelector + +Categories: Mission + +LockPreview: True + +Players: + PlayerReference@Greece: + Name: Greece + Playable: True + AllowBots: False + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: ABB7E4 + LockSpawn: True + LockTeam: True + Enemies: BadGuy, USSR, Ukraine, Turkey, FriendlyMadTanks + PlayerReference@BadGuy: + Name: BadGuy + Faction: soviet + Color: FE1100 + Allies: USSR + Enemies: Greece, Turkey + PlayerReference@USSR: + Name: USSR + Faction: soviet + Color: FE1100 + Allies: BadGuy, Ukraine + Enemies: Greece, Turkey + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Ukraine: + Name: Ukraine + Faction: soviet + Color: FFE495 + Allies: BadGuy, USSR + Enemies: Greece, Turkey + PlayerReference@Turkey: + Name: Turkey + Faction: soviet + Color: D1987C + Enemies: Greece, BadGuy, USSR, Ukraine, Outpost + PlayerReference@FriendlyMadTanks: + Name: FriendlyMadTanks + Faction: soviet + Color: D1987C + Allies: Greece + Enemies: BadGuy, USSR, Ukraine + PlayerReference@Outpost: + Name: Outpost + NonCombatant: True + Faction: allies + Enemies: BadGuy, USSR, Ukraine, Turkey + +Actors: + Actor0: sbag + Location: 21,26 + Owner: Outpost + Actor1: sbag + Location: 22,26 + Owner: Outpost + Actor2: sbag + Location: 43,26 + Owner: Outpost + Actor3: sbag + Location: 44,26 + Owner: Outpost + Actor4: sbag + Location: 45,26 + Owner: Outpost + Actor5: sbag + Location: 45,27 + Owner: Outpost + Actor6: sbag + Location: 39,28 + Owner: Outpost + Actor7: sbag + Location: 40,28 + Owner: Outpost + Actor8: sbag + Location: 45,28 + Owner: Outpost + Actor9: sbag + Location: 39,29 + Owner: Outpost + Actor10: sbag + Location: 39,30 + Owner: Outpost + Actor11: sbag + Location: 26,31 + Owner: Outpost + Actor12: sbag + Location: 27,31 + Owner: Outpost + Actor13: sbag + Location: 28,31 + Owner: Outpost + Actor14: brik + Location: 87,31 + Owner: Neutral + Actor15: brik + Location: 88,31 + Owner: Neutral + Actor16: brik + Location: 89,31 + Owner: Neutral + Actor17: brik + Location: 90,31 + Owner: Neutral + Actor18: brik + Location: 91,31 + Owner: Neutral + Actor19: brik + Location: 92,31 + Owner: Neutral + Actor20: brik + Location: 93,31 + Owner: Neutral + Actor21: brik + Location: 94,31 + Owner: Neutral + Actor22: brik + Location: 95,31 + Owner: Neutral + Actor23: brik + Location: 96,31 + Owner: Neutral + Actor24: brik + Location: 97,31 + Owner: Neutral + Actor25: brik + Location: 98,31 + Owner: Neutral + Actor26: brik + Location: 99,31 + Owner: Neutral + Actor27: brik + Location: 100,31 + Owner: Neutral + Actor28: brik + Location: 101,31 + Owner: Neutral + Actor29: brik + Location: 102,31 + Owner: Neutral + Actor30: sbag + Location: 28,32 + Owner: Outpost + Actor31: brik + Location: 87,32 + Owner: Neutral + Actor32: brik + Location: 88,32 + Owner: Neutral + Actor33: brik + Location: 101,32 + Owner: Neutral + Actor34: brik + Location: 102,32 + Owner: Neutral + Actor35: brik + Location: 102,33 + Owner: Neutral + Actor36: brik + Location: 102,34 + Owner: Neutral + Actor37: brik + Location: 73,35 + Owner: Neutral + Actor38: brik + Location: 74,35 + Owner: Neutral + Actor39: brik + Location: 75,35 + Owner: Neutral + Actor40: brik + Location: 76,35 + Owner: Neutral + Actor41: brik + Location: 77,35 + Owner: Neutral + Actor42: brik + Location: 78,35 + Owner: Neutral + Actor43: brik + Location: 102,35 + Owner: Neutral + Actor44: brik + Location: 73,36 + Owner: Neutral + Actor45: brik + Location: 74,36 + Owner: Neutral + Actor46: brik + Location: 77,36 + Owner: Neutral + Actor47: brik + Location: 78,36 + Owner: Neutral + Actor48: brik + Location: 102,36 + Owner: Neutral + Actor49: brik + Location: 73,37 + Owner: Neutral + Actor50: brik + Location: 102,37 + Owner: Neutral + Actor51: brik + Location: 73,38 + Owner: Neutral + Actor52: brik + Location: 102,38 + Owner: Neutral + Actor53: brik + Location: 73,39 + Owner: Neutral + Actor54: brik + Location: 102,39 + Owner: Neutral + Actor55: brik + Location: 73,40 + Owner: Neutral + Actor56: brik + Location: 102,40 + Owner: Neutral + Actor57: brik + Location: 73,41 + Owner: Neutral + Actor58: brik + Location: 101,41 + Owner: Neutral + Actor59: brik + Location: 102,41 + Owner: Neutral + Actor60: brik + Location: 73,42 + Owner: Neutral + Actor61: brik + Location: 101,42 + Owner: Neutral + Actor62: brik + Location: 102,42 + Owner: Neutral + Actor63: brik + Location: 73,43 + Owner: Neutral + Actor64: brik + Location: 73,44 + Owner: Neutral + Actor65: brik + Location: 73,45 + Owner: Neutral + Actor66: brik + Location: 74,45 + Owner: Neutral + Actor67: brik + Location: 81,45 + Owner: Neutral + Actor68: brik + Location: 82,45 + Owner: Neutral + Actor69: brik + Location: 91,45 + Owner: Neutral + Actor70: brik + Location: 92,45 + Owner: Neutral + Actor71: brik + Location: 97,45 + Owner: Neutral + Actor72: brik + Location: 98,45 + Owner: Neutral + Actor73: v18 + Location: 53,46 + Owner: Neutral + Actor74: v14 + Location: 54,46 + Owner: Neutral + Actor75: v16 + Location: 55,46 + Owner: Neutral + Actor76: brik + Location: 73,46 + Owner: Neutral + Actor77: brik + Location: 74,46 + Owner: Neutral + Actor78: brik + Location: 75,46 + Owner: Neutral + Actor79: brik + Location: 76,46 + Owner: Neutral + Actor80: brik + Location: 77,46 + Owner: Neutral + Actor81: brik + Location: 78,46 + Owner: Neutral + Actor82: brik + Location: 79,46 + Owner: Neutral + Actor83: brik + Location: 80,46 + Owner: Neutral + Actor84: brik + Location: 81,46 + Owner: Neutral + Actor85: brik + Location: 82,46 + Owner: Neutral + Actor86: brik + Location: 91,46 + Owner: Neutral + Actor87: brik + Location: 92,46 + Owner: Neutral + Actor88: brik + Location: 93,46 + Owner: Neutral + Actor89: brik + Location: 94,46 + Owner: Neutral + Actor90: brik + Location: 95,46 + Owner: Neutral + Actor91: brik + Location: 96,46 + Owner: Neutral + Actor92: brik + Location: 97,46 + Owner: Neutral + Actor93: brik + Location: 98,46 + Owner: Neutral + Actor94: cycl + Location: 84,49 + Owner: Neutral + Actor95: cycl + Location: 90,49 + Owner: Neutral + Actor96: cycl + Location: 73,50 + Owner: Neutral + Actor97: cycl + Location: 74,50 + Owner: Neutral + Actor98: cycl + Location: 75,50 + Owner: Neutral + Actor99: cycl + Location: 76,50 + Owner: Neutral + Actor100: cycl + Location: 77,50 + Owner: Neutral + Actor101: cycl + Location: 78,50 + Owner: Neutral + Actor102: cycl + Location: 80,50 + Owner: Neutral + Actor103: cycl + Location: 81,50 + Owner: Neutral + Actor104: cycl + Location: 82,50 + Owner: Neutral + Actor105: cycl + Location: 83,50 + Owner: Neutral + Actor106: cycl + Location: 84,50 + Owner: Neutral + Actor107: cycl + Location: 90,50 + Owner: Neutral + Actor108: cycl + Location: 91,50 + Owner: Neutral + Actor109: cycl + Location: 92,50 + Owner: Neutral + Actor110: cycl + Location: 94,50 + Owner: Neutral + Actor111: cycl + Location: 95,50 + Owner: Neutral + Actor112: cycl + Location: 96,50 + Owner: Neutral + Actor113: cycl + Location: 97,50 + Owner: Neutral + Actor114: cycl + Location: 98,50 + Owner: Neutral + Actor115: cycl + Location: 73,51 + Owner: Neutral + Actor116: cycl + Location: 98,51 + Owner: Neutral + Actor117: cycl + Location: 73,52 + Owner: Neutral + Actor118: cycl + Location: 98,52 + Owner: Neutral + Actor119: cycl + Location: 73,53 + Owner: Neutral + Actor120: cycl + Location: 98,53 + Owner: Neutral + Actor121: cycl + Location: 73,54 + Owner: Neutral + Actor122: wood + Location: 84,54 + Owner: Neutral + Actor123: wood + Location: 85,54 + Owner: Neutral + Actor124: cycl + Location: 98,54 + Owner: Neutral + Actor125: wood + Location: 81,55 + Owner: Neutral + Actor126: v16 + Location: 82,55 + Owner: Neutral + Actor127: v15 + Location: 83,55 + Owner: Neutral + Actor128: v14 + Location: 84,55 + Owner: Neutral + Actor129: wood + Location: 85,55 + Owner: Neutral + Actor130: cycl + Location: 98,55 + Owner: Neutral + Actor131: cycl + Location: 73,56 + Owner: Neutral + Actor132: wood + Location: 81,56 + Owner: Neutral + Actor133: v17 + Location: 82,56 + Owner: Neutral + Actor134: v18 + Location: 83,56 + Owner: Neutral + Actor135: cycl + Location: 73,57 + Owner: Neutral + Actor136: wood + Location: 81,57 + Owner: Neutral + Actor137: wood + Location: 82,57 + Owner: Neutral + Actor138: wood + Location: 83,57 + Owner: Neutral + Actor139: wood + Location: 84,57 + Owner: Neutral + Actor140: wood + Location: 85,57 + Owner: Neutral + Actor141: cycl + Location: 98,57 + Owner: Neutral + Actor142: cycl + Location: 98,58 + Owner: Neutral + Actor143: cycl + Location: 25,59 + Owner: Neutral + Actor144: cycl + Location: 26,59 + Owner: Neutral + Actor145: cycl + Location: 27,59 + Owner: Neutral + Actor146: cycl + Location: 28,59 + Owner: Neutral + Actor147: cycl + Location: 73,59 + Owner: Neutral + Actor148: cycl + Location: 98,59 + Owner: Neutral + Actor149: cycl + Location: 25,60 + Owner: Neutral + Actor150: cycl + Location: 30,60 + Owner: Neutral + Actor151: cycl + Location: 31,60 + Owner: Neutral + Actor152: cycl + Location: 73,60 + Owner: Neutral + Actor153: cycl + Location: 94,60 + Owner: Neutral + Actor154: cycl + Location: 96,60 + Owner: Neutral + Actor155: cycl + Location: 98,60 + Owner: Neutral + Actor156: cycl + Location: 25,61 + Owner: Neutral + Actor157: cycl + Location: 31,61 + Owner: Neutral + Actor158: cycl + Location: 73,61 + Owner: Neutral + Actor159: cycl + Location: 74,61 + Owner: Neutral + Actor160: cycl + Location: 75,61 + Owner: Neutral + Actor161: cycl + Location: 76,61 + Owner: Neutral + Actor162: cycl + Location: 77,61 + Owner: Neutral + Actor163: cycl + Location: 79,61 + Owner: Neutral + Actor164: cycl + Location: 80,61 + Owner: Neutral + Actor165: cycl + Location: 83,61 + Owner: Neutral + Actor166: cycl + Location: 84,61 + Owner: Neutral + Actor167: cycl + Location: 85,61 + Owner: Neutral + Actor168: cycl + Location: 86,61 + Owner: Neutral + Actor169: cycl + Location: 87,61 + Owner: Neutral + Actor170: cycl + Location: 89,61 + Owner: Neutral + Actor171: cycl + Location: 90,61 + Owner: Neutral + Actor172: cycl + Location: 91,61 + Owner: Neutral + Actor173: cycl + Location: 92,61 + Owner: Neutral + Actor174: cycl + Location: 93,61 + Owner: Neutral + Actor175: cycl + Location: 94,61 + Owner: Neutral + Actor176: cycl + Location: 96,61 + Owner: Neutral + Actor177: cycl + Location: 97,61 + Owner: Neutral + Actor178: cycl + Location: 98,61 + Owner: Neutral + Actor179: cycl + Location: 25,62 + Owner: Neutral + Actor180: cycl + Location: 31,62 + Owner: Neutral + Actor181: cycl + Location: 39,62 + Owner: Neutral + Actor182: cycl + Location: 40,62 + Owner: Neutral + Actor183: cycl + Location: 80,62 + Owner: Neutral + Actor184: cycl + Location: 83,62 + Owner: Neutral + Actor185: cycl + Location: 25,63 + Owner: Neutral + Actor186: cycl + Location: 26,63 + Owner: Neutral + Actor187: cycl + Location: 27,63 + Owner: Neutral + Actor188: cycl + Location: 28,63 + Owner: Neutral + Actor189: cycl + Location: 29,63 + Owner: Neutral + Actor190: cycl + Location: 30,63 + Owner: Neutral + Actor191: cycl + Location: 31,63 + Owner: Neutral + Actor192: cycl + Location: 40,63 + Owner: Neutral + Actor193: cycl + Location: 40,64 + Owner: Neutral + Actor194: cycl + Location: 34,65 + Owner: Neutral + Actor195: cycl + Location: 35,65 + Owner: Neutral + Actor196: cycl + Location: 40,65 + Owner: Neutral + Actor197: cycl + Location: 34,66 + Owner: Neutral + Actor198: cycl + Location: 40,66 + Owner: Neutral + Actor199: cycl + Location: 34,67 + Owner: Neutral + Actor200: cycl + Location: 35,67 + Owner: Neutral + Actor201: cycl + Location: 36,67 + Owner: Neutral + Actor202: cycl + Location: 37,67 + Owner: Neutral + Actor203: cycl + Location: 38,67 + Owner: Neutral + Actor204: cycl + Location: 39,67 + Owner: Neutral + Actor205: cycl + Location: 40,67 + Owner: Neutral + Actor206: sbag + Location: 25,68 + Owner: Neutral + Actor207: sbag + Location: 25,69 + Owner: Neutral + Actor208: sbag + Location: 28,69 + Owner: Neutral + Actor209: sbag + Location: 23,70 + Owner: Neutral + Actor210: sbag + Location: 24,70 + Owner: Neutral + Actor211: sbag + Location: 25,70 + Owner: Neutral + Actor212: sbag + Location: 28,70 + Owner: Neutral + Actor213: sbag + Location: 28,71 + Owner: Neutral + Actor214: sbag + Location: 29,71 + Owner: Neutral + Actor215: sbag + Location: 30,71 + Owner: Neutral + Actor216: sbag + Location: 31,71 + Owner: Neutral + Actor217: brik + Location: 61,73 + Owner: Neutral + Actor218: brik + Location: 62,73 + Owner: Neutral + Actor219: brik + Location: 63,73 + Owner: Neutral + Actor220: brik + Location: 64,73 + Owner: Neutral + Actor221: brik + Location: 65,73 + Owner: Neutral + Actor222: brik + Location: 66,73 + Owner: Neutral + Actor223: brik + Location: 67,73 + Owner: Neutral + Actor224: brik + Location: 68,73 + Owner: Neutral + Actor225: brik + Location: 69,73 + Owner: Neutral + Actor226: brik + Location: 70,73 + Owner: Neutral + Actor227: brik + Location: 76,73 + Owner: Neutral + Actor228: brik + Location: 77,73 + Owner: Neutral + Actor229: brik + Location: 78,73 + Owner: Neutral + Actor230: brik + Location: 79,73 + Owner: Neutral + Actor231: brik + Location: 80,73 + Owner: Neutral + Actor232: brik + Location: 81,73 + Owner: Neutral + Actor233: brik + Location: 82,73 + Owner: Neutral + Actor234: brik + Location: 83,73 + Owner: Neutral + Actor235: brik + Location: 84,73 + Owner: Neutral + Actor236: brik + Location: 85,73 + Owner: Neutral + Actor237: brik + Location: 91,73 + Owner: Neutral + Actor238: brik + Location: 92,73 + Owner: Neutral + Actor239: brik + Location: 61,74 + Owner: Neutral + Actor240: brik + Location: 62,74 + Owner: Neutral + Actor241: brik + Location: 69,74 + Owner: Neutral + Actor242: brik + Location: 70,74 + Owner: Neutral + Actor243: brik + Location: 76,74 + Owner: Neutral + Actor244: brik + Location: 77,74 + Owner: Neutral + Actor245: brik + Location: 84,74 + Owner: Neutral + Actor246: brik + Location: 85,74 + Owner: Neutral + Actor247: brik + Location: 91,74 + Owner: Neutral + Actor248: brik + Location: 92,74 + Owner: Neutral + Actor249: brik + Location: 61,75 + Owner: Neutral + Actor250: brik + Location: 92,75 + Owner: Neutral + Actor251: brik + Location: 61,76 + Owner: Neutral + Actor252: brik + Location: 92,76 + Owner: Neutral + Actor253: brik + Location: 61,77 + Owner: Neutral + Actor254: brik + Location: 62,77 + Owner: Neutral + Actor255: brik + Location: 92,77 + Owner: Neutral + Actor256: brik + Location: 61,78 + Owner: Neutral + Actor257: brik + Location: 62,78 + Owner: Neutral + Actor258: sbag + Location: 77,78 + Owner: Neutral + Actor259: sbag + Location: 78,78 + Owner: Neutral + Actor260: sbag + Location: 79,78 + Owner: Neutral + Actor261: brik + Location: 92,78 + Owner: Neutral + Actor262: sbag + Location: 77,79 + Owner: Neutral + Actor263: sbag + Location: 79,79 + Owner: Neutral + Actor264: brik + Location: 92,79 + Owner: Neutral + Actor265: sbag + Location: 77,80 + Owner: Neutral + Actor266: sbag + Location: 78,80 + Owner: Neutral + Actor267: sbag + Location: 79,80 + Owner: Neutral + Actor268: brik + Location: 92,80 + Owner: Neutral + Actor269: brik + Location: 92,81 + Owner: Neutral + Actor270: brik + Location: 92,82 + Owner: Neutral + Actor271: brik + Location: 92,83 + Owner: Neutral + Actor272: brik + Location: 92,84 + Owner: Neutral + Actor273: brik + Location: 61,85 + Owner: Neutral + Actor274: brik + Location: 62,85 + Owner: Neutral + Actor275: brik + Location: 92,85 + Owner: Neutral + Actor276: brik + Location: 61,86 + Owner: Neutral + Actor277: brik + Location: 62,86 + Owner: Neutral + Actor278: sbag + Location: 77,86 + Owner: Neutral + Actor279: sbag + Location: 78,86 + Owner: Neutral + Actor280: sbag + Location: 79,86 + Owner: Neutral + Actor281: brik + Location: 92,86 + Owner: Neutral + Actor282: brik + Location: 61,87 + Owner: Neutral + Actor283: sbag + Location: 77,87 + Owner: Neutral + Actor284: sbag + Location: 79,87 + Owner: Neutral + Actor285: brik + Location: 92,87 + Owner: Neutral + Actor286: brik + Location: 61,88 + Owner: Neutral + Actor287: sbag + Location: 77,88 + Owner: Neutral + Actor288: sbag + Location: 78,88 + Owner: Neutral + Actor289: sbag + Location: 79,88 + Owner: Neutral + Actor290: brik + Location: 92,88 + Owner: Neutral + Actor291: brik + Location: 61,89 + Owner: Neutral + Actor292: brik + Location: 92,89 + Owner: Neutral + Actor293: brik + Location: 61,90 + Owner: Neutral + Actor294: brik + Location: 62,90 + Owner: Neutral + Actor295: brik + Location: 91,90 + Owner: Neutral + Actor296: brik + Location: 92,90 + Owner: Neutral + Actor297: brik + Location: 61,91 + Owner: Neutral + Actor298: brik + Location: 62,91 + Owner: Neutral + Actor299: brik + Location: 63,91 + Owner: Neutral + Actor300: brik + Location: 64,91 + Owner: Neutral + Actor301: brik + Location: 65,91 + Owner: Neutral + Actor302: brik + Location: 66,91 + Owner: Neutral + Actor303: brik + Location: 67,91 + Owner: Neutral + Actor304: brik + Location: 68,91 + Owner: Neutral + Actor305: brik + Location: 69,91 + Owner: Neutral + Actor306: brik + Location: 70,91 + Owner: Neutral + Actor307: brik + Location: 71,91 + Owner: Neutral + Actor308: brik + Location: 72,91 + Owner: Neutral + Actor309: brik + Location: 73,91 + Owner: Neutral + Actor310: brik + Location: 74,91 + Owner: Neutral + Actor311: brik + Location: 75,91 + Owner: Neutral + Actor312: brik + Location: 76,91 + Owner: Neutral + Actor313: brik + Location: 77,91 + Owner: Neutral + Actor314: brik + Location: 78,91 + Owner: Neutral + Actor315: brik + Location: 79,91 + Owner: Neutral + Actor316: brik + Location: 80,91 + Owner: Neutral + Actor317: brik + Location: 81,91 + Owner: Neutral + Actor318: brik + Location: 82,91 + Owner: Neutral + Actor319: brik + Location: 83,91 + Owner: Neutral + Actor320: brik + Location: 84,91 + Owner: Neutral + Actor321: brik + Location: 85,91 + Owner: Neutral + Actor322: brik + Location: 86,91 + Owner: Neutral + Actor323: brik + Location: 87,91 + Owner: Neutral + Actor324: brik + Location: 88,91 + Owner: Neutral + Actor325: brik + Location: 89,91 + Owner: Neutral + Actor326: brik + Location: 90,91 + Owner: Neutral + Actor327: brik + Location: 91,91 + Owner: Neutral + Actor328: brik + Location: 92,91 + Owner: Neutral + Actor329: wood + Location: 32,96 + Owner: Neutral + Actor330: v14 + Location: 30,97 + Owner: Neutral + Actor331: wood + Location: 32,97 + Owner: Neutral + Actor332: v17 + Location: 30,98 + Owner: Neutral + Actor333: v15 + Location: 31,98 + Owner: Neutral + Actor334: wood + Location: 32,98 + Owner: Neutral + Actor335: wood + Location: 31,99 + Owner: Neutral + Actor336: wood + Location: 32,99 + Owner: Neutral + Actor337: v16 + Location: 40,101 + Owner: Neutral + Actor338: v18 + Location: 38,102 + Owner: Neutral + Actor339: v17 + Location: 39,102 + Owner: Neutral + Actor340: v14 + Location: 40,102 + Owner: Neutral + Actor341: wood + Location: 36,103 + Owner: Neutral + Actor342: wood + Location: 37,103 + Owner: Neutral + Actor343: wood + Location: 38,103 + Owner: Neutral + Actor344: wood + Location: 39,103 + Owner: Neutral + Actor345: tc04 + Location: 24,19 + Owner: Neutral + Actor346: tc01 + Location: 23,22 + Owner: Neutral + Actor347: tc02 + Location: 28,23 + Owner: Neutral + Actor348: tc05 + Location: 35,21 + Owner: Neutral + Actor349: tc04 + Location: 32,19 + Owner: Neutral + Actor350: tc03 + Location: 38,17 + Owner: Neutral + Actor351: t07 + Location: 22,24 + Owner: Neutral + Actor352: t07 + Location: 43,23 + Owner: Neutral + Actor353: t06 + Location: 27,19 + Owner: Neutral + Actor354: t05 + Location: 26,24 + Owner: Neutral + Actor355: t01 + Location: 45,21 + Owner: Neutral + Actor356: tc05 + Location: 98,28 + Owner: Neutral + Actor357: tc02 + Location: 95,29 + Owner: Neutral + Actor358: tc01 + Location: 76,33 + Owner: Neutral + Actor359: tc03 + Location: 102,28 + Owner: Neutral + Actor360: tc04 + Location: 103,25 + Owner: Neutral + Actor361: tc04 + Location: 103,41 + Owner: Neutral + Actor362: tc01 + Location: 101,42 + Owner: Neutral + Actor363: tc04 + Location: 63,21 + Owner: Neutral + Actor364: tc05 + Location: 78,19 + Owner: Neutral + Actor365: tc03 + Location: 79,22 + Owner: Neutral + Actor366: tc02 + Location: 70,31 + Owner: Neutral + Actor367: tc05 + Location: 70,59 + Owner: Neutral + Actor368: tc01 + Location: 71,56 + Owner: Neutral + Actor369: tc01 + Location: 84,61 + Owner: Neutral + Actor370: tc04 + Location: 87,63 + Owner: Neutral + Actor371: tc04 + Location: 67,37 + Owner: Neutral + Actor372: tc04 + Location: 22,80 + Owner: Neutral + Actor373: tc02 + Location: 37,50 + Owner: Neutral + Actor374: tc02 + Location: 40,67 + Owner: Neutral + Actor375: tc04 + Location: 37,68 + Owner: Neutral + Actor376: tc05 + Location: 22,59 + Owner: Neutral + Actor377: tc01 + Location: 26,63 + Owner: Neutral + Actor378: t07 + Location: 26,59 + Owner: Neutral + Actor379: t06 + Location: 39,65 + Owner: Neutral + Actor380: tc02 + Location: 22,68 + Owner: Neutral + Actor381: tc01 + Location: 24,71 + Owner: Neutral + Actor382: t01 + Location: 31,33 + Owner: Neutral + Actor383: tc05 + Location: 34,46 + Owner: Neutral + Actor384: tc04 + Location: 37,45 + Owner: Neutral + Actor385: tc02 + Location: 39,41 + Owner: Neutral + Actor386: tc01 + Location: 38,39 + Owner: Neutral + Actor387: mine + Location: 49,83 + Owner: Neutral + Actor388: mine + Location: 44,79 + Owner: Neutral + Actor389: tc05 + Location: 28,82 + Owner: Neutral + Actor390: tc05 + Location: 21,97 + Owner: Neutral + Actor391: tc04 + Location: 25,99 + Owner: Neutral + Actor392: tc02 + Location: 21,100 + Owner: Neutral + Actor393: tc01 + Location: 31,94 + Owner: Neutral + Actor394: tc04 + Location: 38,95 + Owner: Neutral + Actor395: tc05 + Location: 44,101 + Owner: Neutral + Actor396: tc02 + Location: 40,102 + Owner: Neutral + Actor397: tc01 + Location: 36,101 + Owner: Neutral + Actor398: t15 + Location: 29,94 + Owner: Neutral + Actor399: tc05 + Location: 54,41 + Owner: Neutral + Actor400: tc03 + Location: 50,35 + Owner: Neutral + Actor401: tc02 + Location: 51,37 + Owner: Neutral + Actor402: tc01 + Location: 53,39 + Owner: Neutral + Actor403: tc01 + Location: 57,42 + Owner: Neutral + Actor404: t17 + Location: 59,42 + Owner: Neutral + Actor405: t13 + Location: 55,39 + Owner: Neutral + Actor406: tc04 + Location: 49,41 + Owner: Neutral + Actor407: tc01 + Location: 41,48 + Owner: Neutral + Actor408: tc05 + Location: 51,47 + Owner: Neutral + Actor409: t08 + Location: 46,50 + Owner: Neutral + Actor410: t07 + Location: 39,49 + Owner: Neutral + Actor411: t07 + Location: 43,41 + Owner: Neutral + Actor412: tc04 + Location: 48,52 + Owner: Neutral + Actor413: tc02 + Location: 46,54 + Owner: Neutral + Actor414: tc04 + Location: 75,50 + Owner: Neutral + Actor415: tc05 + Location: 95,53 + Owner: Neutral + Actor416: tc01 + Location: 76,59 + Owner: Neutral + Actor417: tc02 + Location: 80,53 + Owner: Neutral + Actor418: t01 + Location: 75,57 + Owner: Neutral + Actor419: t02 + Location: 79,51 + Owner: Neutral + Actor420: t03 + Location: 91,58 + Owner: Neutral + Actor421: tc04 + Location: 86,27 + Owner: Neutral + Actor422: tc02 + Location: 89,27 + Owner: Neutral + Actor423: tc01 + Location: 91,26 + Owner: Neutral + Actor424: weap + Location: 38,19 + Owner: Outpost + Health: 37 + Actor425: pbox + Location: 22,27 + Owner: Outpost + Health: 28 + Actor426: pbox + Location: 44,27 + Owner: Outpost + Health: 35 + Actor427: pbox + Location: 40,29 + Owner: Outpost + Health: 37 + Actor428: dome + Location: 35,19 + Owner: Outpost + Health: 35 + Actor429: gun + Location: 45,25 + Owner: Outpost + Health: 31 + Facing: 96 + Actor430: gun + Location: 29,30 + Owner: Outpost + Health: 19 + Facing: 32 + Actor431: gun + Location: 38,29 + Owner: Outpost + Health: 39 + Facing: 96 + Actor432: tent + Location: 33,22 + Owner: Outpost + Health: 50 + Actor433: fix + Location: 32,28 + Owner: Outpost + Health: 31 + Actor434: ftur + Location: 78,34 + Owner: BadGuy + Actor435: silo + Location: 76,38 + Owner: BadGuy + Actor436: silo + Location: 75,38 + Owner: BadGuy + Actor437: silo + Location: 75,37 + Owner: BadGuy + Actor438: silo + Location: 76,37 + Owner: BadGuy + Actor439: apwr + Location: 98,33 + Owner: BadGuy + Actor440: apwr + Location: 94,35 + Owner: BadGuy + Actor441: barr + Location: 97,40 + Owner: BadGuy + Actor442: miss + Location: 86,33 + Owner: BadGuy + Actor444: ftur + Location: 91,47 + Owner: BadGuy + Actor445: ftur + Location: 82,47 + Owner: BadGuy + Actor446: ftur + Location: 86,31 + Owner: BadGuy + Actor447: tsla + Location: 93,45 + Owner: BadGuy + Actor448: tsla + Location: 80,45 + Owner: BadGuy + Actor449: apwr + Location: 95,32 + Owner: BadGuy + Actor450: spen + Location: 102,47 + Owner: BadGuy + Health: 88 + Actor451: fact + Location: 88,87 + Owner: USSR + Actor452: proc + Location: 68,81 + Owner: USSR + Actor453: silo + Location: 65,87 + Owner: USSR + Actor454: silo + Location: 66,88 + Owner: USSR + Actor455: silo + Location: 66,87 + Owner: USSR + Actor456: silo + Location: 65,88 + Owner: USSR + Actor457: sam + Location: 63,74 + Owner: USSR + Actor458: sam + Location: 80,74 + Owner: USSR + Actor459: apwr + Location: 73,85 + Owner: USSR + Actor460: apwr + Location: 89,76 + Owner: USSR + Actor461: apwr + Location: 69,87 + Owner: USSR + Actor462: apwr + Location: 86,77 + Owner: USSR + Actor463: barr + Location: 66,76 + Owner: USSR + Actor464: kenn + Location: 91,86 + Owner: USSR + Actor465: tsla + Location: 78,74 + Owner: USSR + Actor466: tsla + Location: 83,74 + Owner: USSR + Actor467: tsla + Location: 62,76 + Owner: USSR + Actor468: tsla + Location: 62,87 + Owner: USSR + Actor469: weap + Location: 81,82 + Owner: USSR + Actor470: ftur + Location: 69,72 + Owner: USSR + Actor471: ftur + Location: 77,72 + Owner: USSR + Actor472: ftur + Location: 60,78 + Owner: USSR + Actor473: ftur + Location: 60,85 + Owner: USSR + Actor474: ftur + Location: 85,72 + Owner: USSR + Actor475: ftur + Location: 78,79 + Owner: USSR + Actor476: ftur + Location: 78,87 + Owner: USSR + Actor477: apwr + Location: 89,79 + Owner: USSR + Actor480: powr + Location: 34,61 + Owner: BadGuy + Actor481: v19 + Location: 27,60 + Owner: BadGuy + Actor482: v19 + Location: 29,61 + Owner: BadGuy + Actor483: v19 + Location: 27,61 + Owner: BadGuy + Actor484: v19 + Location: 38,65 + Owner: BadGuy + Actor485: v19 + Location: 36,65 + Owner: BadGuy + Actor486: v19 + Location: 38,64 + Owner: BadGuy + Actor487: barl + Location: 26,61 + Owner: USSR + Actor488: brl3 + Location: 26,62 + Owner: USSR + Actor489: brl3 + Location: 37,65 + Owner: USSR + Actor491: brl3 + Location: 28,62 + Owner: USSR + Actor493: brl3 + Location: 30,61 + Owner: USSR + Actor494: barl + Location: 27,62 + Owner: USSR + Actor495: barl + Location: 28,61 + Owner: USSR + Actor496: barl + Location: 29,62 + Owner: USSR + Actor497: barl + Location: 39,64 + Owner: USSR + Actor498: barl + Location: 35,66 + Owner: USSR + Actor499: barl + Location: 37,64 + Owner: USSR + Actor500: barl + Location: 39,65 + Owner: USSR + Actor501: barl + Location: 39,63 + Owner: USSR + Actor504: brl3 + Location: 37,66 + Owner: BadGuy + Actor505: barl + Location: 36,66 + Owner: BadGuy + Actor506: barl + Location: 38,66 + Owner: BadGuy + Actor508: silo + Location: 36,18 + Owner: Outpost + Health: 59 + Actor509: silo + Location: 37,18 + Owner: Outpost + Health: 8 + Actor510: silo + Location: 37,19 + Owner: Outpost + Health: 33 + Actor511: apwr + Location: 26,21 + Owner: Outpost + Health: 25 + Actor512: apwr + Location: 23,24 + Owner: Outpost + Health: 14 + Actor515: v02 + Location: 23,99 + Owner: Neutral + Actor516: v03 + Location: 36,96 + Owner: Neutral + Actor517: v05 + Location: 21,102 + Owner: Neutral + Actor518: v06 + Location: 30,96 + Owner: Neutral + Actor519: v06 + Location: 38,101 + Owner: Neutral + Actor520: v07 + Location: 43,103 + Owner: Neutral + Actor521: v08 + Location: 21,99 + Owner: Neutral + Actor522: apwr + Location: 72,88 + Owner: USSR + Actor523: v02 + Location: 42,47 + Owner: Neutral + Actor524: v03 + Location: 50,43 + Owner: Neutral + Actor525: v04 + Location: 42,39 + Owner: Neutral + Actor526: v05 + Location: 39,51 + Owner: Neutral + Actor527: v06 + Location: 52,45 + Owner: Neutral + Actor528: v07 + Location: 47,50 + Owner: Neutral + Actor529: v08 + Location: 45,52 + Owner: Neutral + Actor530: v09 + Location: 46,49 + Owner: Neutral + Actor531: v01.exploding + Location: 76,52 + Owner: Ukraine + Actor532: v02.exploding + Location: 76,58 + Owner: Ukraine + Actor533: v03.exploding + Location: 89,53 + Owner: Ukraine + Actor534: v04.exploding + Location: 91,59 + Owner: Ukraine + Actor536: v06.exploding + Location: 82,54 + Owner: Ukraine + Actor537: v07.exploding + Location: 78,60 + Owner: Ukraine + Actor538: v08.exploding + Location: 96,53 + Owner: Ukraine + Actor539: v09.exploding + Location: 97,52 + Owner: Ukraine + Actor540: v19 + Location: 74,55 + Owner: Ukraine + Actor541: v19 + Location: 75,55 + Owner: Ukraine + Actor542: v19 + Location: 97,60 + Owner: Ukraine + Actor443: v19 + Location: 84,56 + Owner: Ukraine + Actor544: barl + Location: 78,59 + Owner: Ukraine + Actor545: brl3 + Location: 75,59 + Owner: Ukraine + Actor546: brl3 + Location: 78,52 + Owner: Ukraine + Actor547: barl + Location: 96,52 + Owner: Ukraine + Actor548: brl3 + Location: 93,60 + Owner: Ukraine + Actor549: barl + Location: 93,59 + Owner: Ukraine + Actor550: brl3 + Location: 92,59 + Owner: Ukraine + Actor551: brl3 + Location: 73,55 + Owner: Ukraine + Actor552: barl + Location: 74,54 + Owner: Ukraine + Actor553: brl3 + Location: 75,53 + Owner: Ukraine + Actor554: brl3 + Location: 93,50 + Owner: Ukraine + Actor555: barl + Location: 94,51 + Owner: Ukraine + Actor556: brl3 + Location: 95,51 + Owner: Ukraine + Actor557: brl3 + Location: 88,61 + Owner: Ukraine + Actor558: barl + Location: 89,60 + Owner: Ukraine + Actor559: barl + Location: 90,60 + Owner: Ukraine + Actor560: barl + Location: 91,58 + Owner: Ukraine + Actor561: barl + Location: 80,60 + Owner: Ukraine + Actor562: barl + Location: 75,60 + Owner: Ukraine + Actor563: barl + Location: 78,61 + Owner: Ukraine + Actor564: brl3 + Location: 80,55 + Owner: Ukraine + Actor565: brl3 + Location: 79,54 + Owner: Ukraine + Actor566: brl3 + Location: 79,53 + Owner: Ukraine + Actor567: brl3 + Location: 80,53 + Owner: Ukraine + Actor569: brl3 + Location: 82,53 + Owner: Ukraine + Actor570: brl3 + Location: 73,58 + Owner: Ukraine + Actor571: barl + Location: 74,58 + Owner: Ukraine + Actor572: barl + Location: 79,50 + Owner: Ukraine + Actor573: brl3 + Location: 79,51 + Owner: Ukraine + Actor574: brl3 + Location: 98,56 + Owner: Ukraine + Actor575: barl + Location: 97,57 + Owner: Ukraine + Actor576: brl3 + Location: 97,58 + Owner: Ukraine + Actor577: brl3 + Location: 97,59 + Owner: Ukraine + Actor578: brl3 + Location: 85,56 + Owner: Ukraine + Actor579: barl + Location: 86,56 + Owner: Ukraine + Actor580: brl3 + Location: 87,57 + Owner: Ukraine + Actor581: barl + Location: 88,58 + Owner: Ukraine + Actor582: barl + Location: 87,55 + Owner: Ukraine + Actor583: barl + Location: 88,54 + Owner: Ukraine + Actor588: v2rl + Location: 91,75 + Owner: USSR + Facing: 32 + Actor589: v2rl + Location: 91,89 + Owner: USSR + Facing: 32 + Actor590: badtruk + Location: 89,34 + Owner: BadGuy + Facing: 32 + Actor591: badtruk + Location: 90,35 + Owner: BadGuy + Facing: 96 + Actor592: badtruk + Location: 89,36 + Owner: BadGuy + Actor593: v2rl + Location: 32,48 + Owner: BadGuy + Facing: 160 + Actor594: 3tnk + Location: 85,86 + Owner: USSR + Actor595: v2rl + Location: 86,86 + Owner: USSR + Actor596: dtrk + Location: 74,81 + Owner: USSR + Actor597: dtrk + Location: 77,83 + Owner: USSR + Actor598: ttnk + Location: 55,61 + Owner: USSR + Actor599: bad3tnk + Location: 76,27 + Owner: BadGuy + Facing: 224 + Actor600: dtrk + Location: 86,83 + Owner: USSR + Actor601: e1 + Location: 24,71 + Owner: BadGuy + Facing: 96 + SubCell: 2 + Actor602: e1 + Location: 25,71 + Owner: BadGuy + Facing: 96 + SubCell: 2 + Actor603: e1 + Location: 28,72 + Owner: BadGuy + Facing: 192 + SubCell: 1 + Actor604: e1 + Location: 29,72 + Owner: BadGuy + SubCell: 1 + Actor605: e2 + Location: 29,70 + Owner: BadGuy + Facing: 160 + SubCell: 4 + Actor606: e2 + Location: 24,69 + Owner: BadGuy + Facing: 160 + SubCell: 4 + Actor607: e1 + Location: 81,88 + Owner: USSR + SubCell: 1 + Actor608: e1 + Location: 81,88 + Owner: USSR + SubCell: 2 + Actor609: e1 + Location: 82,88 + Owner: USSR + SubCell: 1 + Actor610: e1 + Location: 81,88 + Owner: USSR + SubCell: 0 + Actor611: e1 + Location: 81,88 + Owner: USSR + SubCell: 4 + Actor612: e3 + Location: 83,89 + Owner: USSR + SubCell: 0 + Actor613: e3 + Location: 83,89 + Owner: USSR + SubCell: 2 + Actor614: e3 + Location: 84,89 + Owner: USSR + SubCell: 1 + Actor615: e4 + Location: 85,89 + Owner: USSR + SubCell: 2 + Actor616: e4 + Location: 85,89 + Owner: USSR + SubCell: 3 + Actor617: e4 + Location: 85,90 + Owner: USSR + SubCell: 2 + Actor618: e1 + Location: 61,23 + Owner: BadGuy + Facing: 160 + SubCell: 0 + Actor619: e1 + Location: 74,26 + Owner: BadGuy + SubCell: 1 + Actor620: e1 + Location: 75,25 + Owner: BadGuy + SubCell: 4 + Actor621: e2 + Location: 78,19 + Owner: BadGuy + Facing: 192 + SubCell: 0 + Actor622: e2 + Location: 79,19 + Owner: BadGuy + Facing: 192 + SubCell: 3 + Actor623: dog + Location: 61,24 + Owner: BadGuy + Facing: 160 + SubCell: 2 + Actor624: dog + Location: 60,24 + Owner: BadGuy + Facing: 160 + SubCell: 2 + Actor625: dog + Location: 74,25 + Owner: BadGuy + Facing: 224 + SubCell: 2 + Actor507: v11.exploding + Location: 97,56 + Owner: Ukraine + Actor513: brl3 + Location: 85,56 + Owner: Ukraine + Actor514: brl3 + Location: 97,59 + Owner: Ukraine + Actor626: camera + Location: 32,56 + Owner: USSR + UkraineBarrel: brl3 + Location: 81,52 + Owner: Ukraine + UkraineBuilding: v05.exploding + Location: 82,51 + Owner: Ukraine + SuperTankDome: dome.NoInfiltrate + Location: 90,32 + Owner: BadGuy + USSRSpen: spen + Location: 32,56 + Owner: BadGuy + Health: 69 + USSROutpostSilo: silo + Location: 37,61 + Owner: BadGuy + ExplosiveBarrel1: brl3 + Location: 38,62 + Owner: USSR + ExplosiveBarrel2: brl3 + Location: 28,60 + Owner: USSR + FlameTurret1: ftur + Location: 30,64 + Owner: BadGuy + FlameTurret2: ftur + Location: 33,66 + Owner: BadGuy + AlliedBaseProc: proc + Location: 27,25 + Owner: Outpost + Health: 35 + FreeActor: False + AlliedBaseHarv: harv + Location: 30,26 + Owner: Neutral + Hospital: hosp + Location: 43,43 + Owner: Neutral + DemitriChurch: v01 + Location: 28,99 + Owner: Neutral + stnk1: 5tnk + Location: 89,59 + Owner: Turkey + TurretFacing: 192 + stnk2: 5tnk + Location: 77,57 + Owner: Turkey + TurretFacing: 92 + stnk3: 5tnk + Location: 94,53 + Owner: Turkey + TurretFacing: 192 + DemitriLZ: waypoint + Location: 30,21 + Owner: Neutral + StartEntryPoint: waypoint + Location: 19,91 + Owner: Neutral + DemitriChurchSpawnPoint: waypoint + Location: 29,100 + Owner: Neutral + StartMovePoint: waypoint + Location: 25,81 + Owner: Neutral + StartBridgeEndPoint: waypoint + Location: 25,85 + Owner: Neutral + AlliedBaseTopLeft: waypoint + Location: 19,16 + Owner: Neutral + HospitalCivilianSpawnPoint: waypoint + Location: 44,43 + Owner: Neutral + HospitalSuperTankPoint: waypoint + Location: 47,46 + Owner: Neutral + ProvingGroundsCameraPoint: waypoint + Location: 85,55 + Owner: Neutral + AlliedBaseBottomRight: waypoint + Location: 45,32 + Owner: Neutral + AlliedBaseMovePoint: waypoint + Location: 43,20 + Owner: Neutral + DemitriTriggerAreaCenter: waypoint + Location: 30,101 + Owner: Neutral + AlliedBaseEntryPoint: waypoint + Location: 42,16 + Owner: Neutral + AlliedBaseEntryRight: waypoint + Location: 29,32 + Owner: Neutral + AlliedBaseEntryLeft: waypoint + Location: 19,33 + Owner: Neutral + SuperTankHuntWaypoint1: waypoint + Location: 96,35 + Owner: Neutral + SuperTankHuntWaypoint2: waypoint + Location: 78,31 + Owner: Neutral + SuperTankHuntWaypoint3: waypoint + Location: 84,84 + Owner: Neutral + SuperTankHuntWaypoint4: waypoint + Location: 65,78 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml + +Voices: voices.yaml diff --git a/mods/ura/maps/monster-tank-madness/monster-tank-madness.lua b/mods/ura/maps/monster-tank-madness/monster-tank-madness.lua new file mode 100644 index 0000000..d0d34e6 --- /dev/null +++ b/mods/ura/maps/monster-tank-madness/monster-tank-madness.lua @@ -0,0 +1,446 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +AlliedUnits = +{ + { delay = 0, types = { "1tnk", "1tnk", "2tnk", "2tnk" } }, + { delay = DateTime.Seconds(3), types = { "e1", "e1", "e1", "e3", "e3" } }, + { delay = DateTime.Seconds(7), types = { "e6" } } +} +ReinforceBaseUnits = { "1tnk", "1tnk", "2tnk", "arty", "arty" } +CivilianEvacuees = { "c1", "c2", "c5", "c7", "c8" } +USSROutpostFlameTurrets = { FlameTurret1, FlameTurret2 } +ExplosiveBarrels = { ExplosiveBarrel1, ExplosiveBarrel2 } +SuperTanks = { stnk1, stnk2, stnk3 } +SuperTankMoveWaypoints = { HospitalSuperTankPoint, AlliedBaseBottomRight, DemitriTriggerAreaCenter, DemitriLZ } +SuperTankMove = 1 +SuperTankHuntWaypoints = { SuperTankHuntWaypoint1, SuperTankHuntWaypoint2, SuperTankHuntWaypoint3, SuperTankHuntWaypoint4 } +SuperTankHunt = 1 +SuperTankHuntCounter = 1 +ExtractionHeli = "tran" +ExtractionWaypoint = CPos.New(DemitriLZ.Location.X, 19) +ExtractionLZ = DemitriLZ.Location +BeachTrigger = { CPos.New(19, 44), CPos.New(20, 44), CPos.New(21, 44), CPos.New(22, 44), CPos.New(22, 45), CPos.New(23, 45), CPos.New(22, 44), CPos.New(24, 45), CPos.New(24, 46), CPos.New(24, 47), CPos.New(25, 47), CPos.New(25, 48) } +DemitriAreaTrigger = { CPos.New(32, 98), CPos.New(32, 99), CPos.New(33, 99), CPos.New(33, 100), CPos.New(33, 101), CPos.New(33, 102), CPos.New(32, 102), CPos.New(32, 103) } +HospitalAreaTrigger = { CPos.New(43, 41), CPos.New(44, 41), CPos.New(45, 41), CPos.New(46, 41), CPos.New(46, 42), CPos.New(46, 43), CPos.New(46, 44), CPos.New(46, 45), CPos.New(46, 46), CPos.New(45, 46), CPos.New(44, 46), CPos.New(43, 46) } + + +EvacuateCivilians = function() + local evacuees = Reinforcements.Reinforce(neutral, CivilianEvacuees, { HospitalCivilianSpawnPoint.Location }, 0) + + Trigger.OnAnyKilled(evacuees, function() + player.MarkFailedObjective(RescueCivilians) + end) + Trigger.OnAllRemovedFromWorld(evacuees, function() + player.MarkCompletedObjective(RescueCivilians) + end) + + Utils.Do(evacuees, function(civ) + Trigger.OnIdle(civ, function() + if civ.Location == AlliedBaseEntryPoint.Location then + civ.Destroy() + else + civ.Move(AlliedBaseEntryPoint.Location) + end + end) + end) +end + +SpawnAndMoveAlliedBaseUnits = function() + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + Reinforcements.Reinforce(player, ReinforceBaseUnits, { AlliedBaseEntryPoint.Location, AlliedBaseMovePoint.Location }, 18) +end + +SetupAlliedBase = function() + local alliedOutpost = Map.ActorsInBox(AlliedBaseTopLeft.CenterPosition, AlliedBaseBottomRight.CenterPosition, + function(self) return self.Owner == outpost end) + + Media.PlaySoundNotification(player, "BaseSetup") + Utils.Do(alliedOutpost, function(building) + building.Owner = player + end) + + AlliedBaseHarv.Owner = player + AlliedBaseHarv.FindResources() + + FindDemitri = player.AddPrimaryObjective("Find Dr. Demitri. He is likely hiding in the village\n to the far south.") + InfiltrateRadarDome = player.AddPrimaryObjective("Reprogram the super tanks by sending a spy into\n the Soviet radar dome.") + DefendOutpost = player.AddSecondaryObjective("Defend and repair our outpost.") + player.MarkCompletedObjective(FindOutpost) + + -- Don't fail the Objective instantly + Trigger.AfterDelay(DateTime.Seconds(1), function() + + -- The actor might have been destroyed/crushed in this one second delay + local actors = Utils.Where(alliedOutpost, function(actor) return actor.IsInWorld end) + Trigger.OnAllRemovedFromWorld(actors, function() player.MarkFailedObjective(DefendOutpost) end) + end) + + Trigger.AfterDelay(DateTime.Minutes(1) + DateTime.Seconds(40), function() + if not SuperTankDomeIsInfiltrated then + SuperTankAttack = true + Utils.Do(SuperTanks, function(tnk) + if not tnk.IsDead then + Trigger.ClearAll(tnk) + Trigger.AfterDelay(0, function() + Trigger.OnIdle(tnk, function() + if SuperTankAttack then + if tnk.Location == SuperTankMoveWaypoints[SuperTankMove].Location then + SuperTankMove = SuperTankMove + 1 + if SuperTankMove == 5 then + SuperTankAttack = false + end + else + tnk.AttackMove(SuperTankMoveWaypoints[SuperTankMove].Location, 2) + end + end + end) + end) + end + end) + end + end) +end + +SendAlliedUnits = function() + InitObjectives() + + Camera.Position = StartEntryPoint.CenterPosition + + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + Utils.Do(AlliedUnits, function(table) + Trigger.AfterDelay(table.delay, function() + local units = Reinforcements.Reinforce(player, table.types, { StartEntryPoint.Location, StartMovePoint.Location }, 18) + + Utils.Do(units, function(unit) + if unit.Type == "e6" then + Engineer = unit + Trigger.OnKilled(unit, LandingPossible) + end + end) + end) + end) + + Trigger.AfterDelay(DateTime.Seconds(1), function() InitialUnitsArrived = true end) +end + +LandingPossible = function() + if not beachReached and (USSRSpen.IsDead or Engineer.IsDead) and LstProduced < 1 then + player.MarkFailedObjective(CrossRiver) + end +end + +SuperTankDomeInfiltrated = function() + SuperTankAttack = true + Utils.Do(SuperTanks, function(tnk) + tnk.Owner = friendlyMadTanks + if not tnk.IsDead then + tnk.GrantCondition("friendly") + Trigger.ClearAll(tnk) + tnk.Stop() + if tnk.Location.Y > 61 then + SuperTankHunt = 4 + SuperTankHuntCounter = -1 + end + Trigger.AfterDelay(0, function() + Trigger.OnIdle(tnk, function() + if SuperTankAttack then + if tnk.Location == SuperTankHuntWaypoints[SuperTankHunt].Location then + SuperTankHunt = SuperTankHunt + SuperTankHuntCounter + if SuperTankHunt == 0 or SuperTankHunt == 5 then + SuperTankAttack = false + end + else + tnk.AttackMove(SuperTankHuntWaypoints[SuperTankHunt].Location, 2) + end + else + tnk.Hunt() + end + end) + end) + end + end) + + player.MarkCompletedObjective(InfiltrateRadarDome) + Trigger.AfterDelay(DateTime.Minutes(3), SuperTanksDestruction) + ticked = DateTime.Minutes(3) + + Trigger.AfterDelay(DateTime.Seconds(2), function() + Media.PlaySpeechNotification(player, "ControlCenterDeactivated") + + Trigger.AfterDelay(DateTime.Seconds(4), function() + Media.DisplayMessage("In 3 minutes the super tanks will self-destruct.") + Media.PlaySpeechNotification(player, "WarningThreeMinutesRemaining") + end) + end) +end + +SuperTanksDestruction = function() + local badGuys = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == badguy and self.HasProperty("Health") end) + Utils.Do(badGuys, function(unit) + unit.Kill() + end) + + Utils.Do(SuperTanks, function(tnk) + if not tnk.IsDead then + local camera = Actor.Create("camera", true, { Owner = player, Location = tnk.Location }) + Trigger.AfterDelay(DateTime.Seconds(3), camera.Destroy) + + Trigger.ClearAll(tnk) + tnk.Kill() + end + end) + + player.MarkCompletedObjective(DefendOutpost) +end + +CreateDemitri = function() + local demitri = Actor.Create("demitri", true, { Owner = player, Location = DemitriChurchSpawnPoint.Location }) + demitri.Move(DemitriTriggerAreaCenter.Location) + + Media.PlaySpeechNotification(player, "TargetFreed") + EvacuateDemitri = player.AddPrimaryObjective("Evacuate Dr. Demitri with the helicopter waiting\n at our outpost.") + player.MarkCompletedObjective(FindDemitri) + + local flarepos = CPos.New(DemitriLZ.Location.X, DemitriLZ.Location.Y - 1) + local demitriLZFlare = Actor.Create("flare", true, { Owner = player, Location = flarepos }) + Trigger.AfterDelay(DateTime.Seconds(3), function() Media.PlaySpeechNotification(player, "SignalFlareNorth") end) + + local demitriChinook = Reinforcements.ReinforceWithTransport(player, ExtractionHeli, nil, { ExtractionWaypoint, ExtractionLZ })[1] + + Trigger.OnAnyKilled({ demitri, demitriChinook }, function() + player.MarkFailedObjective(EvacuateDemitri) + end) + + Trigger.OnRemovedFromWorld(demitriChinook, function() + if not demitriChinook.IsDead then + Media.PlaySpeechNotification(player, "TargetRescued") + Trigger.AfterDelay(DateTime.Seconds(1), function() player.MarkCompletedObjective(EvacuateDemitri) end) + Trigger.AfterDelay(DateTime.Seconds(3), SpawnAndMoveAlliedBaseUnits) + end + end) + Trigger.OnRemovedFromWorld(demitri, function() + if not demitriChinook.IsDead and demitriChinook.HasPassengers then + demitriChinook.Move(ExtractionWaypoint) + Trigger.OnIdle(demitriChinook, demitriChinook.Destroy) + demitriLZFlare.Destroy() + end + end) +end + +ticked = -1 +Tick = function() + ussr.Resources = ussr.Resources - (0.01 * ussr.ResourceCapacity / 25) + + if InitialUnitsArrived then -- don't fail the mission straight at the beginning + if not DemitriFound or not SuperTankDomeIsInfiltrated then + if player.HasNoRequiredUnits() then + player.MarkFailedObjective(EliminateSuperTanks) + end + end + end + + if ticked > 0 then + UserInterface.SetMissionText("The super tanks self-destruct in " .. Utils.FormatTime(ticked), TimerColor) + ticked = ticked - 1 + elseif ticked == 0 then + FinishTimer() + ticked = ticked - 1 + end +end + +FinishTimer = function() + for i = 0, 9, 1 do + local c = TimerColor + if i % 2 == 0 then + c = HSLColor.White + end + + Trigger.AfterDelay(DateTime.Seconds(i), function() UserInterface.SetMissionText("The super tanks are destroyed!", c) end) + end + Trigger.AfterDelay(DateTime.Seconds(10), function() UserInterface.SetMissionText("") end) +end + +SetupMission = function() + TestCamera = Actor.Create("camera" ,true , { Owner = player, Location = ProvingGroundsCameraPoint.Location }) + Camera.Position = ProvingGroundsCameraPoint.CenterPosition + TimerColor = player.Color + + Trigger.AfterDelay(DateTime.Seconds(12), function() + Media.PlaySpeechNotification(player, "StartGame") + Trigger.AfterDelay(DateTime.Seconds(2), SendAlliedUnits) + end) +end + +InitPlayers = function() + player = Player.GetPlayer("Greece") + neutral = Player.GetPlayer("Neutral") + outpost = Player.GetPlayer("Outpost") + badguy = Player.GetPlayer("BadGuy") + ussr = Player.GetPlayer("USSR") + ukraine = Player.GetPlayer("Ukraine") + turkey = Player.GetPlayer("Turkey") + friendlyMadTanks = Player.GetPlayer("FriendlyMadTanks") + + ussr.Cash = 2000 + Trigger.AfterDelay(0, function() badguy.Resources = badguy.ResourceCapacity * 0.75 end) + Trigger.OnCapture(USSROutpostSilo, function() -- getting money through capturing doesn't work + player.Cash = player.Cash + Utils.RandomInteger(1200, 1300) + end) +end + +InitObjectives = function() + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + EliminateSuperTanks = player.AddPrimaryObjective("Eliminate these super tanks.") + CrossRiver = player.AddPrimaryObjective("Secure transport to the mainland.") + FindOutpost = player.AddPrimaryObjective("Find our outpost and start repairs on it.") + RescueCivilians = player.AddSecondaryObjective("Evacuate all civilians from the hospital.") + BadGuyObj = badguy.AddPrimaryObjective("Deny the destruction of the super tanks.") + USSRObj = ussr.AddPrimaryObjective("Deny the destruction of the super tanks.") + UkraineObj = ukraine.AddPrimaryObjective("Survive.") + TurkeyObj = turkey.AddPrimaryObjective("Destroy.") + + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + + ussr.MarkCompletedObjective(USSRObj) + badguy.MarkCompletedObjective(BadGuyObj) + ukraine.MarkCompletedObjective(UkraineObj) + turkey.MarkCompletedObjective(TurkeyObj) + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + Media.DisplayMessage("Dr. Demitri has been extracted and the super tanks have been dealt with.") + + ussr.MarkFailedObjective(USSRObj) + badguy.MarkFailedObjective(BadGuyObj) + ukraine.MarkFailedObjective(UkraineObj) + turkey.MarkFailedObjective(TurkeyObj) + end) +end + +InitTriggers = function() + Trigger.OnAllKilled(SuperTanks, function() + Trigger.AfterDelay(DateTime.Seconds(3), function() player.MarkCompletedObjective(EliminateSuperTanks) end) + end) + + Trigger.OnKilled(SuperTankDome, function() + if not SuperTankDomeIsInfiltrated then + player.MarkFailedObjective(InfiltrateRadarDome) + end + end) + Trigger.OnInfiltrated(SuperTankDome, function() + if not SuperTankDomeIsInfiltrated then + SuperTankDomeIsInfiltrated = true + SuperTankDomeInfiltrated() + end + end) + Trigger.OnCapture(SuperTankDome, function() + if not SuperTankDomeIsInfiltrated then + SuperTankDomeIsInfiltrated = true + SuperTankDomeInfiltrated() + end + end) + + Trigger.OnKilled(UkraineBarrel, function() + if not UkraineBuilding.IsDead then UkraineBuilding.Kill() end + end) + + Trigger.OnAnyKilled(USSROutpostFlameTurrets, function() + Utils.Do(ExplosiveBarrels, function(barrel) + if not barrel.IsDead then barrel.Kill() end + end) + end) + + Trigger.OnKilled(DemitriChurch, function() + if not DemitriFound then + player.MarkFailedObjective(FindDemitri) + end + end) + + Trigger.OnKilled(Hospital, function() + if not HospitalEvacuated then + HospitalEvacuated = true + player.MarkFailedObjective(RescueCivilians) + end + end) + + beachReached = false + Trigger.OnEnteredFootprint(BeachTrigger, function(a, id) + if not beachReached and a.Owner == player then + beachReached = true + Trigger.RemoveFootprintTrigger(id) + player.MarkCompletedObjective(CrossRiver) + end + end) + + Trigger.OnPlayerDiscovered(outpost, function(_, discoverer) + if not outpostReached and discoverer == player then + outpostReached = true + SetupAlliedBase() + end + end) + + Trigger.OnEnteredFootprint(DemitriAreaTrigger, function(a, id) + if not DemitriFound and a.Owner == player then + DemitriFound = true + Trigger.RemoveFootprintTrigger(id) + CreateDemitri() + end + end) + + Trigger.OnEnteredFootprint(HospitalAreaTrigger, function(a, id) + if not HospitalEvacuated and a.Owner == player then + HospitalEvacuated = true + Trigger.RemoveFootprintTrigger(id) + EvacuateCivilians() + end + end) + + local tanksLeft = 0 + Trigger.OnExitedProximityTrigger(ProvingGroundsCameraPoint.CenterPosition, WDist.New(10 * 1024), function(a, id) + if a.Type == "5tnk" then + tanksLeft = tanksLeft + 1 + if tanksLeft == 3 then + if TestCamera.IsInWorld then TestCamera.Destroy() end + Trigger.RemoveProximityTrigger(id) + end + end + end) + + LstProduced = 0 + Trigger.OnKilled(USSRSpen, LandingPossible) + Trigger.OnProduction(USSRSpen, function(self, produced) + if produced.Type == "lst" then + LstProduced = LstProduced + 1 + Trigger.OnKilled(produced, function() + LstProduced = LstProduced - 1 + LandingPossible() + end) + end + end) +end + +WorldLoaded = function() + + InitPlayers() + InitTriggers() + + SetupMission() +end + diff --git a/mods/ura/maps/monster-tank-madness/rules.yaml b/mods/ura/maps/monster-tank-madness/rules.yaml new file mode 100644 index 0000000..3f6d340 --- /dev/null +++ b/mods/ura/maps/monster-tank-madness/rules.yaml @@ -0,0 +1,349 @@ +Player: + PlayerResources: + DefaultCash: 0 + +World: + LuaScript: + Scripts: monster-tank-madness.lua + -StartGameNotification: + MissionData: + Briefing: Dr. Demitri, creator of a Soviet Super Tank, wants to defect.\n\nWe planned to extract him while the Soviets were testing their new weapon, but something has gone wrong.\n\nThe Super Tanks are out of control, and Demitri is missing -- likely hiding in the village to the far south.\n\nFind our outpost and start repairs on it, then find and evacuate Demitri.\n\nAs for the tanks, we can reprogram them. Send a spy into the Soviet radar dome in the NE, turning the tanks on their creators.\n + WinVideo: sovbatl.vqa + LossVideo: sovtstar.vqa + +^Palettes: + IndexedPlayerPalette: + PlayerIndex: + BadGuy: 229, 230, 231, 232, 233, 234, 235, 8, 236, 237, 238, 239, 221, 222, 223, 223 + FriendlyMadTanks: 200, 200, 201, 202, 203, 203, 204, 205, 206, 206, 207, 221, 222, 222, 223, 223 + Outpost: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143 + +^Building: + AnnounceOnSeen: + +^ExplodingCivBuilding: + Inherits: ^CivBuilding + Explodes: + Weapon: BarrelExplode + EmptyWeapon: BarrelExplode + -SpawnActorOnDeath@1: + -SpawnActorOnDeath@2: + -SpawnActorOnDeath@3: + +V01.exploding: + Inherits: ^ExplodingCivBuilding + RenderSprites: + Image: V01 + +V02.exploding: + Inherits: ^ExplodingCivBuilding + RenderSprites: + Image: V02 + +V03.exploding: + Inherits: ^ExplodingCivBuilding + RenderSprites: + Image: V03 + +V04.exploding: + Inherits: ^ExplodingCivBuilding + RenderSprites: + Image: V04 + +V05.exploding: + Inherits: ^ExplodingCivBuilding + RenderSprites: + Image: V05 + +V06.exploding: + Inherits: ^ExplodingCivBuilding + RenderSprites: + Image: V06 + +V07.exploding: + Inherits: ^ExplodingCivBuilding + RenderSprites: + Image: V07 + +V08.exploding: + Inherits: ^ExplodingCivBuilding + RenderSprites: + Image: V08 + +V09.exploding: + Inherits: ^ExplodingCivBuilding + RenderSprites: + Image: V09 + +V11.exploding: + Inherits: ^ExplodingCivBuilding + RenderSprites: + Image: V11 + +V19: + Explodes: + Weapon: BarrelExplode + EmptyWeapon: BarrelExplode + +DEMITRI: + Inherits: DELPHI + Tooltip: + Name: Dr. Demitri + Passenger: + CargoType: Demitri + RenderSprites: + Image: DELPHI + Voiced: + VoiceSet: DemitriVoice + +TRAN: + RevealsShroud: + Range: 0c0 + Cargo: + Types: Demitri + MaxWeight: 1 + -Selectable: + Interactable: + +LST: + Cargo: + Types: Infantry, Vehicle, Demitri + +JEEP: + Cargo: + Types: Infantry, Demitri + +PBOX: + Cargo: + Types: Infantry, Demitri + +5TNK: + Inherits: ^TrackedVehicle + Inherits@AUTOTARGET: ^AutoTargetAll + Valued: + Cost: 10000 + Tooltip: + Name: Super Tank + GenericName: Super Tank + Health: + HP: 20000 + Armor: + Type: Concrete + Mobile: + Speed: 42 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 6c0 + RequiresCondition: !friendly + RevealsShroud@friendly: + Range: 6c0 + RequiresCondition: friendly + ValidStances: Ally, Enemy + ExternalCondition@friendly: + Condition: friendly + Turreted: + TurnSpeed: 1 + Armament@PRIMARY: + Weapon: SuperTankPrimary + LocalOffset: 900,180,340, 900,-180,340 + Recoil: 171 + RecoilRecovery: 30 + MuzzleSequence: muzzle + Armament@SECONDARY: + Name: secondary + Weapon: MammothTusk + LocalOffset: -85,384,340, -85,-384,340 + LocalYaw: -100,100 + Recoil: 43 + MuzzleSequence: muzzle + AttackTurreted: + WithMuzzleOverlay: + WithSpriteTurret: + Explodes: + Weapon: MiniNuke + EmptyWeapon: MiniNuke + SpawnActorOnDeath: + Actor: 5TNK.Husk + SelfHealing: + Step: 1 + Delay: 1 + HealIfBelow: 100 + DamageCooldown: 150 + Selectable: + Bounds: 44,38,0,-4 + RenderSprites: + Image: 4TNK + +5TNK.Husk: + Inherits: ^Husk + Tooltip: + Name: Husk (Super Tank) + ThrowsParticle@turret: + Anim: turret + Health: + HP: 2000 + RenderSprites: + Image: 4TNK + +DOME.NoInfiltrate: + Inherits: DOME + Buildable: + Prerequisites: ~disabled + RenderSprites: + Image: DOME + -InfiltrateForExploration: + Targetable: + TargetTypes: Ground, Structure, C4, DetonateAttack, MissionObjective + +SPY: + Infiltrates: + Types: SpyInfiltrate, MissionObjective + +BAD3TNK: + Inherits: 3TNK + Buildable: + Prerequisites: ~disabled + RenderSprites: + Image: 3TNK + +BADTRUK: + Inherits: TRUK + Buildable: + Prerequisites: ~disabled + RenderSprites: + Image: TRUK + +SS: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +DD: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +PT: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +SYRD: + Buildable: + Prerequisites: ~disabled + +SPEN: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + +ATEK: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +4TNK: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +TTNK: + Buildable: + Prerequisites: ~disabled + +CTNK: + Buildable: + Prerequisites: ~disabled + +MGG: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +E7: + Buildable: + Prerequisites: ~disabled + +C1: + -Crushable: + +C2: + -Crushable: + +C5: + -Crushable: + +C7: + -Crushable: + +C8: + -Crushable: + +SHOK: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +STNK: + Buildable: + Prerequisites: ~disabled + +DTRK: + Buildable: + Prerequisites: ~disabled + +QTNK: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/monster-tank-madness/voices.yaml b/mods/ura/maps/monster-tank-madness/voices.yaml new file mode 100644 index 0000000..4ac80b7 --- /dev/null +++ b/mods/ura/maps/monster-tank-madness/voices.yaml @@ -0,0 +1,16 @@ +DemitriVoice: + Variants: + allies: .r01,.r03 + england: .r01,.r03 + france: .r01,.r03 + germany: .r01,.r03 + soviet: .r01,.r03 + russia: .r01,.r03 + ukraine: .r01,.r03 + Voices: + Select: await1,ready,report1,yessir1 + Action: ackno,affirm1,noprob,overout,ritaway,roger,ugotit + Die: dedman1,dedman2,dedman3,dedman4,dedman5,dedman7,dedman8 + Burned: dedman10 + Zapped: dedman6 + DisableVariants: Die, Burned, Zapped \ No newline at end of file diff --git a/mods/ura/maps/monster-tank-madness/weapons.yaml b/mods/ura/maps/monster-tank-madness/weapons.yaml new file mode 100644 index 0000000..45d2165 --- /dev/null +++ b/mods/ura/maps/monster-tank-madness/weapons.yaml @@ -0,0 +1,15 @@ +FireballLauncher: + Projectile: + Blockable: false + +TurretGun: + Projectile: + Blockable: false + +SuperTankPrimary: + Inherits: 120mm + ReloadDelay: 70 + Report: turret1.aud + Warhead@1Dam: SpreadDamage + Damage: 500 + InvalidTargets: Air, Infantry diff --git a/mods/ura/maps/nine-lives.oramap b/mods/ura/maps/nine-lives.oramap new file mode 100644 index 0000000..c849279 Binary files /dev/null and b/mods/ura/maps/nine-lives.oramap differ diff --git a/mods/ura/maps/north-by-northwest.oramap b/mods/ura/maps/north-by-northwest.oramap new file mode 100644 index 0000000..c81a303 Binary files /dev/null and b/mods/ura/maps/north-by-northwest.oramap differ diff --git a/mods/ura/maps/northwestpassage.oramap b/mods/ura/maps/northwestpassage.oramap new file mode 100644 index 0000000..5df6d5b Binary files /dev/null and b/mods/ura/maps/northwestpassage.oramap differ diff --git a/mods/ura/maps/operation-goldmine.oramap b/mods/ura/maps/operation-goldmine.oramap new file mode 100644 index 0000000..477e80a Binary files /dev/null and b/mods/ura/maps/operation-goldmine.oramap differ diff --git a/mods/ura/maps/opposite-force.oramap b/mods/ura/maps/opposite-force.oramap new file mode 100644 index 0000000..4c20cc5 Binary files /dev/null and b/mods/ura/maps/opposite-force.oramap differ diff --git a/mods/ura/maps/ore-gardens.oramap b/mods/ura/maps/ore-gardens.oramap new file mode 100644 index 0000000..d92d5ed Binary files /dev/null and b/mods/ura/maps/ore-gardens.oramap differ diff --git a/mods/ura/maps/ore-lord.oramap b/mods/ura/maps/ore-lord.oramap new file mode 100644 index 0000000..b7cdb45 Binary files /dev/null and b/mods/ura/maps/ore-lord.oramap differ diff --git a/mods/ura/maps/outdoor-trails.oramap b/mods/ura/maps/outdoor-trails.oramap new file mode 100644 index 0000000..a37ebf9 Binary files /dev/null and b/mods/ura/maps/outdoor-trails.oramap differ diff --git a/mods/ura/maps/pie-of-animosity.oramap b/mods/ura/maps/pie-of-animosity.oramap new file mode 100644 index 0000000..61d2bb1 Binary files /dev/null and b/mods/ura/maps/pie-of-animosity.oramap differ diff --git a/mods/ura/maps/pitfight.oramap b/mods/ura/maps/pitfight.oramap new file mode 100644 index 0000000..c4fa851 Binary files /dev/null and b/mods/ura/maps/pitfight.oramap differ diff --git a/mods/ura/maps/poland-raid/map.bin b/mods/ura/maps/poland-raid/map.bin new file mode 100644 index 0000000..0646245 Binary files /dev/null and b/mods/ura/maps/poland-raid/map.bin differ diff --git a/mods/ura/maps/poland-raid/map.png b/mods/ura/maps/poland-raid/map.png new file mode 100644 index 0000000..95247cd Binary files /dev/null and b/mods/ura/maps/poland-raid/map.png differ diff --git a/mods/ura/maps/poland-raid/map.yaml b/mods/ura/maps/poland-raid/map.yaml new file mode 100644 index 0000000..928fc53 --- /dev/null +++ b/mods/ura/maps/poland-raid/map.yaml @@ -0,0 +1,796 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Poland Raid + +Author: s1w + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 16,16,96,96 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Multi0: + Name: Multi0 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: allies + Enemies: Multi0, Multi1, Multi2, Multi3, Multi4 + PlayerReference@Multi1: + Name: Multi1 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi2: + Name: Multi2 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi3: + Name: Multi3 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi4: + Name: Multi4 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + +Actors: + Actor1: v16 + Location: 26,55 + Owner: Neutral + Actor2: v18 + Location: 27,54 + Owner: Neutral + Actor14: tc05 + Location: 94,32 + Owner: Neutral + Actor15: tc05 + Location: 95,35 + Owner: Neutral + Actor16: tc02 + Location: 33,20 + Owner: Neutral + Actor17: tc04 + Location: 32,17 + Owner: Neutral + Actor18: tc05 + Location: 34,18 + Owner: Neutral + Actor19: tc05 + Location: 86,53 + Owner: Neutral + Actor20: tc02 + Location: 86,34 + Owner: Neutral + Actor21: tc02 + Location: 55,35 + Owner: Neutral + Actor22: t17 + Location: 58,36 + Owner: Neutral + Actor23: t07 + Location: 16,89 + Owner: Neutral + Actor24: tc04 + Location: 19,90 + Owner: Neutral + Actor25: tc04 + Location: 17,51 + Owner: Neutral + Actor26: tc04 + Location: 22,52 + Owner: Neutral + Actor27: tc04 + Location: 25,49 + Owner: Neutral + Actor28: tc04 + Location: 18,56 + Owner: Neutral + Actor29: tc05 + Location: 18,53 + Owner: Neutral + Actor30: tc05 + Location: 23,47 + Owner: Neutral + Actor31: tc03 + Location: 16,55 + Owner: Neutral + Actor32: tc03 + Location: 21,55 + Owner: Neutral + Actor34: tc01 + Location: 21,49 + Owner: Neutral + Actor35: t17 + Location: 26,52 + Owner: Neutral + Actor36: t17 + Location: 17,56 + Owner: Neutral + Actor37: t14 + Location: 23,51 + Owner: Neutral + Actor38: t14 + Location: 16,53 + Owner: Neutral + Actor39: tc04 + Location: 29,109 + Owner: Neutral + Actor41: tc01 + Location: 53,98 + Owner: Neutral + Actor42: tc04 + Location: 37,86 + Owner: Neutral + Actor43: tc02 + Location: 16,83 + Owner: Neutral + Actor44: tc05 + Location: 40,109 + Owner: Neutral + Actor45: tc04 + Location: 30,106 + Owner: Neutral + Actor46: tc04 + Location: 27,107 + Owner: Neutral + Actor47: tc02 + Location: 34,108 + Owner: Neutral + Actor48: tc02 + Location: 32,108 + Owner: Neutral + Actor49: tc02 + Location: 32,110 + Owner: Neutral + Actor50: t03 + Location: 33,106 + Owner: Neutral + Actor51: t03 + Location: 30,108 + Owner: Neutral + Actor52: t16 + Location: 41,95 + Owner: Neutral + Actor53: tc05 + Location: 109,109 + Owner: Neutral + Actor54: tc05 + Location: 37,109 + Owner: Neutral + Actor55: tc01 + Location: 35,109 + Owner: Neutral + Actor62: tc01 + Location: 57,37 + Owner: Neutral + Actor63: tc03 + Location: 59,37 + Owner: Neutral + Actor64: tc03 + Location: 53,35 + Owner: Neutral + Actor66: tc02 + Location: 41,51 + Owner: Neutral + Actor67: tc01 + Location: 97,32 + Owner: Neutral + Actor68: tc01 + Location: 97,33 + Owner: Neutral + Actor69: tc03 + Location: 98,31 + Owner: Neutral + Actor70: tc02 + Location: 77,88 + Owner: Neutral + Actor71: tc04 + Location: 103,73 + Owner: Neutral + Actor72: t12 + Location: 102,74 + Owner: Neutral + Actor73: t03 + Location: 99,74 + Owner: Neutral + Actor74: t08 + Location: 84,90 + Owner: Neutral + Actor76: tc04 + Location: 94,75 + Owner: Neutral + Actor77: tc05 + Location: 91,76 + Owner: Neutral + Actor79: tc03 + Location: 85,76 + Owner: Neutral + Actor81: tc01 + Location: 71,88 + Owner: Neutral + Actor82: tc01 + Location: 77,99 + Owner: Neutral + Actor83: t07 + Location: 26,89 + Owner: Neutral + Actor84: t08 + Location: 23,91 + Owner: Neutral + Actor85: v12 + Location: 41,94 + Owner: Neutral + Actor88: t11 + Location: 38,32 + Owner: Neutral + Actor89: t08 + Location: 95,44 + Owner: Neutral + Actor90: t12 + Location: 23,48 + Owner: Neutral + Actor94: t16 + Location: 29,106 + Owner: Neutral + Actor95: tc04 + Location: 54,74 + Owner: Neutral + Actor96: tc05 + Location: 48,72 + Owner: Neutral + Actor98: t12 + Location: 47,72 + Owner: Neutral + Actor100: tc02 + Location: 39,78 + Owner: Neutral + Actor101: tc02 + Location: 33,90 + Owner: Neutral + Actor102: tc03 + Location: 41,76 + Owner: Neutral + Actor103: t06 + Location: 47,73 + Owner: Neutral + Actor104: t08 + Location: 33,78 + Owner: Neutral + Actor105: t02 + Location: 32,89 + Owner: Neutral + Actor107: t07 + Location: 28,89 + Owner: Neutral + Actor108: tc04 + Location: 34,75 + Owner: Neutral + Actor109: t16 + Location: 35,74 + Owner: Neutral + Actor110: tc02 + Location: 38,73 + Owner: Neutral + Actor111: t11 + Location: 37,74 + Owner: Neutral + Actor112: t11 + Location: 16,84 + Owner: Neutral + Actor113: t05 + Location: 37,78 + Owner: Neutral + Actor114: t17 + Location: 71,43 + Owner: Neutral + Actor115: tc01 + Location: 76,32 + Owner: Neutral + Actor116: t16 + Location: 75,31 + Owner: Neutral + Actor117: t16 + Location: 87,48 + Owner: Neutral + Actor118: t17 + Location: 85,44 + Owner: Neutral + Actor119: t11 + Location: 79,46 + Owner: Neutral + Actor120: t08 + Location: 72,40 + Owner: Neutral + Actor121: t02 + Location: 69,21 + Owner: Neutral + Actor122: t08 + Location: 70,22 + Owner: Neutral + Actor123: tc01 + Location: 66,23 + Owner: Neutral + Actor124: t16 + Location: 66,21 + Owner: Neutral + Actor125: t05 + Location: 69,18 + Owner: Neutral + Actor126: t13 + Location: 66,18 + Owner: Neutral + Actor127: t01 + Location: 68,21 + Owner: Neutral + Actor0: tc01 + Location: 94,24 + Owner: Neutral + Actor132: tc04 + Location: 63,18 + Owner: Neutral + Actor133: tc04 + Location: 40,49 + Owner: Neutral + Actor138: tc01 + Location: 38,50 + Owner: Neutral + Actor176: t16 + Location: 100,75 + Owner: Neutral + Actor137: tc01 + Location: 42,96 + Owner: Neutral + Actor190: t05 + Location: 28,50 + Owner: Neutral + Actor139: tc01 + Location: 49,32 + Owner: Neutral + Actor140: t05 + Location: 48,33 + Owner: Neutral + Actor141: t01 + Location: 46,35 + Owner: Neutral + Actor144: tc01 + Location: 65,35 + Owner: Neutral + Actor145: tc02 + Location: 65,37 + Owner: Neutral + Actor146: t08 + Location: 56,37 + Owner: Neutral + Actor147: tc05 + Location: 53,32 + Owner: Neutral + Actor148: tc01 + Location: 56,33 + Owner: Neutral + Actor149: t12 + Location: 57,34 + Owner: Neutral + Actor150: tc04 + Location: 62,28 + Owner: Neutral + Actor151: tc04 + Location: 59,34 + Owner: Neutral + Actor152: t07 + Location: 61,28 + Owner: Neutral + Actor153: t05 + Location: 60,27 + Owner: Neutral + Actor154: tc01 + Location: 42,34 + Owner: Neutral + Actor155: t07 + Location: 43,33 + Owner: Neutral + Actor156: t08 + Location: 44,34 + Owner: Neutral + Actor157: t16 + Location: 41,34 + Owner: Neutral + Actor159: t11 + Location: 79,29 + Owner: Neutral + Actor8: t06 + Location: 89,30 + Owner: Neutral + Actor128: t06 + Location: 95,25 + Owner: Neutral + Actor164: t08 + Location: 57,53 + Owner: Neutral + Actor165: t08 + Location: 30,89 + Owner: Neutral + Actor166: tc01 + Location: 28,88 + Owner: Neutral + Actor167: t11 + Location: 26,88 + Owner: Neutral + Actor168: t07 + Location: 55,99 + Owner: Neutral + Actor169: t13 + Location: 20,86 + Owner: Neutral + Actor170: t11 + Location: 33,86 + Owner: Neutral + Actor171: tc05 + Location: 16,90 + Owner: Neutral + Actor172: tc02 + Location: 22,89 + Owner: Neutral + Actor173: t02 + Location: 17,69 + Owner: Neutral + Actor174: t11 + Location: 29,72 + Owner: Neutral + Actor175: t11 + Location: 86,95 + Owner: Neutral + Actor177: tc01 + Location: 36,16 + Owner: Neutral + Actor178: tc02 + Location: 33,16 + Owner: Neutral + Actor179: t15 + Location: 31,16 + Owner: Neutral + Actor180: t11 + Location: 54,19 + Owner: Neutral + Actor186: tc04 + Location: 109,77 + Owner: Neutral + Actor187: tc01 + Location: 105,72 + Owner: Neutral + Actor188: t10 + Location: 107,73 + Owner: Neutral + Actor191: tc03 + Location: 27,110 + Owner: Neutral + Actor192: t08 + Location: 24,51 + Owner: Neutral + Actor193: t08 + Location: 21,51 + Owner: Neutral + Actor194: t08 + Location: 22,49 + Owner: Neutral + Actor134: tc04 + Location: 32,50 + Owner: Neutral + Actor198: tc04 + Location: 18,71 + Owner: Neutral + Actor199: t16 + Location: 16,70 + Owner: Neutral + Actor200: tc02 + Location: 20,74 + Owner: Neutral + Actor201: tc05 + Location: 17,77 + Owner: Neutral + Actor202: tc03 + Location: 19,73 + Owner: Neutral + Actor203: tc05 + Location: 16,67 + Owner: Neutral + Actor204: t12 + Location: 19,66 + Owner: Neutral + Actor205: t11 + Location: 107,83 + Owner: Neutral + Actor206: t05 + Location: 108,110 + Owner: Neutral + Actor207: t15 + Location: 65,59 + Owner: Neutral + Actor208: tc03 + Location: 57,64 + Owner: Neutral + Actor209: t17 + Location: 63,68 + Owner: Neutral + Actor210: t16 + Location: 68,70 + Owner: Neutral + Actor211: tc04 + Location: 62,66 + Owner: Neutral + Actor213: t16 + Location: 21,46 + Owner: Neutral + Actor214: t17 + Location: 20,48 + Owner: Neutral + Actor215: t08 + Location: 25,38 + Owner: Neutral + Actor216: t08 + Location: 21,58 + Owner: Neutral + Actor197: tc02 + Location: 69,66 + Owner: Neutral + Actor219: tc01 + Location: 72,67 + Owner: Neutral + Actor224: tc01 + Location: 87,76 + Owner: Neutral + Actor225: oilb + Location: 68,68 + Owner: Neutral + Actor99: brl3 + Location: 59,64 + Owner: Neutral + Actor227: barl + Location: 67,70 + Owner: Neutral + Actor228: brl3 + Location: 66,68 + Owner: Neutral + Actor226: oilb + Location: 59,62 + Owner: Neutral + Actor230: barl + Location: 60,65 + Owner: Neutral + Actor231: v15 + Location: 66,70 + Owner: Neutral + Actor232: dog + Location: 63,65 + Owner: Creeps + Actor233: oilb + Location: 23,34 + Owner: Neutral + Actor229: barl + Location: 61,65 + Owner: Neutral + Actor235: brl3 + Location: 26,36 + Owner: Neutral + Actor33: v07 + Location: 61,63 + Owner: Neutral + Actor234: t05 + Location: 27,84 + Owner: Neutral + Actor218: t05 + Location: 71,67 + Owner: Neutral + Actor217: t16 + Location: 21,34 + Owner: Neutral + Actor238: t08 + Location: 16,79 + Owner: Neutral + Actor239: t02 + Location: 81,77 + Owner: Neutral + Actor136: t16 + Location: 61,102 + Owner: Neutral + Actor185: fenc + Location: 49,84 + Owner: Neutral + Actor3: t08 + Location: 53,75 + Owner: Neutral + Actor78: t16 + Location: 111,42 + Owner: Neutral + Actor61: tc01 + Location: 109,23 + Owner: Neutral + Actor161: t08 + Location: 107,23 + Owner: Neutral + Actor162: t07 + Location: 98,28 + Owner: Neutral + Actor221: t08 + Location: 91,86 + Owner: Neutral + Actor222: mine + Owner: Neutral + Location: 109,46 + Actor237: mine + Owner: Neutral + Location: 108,49 + Actor241: mine + Owner: Neutral + Location: 86,27 + Actor242: mine + Owner: Neutral + Location: 82,22 + Actor243: mine + Owner: Neutral + Location: 79,25 + Actor244: mine + Owner: Neutral + Location: 74,24 + Actor245: mine + Owner: Neutral + Location: 92,17 + Actor246: mine + Owner: Neutral + Location: 60,17 + Actor247: mine + Owner: Neutral + Location: 62,21 + Actor248: mine + Owner: Neutral + Location: 42,31 + Actor249: mine + Owner: Neutral + Location: 37,29 + Actor250: mine + Owner: Neutral + Location: 65,46 + Actor251: mine + Owner: Neutral + Location: 60,45 + Actor252: mine + Owner: Neutral + Location: 59,49 + Actor253: mine + Owner: Neutral + Location: 78,52 + Actor254: mine + Owner: Neutral + Location: 40,62 + Actor255: mine + Owner: Neutral + Location: 22,83 + Actor256: mine + Owner: Neutral + Location: 27,82 + Actor257: mine + Owner: Neutral + Location: 22,93 + Actor258: mine + Owner: Neutral + Location: 29,92 + Actor259: mine + Owner: Neutral + Location: 50,78 + Actor260: mine + Owner: Neutral + Location: 52,84 + Actor261: mine + Owner: Neutral + Location: 57,80 + Actor262: mine + Owner: Neutral + Location: 46,88 + Actor263: mine + Owner: Neutral + Location: 43,82 + Actor264: mine + Owner: Neutral + Location: 58,91 + Actor265: mine + Owner: Neutral + Location: 56,103 + Actor266: mine + Owner: Neutral + Location: 52,105 + Actor267: mine + Owner: Neutral + Location: 93,109 + Actor268: mine + Owner: Neutral + Location: 88,107 + Actor269: mine + Owner: Neutral + Location: 82,109 + Actor270: mine + Owner: Neutral + Location: 78,103 + Actor271: mine + Owner: Neutral + Location: 109,102 + Actor272: mine + Owner: Neutral + Location: 110,97 + Actor273: mine + Owner: Neutral + Location: 86,79 + Actor279: mpspawn + Owner: Neutral + Location: 46,24 + Actor280: mpspawn + Owner: Neutral + Location: 103,32 + Actor274: mpspawn + Owner: Neutral + Location: 26,66 + Actor275: mpspawn + Owner: Neutral + Location: 34,101 + Actor276: mpspawn + Owner: Neutral + Location: 99,85 + Actor240: t11 + Owner: Neutral + Location: 40,75 + Actor277: t10 + Owner: Neutral + Location: 40,75 + Actor278: t13 + Owner: Neutral + Location: 46,72 + Actor281: t07 + Owner: Neutral + Location: 43,74 + Actor282: t14 + Owner: Neutral + Location: 43,74 + Actor283: tc02 + Owner: Neutral + Location: 80,30 + Actor284: tc01 + Owner: Neutral + Location: 29,89 + Actor285: t03 + Owner: Neutral + Location: 71,34 + Actor286: tc02 + Owner: Neutral + Location: 65,34 + Actor287: t11 + Owner: Neutral + Location: 80,89 + Actor288: tc04 + Owner: Neutral + Location: 73,88 + Actor289: t06 + Owner: Neutral + Location: 16,49 diff --git a/mods/ura/maps/polar-disorder.oramap b/mods/ura/maps/polar-disorder.oramap new file mode 100644 index 0000000..f33c8f5 Binary files /dev/null and b/mods/ura/maps/polar-disorder.oramap differ diff --git a/mods/ura/maps/pool-party.oramap b/mods/ura/maps/pool-party.oramap new file mode 100644 index 0000000..7186b7d Binary files /dev/null and b/mods/ura/maps/pool-party.oramap differ diff --git a/mods/ura/maps/pressure.oramap b/mods/ura/maps/pressure.oramap new file mode 100644 index 0000000..7b3d8f4 Binary files /dev/null and b/mods/ura/maps/pressure.oramap differ diff --git a/mods/ura/maps/puddles-redux.oramap b/mods/ura/maps/puddles-redux.oramap new file mode 100644 index 0000000..83b4cb8 Binary files /dev/null and b/mods/ura/maps/puddles-redux.oramap differ diff --git a/mods/ura/maps/rapa-nui/map.bin b/mods/ura/maps/rapa-nui/map.bin new file mode 100644 index 0000000..1507b82 Binary files /dev/null and b/mods/ura/maps/rapa-nui/map.bin differ diff --git a/mods/ura/maps/rapa-nui/map.png b/mods/ura/maps/rapa-nui/map.png new file mode 100644 index 0000000..0533a7f Binary files /dev/null and b/mods/ura/maps/rapa-nui/map.png differ diff --git a/mods/ura/maps/rapa-nui/map.yaml b/mods/ura/maps/rapa-nui/map.yaml new file mode 100644 index 0000000..8588463 --- /dev/null +++ b/mods/ura/maps/rapa-nui/map.yaml @@ -0,0 +1,1618 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Rapa Nui + +Author: American Blunt + +Tileset: TEMPERAT + +MapSize: 302,202 + +Bounds: 1,1,300,200 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + Enemies: Multi0, Multi1, Multi2, Multi3, Multi4, Multi5, Multi6 + PlayerReference@Multi0: + Name: Multi0 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi2: + Name: Multi2 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi3: + Name: Multi3 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi4: + Name: Multi4 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi5: + Name: Multi5 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi6: + Name: Multi6 + AllowBots: False + Playable: True + Faction: Random + Enemies: Creeps + +Actors: + Actor210: tc01 + Owner: Neutral + Location: 37,163 + Actor22: v19 + Owner: Neutral + Location: 225,192 + Actor25: v19 + Owner: Neutral + Location: 210,189 + Actor26: v19 + Owner: Neutral + Location: 208,192 + Actor209: tc04 + Owner: Neutral + Location: 32,162 + Actor61: t02 + Owner: Neutral + Location: 9,65 + Actor62: t02 + Owner: Neutral + Location: 16,55 + Actor57: tc04 + Owner: Creeps + Location: 65,150 + Actor48: v19 + Owner: Neutral + Location: 14,57 + Actor49: v19 + Owner: Neutral + Location: 8,68 + Actor50: v19 + Owner: Neutral + Location: 10,70 + Actor51: v19 + Owner: Neutral + Location: 234,7 + Actor52: v19 + Owner: Neutral + Location: 233,10 + Actor53: v19 + Owner: Neutral + Location: 219,13 + Actor65: v05 + Owner: Neutral + Location: 50,133 + Actor597: wood + Owner: Neutral + Location: 42,142 + Actor594: wood + Owner: Neutral + Location: 41,142 + Actor68: v04 + Owner: Neutral + Location: 57,111 + Actor69: v11 + Owner: Neutral + Location: 44,134 + Actor151: tc03 + Owner: Neutral + Location: 159,99 + Actor155: tc02 + Owner: Neutral + Location: 75,128 + Actor113: tc04 + Owner: Neutral + Location: 158,90 + Actor114: tc01 + Owner: Neutral + Location: 168,87 + Actor116: tc01 + Owner: Neutral + Location: 156,94 + Actor121: mine + Owner: Neutral + Location: 254,85 + Actor123: mine + Owner: Neutral + Location: 281,83 + Actor124: mine + Owner: Neutral + Location: 265,104 + Actor125: gmine + Owner: Neutral + Location: 288,92 + Actor127: t16 + Owner: Neutral + Location: 287,88 + Actor156: mine + Owner: Neutral + Location: 55,157 + Actor656: c3 + Owner: Neutral + Location: 48,132 + SubCell: 3 + Facing: 28 + Actor159: t01 + Owner: Neutral + Location: 71,97 + Actor160: t01 + Owner: Neutral + Location: 31,159 + Actor161: t01 + Owner: Neutral + Location: 34,160 + Actor162: t01 + Owner: Neutral + Location: 37,162 + Actor164: tc01 + Owner: Neutral + Location: 150,131 + Actor165: t16 + Owner: Neutral + Location: 131,137 + Actor168: mine + Owner: Neutral + Location: 129,79 + Actor174: t16 + Owner: Neutral + Location: 111,111 + Actor175: t16 + Owner: Neutral + Location: 104,108 + Actor631: t06 + Owner: Neutral + Location: 89,104 + Actor182: wood + Owner: Neutral + Location: 45,147 + Actor183: wood + Owner: Neutral + Location: 46,147 + Actor184: wood + Owner: Neutral + Location: 47,147 + Actor185: wood + Owner: Neutral + Location: 48,147 + Actor186: wood + Owner: Neutral + Location: 48,146 + Actor187: wood + Owner: Neutral + Location: 48,145 + Actor188: wood + Owner: Neutral + Location: 57,130 + Actor189: wood + Owner: Neutral + Location: 56,130 + Actor190: wood + Owner: Neutral + Location: 55,130 + Actor621: wood + Owner: Neutral + Location: 44,142 + Actor600: wood + Owner: Neutral + Location: 43,142 + Actor198: t16 + Owner: Neutral + Location: 203,85 + Actor200: t06 + Owner: Neutral + Location: 216,86 + Actor575: t02 + Owner: Neutral + Location: 78,76 + Actor576: gmine + Owner: Neutral + Location: 127,40 + Actor577: t05 + Owner: Neutral + Location: 78,88 + Actor211: t16 + Owner: Neutral + Location: 35,163 + Actor214: t16 + Owner: Neutral + Location: 39,165 + Actor215: t16 + Owner: Neutral + Location: 41,165 + Actor216: tc01 + Owner: Neutral + Location: 29,162 + Actor217: tc01 + Owner: Neutral + Location: 36,165 + Actor218: tc04 + Owner: Neutral + Location: 26,160 + Actor219: tc04 + Owner: Neutral + Location: 54,171 + Actor220: tc01 + Owner: Neutral + Location: 58,173 + Actor221: t16 + Owner: Neutral + Location: 55,169 + Actor222: t16 + Owner: Neutral + Location: 58,171 + Actor225: tc01 + Owner: Neutral + Location: 74,153 + Actor230: v15 + Owner: Neutral + Location: 135,141 + Actor231: v15 + Owner: Neutral + Location: 138,141 + Actor232: v15 + Owner: Neutral + Location: 137,139 + Actor233: t06 + Owner: Neutral + Location: 124,116 + Actor234: t06 + Owner: Neutral + Location: 128,115 + Actor235: tc01 + Owner: Neutral + Location: 133,114 + Actor236: tc04 + Owner: Creeps + Location: 120,115 + Actor237: tc04 + Owner: Creeps + Location: 130,115 + Actor238: tc01 + Owner: Creeps + Location: 128,110 + Actor239: tc01 + Owner: Creeps + Location: 118,112 + Actor240: tc04 + Owner: Creeps + Location: 122,111 + Actor241: tc04 + Owner: Creeps + Location: 131,110 + Actor242: tc04 + Owner: Creeps + Location: 135,108 + Actor243: tc03 + Owner: Creeps + Location: 126,115 + Actor244: tc01 + Owner: Creeps + Location: 130,108 + Actor245: tc04 + Owner: Creeps + Location: 138,91 + Actor246: tc04 + Owner: Creeps + Location: 134,96 + Actor247: tc04 + Owner: Creeps + Location: 141,99 + Actor248: tc04 + Owner: Creeps + Location: 136,103 + Actor249: tc01 + Owner: Creeps + Location: 139,97 + Actor250: tc01 + Owner: Creeps + Location: 136,93 + Actor251: tc01 + Owner: Creeps + Location: 134,100 + Actor252: tc01 + Owner: Creeps + Location: 139,105 + Actor253: t16 + Owner: Creeps + Location: 141,97 + Actor254: t16 + Owner: Creeps + Location: 138,95 + Actor255: t16 + Owner: Creeps + Location: 138,99 + Actor256: t16 + Owner: Creeps + Location: 133,105 + Actor257: t16 + Owner: Creeps + Location: 131,102 + Actor258: t16 + Owner: Creeps + Location: 131,97 + Actor259: t16 + Owner: Creeps + Location: 131,100 + Actor260: t16 + Owner: Creeps + Location: 133,103 + Actor261: tc04 + Owner: Creeps + Location: 131,104 + Actor263: t05 + Owner: Creeps + Location: 138,101 + Actor264: t05 + Owner: Creeps + Location: 140,103 + Actor265: t05 + Owner: Creeps + Location: 136,106 + Actor266: t05 + Owner: Creeps + Location: 133,106 + Actor268: tc04 + Owner: Creeps + Location: 130,98 + Actor610: v15 + Owner: Neutral + Location: 131,147 + Actor270: v15 + Owner: Neutral + Location: 137,141 + Actor554: v15 + Owner: Neutral + Location: 133,144 + Actor555: v15 + Owner: Neutral + Location: 134,144 + Actor273: v15 + Owner: Neutral + Location: 133,141 + Actor274: v15 + Owner: Neutral + Location: 134,139 + Actor275: v15 + Owner: Neutral + Location: 134,140 + Actor276: v15 + Owner: Neutral + Location: 136,140 + Actor277: v15 + Owner: Neutral + Location: 135,139 + Actor430: v15 + Owner: Neutral + Location: 153,138 + Actor280: v15 + Owner: Neutral + Location: 132,141 + Actor428: v15 + Owner: Neutral + Location: 154,136 + Actor282: v15 + Owner: Neutral + Location: 133,140 + Actor283: v15 + Owner: Neutral + Location: 142,143 + Actor285: v15 + Owner: Neutral + Location: 141,145 + Actor286: v15 + Owner: Neutral + Location: 141,144 + Actor287: v15 + Owner: Neutral + Location: 141,143 + Actor288: v15 + Owner: Neutral + Location: 139,144 + Actor393: v15 + Owner: Neutral + Location: 152,137 + Actor291: v15 + Owner: Neutral + Location: 126,142 + Actor292: v15 + Owner: Neutral + Location: 127,143 + Actor293: v15 + Owner: Neutral + Location: 128,144 + Actor294: v15 + Owner: Neutral + Location: 127,146 + Actor295: v15 + Owner: Neutral + Location: 125,145 + Actor296: v15 + Owner: Neutral + Location: 123,144 + Actor435: v15 + Owner: Neutral + Location: 150,135 + Actor298: v15 + Owner: Neutral + Location: 128,146 + Actor299: v15 + Owner: Neutral + Location: 130,146 + Actor305: v16 + Owner: Neutral + Location: 136,139 + Actor306: v16 + Owner: Neutral + Location: 138,140 + Actor307: v16 + Owner: Neutral + Location: 133,140 + Actor308: v16 + Owner: Neutral + Location: 135,140 + Actor309: v16 + Owner: Neutral + Location: 134,141 + Actor310: v16 + Owner: Neutral + Location: 136,141 + Actor311: v16 + Owner: Neutral + Location: 137,140 + Actor312: v16 + Owner: Neutral + Location: 133,142 + Actor313: v16 + Owner: Neutral + Location: 135,143 + Actor319: v15 + Owner: Neutral + Location: 125,144 + Actor320: v15 + Owner: Neutral + Location: 126,144 + Actor321: v15 + Owner: Neutral + Location: 127,144 + Actor322: v15 + Owner: Neutral + Location: 127,145 + Actor323: v15 + Owner: Neutral + Location: 126,145 + Actor324: v16 + Owner: Neutral + Location: 127,142 + Actor325: v16 + Owner: Neutral + Location: 128,142 + Actor326: v16 + Owner: Neutral + Location: 128,143 + Actor327: v16 + Owner: Neutral + Location: 129,143 + Actor328: v16 + Owner: Neutral + Location: 129,145 + Actor329: v16 + Owner: Neutral + Location: 129,146 + Actor330: v16 + Owner: Neutral + Location: 129,144 + Actor331: v16 + Owner: Neutral + Location: 128,145 + Actor332: v16 + Owner: Neutral + Location: 126,143 + Actor333: v16 + Owner: Neutral + Location: 125,143 + Actor399: v15 + Owner: Neutral + Location: 154,134 + Actor335: v16 + Owner: Neutral + Location: 123,145 + Actor438: v16 + Owner: Neutral + Location: 154,135 + Actor434: v15 + Owner: Neutral + Location: 148,136 + Actor338: v16 + Owner: Neutral + Location: 126,147 + Actor339: v16 + Owner: Neutral + Location: 128,147 + Actor340: v16 + Owner: Neutral + Location: 127,147 + Actor341: v17 + Owner: Neutral + Location: 127,146 + Actor342: v17 + Owner: Neutral + Location: 126,146 + Actor437: v16 + Owner: Neutral + Location: 153,135 + Actor344: v17 + Owner: Neutral + Location: 124,145 + Actor345: v17 + Owner: Neutral + Location: 125,146 + Actor436: v16 + Owner: Neutral + Location: 152,136 + Actor347: v17 + Owner: Neutral + Location: 124,144 + Actor348: v17 + Owner: Neutral + Location: 124,143 + Actor394: v15 + Owner: Neutral + Location: 152,135 + Actor350: v17 + Owner: Neutral + Location: 123,143 + Actor351: v17 + Owner: Neutral + Location: 134,142 + Actor352: v17 + Owner: Neutral + Location: 135,142 + Actor353: v17 + Owner: Neutral + Location: 137,142 + Actor354: v17 + Owner: Neutral + Location: 138,142 + Actor355: v17 + Owner: Neutral + Location: 136,143 + Actor356: v17 + Owner: Neutral + Location: 136,143 + Actor357: v17 + Owner: Neutral + Location: 136,142 + Actor358: v17 + Owner: Neutral + Location: 132,142 + Actor359: v17 + Owner: Neutral + Location: 132,143 + Actor360: v17 + Owner: Neutral + Location: 133,143 + Actor361: v17 + Owner: Neutral + Location: 137,143 + Actor363: v17 + Owner: Neutral + Location: 134,143 + Actor364: v17 + Owner: Neutral + Location: 138,139 + Actor365: v14 + Owner: Neutral + Location: 139,146 + Actor366: v14 + Owner: Neutral + Location: 141,146 + Actor367: v15 + Owner: Neutral + Location: 140,145 + Actor368: v15 + Owner: Neutral + Location: 140,146 + Actor369: v15 + Owner: Neutral + Location: 140,147 + Actor370: v15 + Owner: Neutral + Location: 138,147 + Actor371: v15 + Owner: Neutral + Location: 138,145 + Actor372: v15 + Owner: Neutral + Location: 139,147 + Actor431: v15 + Owner: Neutral + Location: 151,137 + Actor376: v15 + Owner: Neutral + Location: 143,144 + Actor377: v15 + Owner: Neutral + Location: 142,144 + Actor378: v15 + Owner: Neutral + Location: 142,145 + Actor379: v16 + Owner: Neutral + Location: 143,145 + Actor432: v15 + Owner: Neutral + Location: 149,137 + Actor433: v15 + Owner: Neutral + Location: 149,136 + Actor382: v16 + Owner: Neutral + Location: 138,146 + Actor383: v16 + Owner: Neutral + Location: 139,145 + Actor384: v16 + Owner: Neutral + Location: 140,144 + Actor385: v17 + Owner: Neutral + Location: 143,143 + Actor386: v17 + Owner: Neutral + Location: 141,143 + Actor387: v17 + Owner: Neutral + Location: 140,143 + Actor388: v15 + Owner: Neutral + Location: 116,145 + Actor389: v15 + Owner: Neutral + Location: 118,145 + Actor390: v15 + Owner: Neutral + Location: 120,145 + Actor391: v15 + Owner: Neutral + Location: 120,144 + Actor392: v15 + Owner: Neutral + Location: 119,144 + Actor381: v15 + Owner: Neutral + Location: 151,138 + Actor380: v15 + Owner: Neutral + Location: 150,136 + Actor395: v16 + Owner: Neutral + Location: 117,145 + Actor396: v16 + Owner: Neutral + Location: 117,146 + Actor397: v16 + Owner: Neutral + Location: 119,146 + Actor398: v16 + Owner: Neutral + Location: 119,145 + Actor374: v15 + Owner: Neutral + Location: 148,137 + Actor400: v16 + Owner: Neutral + Location: 120,146 + Actor415: v15 + Owner: Neutral + Location: 114,134 + Actor416: v15 + Owner: Neutral + Location: 111,136 + Actor417: v15 + Owner: Neutral + Location: 113,135 + Actor418: v15 + Owner: Neutral + Location: 114,135 + Actor419: v15 + Owner: Neutral + Location: 113,136 + Actor420: v15 + Owner: Neutral + Location: 112,136 + Actor421: v15 + Owner: Neutral + Location: 114,136 + Actor422: v14 + Owner: Neutral + Location: 114,136 + Actor423: v14 + Owner: Neutral + Location: 115,134 + Actor424: v16 + Owner: Neutral + Location: 112,135 + Actor425: v16 + Owner: Neutral + Location: 112,137 + Actor426: v16 + Owner: Neutral + Location: 114,137 + Actor427: v16 + Owner: Neutral + Location: 113,137 + Actor439: v16 + Owner: Neutral + Location: 153,137 + Actor440: v16 + Owner: Neutral + Location: 153,136 + Actor441: v16 + Owner: Neutral + Location: 151,136 + Actor442: v16 + Owner: Neutral + Location: 150,137 + Actor443: v16 + Owner: Neutral + Location: 149,138 + Actor444: v16 + Owner: Neutral + Location: 148,139 + Actor445: v16 + Owner: Neutral + Location: 150,138 + Actor446: v16 + Owner: Neutral + Location: 150,139 + Actor447: v16 + Owner: Neutral + Location: 147,138 + Actor448: v16 + Owner: Neutral + Location: 146,139 + Actor449: v17 + Owner: Neutral + Location: 149,139 + Actor450: v17 + Owner: Neutral + Location: 149,140 + Actor451: v17 + Owner: Neutral + Location: 148,140 + Actor452: v17 + Owner: Neutral + Location: 147,140 + Actor453: v17 + Owner: Neutral + Location: 147,140 + Actor454: v17 + Owner: Neutral + Location: 148,138 + Actor455: v17 + Owner: Neutral + Location: 146,137 + Actor456: v17 + Owner: Neutral + Location: 146,138 + Actor457: v17 + Owner: Neutral + Location: 147,137 + Actor458: v17 + Owner: Neutral + Location: 151,135 + Actor459: v17 + Owner: Neutral + Location: 152,134 + Actor460: v17 + Owner: Neutral + Location: 153,133 + Actor461: v17 + Owner: Neutral + Location: 151,134 + Actor485: v16 + Owner: Neutral + Location: 134,133 + Actor527: tc04 + Owner: Neutral + Location: 136,86 + Actor528: tc04 + Owner: Neutral + Location: 132,86 + Actor529: tc01 + Owner: Neutral + Location: 128,83 + Actor530: tc04 + Owner: Neutral + Location: 126,90 + Actor532: tc01 + Owner: Neutral + Location: 123,84 + Actor533: tc01 + Owner: Neutral + Location: 122,87 + Actor534: tc04 + Owner: Neutral + Location: 120,85 + Actor536: tc01 + Owner: Neutral + Location: 132,82 + Actor537: t07 + Owner: Neutral + Location: 124,77 + Actor538: t07 + Owner: Neutral + Location: 128,86 + Actor539: t07 + Owner: Neutral + Location: 125,85 + Actor540: t07 + Owner: Neutral + Location: 135,92 + Actor541: t07 + Owner: Neutral + Location: 123,90 + Actor542: t07 + Owner: Neutral + Location: 125,92 + Actor543: t06 + Owner: Neutral + Location: 134,82 + Actor544: t06 + Owner: Neutral + Location: 133,84 + Actor545: t06 + Owner: Neutral + Location: 128,89 + Actor546: t06 + Owner: Neutral + Location: 125,87 + Actor547: t06 + Owner: Neutral + Location: 123,82 + Actor548: t06 + Owner: Neutral + Location: 121,83 + Actor549: t06 + Owner: Neutral + Location: 119,77 + Actor550: t06 + Owner: Neutral + Location: 120,77 + Actor552: tc04 + Owner: Neutral + Location: 117,80 + Actor553: tc01 + Owner: Neutral + Location: 125,76 + Actor551: tc01 + Owner: Neutral + Location: 122,79 + Actor558: t02 + Owner: Neutral + Location: 156,105 + Actor559: t01 + Owner: Neutral + Location: 150,107 + Actor560: t05 + Owner: Neutral + Location: 235,9 + Actor561: t07 + Owner: Neutral + Location: 223,192 + Actor634: tc04 + Owner: Creeps + Location: 194,82 + Actor567: t01 + Owner: Creeps + Location: 72,93 + Actor652: tc01 + Owner: Neutral + Location: 209,91 + Actor572: t16 + Owner: Neutral + Location: 229,82 + Actor574: t01 + Owner: Neutral + Location: 223,83 + Actor582: t07 + Owner: Neutral + Location: 219,118 + Actor583: t07 + Owner: Neutral + Location: 188,117 + Actor584: t07 + Owner: Neutral + Location: 287,100 + Actor585: t07 + Owner: Neutral + Location: 286,104 + Actor586: t05 + Owner: Neutral + Location: 287,102 + Actor587: tc01 + Owner: Neutral + Location: 285,107 + Actor588: t16 + Owner: Neutral + Location: 284,96 + Actor592: v10 + Owner: Neutral + Location: 56,118 + Actor593: wood + Owner: Neutral + Location: 40,142 + Actor595: t11 + Owner: Neutral + Location: 48,129 + Actor596: t15 + Owner: Neutral + Location: 54,132 + Actor632: t06 + Owner: Neutral + Location: 108,118 + Actor598: t10 + Owner: Neutral + Location: 54,113 + Actor566: tc04 + Owner: Neutral + Location: 180,82 + Actor601: t10 + Owner: Neutral + Location: 59,125 + Actor602: t10 + Owner: Neutral + Location: 57,109 + Actor603: v08 + Owner: Neutral + Location: 50,123 + Actor604: v08 + Owner: Neutral + Location: 52,137 + Actor606: t16 + Owner: Neutral + Location: 71,113 + Actor608: tc01 + Owner: Neutral + Location: 75,111 + Actor611: tc01 + Owner: Neutral + Location: 79,112 + Actor614: tc01 + Owner: Neutral + Location: 70,110 + Actor612: t06 + Owner: Neutral + Location: 120,64 + Actor620: t16 + Owner: Neutral + Location: 80,56 + Actor635: v15 + Owner: Neutral + Location: 133,147 + Actor636: v15 + Owner: Neutral + Location: 132,148 + Actor639: v15 + Owner: Neutral + Location: 134,148 + Actor640: v15 + Owner: Neutral + Location: 135,148 + Actor641: v16 + Owner: Neutral + Location: 134,147 + Actor642: v16 + Owner: Neutral + Location: 133,148 + Actor644: v16 + Owner: Neutral + Location: 131,148 + Actor645: v17 + Owner: Neutral + Location: 132,147 + Actor646: v17 + Owner: Neutral + Location: 130,148 + Actor654: t06 + Owner: Creeps + Location: 166,51 + Actor657: gmine + Owner: Creeps + Location: 37,193 + Actor658: c3 + Owner: Neutral + Location: 53,118 + SubCell: 3 + Facing: 124 + Actor659: c3 + Owner: Creeps + Location: 55,123 + SubCell: 3 + Facing: 156 + Actor660: c3 + Owner: Neutral + Location: 58,121 + SubCell: 3 + Facing: 92 + Actor661: c3 + Owner: Neutral + Location: 61,113 + SubCell: 3 + Facing: 220 + Actor675: v15 + Owner: Creeps + Location: 147,141 + Actor676: v15 + Owner: Creeps + Location: 149,141 + Actor677: v15 + Owner: Creeps + Location: 151,141 + Actor678: v15 + Owner: Creeps + Location: 150,141 + Actor679: v15 + Owner: Creeps + Location: 149,142 + Actor684: v14 + Owner: Creeps + Location: 148,141 + Actor685: v14 + Owner: Creeps + Location: 148,142 + Actor686: v14 + Owner: Creeps + Location: 146,142 + Actor687: v14 + Owner: Creeps + Location: 150,142 + Actor688: v16 + Owner: Creeps + Location: 148,141 + Actor689: v16 + Owner: Creeps + Location: 148,142 + Actor690: v16 + Owner: Creeps + Location: 146,142 + Actor691: v17 + Owner: Creeps + Location: 150,142 + Actor692: v17 + Owner: Creeps + Location: 147,142 + Actor680: c3 + Owner: Creeps + Location: 51,127 + SubCell: 3 + Facing: 92 + Actor710: gmine + Owner: Neutral + Location: 152,94 + Actor718: gmine + Owner: Neutral + Location: 148,80 + Actor696: mine + Owner: Neutral + Location: 28,168 + Actor599: tc01 + Owner: Neutral + Location: 91,125 + Actor568: tc04 + Owner: Neutral + Location: 68,107 + Actor564: t05 + Owner: Neutral + Location: 150,117 + Actor569: mine + Owner: Neutral + Location: 157,110 + Actor571: tc01 + Owner: Neutral + Location: 176,92 + Actor618: mine + Owner: Neutral + Location: 190,120 + Actor613: mine + Owner: Neutral + Location: 62,128 + Actor579: mine + Owner: Neutral + Location: 68,98 + Actor581: tc01 + Owner: Neutral + Location: 85,115 + Actor609: tc01 + Owner: Neutral + Location: 89,121 + Actor619: t05 + Owner: Neutral + Location: 81,70 + Actor590: mine + Owner: Neutral + Location: 175,56 + Actor605: mine + Owner: Neutral + Location: 170,75 + Actor573: tc04 + Owner: Neutral + Location: 77,151 + Actor625: tc01 + Owner: Neutral + Location: 82,150 + Actor627: mine + Owner: Neutral + Location: 75,147 + Actor629: mine + Owner: Neutral + Location: 101,156 + Actor616: mine + Owner: Neutral + Location: 96,133 + Actor565: mine + Owner: Neutral + Location: 115,129 + Actor607: mine + Owner: Neutral + Location: 141,118 + Actor570: tc03 + Owner: Neutral + Location: 142,138 + Actor556: t16 + Owner: Neutral + Location: 169,124 + Actor622: v18 + Owner: Neutral + Location: 104,138 + Actor638: v18 + Owner: Neutral + Location: 107,138 + Actor643: v15 + Owner: Neutral + Location: 108,138 + Actor649: v17 + Owner: Neutral + Location: 109,138 + Actor650: v17 + Owner: Neutral + Location: 109,138 + Actor651: v17 + Owner: Neutral + Location: 110,138 + Actor653: v15 + Owner: Neutral + Location: 111,138 + Actor655: v15 + Owner: Neutral + Location: 102,139 + Actor663: v18 + Owner: Neutral + Location: 103,139 + Actor664: v15 + Owner: Neutral + Location: 104,139 + Actor665: v18 + Owner: Neutral + Location: 105,139 + Actor668: v17 + Owner: Neutral + Location: 108,139 + Actor669: v17 + Owner: Neutral + Location: 109,139 + Actor670: v18 + Owner: Neutral + Location: 103,140 + Actor671: v18 + Owner: Neutral + Location: 104,140 + Actor672: v18 + Owner: Neutral + Location: 105,140 + Actor673: v18 + Owner: Neutral + Location: 106,140 + Actor674: v15 + Owner: Neutral + Location: 109,141 + Actor681: v16 + Owner: Neutral + Location: 110,141 + Actor695: v15 + Owner: Neutral + Location: 111,141 + Actor697: v16 + Owner: Neutral + Location: 104,142 + Actor699: v15 + Owner: Neutral + Location: 105,142 + Actor700: v15 + Owner: Neutral + Location: 107,142 + Actor701: v16 + Owner: Neutral + Location: 108,142 + Actor702: v16 + Owner: Neutral + Location: 109,142 + Actor703: v15 + Owner: Neutral + Location: 110,142 + Actor704: v16 + Owner: Neutral + Location: 102,143 + Actor705: v15 + Owner: Neutral + Location: 103,143 + Actor706: v16 + Owner: Neutral + Location: 104,143 + Actor707: v15 + Owner: Neutral + Location: 105,143 + Actor708: v15 + Owner: Neutral + Location: 105,143 + Actor709: v16 + Owner: Neutral + Location: 107,143 + Actor711: v16 + Owner: Neutral + Location: 108,143 + Actor712: v16 + Owner: Neutral + Location: 109,143 + Actor713: v16 + Owner: Neutral + Location: 102,144 + Actor714: v16 + Owner: Neutral + Location: 103,144 + Actor715: v16 + Owner: Neutral + Location: 104,144 + Actor637: mine + Owner: Neutral + Location: 141,134 + Actor666: v16 + Owner: Neutral + Location: 121,135 + Actor667: v15 + Owner: Neutral + Location: 122,135 + Actor716: v15 + Owner: Neutral + Location: 123,135 + Actor717: v17 + Owner: Neutral + Location: 124,135 + Actor719: v16 + Owner: Neutral + Location: 120,136 + Actor720: v16 + Owner: Neutral + Location: 121,136 + Actor721: v16 + Owner: Neutral + Location: 122,136 + Actor722: v16 + Owner: Neutral + Location: 123,136 + Actor723: v16 + Owner: Neutral + Location: 124,136 + Actor724: v15 + Owner: Neutral + Location: 119,137 + Actor725: v15 + Owner: Neutral + Location: 120,137 + Actor726: v15 + Owner: Neutral + Location: 121,137 + Actor727: v15 + Owner: Neutral + Location: 122,137 + Actor728: v17 + Owner: Neutral + Location: 123,137 + Actor729: v17 + Owner: Neutral + Location: 124,137 + Actor730: v15 + Owner: Neutral + Location: 119,138 + Actor731: v17 + Owner: Neutral + Location: 120,138 + Actor732: v17 + Owner: Neutral + Location: 121,138 + Actor733: v17 + Owner: Neutral + Location: 122,138 + Actor734: v17 + Owner: Neutral + Location: 123,138 + Actor735: v15 + Owner: Neutral + Location: 124,138 + Actor742: v16 + Owner: Neutral + Location: 128,133 + Actor743: v15 + Owner: Neutral + Location: 129,133 + Actor744: v15 + Owner: Neutral + Location: 131,133 + Actor745: v16 + Owner: Neutral + Location: 132,133 + Actor746: v16 + Owner: Neutral + Location: 126,134 + Actor747: v15 + Owner: Neutral + Location: 127,134 + Actor748: v16 + Owner: Neutral + Location: 128,134 + Actor749: v15 + Owner: Neutral + Location: 129,134 + Actor750: v15 + Owner: Neutral + Location: 129,134 + Actor751: v16 + Owner: Neutral + Location: 131,134 + Actor752: v16 + Owner: Neutral + Location: 132,134 + Actor753: v16 + Owner: Neutral + Location: 133,134 + Actor754: v16 + Owner: Neutral + Location: 126,135 + Actor755: v16 + Owner: Neutral + Location: 127,135 + Actor756: v16 + Owner: Neutral + Location: 128,135 + Actor736: v18 + Owner: Neutral + Location: 156,123 + Actor737: v18 + Owner: Neutral + Location: 157,123 + Actor738: v17 + Owner: Neutral + Location: 153,124 + Actor739: v15 + Owner: Neutral + Location: 156,124 + Actor740: v18 + Owner: Neutral + Location: 157,124 + Actor741: v18 + Owner: Neutral + Location: 158,124 + Actor757: v15 + Owner: Neutral + Location: 149,125 + Actor758: v17 + Owner: Neutral + Location: 150,125 + Actor759: v17 + Owner: Neutral + Location: 151,125 + Actor760: v17 + Owner: Neutral + Location: 152,125 + Actor761: v17 + Owner: Neutral + Location: 153,125 + Actor762: v18 + Owner: Neutral + Location: 155,125 + Actor763: v18 + Owner: Neutral + Location: 156,125 + Actor764: v15 + Owner: Neutral + Location: 150,126 + Actor765: v17 + Owner: Neutral + Location: 151,126 + Actor766: v17 + Owner: Neutral + Location: 152,126 + Actor767: v15 + Owner: Neutral + Location: 153,126 + Actor768: v18 + Owner: Neutral + Location: 155,126 + Actor769: v15 + Owner: Neutral + Location: 156,126 + Actor770: v15 + Owner: Neutral + Location: 151,127 + Actor771: v15 + Owner: Neutral + Location: 152,127 + Actor772: v15 + Owner: Neutral + Location: 155,127 + Actor773: v15 + Owner: Neutral + Location: 156,127 + Actor633: mine + Owner: Neutral + Location: 166,128 + Actor563: tc04 + Owner: Neutral + Location: 180,108 + Actor591: mine + Owner: Neutral + Location: 143,52 + Actor615: mine + Owner: Neutral + Location: 228,126 + Actor578: mine + Owner: Neutral + Location: 105,28 + Actor580: lhus + Owner: Neutral + Location: 112,18 + Actor683: mine + Owner: Neutral + Location: 75,73 + Actor693: mine + Owner: Neutral + Location: 196,79 + Actor782: mine + Owner: Neutral + Location: 218,91 + Actor557: mine + Owner: Neutral + Location: 194,100 + Actor623: tc04 + Owner: Neutral + Location: 189,101 + Actor562: t16 + Owner: Neutral + Location: 46,179 + Actor662: mine + Owner: Neutral + Location: 96,111 + Actor617: tc02 + Owner: Neutral + Location: 79,116 + Actor682: mine + Owner: Neutral + Location: 215,70 + Actor779: mine + Owner: Neutral + Location: 282,173 + Actor792: mine + Owner: Neutral + Location: 281,175 + Actor624: tc04 + Owner: Neutral + Location: 134,184 + Actor783: mine + Owner: Neutral + Location: 139,190 + Actor787: mine + Owner: Neutral + Location: 141,192 + Actor694: mine + Owner: Neutral + Location: 204,158 + Actor785: mine + Owner: Neutral + Location: 203,160 + Actor628: mpspawn + Owner: Neutral + Location: 194,156 + Actor698: tc01 + Owner: Neutral + Location: 195,151 + Actor786: tc04 + Owner: Neutral + Location: 19,105 + Actor789: mine + Owner: Neutral + Location: 16,109 + Actor790: mine + Owner: Neutral + Location: 14,112 + Actor784: mpspawn + Owner: Neutral + Location: 16,101 + Actor774: mpspawn + Owner: Neutral + Location: 184,14 + Actor776: tc04 + Owner: Neutral + Location: 20,10 + Actor778: mine + Owner: Neutral + Location: 25,16 + Actor795: mine + Owner: Neutral + Location: 27,18 + Actor589: mine + Owner: Neutral + Location: 285,18 + Actor647: mine + Owner: Neutral + Location: 282,19 + Actor648: tc01 + Owner: Neutral + Location: 275,24 + Actor780: mpspawn + Owner: Neutral + Location: 279,24 + Actor777: mpspawn + Owner: Neutral + Location: 278,181 + Actor791: mine + Owner: Neutral + Location: 176,7 + Actor630: mine + Owner: Neutral + Location: 177,10 + Actor781: mpspawn + Owner: Neutral + Location: 18,16 + Actor775: mpspawn + Owner: Neutral + Location: 131,190 + Actor626: tc01 + Owner: Neutral + Location: 134,194 + Actor788: tc04 + Owner: Neutral + Location: 176,13 diff --git a/mods/ura/maps/regeneration-basin.oramap b/mods/ura/maps/regeneration-basin.oramap new file mode 100644 index 0000000..aa8aa18 Binary files /dev/null and b/mods/ura/maps/regeneration-basin.oramap differ diff --git a/mods/ura/maps/shattered-mountain/map.bin b/mods/ura/maps/shattered-mountain/map.bin new file mode 100644 index 0000000..ceee95d Binary files /dev/null and b/mods/ura/maps/shattered-mountain/map.bin differ diff --git a/mods/ura/maps/shattered-mountain/map.png b/mods/ura/maps/shattered-mountain/map.png new file mode 100644 index 0000000..223abe9 Binary files /dev/null and b/mods/ura/maps/shattered-mountain/map.png differ diff --git a/mods/ura/maps/shattered-mountain/map.yaml b/mods/ura/maps/shattered-mountain/map.yaml new file mode 100644 index 0000000..ccb8908 --- /dev/null +++ b/mods/ura/maps/shattered-mountain/map.yaml @@ -0,0 +1,1558 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Shattered Mountain + +Author: james.bong + +Tileset: SNOW + +MapSize: 129,129 + +Bounds: 1,1,127,127 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + Enemies: Multi0, Multi1, Multi2, Multi3, Multi4, Multi5, Multi6, Multi7 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi2: + Name: Multi2 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi3: + Name: Multi3 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi4: + Name: Multi4 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi5: + Name: Multi5 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi6: + Name: Multi6 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi7: + Name: Multi7 + Playable: True + Faction: Random + Enemies: Creeps + +Actors: + Actor0: mine + Owner: Neutral + Location: 116,12 + Actor1: mine + Owner: Neutral + Location: 116,26 + Actor2: mine + Owner: Neutral + Location: 12,12 + Actor3: mine + Owner: Neutral + Location: 12,26 + Actor4: mine + Owner: Neutral + Location: 116,41 + Actor5: mine + Owner: Neutral + Location: 116,55 + Actor6: mine + Owner: Neutral + Location: 116,73 + Actor7: mine + Owner: Neutral + Location: 116,87 + Actor8: mine + Owner: Neutral + Location: 116,102 + Actor9: mine + Owner: Neutral + Location: 116,116 + Actor10: mine + Owner: Neutral + Location: 12,41 + Actor11: mine + Owner: Neutral + Location: 12,55 + Actor12: mine + Owner: Neutral + Location: 12,73 + Actor13: mine + Owner: Neutral + Location: 12,87 + Actor14: mine + Owner: Neutral + Location: 12,116 + Actor15: mine + Owner: Neutral + Location: 12,102 + Actor16: tc02 + Owner: Neutral + Location: 53,4 + Actor17: tc05 + Owner: Neutral + Location: 47,4 + Actor18: tc03 + Owner: Neutral + Location: 46,6 + Actor21: t07 + Owner: Neutral + Location: 55,3 + Actor22: tc01 + Owner: Neutral + Location: 51,3 + Actor23: t05 + Owner: Neutral + Location: 50,4 + Actor24: tc04 + Owner: Neutral + Location: 43,5 + Actor29: tc04 + Owner: Neutral + Location: 65,9 + Actor31: tc03 + Owner: Neutral + Location: 63,11 + Actor32: tc01 + Owner: Neutral + Location: 63,9 + Actor33: t07 + Owner: Neutral + Location: 48,6 + Actor34: t08 + Owner: Neutral + Location: 49,7 + Actor35: t17 + Owner: Neutral + Location: 52,4 + Actor36: t12 + Owner: Neutral + Location: 51,4 + Actor40: t08 + Owner: Neutral + Location: 50,4 + Actor51: t07 + Owner: Neutral + Location: 65,11 + Actor48: t12 + Owner: Neutral + Location: 67,11 + Actor49: t06 + Owner: Neutral + Location: 61,11 + Actor50: t08 + Owner: Neutral + Location: 62,13 + Actor52: t08 + Owner: Neutral + Location: 66,13 + Actor53: t11 + Owner: Neutral + Location: 64,12 + Actor54: t12 + Owner: Neutral + Location: 63,12 + Actor55: t08 + Owner: Neutral + Location: 50,6 + Actor56: tc04 + Owner: Neutral + Location: 75,3 + Actor58: tc05 + Owner: Neutral + Location: 83,5 + Actor59: tc03 + Owner: Neutral + Location: 78,5 + Actor60: tc03 + Owner: Neutral + Location: 81,6 + Actor61: t11 + Owner: Neutral + Location: 80,4 + Actor62: t07 + Owner: Neutral + Location: 80,5 + Actor67: t01 + Owner: Neutral + Location: 74,3 + Actor68: t08 + Owner: Neutral + Location: 74,5 + Actor69: t08 + Owner: Neutral + Location: 77,5 + Actor70: t08 + Owner: Neutral + Location: 79,7 + Actor71: t03 + Owner: Neutral + Location: 80,6 + Actor72: t03 + Owner: Neutral + Location: 78,4 + Actor77: tc03 + Owner: Neutral + Location: 71,0 + Actor82: tc04 + Owner: Neutral + Location: 47,0 + Actor84: t11 + Owner: Neutral + Location: 55,0 + Actor85: t16 + Owner: Neutral + Location: 54,0 + Actor86: t01 + Owner: Neutral + Location: 53,0 + Actor87: t14 + Owner: Neutral + Location: 51,0 + Actor88: t02 + Owner: Neutral + Location: 50,0 + Actor89: tc01 + Owner: Neutral + Location: 45,1 + Actor90: t15 + Owner: Neutral + Location: 43,0 + Actor91: t13 + Owner: Neutral + Location: 45,0 + Actor93: tc05 + Owner: Neutral + Location: 81,0 + Actor94: tc02 + Owner: Neutral + Location: 78,0 + Actor95: t08 + Owner: Neutral + Location: 81,2 + Actor96: t06 + Owner: Neutral + Location: 80,1 + Actor97: tc01 + Owner: Neutral + Location: 76,0 + Actor98: t02 + Owner: Neutral + Location: 73,0 + Actor99: t11 + Owner: Neutral + Location: 74,0 + Actor100: t16 + Owner: Neutral + Location: 84,0 + Actor101: tc02 + Owner: Neutral + Location: 86,4 + Actor102: tc02 + Owner: Neutral + Location: 41,4 + Actor103: tc03 + Owner: Neutral + Location: 87,2 + Actor104: tc03 + Owner: Neutral + Location: 40,2 + Actor105: tc01 + Owner: Neutral + Location: 88,0 + Actor106: tc01 + Owner: Neutral + Location: 39,0 + Actor107: t12 + Owner: Neutral + Location: 42,2 + Actor108: t12 + Owner: Neutral + Location: 86,2 + Actor109: t08 + Owner: Neutral + Location: 83,8 + Actor110: t08 + Owner: Neutral + Location: 45,8 + Actor111: t06 + Owner: Neutral + Location: 84,7 + Actor112: t06 + Owner: Neutral + Location: 44,7 + Actor113: t16 + Owner: Neutral + Location: 83,6 + Actor114: tc03 + Owner: Neutral + Location: 86,6 + Actor115: tc03 + Owner: Neutral + Location: 41,6 + Actor116: t07 + Owner: Neutral + Location: 88,3 + Actor117: t07 + Owner: Neutral + Location: 40,3 + Actor118: t16 + Owner: Neutral + Location: 39,1 + Actor119: t16 + Owner: Neutral + Location: 89,1 + Actor120: t08 + Owner: Neutral + Location: 62,115 + Actor121: t08 + Owner: Neutral + Location: 66,115 + Actor122: t03 + Owner: Neutral + Location: 62,11 + Actor123: t05 + Owner: Neutral + Location: 66,11 + Actor125: tc01 + Owner: Neutral + Location: 88,127 + Actor124: tc01 + Owner: Neutral + Location: 39,127 + Actor126: tc03 + Owner: Neutral + Location: 40,125 + Actor127: tc03 + Owner: Neutral + Location: 87,125 + Actor128: tc02 + Owner: Neutral + Location: 41,123 + Actor129: tc02 + Owner: Neutral + Location: 86,123 + Actor130: t12 + Owner: Neutral + Location: 86,124 + Actor131: t08 + Owner: Neutral + Location: 87,127 + Actor132: tc03 + Owner: Neutral + Location: 41,121 + Actor133: tc03 + Owner: Neutral + Location: 86,121 + Actor134: tc04 + Owner: Neutral + Location: 43,120 + Actor135: t07 + Owner: Neutral + Location: 39,125 + Actor136: t06 + Owner: Neutral + Location: 40,123 + Actor137: t06 + Owner: Neutral + Location: 88,123 + Actor138: t07 + Owner: Neutral + Location: 89,125 + Actor139: tc05 + Owner: Neutral + Location: 83,120 + Actor140: tc05 + Owner: Neutral + Location: 72,122 + Actor141: tc04 + Owner: Neutral + Location: 76,122 + Actor142: tc04 + Owner: Neutral + Location: 54,122 + Actor143: tc05 + Owner: Neutral + Location: 47,120 + Actor145: tc05 + Owner: Neutral + Location: 65,116 + Actor146: tc04 + Owner: Neutral + Location: 61,116 + Actor152: tc02 + Owner: Neutral + Location: 79,121 + Actor153: tc01 + Owner: Neutral + Location: 81,121 + Actor154: t11 + Owner: Neutral + Location: 80,122 + Actor155: t16 + Owner: Neutral + Location: 83,121 + Actor156: t05 + Owner: Neutral + Location: 79,122 + Actor157: t07 + Owner: Neutral + Location: 75,122 + Actor158: t12 + Owner: Neutral + Location: 75,123 + Actor160: t08 + Owner: Neutral + Location: 84,120 + Actor161: t06 + Owner: Neutral + Location: 83,119 + Actor162: t03 + Owner: Neutral + Location: 44,119 + Actor163: t08 + Owner: Neutral + Location: 45,120 + Actor165: t12 + Owner: Neutral + Location: 82,120 + Actor166: t17 + Owner: Neutral + Location: 81,120 + Actor167: t17 + Owner: Neutral + Location: 78,121 + Actor168: t17 + Owner: Neutral + Location: 68,117 + Actor169: tc01 + Owner: Neutral + Location: 47,122 + Actor171: t12 + Owner: Neutral + Location: 45,122 + Actor172: tc03 + Owner: Neutral + Location: 52,123 + Actor174: tc05 + Owner: Neutral + Location: 49,122 + Actor175: t16 + Owner: Neutral + Location: 49,123 + Actor180: t12 + Owner: Neutral + Location: 60,117 + Actor181: t12 + Owner: Neutral + Location: 46,120 + Actor182: t08 + Owner: Neutral + Location: 46,122 + Actor183: t11 + Owner: Neutral + Location: 64,114 + Actor184: t16 + Owner: Neutral + Location: 63,114 + Actor185: t03 + Owner: Neutral + Location: 61,115 + Actor186: t17 + Owner: Neutral + Location: 67,115 + Actor187: t11 + Owner: Neutral + Location: 64,117 + Actor188: t06 + Owner: Neutral + Location: 64,116 + Actor189: t02 + Owner: Neutral + Location: 63,115 + Actor190: t06 + Owner: Neutral + Location: 66,115 + Actor191: t03 + Owner: Neutral + Location: 65,115 + Actor192: t03 + Owner: Neutral + Location: 62,115 + Actor210: tc02 + Owner: Neutral + Location: 71,127 + Actor211: tc04 + Owner: Neutral + Location: 80,125 + Actor212: tc05 + Owner: Neutral + Location: 44,125 + Actor213: tc04 + Owner: Neutral + Location: 47,125 + Actor214: tc01 + Owner: Neutral + Location: 50,126 + Actor215: tc03 + Owner: Neutral + Location: 52,127 + Actor216: tc03 + Owner: Neutral + Location: 78,127 + Actor217: tc03 + Owner: Neutral + Location: 43,127 + Actor218: t06 + Owner: Neutral + Location: 54,126 + Actor219: t03 + Owner: Neutral + Location: 55,126 + Actor220: t06 + Owner: Neutral + Location: 56,126 + Actor221: t07 + Owner: Neutral + Location: 57,126 + Actor222: t12 + Owner: Neutral + Location: 58,126 + Actor223: t08 + Owner: Neutral + Location: 58,126 + Actor224: t08 + Owner: Neutral + Location: 83,125 + Actor225: t07 + Owner: Neutral + Location: 83,125 + Actor226: t12 + Owner: Neutral + Location: 84,125 + Actor227: tc01 + Owner: Neutral + Location: 76,126 + Actor228: t12 + Owner: Neutral + Location: 74,126 + Actor229: t07 + Owner: Neutral + Location: 73,126 + Actor230: t08 + Owner: Neutral + Location: 75,127 + Actor231: t16 + Owner: Neutral + Location: 83,126 + Actor232: t12 + Owner: Neutral + Location: 84,126 + Actor233: t12 + Owner: Neutral + Location: 79,125 + Actor236: mine + Owner: Neutral + Location: 56,119 + Actor237: mine + Owner: Neutral + Location: 50,118 + Actor238: mine + Owner: Neutral + Location: 72,119 + Actor239: mine + Owner: Neutral + Location: 78,118 + Actor240: mine + Owner: Neutral + Location: 72,9 + Actor241: mine + Owner: Neutral + Location: 78,10 + Actor242: mine + Owner: Neutral + Location: 56,9 + Actor243: mine + Owner: Neutral + Location: 50,10 + Actor244: mine + Owner: Neutral + Location: 70,36 + Actor245: mine + Owner: Neutral + Location: 64,37 + Actor246: mine + Owner: Neutral + Location: 58,37 + Actor247: mine + Owner: Neutral + Location: 52,42 + Actor248: mine + Owner: Neutral + Location: 58,92 + Actor249: mine + Owner: Neutral + Location: 64,91 + Actor250: mine + Owner: Neutral + Location: 70,91 + Actor251: mine + Owner: Neutral + Location: 76,86 + Actor252: oilb + Owner: Neutral + Location: 31,33 + Actor253: oilb + Owner: Neutral + Location: 96,33 + Actor254: oilb + Owner: Neutral + Location: 31,94 + Actor255: oilb + Owner: Neutral + Location: 96,94 + Actor257: oilb + Owner: Neutral + Location: 96,65 + Actor259: oilb + Owner: Neutral + Location: 31,65 + Actor256: oilb + Owner: Neutral + Location: 96,62 + Actor258: oilb + Owner: Neutral + Location: 31,62 + Actor261: tc05 + Owner: Neutral + Location: 95,35 + Actor262: tc04 + Owner: Neutral + Location: 96,30 + Actor263: tc03 + Owner: Neutral + Location: 94,30 + Actor264: t15 + Owner: Neutral + Location: 93,28 + Actor265: t08 + Owner: Neutral + Location: 93,30 + Actor266: tc01 + Owner: Neutral + Location: 98,32 + Actor267: t11 + Owner: Neutral + Location: 98,33 + Actor268: t16 + Owner: Neutral + Location: 98,34 + Actor269: t08 + Owner: Neutral + Location: 98,36 + Actor270: tc01 + Owner: Neutral + Location: 94,36 + Actor271: t14 + Owner: Neutral + Location: 93,37 + Actor272: t03 + Owner: Neutral + Location: 95,31 + Actor273: t03 + Owner: Neutral + Location: 97,34 + Actor274: tc04 + Owner: Neutral + Location: 30,30 + Actor275: tc05 + Owner: Neutral + Location: 31,35 + Actor276: tc02 + Owner: Neutral + Location: 29,34 + Actor277: tc01 + Owner: Neutral + Location: 29,32 + Actor278: t11 + Owner: Neutral + Location: 34,28 + Actor279: t10 + Owner: Neutral + Location: 32,29 + Actor280: tc03 + Owner: Neutral + Location: 33,30 + Actor281: t06 + Owner: Neutral + Location: 34,37 + Actor282: t12 + Owner: Neutral + Location: 34,38 + Actor283: t12 + Owner: Neutral + Location: 30,36 + Actor284: tc04 + Owner: Neutral + Location: 96,96 + Actor285: tc05 + Owner: Neutral + Location: 95,91 + Actor286: t14 + Owner: Neutral + Location: 93,90 + Actor287: t16 + Owner: Neutral + Location: 94,89 + Actor288: t08 + Owner: Neutral + Location: 94,92 + Actor289: tc02 + Owner: Neutral + Location: 98,94 + Actor290: t11 + Owner: Neutral + Location: 98,93 + Actor291: t06 + Owner: Neutral + Location: 98,92 + Actor292: t06 + Owner: Neutral + Location: 95,97 + Actor293: t14 + Owner: Neutral + Location: 93,98 + Actor294: t16 + Owner: Neutral + Location: 94,97 + Actor295: t08 + Owner: Neutral + Location: 93,98 + Actor296: t17 + Owner: Neutral + Location: 95,95 + Actor297: tc04 + Owner: Neutral + Location: 30,91 + Actor298: tc05 + Owner: Neutral + Location: 31,96 + Actor299: tc01 + Owner: Neutral + Location: 29,93 + Actor300: tc03 + Owner: Neutral + Location: 33,90 + Actor301: t12 + Owner: Neutral + Location: 34,88 + Actor302: t08 + Owner: Neutral + Location: 33,92 + Actor303: tc02 + Owner: Neutral + Location: 29,95 + Actor304: t12 + Owner: Neutral + Location: 30,97 + Actor305: t11 + Owner: Neutral + Location: 34,98 + Actor306: t08 + Owner: Neutral + Location: 34,100 + Actor307: t06 + Owner: Neutral + Location: 34,97 + Actor309: gmine + Owner: Neutral + Location: 64,59 + Actor310: gmine + Owner: Neutral + Location: 64,69 + Actor311: gmine + Owner: Neutral + Location: 59,64 + Actor312: gmine + Owner: Neutral + Location: 69,64 + Actor308: miss + Owner: Neutral + Location: 63,63 + Actor313: v19.husk + Owner: Neutral + Location: 79,46 + Actor314: v19.husk + Owner: Neutral + Location: 49,82 + Actor316: tc02 + Owner: Neutral + Location: 83,46 + Actor317: tc02 + Owner: Neutral + Location: 44,81 + Actor318: t01 + Owner: Neutral + Location: 51,81 + Actor319: t12 + Owner: Neutral + Location: 49,83 + Actor315: t03 + Owner: Neutral + Location: 48,81 + Actor320: t07 + Owner: Neutral + Location: 79,43 + Actor321: t17 + Owner: Neutral + Location: 77,45 + Actor322: t01 + Owner: Neutral + Location: 82,43 + Actor323: t02 + Owner: Neutral + Location: 46,83 + Actor324: t08 + Owner: Neutral + Location: 47,85 + Actor325: t08 + Owner: Neutral + Location: 81,42 + Actor326: miss + Owner: Neutral + Location: 63,102 + Actor327: miss + Owner: Neutral + Location: 63,24 + Actor328: fcom + Owner: Neutral + Location: 48,33 + Actor329: fcom + Owner: Neutral + Location: 79,93 + Actor332: tc01 + Owner: Neutral + Location: 79,49 + Actor333: tc01 + Owner: Neutral + Location: 48,77 + Actor334: t08 + Owner: Neutral + Location: 47,76 + Actor335: t08 + Owner: Neutral + Location: 81,51 + Actor336: t08 + Owner: Neutral + Location: 50,79 + Actor337: t08 + Owner: Neutral + Location: 78,49 + Actor338: snowhut + Owner: Neutral + Location: 52,78 + Actor330: snowhut + Owner: Neutral + Location: 75,49 + Actor331: t03 + Owner: Neutral + Location: 76,48 + Actor339: tc04 + Owner: Neutral + Location: 31,59 + Actor341: tc02 + Owner: Neutral + Location: 29,63 + Actor342: tc01 + Owner: Neutral + Location: 29,65 + Actor343: tc01 + Owner: Neutral + Location: 29,61 + Actor344: t12 + Owner: Neutral + Location: 30,60 + Actor345: t12 + Owner: Neutral + Location: 29,64 + Actor347: t08 + Owner: Neutral + Location: 95,64 + Actor340: tc02 + Owner: Neutral + Location: 31,67 + Actor348: tc02 + Owner: Neutral + Location: 95,67 + Actor349: t12 + Owner: Neutral + Location: 30,67 + Actor350: tc02 + Owner: Neutral + Location: 98,63 + Actor351: tc05 + Owner: Neutral + Location: 94,59 + Actor352: t16 + Owner: Neutral + Location: 34,59 + Actor353: t06 + Owner: Neutral + Location: 98,61 + Actor354: t10 + Owner: Neutral + Location: 97,60 + Actor355: t12 + Owner: Neutral + Location: 98,65 + Actor356: t08 + Owner: Neutral + Location: 99,65 + Actor357: t06 + Owner: Neutral + Location: 98,66 + Actor358: t05 + Owner: Neutral + Location: 97,66 + Actor359: t12 + Owner: Neutral + Location: 98,67 + Actor360: t02 + Owner: Neutral + Location: 97,63 + Actor361: t07 + Owner: Neutral + Location: 94,57 + Actor362: t01 + Owner: Neutral + Location: 34,57 + Actor363: t01 + Owner: Neutral + Location: 34,69 + Actor364: t16 + Owner: Neutral + Location: 94,69 + Actor365: t08 + Owner: Neutral + Location: 94,68 + Actor366: t08 + Owner: Neutral + Location: 34,68 + Actor367: t12 + Owner: Neutral + Location: 33,67 + Actor368: t08 + Owner: Neutral + Location: 33,64 + Actor369: tc04 + Owner: Neutral + Location: 0,0 + Actor370: tc05 + Owner: Neutral + Location: 126,0 + Actor371: t08 + Owner: Neutral + Location: 126,2 + Actor372: t08 + Owner: Neutral + Location: 1,2 + Actor373: tc05 + Owner: Neutral + Location: 0,125 + Actor374: tc04 + Owner: Neutral + Location: 126,125 + Actor375: t02 + Owner: Neutral + Location: 125,126 + Actor376: tc04 + Owner: Neutral + Location: 6,0 + Actor377: tc05 + Owner: Neutral + Location: 0,5 + Actor378: tc03 + Owner: Neutral + Location: 5,3 + Actor379: tc03 + Owner: Neutral + Location: 3,5 + Actor380: t14 + Owner: Neutral + Location: 2,4 + Actor381: t17 + Owner: Neutral + Location: 5,1 + Actor382: tc04 + Owner: Neutral + Location: 126,5 + Actor383: tc05 + Owner: Neutral + Location: 120,0 + Actor384: tc03 + Owner: Neutral + Location: 122,3 + Actor385: tc03 + Owner: Neutral + Location: 124,5 + Actor386: t08 + Owner: Neutral + Location: 123,5 + Actor387: tc04 + Owner: Neutral + Location: 126,121 + Actor388: tc05 + Owner: Neutral + Location: 120,126 + Actor389: tc03 + Owner: Neutral + Location: 124,122 + Actor390: tc03 + Owner: Neutral + Location: 122,124 + Actor391: t12 + Owner: Neutral + Location: 121,125 + Actor392: t16 + Owner: Neutral + Location: 119,127 + Actor393: tc04 + Owner: Neutral + Location: 6,126 + Actor394: tc05 + Owner: Neutral + Location: 0,121 + Actor395: tc03 + Owner: Neutral + Location: 5,124 + Actor396: tc03 + Owner: Neutral + Location: 3,122 + Actor397: t12 + Owner: Neutral + Location: 5,126 + Actor398: t08 + Owner: Neutral + Location: 5,123 + Actor399: t08 + Owner: Neutral + Location: 7,125 + Actor400: tc02 + Owner: Neutral + Location: 26,5 + Actor401: tc02 + Owner: Neutral + Location: 101,5 + Actor402: tc02 + Owner: Neutral + Location: 26,122 + Actor403: tc02 + Owner: Neutral + Location: 101,122 + Actor404: t16 + Owner: Neutral + Location: 30,5 + Actor405: t02 + Owner: Neutral + Location: 32,6 + Actor406: t08 + Owner: Neutral + Location: 31,6 + Actor407: t03 + Owner: Neutral + Location: 30,6 + Actor408: t08 + Owner: Neutral + Location: 25,6 + Actor409: t08 + Owner: Neutral + Location: 103,6 + Actor410: t06 + Owner: Neutral + Location: 98,5 + Actor411: t16 + Owner: Neutral + Location: 96,6 + Actor412: t14 + Owner: Neutral + Location: 96,5 + Actor413: t08 + Owner: Neutral + Location: 97,7 + Actor414: t08 + Owner: Neutral + Location: 100,123 + Actor415: t08 + Owner: Neutral + Location: 103,122 + Actor416: t12 + Owner: Neutral + Location: 98,122 + Actor417: t16 + Owner: Neutral + Location: 98,121 + Actor418: t06 + Owner: Neutral + Location: 96,120 + Actor419: t07 + Owner: Neutral + Location: 97,121 + Actor420: t08 + Owner: Neutral + Location: 25,122 + Actor421: t07 + Owner: Neutral + Location: 31,120 + Actor422: t02 + Owner: Neutral + Location: 30,121 + Actor423: t03 + Owner: Neutral + Location: 32,119 + Actor424: t08 + Owner: Neutral + Location: 32,121 + Actor425: tc03 + Owner: Neutral + Location: 0,8 + Actor426: tc03 + Owner: Neutral + Location: 0,119 + Actor427: tc03 + Owner: Neutral + Location: 127,119 + Actor428: tc03 + Owner: Neutral + Location: 127,8 + Actor429: tc05 + Owner: Neutral + Location: 0,93 + Actor430: tc02 + Owner: Neutral + Location: 0,91 + Actor431: tc01 + Owner: Neutral + Location: 0,96 + Actor432: t08 + Owner: Neutral + Location: 1,98 + Actor433: tc04 + Owner: Neutral + Location: 126,93 + Actor434: tc02 + Owner: Neutral + Location: 127,96 + Actor435: tc01 + Owner: Neutral + Location: 127,91 + Actor436: t08 + Owner: Neutral + Location: 127,98 + Actor437: tc05 + Owner: Neutral + Location: 126,63 + Actor438: tc01 + Owner: Neutral + Location: 127,66 + Actor439: tc02 + Owner: Neutral + Location: 127,61 + Actor440: tc04 + Owner: Neutral + Location: 0,63 + Actor441: tc02 + Owner: Neutral + Location: 0,66 + Actor442: tc01 + Owner: Neutral + Location: 0,61 + Actor443: tc05 + Owner: Neutral + Location: 0,32 + Actor444: tc02 + Owner: Neutral + Location: 0,30 + Actor445: tc01 + Owner: Neutral + Location: 0,35 + Actor446: t08 + Owner: Neutral + Location: 1,37 + Actor448: tc01 + Owner: Neutral + Location: 1,57 + Actor449: tc01 + Owner: Neutral + Location: 1,69 + Actor447: tc01 + Owner: Neutral + Location: 1,39 + Actor452: tc03 + Owner: Neutral + Location: 0,71 + Actor450: tc03 + Owner: Neutral + Location: 0,41 + Actor451: tc03 + Owner: Neutral + Location: 0,56 + Actor453: tc01 + Owner: Neutral + Location: 1,26 + Actor454: tc03 + Owner: Neutral + Location: 0,25 + Actor455: tc03 + Owner: Neutral + Location: 0,86 + Actor456: tc01 + Owner: Neutral + Location: 1,87 + Actor457: tc01 + Owner: Neutral + Location: 1,100 + Actor458: tc03 + Owner: Neutral + Location: 0,102 + Actor459: t08 + Owner: Neutral + Location: 35,127 + Actor460: tc04 + Owner: Neutral + Location: 126,32 + Actor461: tc02 + Owner: Neutral + Location: 127,30 + Actor462: tc01 + Owner: Neutral + Location: 127,35 + Actor463: t08 + Owner: Neutral + Location: 127,37 + Actor464: tc01 + Owner: Neutral + Location: 126,26 + Actor465: tc03 + Owner: Neutral + Location: 127,24 + Actor466: tc01 + Owner: Neutral + Location: 126,40 + Actor467: tc03 + Owner: Neutral + Location: 127,42 + Actor469: tc01 + Owner: Neutral + Location: 126,70 + Actor468: tc03 + Owner: Neutral + Location: 127,72 + Actor470: tc03 + Owner: Neutral + Location: 127,103 + Actor471: tc01 + Owner: Neutral + Location: 126,101 + Actor472: tc01 + Owner: Neutral + Location: 126,87 + Actor473: tc03 + Owner: Neutral + Location: 127,85 + Actor474: tc03 + Owner: Neutral + Location: 127,55 + Actor475: tc01 + Owner: Neutral + Location: 126,57 + Actor476: t03 + Owner: Neutral + Location: 35,0 + Actor477: t16 + Owner: Neutral + Location: 93,0 + Actor478: t08 + Owner: Neutral + Location: 93,127 + Actor479: t06 + Owner: Neutral + Location: 92,127 + Actor480: v03 + Owner: Neutral + Location: 48,106 + Actor482: v02 + Owner: Neutral + Location: 43,27 + Actor483: v01 + Owner: Neutral + Location: 79,21 + Actor481: v06 + Owner: Neutral + Location: 84,100 + Actor484: t01 + Owner: Neutral + Location: 81,20 + Actor485: v08 + Owner: Neutral + Location: 74,21 + Actor486: v09 + Owner: Neutral + Location: 48,25 + Actor487: v10 + Owner: Neutral + Location: 80,103 + Actor488: v11 + Owner: Neutral + Location: 53,104 + Actor489: t08 + Owner: Neutral + Location: 47,24 + Actor490: t08 + Owner: Neutral + Location: 84,101 + Actor491: t12 + Owner: Neutral + Location: 52,102 + Actor492: mpspawn + Owner: Neutral + Location: 19,19 + Actor493: mpspawn + Owner: Neutral + Location: 19,47 + Actor494: mpspawn + Owner: Neutral + Location: 19,81 + Actor495: mpspawn + Owner: Neutral + Location: 19,109 + Actor496: mpspawn + Owner: Neutral + Location: 109,19 + Actor497: mpspawn + Owner: Neutral + Location: 109,47 + Actor498: mpspawn + Owner: Neutral + Location: 109,81 + Actor499: mpspawn + Owner: Neutral + Location: 109,109 + Actor500: t01 + Owner: Neutral + Location: 71,82 + Actor502: t06 + Owner: Neutral + Location: 68,84 + Actor501: t08 + Owner: Neutral + Location: 69,84 + Actor503: t08 + Owner: Neutral + Location: 61,85 + Actor504: t16 + Owner: Neutral + Location: 60,42 + Actor505: t12 + Owner: Neutral + Location: 67,42 + Actor506: t08 + Owner: Neutral + Location: 58,44 + Actor507: t01 + Owner: Neutral + Location: 57,44 + Actor518: t12 + Owner: Neutral + Location: 71,122 + Actor519: t06 + Owner: Neutral + Location: 72,123 + Actor520: t01 + Owner: Neutral + Location: 64,120 + Actor521: t01 + Owner: Neutral + Location: 64,6 + Actor522: tc04 + Owner: Neutral + Location: 68,-1 + Actor523: t16 + Owner: Neutral + Location: 70,1 + Actor524: tc02 + Owner: Neutral + Location: 60,9 + Actor525: t01 + Owner: Neutral + Location: 62,9 + Actor526: tc03 + Owner: Neutral + Location: 60,7 + Actor527: tc03 + Owner: Neutral + Location: 67,7 + Actor528: t16 + Owner: Neutral + Location: 68,8 + Actor529: t08 + Owner: Neutral + Location: 68,10 + Actor532: t17 + Owner: Neutral + Location: 67,5 + Actor533: t07 + Owner: Neutral + Location: 61,5 + Actor535: t07 + Owner: Neutral + Location: 57,4 + Actor536: t08 + Owner: Neutral + Location: 71,5 + Actor534: t16 + Owner: Neutral + Location: 71,3 + Actor537: t11 + Owner: Neutral + Location: 72,3 + Actor538: t01 + Owner: Neutral + Location: 73,4 + Actor539: t07 + Owner: Neutral + Location: 72,4 + Actor530: t10 + Owner: Neutral + Location: 55,4 + Actor531: t05 + Owner: Neutral + Location: 56,3 + Actor540: tc02 + Owner: Neutral + Location: 59,0 + Actor541: tc01 + Owner: Neutral + Location: 57,0 + Actor508: t16 + Owner: Neutral + Location: 57,122 + Actor510: t07 + Owner: Neutral + Location: 71,123 + Actor509: t12 + Owner: Neutral + Location: 57,123 + Actor511: tc03 + Owner: Neutral + Location: 60,120 + Actor512: tc03 + Owner: Neutral + Location: 67,120 + Actor514: t11 + Owner: Neutral + Location: 60,118 + Actor513: t08 + Owner: Neutral + Location: 68,119 + Actor515: t17 + Owner: Neutral + Location: 67,118 + Actor517: t08 + Owner: Neutral + Location: 67,122 + Actor516: t17 + Owner: Neutral + Location: 61,121 + Actor542: tc02 + Owner: Neutral + Location: 69,126 + Actor544: t07 + Owner: Neutral + Location: 59,125 + Actor545: t08 + Owner: Neutral + Location: 59,127 + Actor546: t16 + Owner: Neutral + Location: 60,126 + Actor543: t12 + Owner: Neutral + Location: 68,126 + Actor547: t03 + Owner: Neutral + Location: 63,117 + Actor548: t01 + Owner: Neutral + Location: 80,63 + Actor549: t05 + Owner: Neutral + Location: 79,60 + Actor550: t03 + Owner: Neutral + Location: 78,58 + Actor551: t08 + Owner: Neutral + Location: 80,61 + Actor552: t11 + Owner: Neutral + Location: 80,62 + Actor553: t10 + Owner: Neutral + Location: 47,64 + Actor554: t16 + Owner: Neutral + Location: 48,63 + Actor555: t08 + Owner: Neutral + Location: 47,67 + Actor556: t02 + Owner: Neutral + Location: 48,66 + Actor557: t12 + Owner: Neutral + Location: 49,68 + Actor558: t17 + Owner: Neutral + Location: 47,61 + Actor559: t17 + Owner: Neutral + Location: 81,65 + Actor560: t08 + Owner: Neutral + Location: 47,63 + Actor561: t08 + Owner: Neutral + Location: 81,64 + +Rules: rules.yaml diff --git a/mods/ura/maps/shattered-mountain/rules.yaml b/mods/ura/maps/shattered-mountain/rules.yaml new file mode 100644 index 0000000..bf37c5c --- /dev/null +++ b/mods/ura/maps/shattered-mountain/rules.yaml @@ -0,0 +1,21 @@ +World: + WeatherOverlay: + ChangingWindLevel: true + WindLevels: -5, -3, -2, 0, 2, 3, 5, 6 + WindTick: 150, 550 + InstantWindChanges: false + UseSquares: true + ParticleSize: 2, 3 + ParticleDensityFactor: 8 + ScatterDirection: -1, 1 + Gravity: 1.00, 2.00 + SwingOffset: 1.0, 1.5 + SwingSpeed: 0.001, 0.025 + SwingAmplitude: 1.0, 1.5 + ParticleColors: ECECEC, E4E4E4, D0D0D0, BCBCBC + LineTailAlphaValue: 0 + GlobalLightingPaletteEffect: + Red: 0.88 + Green: 0.92 + Blue: 1.06 + Ambient: 1.1 diff --git a/mods/ura/maps/sidestep.oramap b/mods/ura/maps/sidestep.oramap new file mode 100644 index 0000000..6c0096b Binary files /dev/null and b/mods/ura/maps/sidestep.oramap differ diff --git a/mods/ura/maps/singles.oramap b/mods/ura/maps/singles.oramap new file mode 100644 index 0000000..5ada42e Binary files /dev/null and b/mods/ura/maps/singles.oramap differ diff --git a/mods/ura/maps/six-below-zero/map.bin b/mods/ura/maps/six-below-zero/map.bin new file mode 100644 index 0000000..74dbb77 Binary files /dev/null and b/mods/ura/maps/six-below-zero/map.bin differ diff --git a/mods/ura/maps/six-below-zero/map.png b/mods/ura/maps/six-below-zero/map.png new file mode 100644 index 0000000..6fc7761 Binary files /dev/null and b/mods/ura/maps/six-below-zero/map.png differ diff --git a/mods/ura/maps/six-below-zero/map.yaml b/mods/ura/maps/six-below-zero/map.yaml new file mode 100644 index 0000000..3c2d580 --- /dev/null +++ b/mods/ura/maps/six-below-zero/map.yaml @@ -0,0 +1,2591 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Six Below Zero + +Author: Echo of Damnation + +Tileset: SNOW + +MapSize: 130,130 + +Bounds: 1,1,128,128 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + Enemies: Multi0, Multi1, Multi2, Multi3, Multi4, Multi5 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi2: + Name: Multi2 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi3: + Name: Multi3 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi4: + Name: Multi4 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi5: + Name: Multi5 + Playable: True + Faction: Random + Enemies: Creeps + +Actors: + Actor1: gmine + Owner: Neutral + Location: 123,64 + Actor2: gmine + Owner: Neutral + Location: 6,64 + Actor3: gmine + Owner: Neutral + Location: 64,64 + Actor5: tc03 + Owner: Neutral + Location: 45,66 + Actor7: t07 + Owner: Neutral + Location: 82,59 + Actor8: t08 + Owner: Neutral + Location: 85,60 + Actor9: t08 + Owner: Neutral + Location: 43,67 + Actor10: t02 + Owner: Neutral + Location: 45,63 + Actor11: t05 + Owner: Neutral + Location: 85,63 + Actor12: t11 + Owner: Neutral + Location: 105,64 + Actor13: t11 + Owner: Neutral + Location: 25,62 + Actor14: oilb + Owner: Neutral + Location: 46,46 + Actor15: oilb + Owner: Neutral + Location: 81,81 + Actor16: fenc + Owner: Neutral + Location: 75,83 + Actor17: fenc + Owner: Neutral + Location: 76,83 + Actor18: fenc + Owner: Neutral + Location: 76,83 + Actor19: fenc + Owner: Neutral + Location: 77,83 + Actor20: fenc + Owner: Neutral + Location: 77,84 + Actor21: fenc + Owner: Neutral + Location: 80,86 + Actor22: fenc + Owner: Neutral + Location: 80,87 + Actor23: fenc + Owner: Neutral + Location: 80,88 + Actor24: fenc + Owner: Neutral + Location: 79,86 + Actor25: fenc + Owner: Neutral + Location: 83,77 + Actor26: fenc + Owner: Neutral + Location: 83,76 + Actor27: fenc + Owner: Neutral + Location: 83,75 + Actor28: fenc + Owner: Neutral + Location: 84,77 + Actor29: fenc + Owner: Neutral + Location: 86,80 + Actor30: fenc + Owner: Neutral + Location: 87,80 + Actor31: fenc + Owner: Neutral + Location: 88,80 + Actor32: fenc + Owner: Neutral + Location: 86,79 + Actor33: fenc + Owner: Neutral + Location: 51,45 + Actor34: fenc + Owner: Neutral + Location: 52,45 + Actor35: fenc + Owner: Neutral + Location: 53,45 + Actor36: fenc + Owner: Neutral + Location: 51,44 + Actor37: fenc + Owner: Neutral + Location: 45,53 + Actor38: fenc + Owner: Neutral + Location: 45,52 + Actor39: fenc + Owner: Neutral + Location: 45,51 + Actor40: fenc + Owner: Neutral + Location: 44,51 + Actor41: fenc + Owner: Neutral + Location: 48,42 + Actor42: fenc + Owner: Neutral + Location: 48,41 + Actor43: fenc + Owner: Neutral + Location: 48,40 + Actor44: fenc + Owner: Neutral + Location: 49,42 + Actor45: fenc + Owner: Neutral + Location: 40,48 + Actor46: fenc + Owner: Neutral + Location: 41,48 + Actor47: fenc + Owner: Neutral + Location: 42,48 + Actor49: fenc + Owner: Neutral + Location: 42,49 + Actor48: tc03 + Owner: Neutral + Location: 48,49 + Actor50: tc03 + Owner: Neutral + Location: 79,78 + Actor51: v11 + Owner: Neutral + Location: 84,84 + Actor52: v12 + Owner: Neutral + Location: 83,85 + Actor53: t08 + Owner: Neutral + Location: 84,83 + Actor54: brl3 + Owner: Neutral + Location: 80,82 + Actor55: brl3 + Owner: Neutral + Location: 83,81 + Actor56: barl + Owner: Neutral + Location: 81,83 + Actor57: barl + Owner: Neutral + Location: 82,80 + Actor58: brl3 + Owner: Neutral + Location: 46,48 + Actor59: brl3 + Owner: Neutral + Location: 47,45 + Actor60: barl + Owner: Neutral + Location: 48,46 + Actor61: barl + Owner: Neutral + Location: 45,47 + Actor62: v09 + Owner: Neutral + Location: 44,44 + Actor63: v13 + Owner: Neutral + Location: 45,43 + Actor64: t16 + Owner: Neutral + Location: 43,44 + Actor65: t16 + Owner: Neutral + Location: 68,69 + Actor66: tc01 + Owner: Neutral + Location: 59,69 + Actor67: tc03 + Owner: Neutral + Location: 59,57 + Actor68: t02 + Owner: Neutral + Location: 70,59 + Actor69: t15 + Owner: Neutral + Location: 57,59 + Actor70: tc04 + Owner: Neutral + Location: 103,71 + Actor71: tc03 + Owner: Neutral + Location: 104,70 + Actor72: t11 + Owner: Neutral + Location: 103,69 + Actor73: tc05 + Owner: Neutral + Location: 25,55 + Actor74: tc03 + Owner: Neutral + Location: 25,57 + Actor75: t14 + Owner: Neutral + Location: 25,58 + Actor76: t15 + Owner: Neutral + Location: 29,52 + Actor77: tc01 + Owner: Neutral + Location: 99,74 + Actor78: tc02 + Owner: Neutral + Location: 79,65 + Actor82: tc02 + Owner: Neutral + Location: 62,26 + Actor84: t03 + Owner: Neutral + Location: 65,100 + Actor85: t11 + Owner: Neutral + Location: 63,27 + Actor86: t11 + Owner: Neutral + Location: 48,65 + Actor87: t07 + Owner: Neutral + Location: 79,61 + Actor91: t15 + Owner: Neutral + Location: 50,63 + Actor92: mine + Owner: Neutral + Location: 88,88 + Actor93: mine + Owner: Neutral + Location: 40,40 + Actor94: t11 + Owner: Neutral + Location: 29,95 + Actor95: tc03 + Owner: Neutral + Location: 29,98 + Actor96: t15 + Owner: Neutral + Location: 26,98 + Actor97: t01 + Owner: Neutral + Location: 28,98 + Actor98: tc02 + Owner: Neutral + Location: 29,99 + Actor99: tc01 + Owner: Neutral + Location: 27,99 + Actor100: tc04 + Owner: Neutral + Location: 27,100 + Actor101: tc02 + Owner: Neutral + Location: 27,101 + Actor102: t13 + Owner: Neutral + Location: 29,100 + Actor103: tc05 + Owner: Neutral + Location: 27,102 + Actor104: t08 + Owner: Neutral + Location: 23,103 + Actor105: tc01 + Owner: Neutral + Location: 24,102 + Actor106: t11 + Owner: Neutral + Location: 25,102 + Actor107: tc02 + Owner: Neutral + Location: 26,103 + Actor108: t08 + Owner: Neutral + Location: 29,105 + Actor109: t08 + Owner: Neutral + Location: 63,1 + Actor110: t01 + Owner: Neutral + Location: 102,6 + Actor111: t15 + Owner: Neutral + Location: 27,121 + Actor112: tc02 + Owner: Neutral + Location: 35,88 + Actor113: tc01 + Owner: Neutral + Location: 37,89 + Actor114: t11 + Owner: Neutral + Location: 34,88 + Actor115: t15 + Owner: Neutral + Location: 38,90 + Actor117: boxes04 + Owner: Neutral + Location: 79,80 + Actor118: barl + Owner: Neutral + Location: 78,81 + Actor119: brl3 + Owner: Neutral + Location: 82,78 + Actor120: brl3 + Owner: Neutral + Location: 50,48 + Actor121: barl + Owner: Neutral + Location: 43,46 + Actor122: boxes07 + Owner: Neutral + Location: 47,50 + Actor124: v13 + Owner: Neutral + Location: 79,64 + Actor125: tc03 + Owner: Neutral + Location: 90,38 + Actor126: t10 + Owner: Neutral + Location: 89,37 + Actor127: tc02 + Owner: Neutral + Location: 92,39 + Actor128: t15 + Owner: Neutral + Location: 93,40 + Actor129: t15 + Owner: Neutral + Location: 92,38 + Actor131: tc01 + Owner: Neutral + Location: 89,40 + Actor132: tc01 + Owner: Neutral + Location: 34,90 + Actor133: tc02 + Owner: Neutral + Location: 93,36 + Actor136: tc03 + Owner: Neutral + Location: 66,98 + Actor137: tc01 + Owner: Neutral + Location: 69,99 + Actor138: t08 + Owner: Neutral + Location: 71,100 + Actor139: t11 + Owner: Neutral + Location: 68,98 + Actor140: tc05 + Owner: Neutral + Location: 99,67 + Actor141: tc04 + Owner: Neutral + Location: 96,67 + Actor142: tc02 + Owner: Neutral + Location: 98,68 + Actor143: tc03 + Owner: Neutral + Location: 101,66 + Actor144: tc01 + Owner: Neutral + Location: 100,69 + Actor145: tc03 + Owner: Neutral + Location: 61,29 + Actor146: t08 + Owner: Neutral + Location: 61,31 + Actor147: tc02 + Owner: Neutral + Location: 59,28 + Actor148: t07 + Owner: Neutral + Location: 58,28 + Actor149: t12 + Owner: Neutral + Location: 48,63 + Actor150: tc04 + Owner: Neutral + Location: 87,82 + Actor153: tc04 + Owner: Neutral + Location: 44,38 + Actor154: t08 + Owner: Neutral + Location: 45,40 + Actor155: t11 + Owner: Neutral + Location: 38,44 + Actor156: t11 + Owner: Neutral + Location: 89,83 + Actor157: t08 + Owner: Neutral + Location: 83,89 + Actor158: tc04 + Owner: Neutral + Location: 28,58 + Actor159: tc05 + Owner: Neutral + Location: 31,58 + Actor160: tc01 + Owner: Neutral + Location: 30,59 + Actor161: tc03 + Owner: Neutral + Location: 27,61 + Actor162: t08 + Owner: Neutral + Location: 29,61 + Actor163: tc02 + Owner: Neutral + Location: 29,57 + Actor164: t12 + Owner: Neutral + Location: 29,59 + Actor165: tc05 + Owner: Neutral + Location: 100,23 + Actor166: tc01 + Owner: Neutral + Location: 103,24 + Actor167: t08 + Owner: Neutral + Location: 105,24 + Actor168: tc04 + Owner: Neutral + Location: 98,25 + Actor169: tc02 + Owner: Neutral + Location: 99,24 + Actor170: t11 + Owner: Neutral + Location: 98,23 + Actor171: t05 + Owner: Neutral + Location: 99,23 + Actor172: t08 + Owner: Neutral + Location: 99,22 + Actor173: tc03 + Owner: Neutral + Location: 100,26 + Actor174: t11 + Owner: Neutral + Location: 98,31 + Actor175: tc05 + Owner: Neutral + Location: 98,27 + Actor176: t11 + Owner: Neutral + Location: 97,28 + Actor177: t16 + Owner: Neutral + Location: 98,29 + Actor178: t08 + Owner: Neutral + Location: 101,28 + Actor179: mine + Owner: Neutral + Location: 117,117 + Actor181: mine + Owner: Neutral + Location: 12,12 + Actor183: tc05 + Owner: Neutral + Location: 38,43 + Actor184: tc05 + Owner: Neutral + Location: 82,87 + Actor185: mine + Owner: Neutral + Location: 31,65 + Actor186: mine + Owner: Neutral + Location: 99,63 + Actor187: mine + Owner: Neutral + Location: 63,96 + Actor188: mine + Owner: Neutral + Location: 65,33 + Actor189: mine + Owner: Neutral + Location: 94,118 + Actor190: mine + Owner: Neutral + Location: 35,11 + Actor193: mine + Owner: Neutral + Location: 101,101 + Actor180: mine + Owner: Neutral + Location: 27,27 + Actor182: mine + Owner: Neutral + Location: 33,27 + Actor191: mine + Owner: Neutral + Location: 27,33 + Actor192: mine + Owner: Neutral + Location: 95,101 + Actor194: mine + Owner: Neutral + Location: 101,95 + Actor195: mine + Owner: Neutral + Location: 10,30 + Actor196: mine + Owner: Neutral + Location: 119,99 + Actor197: mine + Owner: Neutral + Location: 43,116 + Actor198: mine + Owner: Neutral + Location: 87,14 + Actor199: mine + Owner: Neutral + Location: 12,89 + Actor200: mine + Owner: Neutral + Location: 118,39 + Actor201: oilb + Owner: Neutral + Location: 84,43 + Actor202: oilb + Owner: Neutral + Location: 43,84 + Actor203: fenc + Owner: Neutral + Location: 45,85 + Actor204: fenc + Owner: Neutral + Location: 45,86 + Actor205: fenc + Owner: Neutral + Location: 44,86 + Actor206: fenc + Owner: Neutral + Location: 43,83 + Actor207: fenc + Owner: Neutral + Location: 42,83 + Actor208: fenc + Owner: Neutral + Location: 42,84 + Actor209: fenc + Owner: Neutral + Location: 85,45 + Actor210: fenc + Owner: Neutral + Location: 86,45 + Actor211: fenc + Owner: Neutral + Location: 86,44 + Actor212: fenc + Owner: Neutral + Location: 83,43 + Actor213: fenc + Owner: Neutral + Location: 83,42 + Actor214: fenc + Owner: Neutral + Location: 84,42 + Actor215: fenc + Owner: Neutral + Location: 87,38 + Actor216: fenc + Owner: Neutral + Location: 87,39 + Actor217: fenc + Owner: Neutral + Location: 86,39 + Actor218: fenc + Owner: Neutral + Location: 91,42 + Actor219: fenc + Owner: Neutral + Location: 90,42 + Actor220: fenc + Owner: Neutral + Location: 90,43 + Actor221: fenc + Owner: Neutral + Location: 41,88 + Actor222: fenc + Owner: Neutral + Location: 41,89 + Actor223: fenc + Owner: Neutral + Location: 42,89 + Actor224: tc02 + Owner: Neutral + Location: 38,86 + Actor225: fenc + Owner: Neutral + Location: 38,86 + Actor226: fenc + Owner: Neutral + Location: 37,86 + Actor227: fenc + Owner: Neutral + Location: 37,85 + Actor228: brl3 + Owner: Neutral + Location: 41,84 + Actor229: brl3 + Owner: Neutral + Location: 42,88 + Actor230: barl + Owner: Neutral + Location: 44,87 + Actor231: barl + Owner: Neutral + Location: 38,85 + Actor232: brl3 + Owner: Neutral + Location: 87,44 + Actor233: brl3 + Owner: Neutral + Location: 87,40 + Actor234: barl + Owner: Neutral + Location: 89,42 + Actor235: barl + Owner: Neutral + Location: 84,41 + Actor236: brl3 + Owner: Neutral + Location: 84,45 + Actor237: barl + Owner: Neutral + Location: 45,84 + Actor238: brl3 + Owner: Neutral + Location: 83,41 + Actor239: brl3 + Owner: Neutral + Location: 91,43 + Actor240: brl3 + Owner: Neutral + Location: 45,88 + Actor241: brl3 + Owner: Neutral + Location: 37,84 + Actor242: tc04 + Owner: Neutral + Location: 31,30 + Actor243: tc05 + Owner: Neutral + Location: 95,95 + Actor244: t02 + Owner: Neutral + Location: 95,96 + Actor245: t08 + Owner: Neutral + Location: 33,32 + Actor247: v03 + Owner: Neutral + Location: 52,80 + Actor246: v10 + Owner: Neutral + Location: 50,80 + Actor248: v06 + Owner: Neutral + Location: 57,83 + Actor249: v17 + Owner: Neutral + Location: 57,84 + Actor250: v17 + Owner: Neutral + Location: 58,84 + Actor251: v17 + Owner: Neutral + Location: 59,84 + Actor252: wood + Owner: Neutral + Location: 57,85 + Actor253: wood + Owner: Neutral + Location: 58,85 + Actor254: wood + Owner: Neutral + Location: 59,85 + Actor255: wood + Owner: Neutral + Location: 60,85 + Actor256: wood + Owner: Neutral + Location: 60,84 + Actor257: wood + Owner: Neutral + Location: 60,83 + Actor258: wood + Owner: Neutral + Location: 59,83 + Actor259: wood + Owner: Neutral + Location: 59,82 + Actor260: wood + Owner: Neutral + Location: 58,82 + Actor261: wood + Owner: Neutral + Location: 57,82 + Actor262: wood + Owner: Neutral + Location: 56,85 + Actor263: wood + Owner: Neutral + Location: 56,84 + Actor265: v04 + Owner: Neutral + Location: 60,81 + Actor266: v11 + Owner: Neutral + Location: 56,83 + Actor264: v07 + Owner: Neutral + Location: 57,87 + Actor267: v01 + Owner: Neutral + Location: 57,79 + Actor268: t11 + Owner: Neutral + Location: 59,79 + Actor269: v08 + Owner: Neutral + Location: 55,79 + Actor270: tc01 + Owner: Neutral + Location: 55,77 + Actor271: tc03 + Owner: Neutral + Location: 61,83 + Actor273: t08 + Owner: Neutral + Location: 52,81 + Actor274: t10 + Owner: Neutral + Location: 48,78 + Actor275: tc01 + Owner: Neutral + Location: 49,85 + Actor272: fenc + Owner: Neutral + Location: 57,76 + Actor276: fenc + Owner: Neutral + Location: 58,76 + Actor277: fenc + Owner: Neutral + Location: 61,76 + Actor278: fenc + Owner: Neutral + Location: 62,76 + Actor282: fenc + Owner: Neutral + Location: 57,77 + Actor283: v19 + Owner: Neutral + Location: 58,77 + Actor284: v19 + Owner: Neutral + Location: 61,77 + Actor285: fenc + Owner: Neutral + Location: 62,77 + Actor286: fenc + Owner: Neutral + Location: 57,78 + Actor287: fenc + Owner: Neutral + Location: 58,78 + Actor288: fenc + Owner: Neutral + Location: 59,78 + Actor289: fenc + Owner: Neutral + Location: 59,78 + Actor290: tc02 + Owner: Neutral + Location: 59,78 + Actor291: fenc + Owner: Neutral + Location: 60,78 + Actor292: fenc + Owner: Neutral + Location: 61,78 + Actor293: fenc + Owner: Neutral + Location: 62,78 + Actor279: brl3 + Owner: Neutral + Location: 60,77 + Actor280: barl + Owner: Neutral + Location: 59,77 + Actor281: fenc + Owner: Neutral + Location: 66,50 + Actor294: fenc + Owner: Neutral + Location: 67,50 + Actor295: fenc + Owner: Neutral + Location: 70,50 + Actor296: fenc + Owner: Neutral + Location: 71,50 + Actor297: fenc + Owner: Neutral + Location: 66,51 + Actor298: v19 + Owner: Neutral + Location: 67,51 + Actor301: v19 + Owner: Neutral + Location: 70,51 + Actor302: fenc + Owner: Neutral + Location: 71,51 + Actor303: fenc + Owner: Neutral + Location: 66,52 + Actor304: fenc + Owner: Neutral + Location: 67,52 + Actor309: fenc + Owner: Neutral + Location: 70,52 + Actor310: fenc + Owner: Neutral + Location: 71,52 + Actor305: fenc + Owner: Neutral + Location: 68,50 + Actor306: fenc + Owner: Neutral + Location: 69,50 + Actor299: brl3 + Owner: Neutral + Location: 68,51 + Actor300: barl + Owner: Neutral + Location: 69,51 + Actor307: tc01 + Owner: Neutral + Location: 72,49 + Actor308: tc02 + Owner: Neutral + Location: 68,48 + Actor311: t11 + Owner: Neutral + Location: 68,47 + Actor313: v08 + Owner: Neutral + Location: 73,48 + Actor316: v10 + Owner: Neutral + Location: 78,48 + Actor314: v03 + Owner: Neutral + Location: 75,47 + Actor315: t08 + Owner: Neutral + Location: 76,46 + Actor317: tc03 + Owner: Neutral + Location: 65,45 + Actor318: v07 + Owner: Neutral + Location: 70,41 + Actor324: v01 + Owner: Neutral + Location: 70,47 + Actor319: wood + Owner: Neutral + Location: 68,43 + Actor320: wood + Owner: Neutral + Location: 69,43 + Actor321: wood + Owner: Neutral + Location: 70,43 + Actor322: wood + Owner: Neutral + Location: 71,43 + Actor323: wood + Owner: Neutral + Location: 67,44 + Actor325: v17 + Owner: Neutral + Location: 68,44 + Actor326: v17 + Owner: Neutral + Location: 69,44 + Actor327: v18 + Owner: Neutral + Location: 70,44 + Actor328: wood + Owner: Neutral + Location: 71,44 + Actor329: wood + Owner: Neutral + Location: 67,45 + Actor330: wood + Owner: Neutral + Location: 68,45 + Actor331: v06 + Owner: Neutral + Location: 69,45 + Actor332: v11 + Owner: Neutral + Location: 71,45 + Actor333: wood + Owner: Neutral + Location: 68,46 + Actor337: wood + Owner: Neutral + Location: 69,46 + Actor338: wood + Owner: Neutral + Location: 70,46 + Actor339: wood + Owner: Neutral + Location: 67,43 + Actor334: wood + Owner: Neutral + Location: 71,46 + Actor335: tc01 + Owner: Neutral + Location: 78,41 + Actor336: t03 + Owner: Neutral + Location: 79,48 + Actor341: oilb + Owner: Neutral + Location: 63,123 + Actor342: fenc + Owner: Neutral + Location: 63,122 + Actor343: fenc + Owner: Neutral + Location: 64,122 + Actor344: fenc + Owner: Neutral + Location: 65,122 + Actor346: fenc + Owner: Neutral + Location: 62,122 + Actor347: fenc + Owner: Neutral + Location: 62,123 + Actor348: fenc + Owner: Neutral + Location: 66,123 + Actor349: fenc + Owner: Neutral + Location: 67,123 + Actor350: fenc + Owner: Neutral + Location: 61,123 + Actor351: fenc + Owner: Neutral + Location: 60,123 + Actor352: fenc + Owner: Neutral + Location: 68,123 + Actor353: fenc + Owner: Neutral + Location: 59,123 + Actor354: fenc + Owner: Neutral + Location: 59,124 + Actor355: fenc + Owner: Neutral + Location: 66,122 + Actor345: fenc + Owner: Neutral + Location: 69,123 + Actor356: fenc + Owner: Neutral + Location: 69,124 + Actor357: boxes05 + Owner: Neutral + Location: 65,123 + Actor358: v11 + Owner: Neutral + Location: 65,124 + Actor359: tc05 + Owner: Neutral + Location: 73,125 + Actor360: tc04 + Owner: Neutral + Location: 53,125 + Actor361: tc03 + Owner: Neutral + Location: 56,125 + Actor362: t15 + Owner: Neutral + Location: 55,124 + Actor364: t08 + Owner: Neutral + Location: 61,124 + Actor365: brl3 + Owner: Neutral + Location: 66,124 + Actor366: barl + Owner: Neutral + Location: 62,124 + Actor367: brl3 + Owner: Neutral + Location: 61,126 + Actor368: barl + Owner: Neutral + Location: 67,126 + Actor369: t11 + Owner: Neutral + Location: 68,126 + Actor363: t07 + Owner: Neutral + Location: 67,123 + Actor370: tc02 + Owner: Neutral + Location: 47,127 + Actor371: t02 + Owner: Neutral + Location: 58,127 + Actor372: t12 + Owner: Neutral + Location: 70,127 + Actor374: t14 + Owner: Neutral + Location: 78,127 + Actor375: tc03 + Owner: Neutral + Location: 60,128 + Actor376: t08 + Owner: Neutral + Location: 63,127 + Actor377: t12 + Owner: Neutral + Location: 65,127 + Actor378: oilb + Owner: Neutral + Location: 64,5 + Actor379: fenc + Owner: Neutral + Location: 65,7 + Actor380: fenc + Owner: Neutral + Location: 64,7 + Actor381: fenc + Owner: Neutral + Location: 63,7 + Actor382: fenc + Owner: Neutral + Location: 62,7 + Actor383: fenc + Owner: Neutral + Location: 66,7 + Actor384: fenc + Owner: Neutral + Location: 66,6 + Actor385: fenc + Owner: Neutral + Location: 67,6 + Actor386: fenc + Owner: Neutral + Location: 68,6 + Actor387: fenc + Owner: Neutral + Location: 69,6 + Actor388: fenc + Owner: Neutral + Location: 62,6 + Actor389: fenc + Owner: Neutral + Location: 61,6 + Actor390: fenc + Owner: Neutral + Location: 60,6 + Actor391: fenc + Owner: Neutral + Location: 59,6 + Actor392: fenc + Owner: Neutral + Location: 69,5 + Actor393: fenc + Owner: Neutral + Location: 59,5 + Actor394: boxes08 + Owner: Neutral + Location: 63,6 + Actor395: v09 + Owner: Neutral + Location: 63,5 + Actor398: t01 + Owner: Neutral + Location: 61,4 + Actor399: t08 + Owner: Neutral + Location: 67,5 + Actor396: barl + Owner: Neutral + Location: 66,5 + Actor401: brl3 + Owner: Neutral + Location: 67,3 + Actor397: brl3 + Owner: Neutral + Location: 62,5 + Actor400: barl + Owner: Neutral + Location: 60,3 + Actor402: tc02 + Owner: Neutral + Location: 53,3 + Actor403: tc01 + Owner: Neutral + Location: 55,3 + Actor404: t11 + Owner: Neutral + Location: 55,4 + Actor405: tc04 + Owner: Neutral + Location: 73,2 + Actor406: t11 + Owner: Neutral + Location: 60,2 + Actor407: t17 + Owner: Neutral + Location: 59,1 + Actor408: t14 + Owner: Neutral + Location: 49,2 + Actor409: tc02 + Owner: Neutral + Location: 78,1 + Actor410: t01 + Owner: Neutral + Location: 68,1 + Actor411: t12 + Owner: Neutral + Location: 70,123 + Actor412: t12 + Owner: Neutral + Location: 58,4 + Actor414: v08 + Owner: Neutral + Location: 56,127 + Actor413: tc03 + Owner: Neutral + Location: 71,4 + Actor415: snowhut + Owner: Neutral + Location: 72,2 + Actor416: t13 + Owner: Neutral + Location: 73,4 + Actor417: tc04 + Owner: Neutral + Location: 120,53 + Actor418: tc03 + Owner: Neutral + Location: 121,73 + Actor419: t16 + Owner: Neutral + Location: 120,72 + Actor420: t15 + Owner: Neutral + Location: 122,73 + Actor421: tc05 + Owner: Neutral + Location: 6,72 + Actor422: t07 + Owner: Neutral + Location: 6,73 + Actor424: t03 + Owner: Neutral + Location: 8,54 + Actor425: t08 + Owner: Neutral + Location: 7,55 + Actor426: tc05 + Owner: Neutral + Location: 43,79 + Actor427: t08 + Owner: Neutral + Location: 43,80 + Actor428: tc03 + Owner: Neutral + Location: 84,47 + Actor429: t01 + Owner: Neutral + Location: 84,46 + Actor430: t08 + Owner: Neutral + Location: 86,48 + Actor431: t11 + Owner: Neutral + Location: 83,46 + Actor432: t07 + Owner: Neutral + Location: 83,47 + Actor439: oilb + Owner: Neutral + Location: 8,125 + Actor444: fenc + Owner: Neutral + Location: 119,5 + Actor445: fenc + Owner: Neutral + Location: 118,5 + Actor447: fenc + Owner: Neutral + Location: 117,4 + Actor448: fenc + Owner: Neutral + Location: 116,4 + Actor449: fenc + Owner: Neutral + Location: 115,4 + Actor441: fenc + Owner: Neutral + Location: 127,9 + Actor450: fenc + Owner: Neutral + Location: 127,8 + Actor451: fenc + Owner: Neutral + Location: 127,7 + Actor452: fenc + Owner: Neutral + Location: 126,7 + Actor453: fenc + Owner: Neutral + Location: 126,6 + Actor462: fenc + Owner: Neutral + Location: 11,124 + Actor463: fenc + Owner: Neutral + Location: 12,124 + Actor464: fenc + Owner: Neutral + Location: 12,125 + Actor465: fenc + Owner: Neutral + Location: 13,125 + Actor466: fenc + Owner: Neutral + Location: 14,125 + Actor459: fenc + Owner: Neutral + Location: 8,124 + Actor460: fenc + Owner: Neutral + Location: 8,124 + Actor461: fenc + Owner: Neutral + Location: 7,124 + Actor470: fenc + Owner: Neutral + Location: 8,124 + Actor471: fenc + Owner: Neutral + Location: 9,124 + Actor467: fenc + Owner: Neutral + Location: 11,123 + Actor468: fenc + Owner: Neutral + Location: 10,123 + Actor469: fenc + Owner: Neutral + Location: 9,123 + Actor473: fenc + Owner: Neutral + Location: 3,123 + Actor474: fenc + Owner: Neutral + Location: 3,122 + Actor475: fenc + Owner: Neutral + Location: 3,121 + Actor476: fenc + Owner: Neutral + Location: 3,121 + Actor477: fenc + Owner: Neutral + Location: 3,120 + Actor478: fenc + Owner: Neutral + Location: 3,119 + Actor479: fenc + Owner: Neutral + Location: 4,124 + Actor480: fenc + Owner: Neutral + Location: 5,124 + Actor472: fenc + Owner: Neutral + Location: 4,123 + Actor481: snowhut + Owner: Neutral + Location: 10,123 + Actor484: fenc + Owner: Neutral + Location: 15,126 + Actor483: fenc + Owner: Neutral + Location: 14,126 + Actor485: fenc + Owner: Neutral + Location: 15,127 + Actor486: fenc + Owner: Neutral + Location: 15,128 + Actor487: fenc + Owner: Neutral + Location: 15,129 + Actor488: fenc + Owner: Neutral + Location: 2,119 + Actor489: fenc + Owner: Neutral + Location: 2,118 + Actor490: fenc + Owner: Neutral + Location: 1,118 + Actor491: fenc + Owner: Neutral + Location: 1,117 + Actor492: fenc + Owner: Neutral + Location: 0,117 + Actor493: fenc + Owner: Neutral + Location: 0,116 + Actor494: hosp + Owner: Neutral + Location: 2,124 + Actor495: v02 + Owner: Neutral + Location: 4,127 + Actor496: v07 + Owner: Neutral + Location: 1,122 + Actor497: brl3 + Owner: Neutral + Location: 11,127 + Actor498: barl + Owner: Neutral + Location: 10,127 + Actor499: v03 + Owner: Neutral + Location: 5,126 + Actor500: tc05 + Owner: Neutral + Location: 0,119 + Actor502: fenc + Owner: Neutral + Location: 128,10 + Actor503: fenc + Owner: Neutral + Location: 128,11 + Actor504: fenc + Owner: Neutral + Location: 128,11 + Actor505: fenc + Owner: Neutral + Location: 128,12 + Actor506: fenc + Owner: Neutral + Location: 129,12 + Actor507: fenc + Owner: Neutral + Location: 129,13 + Actor508: fenc + Owner: Neutral + Location: 115,3 + Actor509: fenc + Owner: Neutral + Location: 114,3 + Actor510: fenc + Owner: Neutral + Location: 114,2 + Actor511: fenc + Owner: Neutral + Location: 114,1 + Actor512: fenc + Owner: Neutral + Location: 114,0 + Actor515: fenc + Owner: Neutral + Location: 117,5 + Actor522: v08 + Owner: Neutral + Location: 118,4 + Actor516: brl3 + Owner: Neutral + Location: 118,2 + Actor517: barl + Owner: Neutral + Location: 119,2 + Actor526: fenc + Owner: Neutral + Location: 125,6 + Actor527: fenc + Owner: Neutral + Location: 124,6 + Actor528: fenc + Owner: Neutral + Location: 127,10 + Actor514: fenc + Owner: Neutral + Location: 119,6 + Actor501: oilb + Owner: Neutral + Location: 120,3 + Actor520: tc02 + Owner: Neutral + Location: 128,8 + Actor521: tc01 + Owner: Neutral + Location: 128,7 + Actor523: v05 + Owner: Neutral + Location: 128,7 + Actor524: hosp + Owner: Neutral + Location: 126,4 + Actor525: v06 + Owner: Neutral + Location: 124,1 + Actor518: v07 + Owner: Neutral + Location: 123,2 + Actor519: ctflag + Owner: Neutral + Location: 118,3 + Actor529: ctflag + Owner: Neutral + Location: 11,125 + Actor530: t11 + Owner: Neutral + Location: 66,83 + Actor531: t11 + Owner: Neutral + Location: 61,43 + Actor532: tc03 + Owner: Neutral + Location: 66,109 + Actor533: tc03 + Owner: Neutral + Location: 60,19 + Actor534: t10 + Owner: Neutral + Location: 62,18 + Actor535: t17 + Owner: Neutral + Location: 65,109 + Actor536: t15 + Owner: Neutral + Location: 62,101 + Actor537: t12 + Owner: Neutral + Location: 66,26 + Actor538: v03 + Owner: Neutral + Location: 67,26 + Actor539: v02 + Owner: Neutral + Location: 59,103 + Actor540: t02 + Owner: Neutral + Location: 58,102 + Actor542: tc05 + Owner: Neutral + Location: 80,27 + Actor543: t15 + Owner: Neutral + Location: 79,28 + Actor544: tc04 + Owner: Neutral + Location: 48,98 + Actor545: t11 + Owner: Neutral + Location: 50,99 + Actor546: t08 + Owner: Neutral + Location: 49,100 + Actor547: tc02 + Owner: Neutral + Location: 54,102 + Actor548: tc01 + Owner: Neutral + Location: 74,25 + Actor549: tc03 + Owner: Neutral + Location: 92,92 + Actor550: tc03 + Owner: Neutral + Location: 35,34 + Actor551: tc03 + Owner: Neutral + Location: 1,126 + Actor552: tc03 + Owner: Neutral + Location: 127,2 + Actor553: tc04 + Owner: Neutral + Location: 97,9 + Actor554: tc05 + Owner: Neutral + Location: 94,9 + Actor555: tc05 + Owner: Neutral + Location: 31,117 + Actor556: tc04 + Owner: Neutral + Location: 34,117 + Actor557: t08 + Owner: Neutral + Location: 64,85 + Actor558: t08 + Owner: Neutral + Location: 64,43 + Actor559: tc02 + Owner: Neutral + Location: 66,101 + Actor560: railmine + Owner: Neutral + Location: 68,102 + Actor561: t10 + Owner: Neutral + Location: 102,82 + Actor562: t08 + Owner: Neutral + Location: 103,83 + Actor563: t16 + Owner: Neutral + Location: 104,82 + Actor565: tc03 + Owner: Neutral + Location: 52,50 + Actor566: tc04 + Owner: Neutral + Location: 6,53 + Actor567: v13 + Owner: Neutral + Location: 7,53 + Actor568: v12 + Owner: Neutral + Location: 122,75 + Actor569: t11 + Owner: Neutral + Location: 122,52 + Actor570: t11 + Owner: Neutral + Location: 6,74 + Actor571: v12 + Owner: Neutral + Location: 47,83 + Actor572: v13 + Owner: Neutral + Location: 48,84 + Actor573: v13 + Owner: Neutral + Location: 81,45 + Actor574: v12 + Owner: Neutral + Location: 80,44 + Actor575: t08 + Owner: Neutral + Location: 81,44 + Actor576: t08 + Owner: Neutral + Location: 47,84 + Actor577: t15 + Owner: Neutral + Location: 55,72 + Actor578: t08 + Owner: Neutral + Location: 54,72 + Actor579: t08 + Owner: Neutral + Location: 74,56 + Actor580: t10 + Owner: Neutral + Location: 71,54 + Actor581: t07 + Owner: Neutral + Location: 77,63 + Actor582: tc02 + Owner: Neutral + Location: 81,103 + Actor583: t11 + Owner: Neutral + Location: 82,104 + Actor584: tc01 + Owner: Neutral + Location: 46,24 + Actor585: t11 + Owner: Neutral + Location: 45,23 + Actor586: tc02 + Owner: Neutral + Location: 26,44 + Actor587: t11 + Owner: Neutral + Location: 25,45 + Actor588: t14 + Owner: Neutral + Location: 21,113 + Actor589: t01 + Owner: Neutral + Location: 106,14 + Actor590: t12 + Owner: Neutral + Location: 63,110 + Actor591: t12 + Owner: Neutral + Location: 66,18 + Actor592: v05 + Owner: Neutral + Location: 83,61 + Actor593: v08 + Owner: Neutral + Location: 43,65 + Actor594: v12 + Owner: Neutral + Location: 58,104 + Actor595: snowhut + Owner: Neutral + Location: 61,101 + Actor596: v13 + Owner: Neutral + Location: 70,26 + Actor597: t06 + Owner: Neutral + Location: 71,25 + Actor598: v11 + Owner: Neutral + Location: 71,25 + Actor599: v04 + Owner: Neutral + Location: 29,55 + Actor600: v07 + Owner: Neutral + Location: 99,72 + Actor601: tc01 + Owner: Neutral + Location: 51,93 + Actor602: tc02 + Owner: Neutral + Location: 76,33 + Actor603: t01 + Owner: Neutral + Location: 65,82 + Actor604: t01 + Owner: Neutral + Location: 63,44 + Actor605: t08 + Owner: Neutral + Location: 68,103 + Actor606: t08 + Owner: Neutral + Location: 61,26 + Actor607: t03 + Owner: Neutral + Location: 60,26 + Actor608: v06 + Owner: Neutral + Location: 105,28 + Actor609: wood + Owner: Neutral + Location: 106,27 + Actor610: wood + Owner: Neutral + Location: 105,27 + Actor611: wood + Owner: Neutral + Location: 104,27 + Actor612: wood + Owner: Neutral + Location: 104,28 + Actor613: wood + Owner: Neutral + Location: 104,29 + Actor614: wood + Owner: Neutral + Location: 103,29 + Actor615: wood + Owner: Neutral + Location: 103,30 + Actor616: v03 + Owner: Neutral + Location: 104,29 + Actor619: wood + Owner: Neutral + Location: 107,27 + Actor621: wood + Owner: Neutral + Location: 108,28 + Actor622: wood + Owner: Neutral + Location: 108,29 + Actor617: wood + Owner: Neutral + Location: 103,31 + Actor618: v17 + Owner: Neutral + Location: 106,29 + Actor623: v17 + Owner: Neutral + Location: 107,29 + Actor624: v13 + Owner: Neutral + Location: 104,31 + Actor625: wood + Owner: Neutral + Location: 103,32 + Actor626: wood + Owner: Neutral + Location: 104,32 + Actor620: v11 + Owner: Neutral + Location: 107,28 + Actor627: wood + Owner: Neutral + Location: 108,27 + Actor628: v02 + Owner: Neutral + Location: 97,33 + Actor629: v05 + Owner: Neutral + Location: 30,94 + Actor630: wood + Owner: Neutral + Location: 20,101 + Actor631: wood + Owner: Neutral + Location: 20,100 + Actor632: wood + Owner: Neutral + Location: 20,99 + Actor633: wood + Owner: Neutral + Location: 21,101 + Actor634: wood + Owner: Neutral + Location: 22,101 + Actor635: wood + Owner: Neutral + Location: 23,101 + Actor636: wood + Owner: Neutral + Location: 24,101 + Actor637: wood + Owner: Neutral + Location: 24,100 + Actor639: wood + Owner: Neutral + Location: 24,99 + Actor644: v08 + Owner: Neutral + Location: 21,100 + Actor645: v06 + Owner: Neutral + Location: 22,100 + Actor643: v17 + Owner: Neutral + Location: 21,99 + Actor646: v17 + Owner: Neutral + Location: 22,99 + Actor638: wood + Owner: Neutral + Location: 25,99 + Actor640: wood + Owner: Neutral + Location: 25,98 + Actor641: wood + Owner: Neutral + Location: 25,97 + Actor647: v12 + Owner: Neutral + Location: 24,97 + Actor648: wood + Owner: Neutral + Location: 25,96 + Actor649: wood + Owner: Neutral + Location: 24,96 + Actor642: v02 + Owner: Neutral + Location: 23,98 + Actor650: tc03 + Owner: Neutral + Location: 26,95 + Actor651: tc03 + Owner: Neutral + Location: 101,32 + Actor652: t01 + Owner: Neutral + Location: 101,30 + Actor653: t08 + Owner: Neutral + Location: 102,31 + Actor654: t08 + Owner: Neutral + Location: 27,97 + Actor655: t14 + Owner: Neutral + Location: 25,96 + Actor656: t08 + Owner: Neutral + Location: 29,93 + Actor657: t08 + Owner: Neutral + Location: 98,35 + Actor658: tc05 + Owner: Neutral + Location: 100,48 + Actor659: tc03 + Owner: Neutral + Location: 98,48 + Actor661: t15 + Owner: Neutral + Location: 102,49 + Actor662: tc04 + Owner: Neutral + Location: 101,46 + Actor663: t07 + Owner: Neutral + Location: 100,45 + Actor660: t08 + Owner: Neutral + Location: 97,50 + Actor664: t07 + Owner: Neutral + Location: 98,49 + Actor665: t11 + Owner: Neutral + Location: 102,45 + Actor666: t12 + Owner: Neutral + Location: 101,45 + Actor667: t11 + Owner: Neutral + Location: 99,51 + Actor668: t11 + Owner: Neutral + Location: 31,77 + Actor669: t08 + Owner: Neutral + Location: 32,78 + Actor670: tc05 + Owner: Neutral + Location: 27,77 + Actor671: tc02 + Owner: Neutral + Location: 30,78 + Actor672: tc04 + Owner: Neutral + Location: 27,79 + Actor674: t12 + Owner: Neutral + Location: 29,80 + Actor676: t14 + Owner: Neutral + Location: 27,80 + Actor675: tc02 + Owner: Neutral + Location: 32,80 + Actor677: t15 + Owner: Neutral + Location: 97,46 + Actor678: t08 + Owner: Neutral + Location: 26,76 + Actor679: t08 + Owner: Neutral + Location: 104,52 + Actor680: tc01 + Owner: Neutral + Location: 72,108 + Actor681: tc02 + Owner: Neutral + Location: 55,19 + Actor682: tc03 + Owner: Neutral + Location: 44,108 + Actor683: t10 + Owner: Neutral + Location: 45,108 + Actor684: snowhut + Owner: Neutral + Location: 88,73 + Actor685: t10 + Owner: Neutral + Location: 89,73 + Actor686: v09 + Owner: Neutral + Location: 40,54 + Actor687: t14 + Owner: Neutral + Location: 38,53 + Actor688: v04 + Owner: Neutral + Location: 77,96 + Actor689: t01 + Owner: Neutral + Location: 79,95 + Actor691: t07 + Owner: Neutral + Location: 49,31 + Actor690: v05 + Owner: Neutral + Location: 50,31 + Actor692: v19 + Owner: Neutral + Location: 57,33 + Actor693: v19 + Owner: Neutral + Location: 57,35 + Actor694: fenc + Owner: Neutral + Location: 56,32 + Actor695: fenc + Owner: Neutral + Location: 57,32 + Actor696: fenc + Owner: Neutral + Location: 58,32 + Actor697: fenc + Owner: Neutral + Location: 58,33 + Actor698: fenc + Owner: Neutral + Location: 58,34 + Actor699: fenc + Owner: Neutral + Location: 58,35 + Actor700: fenc + Owner: Neutral + Location: 58,36 + Actor701: fenc + Owner: Neutral + Location: 57,36 + Actor702: fenc + Owner: Neutral + Location: 56,36 + Actor705: fenc + Owner: Neutral + Location: 56,37 + Actor706: fenc + Owner: Neutral + Location: 56,31 + Actor703: brl3 + Owner: Neutral + Location: 57,34 + Actor704: barl + Owner: Neutral + Location: 56,35 + Actor707: barl + Owner: Neutral + Location: 56,33 + Actor708: fenc + Owner: Neutral + Location: 70,93 + Actor719: fenc + Owner: Neutral + Location: 70,97 + Actor715: fenc + Owner: Neutral + Location: 72,98 + Actor716: fenc + Owner: Neutral + Location: 70,96 + Actor718: fenc + Owner: Neutral + Location: 70,95 + Actor722: fenc + Owner: Neutral + Location: 70,94 + Actor709: fenc + Owner: Neutral + Location: 72,97 + Actor710: fenc + Owner: Neutral + Location: 71,97 + Actor711: fenc + Owner: Neutral + Location: 71,93 + Actor712: fenc + Owner: Neutral + Location: 72,93 + Actor713: fenc + Owner: Neutral + Location: 72,92 + Actor714: v19 + Owner: Neutral + Location: 71,96 + Actor717: v19 + Owner: Neutral + Location: 71,94 + Actor720: brl3 + Owner: Neutral + Location: 71,95 + Actor721: barl + Owner: Neutral + Location: 72,94 + Actor723: barl + Owner: Neutral + Location: 72,96 + Actor724: tc04 + Owner: Neutral + Location: 69,90 + Actor725: tc05 + Owner: Neutral + Location: 57,36 + Actor726: t08 + Owner: Neutral + Location: 57,38 + Actor727: t15 + Owner: Neutral + Location: 70,91 + Actor728: t11 + Owner: Neutral + Location: 38,105 + Actor729: t14 + Owner: Neutral + Location: 88,20 + Actor730: tc04 + Owner: Neutral + Location: 11,100 + Actor731: tc05 + Owner: Neutral + Location: 116,26 + Actor732: t08 + Owner: Neutral + Location: 116,28 + Actor733: t17 + Owner: Neutral + Location: 13,101 + Actor734: t11 + Owner: Neutral + Location: 19,108 + Actor735: t11 + Owner: Neutral + Location: 109,19 + Actor736: t01.husk + Owner: Neutral + Location: 90,57 + Actor737: t17.husk + Owner: Neutral + Location: 38,70 + Actor738: tc03 + Owner: Neutral + Location: 75,77 + Actor739: tc02 + Owner: Neutral + Location: 79,72 + Actor740: t08 + Owner: Neutral + Location: 75,80 + Actor741: t08 + Owner: Neutral + Location: 52,48 + Actor742: v11 + Owner: Neutral + Location: 41,99 + Actor743: snowhut + Owner: Neutral + Location: 89,29 + Actor744: v06 + Owner: Neutral + Location: 53,48 + Actor745: wood + Owner: Neutral + Location: 52,49 + Actor746: wood + Owner: Neutral + Location: 53,49 + Actor747: wood + Owner: Neutral + Location: 54,49 + Actor748: wood + Owner: Neutral + Location: 55,49 + Actor749: v06 + Owner: Neutral + Location: 73,80 + Actor750: wood + Owner: Neutral + Location: 76,79 + Actor751: wood + Owner: Neutral + Location: 75,79 + Actor752: wood + Owner: Neutral + Location: 74,79 + Actor753: wood + Owner: Neutral + Location: 73,79 + Actor754: wood + Owner: Neutral + Location: 72,79 + Actor755: t08 + Owner: Neutral + Location: 87,63 + Actor756: t03 + Owner: Neutral + Location: 41,63 + Actor757: t08 + Owner: Neutral + Location: 47,30 + Actor758: t08 + Owner: Neutral + Location: 81,98 + Actor759: railmine + Owner: Neutral + Location: 78,106 + Actor760: t08 + Owner: Neutral + Location: 79,107 + Actor761: t08 + Owner: Neutral + Location: 49,22 + Actor762: v08 + Owner: Neutral + Location: 49,23 + Actor763: t15 + Owner: Neutral + Location: 24,9 + Actor764: t15 + Owner: Neutral + Location: 11,22 + Actor765: t01 + Owner: Neutral + Location: 18,17 + Actor766: tc05 + Owner: Neutral + Location: 45,11 + Actor767: v13 + Owner: Neutral + Location: 13,44 + Actor768: v12 + Owner: Neutral + Location: 12,44 + Actor769: t14 + Owner: Neutral + Location: 11,42 + Actor770: v02 + Owner: Neutral + Location: 10,43 + Actor771: v11 + Owner: Neutral + Location: 13,23 + Actor772: v11 + Owner: Neutral + Location: 13,23 + Actor774: v12 + Owner: Neutral + Location: 117,84 + Actor775: v13 + Owner: Neutral + Location: 116,84 + Actor773: v02 + Owner: Neutral + Location: 118,84 + Actor776: t08 + Owner: Neutral + Location: 117,85 + Actor777: t08 + Owner: Neutral + Location: 104,118 + Actor778: t07 + Owner: Neutral + Location: 110,109 + Actor779: t14 + Owner: Neutral + Location: 115,104 + Actor780: v10 + Owner: Neutral + Location: 115,105 + Actor781: tc04 + Owner: Neutral + Location: 82,116 + Actor782: t13 + Owner: Neutral + Location: 20,95 + Actor783: v03 + Owner: Neutral + Location: 16,79 + Actor784: t11 + Owner: Neutral + Location: 19,80 + Actor785: t11 + Owner: Neutral + Location: 111,46 + Actor786: v02 + Owner: Neutral + Location: 113,47 + Actor787: t14 + Owner: Neutral + Location: 110,31 + Actor788: tc02 + Owner: Neutral + Location: 102,21 + Actor789: tc01 + Owner: Neutral + Location: 25,105 + Actor791: ice01 + Owner: Neutral + Location: 16,52 + Actor792: ice04 + Owner: Neutral + Location: 18,53 + Actor790: ice01 + Owner: Neutral + Location: 113,75 + Actor794: ice04 + Owner: Neutral + Location: 114,77 + Actor795: ice04 + Owner: Neutral + Location: 16,51 + Actor796: ice05 + Owner: Neutral + Location: 18,51 + Actor797: ice05 + Owner: Neutral + Location: 113,77 + Actor793: ice04 + Owner: Neutral + Location: 112,75 + Actor798: ice02 + Owner: Neutral + Location: 57,114 + Actor799: ice02 + Owner: Neutral + Location: 71,14 + Actor800: ice04 + Owner: Neutral + Location: 10,71 + Actor801: ice05 + Owner: Neutral + Location: 119,57 + Actor802: ice03 + Owner: Neutral + Location: 123,126 + Actor803: ice02 + Owner: Neutral + Location: 125,124 + Actor804: ice05 + Owner: Neutral + Location: 5,3 + Actor805: ice04 + Owner: Neutral + Location: 6,3 + Actor806: ice02 + Owner: Neutral + Location: 4,4 + Actor807: ice01 + Owner: Neutral + Location: 14,119 + Actor808: ice03 + Owner: Neutral + Location: 12,120 + Actor810: ice01 + Owner: Neutral + Location: 115,9 + Actor809: ice05 + Owner: Neutral + Location: 117,9 + Actor811: ice04 + Owner: Neutral + Location: 116,8 + Actor812: ice04 + Owner: Neutral + Location: 68,117 + Actor813: ice04 + Owner: Neutral + Location: 60,13 + Actor814: ice05 + Owner: Neutral + Location: 72,7 + Actor815: ice05 + Owner: Neutral + Location: 57,124 + Actor816: ice02 + Owner: Neutral + Location: 6,47 + Actor817: ice02 + Owner: Neutral + Location: 123,80 + Actor818: ice03 + Owner: Neutral + Location: 31,128 + Actor819: ice03 + Owner: Neutral + Location: 96,1 + Actor820: ice03 + Owner: Neutral + Location: 125,46 + Actor821: ice03 + Owner: Neutral + Location: 3,82 + Actor822: t17 + Owner: Neutral + Location: 101,10 + Actor823: t17 + Owner: Neutral + Location: 29,117 + Actor825: railmine + Owner: Neutral + Location: 36,89 + Actor824: c8 + Owner: Neutral + Location: 72,46 + SubCell: 3 + Facing: 92 + Actor826: c7 + Owner: Neutral + Location: 76,49 + SubCell: 3 + Facing: 92 + Actor827: c3 + Owner: Neutral + Location: 69,42 + SubCell: 3 + Facing: 92 + Actor828: c4 + Owner: Neutral + Location: 55,48 + SubCell: 3 + Facing: 92 + Actor829: c3 + Owner: Neutral + Location: 72,80 + SubCell: 3 + Facing: 92 + Actor830: c3 + Owner: Neutral + Location: 57,88 + SubCell: 3 + Facing: 92 + Actor831: c1 + Owner: Neutral + Location: 53,82 + SubCell: 3 + Facing: 92 + Actor832: c2 + Owner: Neutral + Location: 57,81 + SubCell: 3 + Facing: 92 + Actor833: c3 + Owner: Neutral + Location: 106,31 + SubCell: 3 + Facing: 92 + Actor835: c1 + Owner: Neutral + Location: 127,6 + SubCell: 3 + Facing: 92 + Actor836: c4 + Owner: Neutral + Location: 122,2 + SubCell: 3 + Facing: 92 + Actor837: c5 + Owner: Neutral + Location: 83,84 + SubCell: 3 + Facing: 92 + Actor838: c3 + Owner: Neutral + Location: 60,103 + SubCell: 1 + Facing: 92 + Actor840: c4 + Owner: Neutral + Location: 2,123 + SubCell: 3 + Facing: 92 + Actor841: c9 + Owner: Neutral + Location: 5,126 + SubCell: 1 + Facing: 92 + Actor842: c9 + Owner: Neutral + Location: 22,98 + SubCell: 3 + Facing: 92 + Actor843: c1 + Owner: Neutral + Location: 119,86 + SubCell: 3 + Facing: 92 + Actor844: c2 + Owner: Neutral + Location: 17,81 + SubCell: 3 + Facing: 92 + Actor845: c3 + Owner: Neutral + Location: 11,45 + SubCell: 3 + Facing: 92 + Actor846: c6 + Owner: Neutral + Location: 114,47 + SubCell: 1 + Facing: 92 + Actor847: c5 + Owner: Neutral + Location: 45,44 + SubCell: 3 + Facing: 92 + Actor848: c5 + Owner: Neutral + Location: 69,26 + SubCell: 3 + Facing: 92 + Actor849: c4 + Owner: Neutral + Location: 68,124 + SubCell: 3 + Facing: 92 + Actor850: c7 + Owner: Neutral + Location: 60,5 + SubCell: 3 + Facing: 92 + Actor851: railmine + Owner: Neutral + Location: 101,52 + Actor852: railmine + Owner: Neutral + Location: 57,31 + Actor854: v19 + Owner: Neutral + Location: 117,2 + Actor855: v19 + Owner: Neutral + Location: 115,2 + Actor856: brl3 + Owner: Neutral + Location: 116,2 + Actor857: v19 + Owner: Neutral + Location: 12,127 + Actor858: v19 + Owner: Neutral + Location: 14,127 + Actor859: brl3 + Owner: Neutral + Location: 13,127 + Actor834: c7 + Owner: Neutral + Location: 12,126 + SubCell: 3 + Facing: 92 + Actor839: tc03 + Owner: Neutral + Location: 48,61 + Actor853: t11 + Owner: Neutral + Location: 81,61 + Actor860: t11 + Owner: Neutral + Location: 30,75 + Actor867: mpspawn + Owner: Neutral + Location: 18,37 + Actor868: mpspawn + Owner: Neutral + Location: 20,20 + Actor869: mpspawn + Owner: Neutral + Location: 40,19 + Actor870: mpspawn + Owner: Neutral + Location: 89,110 + Actor871: mpspawn + Owner: Neutral + Location: 108,108 + Actor872: mpspawn + Owner: Neutral + Location: 110,91 + +Rules: rules.yaml diff --git a/mods/ura/maps/six-below-zero/rules.yaml b/mods/ura/maps/six-below-zero/rules.yaml new file mode 100644 index 0000000..276b32f --- /dev/null +++ b/mods/ura/maps/six-below-zero/rules.yaml @@ -0,0 +1,15 @@ +World: + WeatherOverlay: + ChangingWindLevel: true + WindLevels: -5, -3, -2, 0, 2, 3, 5, 6 + WindTick: 150, 550 + InstantWindChanges: false + UseSquares: true + ParticleSize: 2, 3 + ScatterDirection: -1, 1 + Gravity: 1.00, 2.00 + SwingOffset: 1.0, 1.5 + SwingSpeed: 0.001, 0.025 + SwingAmplitude: 1.0, 1.5 + ParticleColors: ECECEC, E4E4E4, D0D0D0, BCBCBC + LineTailAlphaValue: 0 diff --git a/mods/ura/maps/snow town/map.bin b/mods/ura/maps/snow town/map.bin new file mode 100644 index 0000000..28bd317 Binary files /dev/null and b/mods/ura/maps/snow town/map.bin differ diff --git a/mods/ura/maps/snow town/map.png b/mods/ura/maps/snow town/map.png new file mode 100644 index 0000000..fa62706 Binary files /dev/null and b/mods/ura/maps/snow town/map.png differ diff --git a/mods/ura/maps/snow town/map.yaml b/mods/ura/maps/snow town/map.yaml new file mode 100644 index 0000000..a211e23 --- /dev/null +++ b/mods/ura/maps/snow town/map.yaml @@ -0,0 +1,738 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Snow Town + +Author: MicroBit + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 16,16,96,96 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Multi0: + Name: Multi0 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: allies + Enemies: Multi0, Multi1, Multi2, Multi3, Multi4, Multi5 + PlayerReference@Multi1: + Name: Multi1 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi2: + Name: Multi2 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi3: + Name: Multi3 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi4: + Name: Multi4 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi5: + Name: Multi5 + Playable: True + Faction: Random + Enemies: Creeps + +Actors: + Actor12: v10 + Location: 63,62 + Owner: Neutral + Actor20: v04 + Location: 61,66 + Owner: Neutral + Actor21: v12 + Location: 67,62 + Owner: Neutral + Actor22: v13 + Location: 65,60 + Owner: Neutral + Actor23: v05 + Location: 67,59 + Owner: Neutral + Actor24: t07 + Location: 65,57 + Owner: Neutral + Actor25: t05 + Location: 65,66 + Owner: Neutral + Actor13: v11 + Location: 65,65 + Owner: Neutral + Actor47: ice01 + Location: 22,107 + Owner: Neutral + Actor32: v06 + Location: 59,61 + Owner: Neutral + Actor50: tanktrap2 + Location: 46,75 + Owner: Neutral + Actor31: v03 + Location: 58,63 + Owner: Neutral + Actor30: v01 + Location: 65,62 + Owner: Neutral + Actor26: t02 + Location: 61,60 + Owner: Neutral + Actor0: v08 + Location: 63,63 + Owner: Neutral + Actor8: tc04 + Location: 69,54 + Owner: Neutral + Actor138: mine + Location: 45,24 + Owner: Neutral + Actor7: tc04 + Location: 54,58 + Owner: Neutral + Actor241: mine + Owner: Neutral + Location: 45,48 + Actor242: mine + Owner: Neutral + Location: 106,103 + Actor3: mine + Location: 82,79 + Owner: Neutral + Actor14: v17 + Location: 66,65 + Owner: Neutral + Actor18: v18 + Location: 67,66 + Owner: Neutral + Actor17: v18 + Location: 67,65 + Owner: Neutral + Actor19: brl3 + Location: 63,65 + Owner: Neutral + Actor16: v11 + Location: 59,69 + Owner: Neutral + Actor45: ice05 + Location: 106,26 + Owner: Neutral + Actor15: v17 + Location: 66,66 + Owner: Neutral + Actor11: t07 + Location: 72,70 + Owner: Neutral + Actor10: t07 + Location: 59,74 + Owner: Neutral + Actor9: t05 + Location: 55,75 + Owner: Neutral + Actor210: mpspawn + Owner: Neutral + Location: 21,68 + Actor29: t06 + Location: 58,61 + Owner: Neutral + Actor28: tc05 + Location: 59,58 + Owner: Neutral + Actor27: t02 + Location: 62,59 + Owner: Neutral + Actor44: ice02 + Location: 99,22 + Owner: Neutral + Actor49: ice03 + Location: 19,107 + Owner: Neutral + Actor46: ice03 + Location: 102,27 + Owner: Neutral + Actor48: ice04 + Location: 18,99 + Owner: Neutral + Actor39: ice04 + Location: 98,24 + Owner: Neutral + Actor38: t10 + Location: 101,21 + Owner: Neutral + Actor35: oilb + Location: 103,22 + Owner: Neutral + Actor36: t03 + Location: 104,20 + Owner: Neutral + Actor37: t06 + Location: 105,21 + Owner: Neutral + Actor34: t07 + Location: 21,101 + Owner: Neutral + Actor33: oilb + Location: 19,102 + Owner: Neutral + Actor51: tanktrap2 + Location: 43,77 + Owner: Neutral + Actor52: tanktrap2 + Location: 51,74 + Owner: Neutral + Actor53: tanktrap2 + Location: 53,70 + Owner: Neutral + Actor54: utilpol1 + Location: 57,64 + Owner: Neutral + Actor55: utilpol2 + Location: 63,57 + Owner: Neutral + Actor56: utilpol2 + Location: 66,68 + Owner: Neutral + Actor57: utilpol2 + Location: 62,68 + Owner: Neutral + Actor58: utilpol1 + Location: 69,71 + Owner: Neutral + Actor59: tc03 + Location: 67,71 + Owner: Neutral + Actor60: tc03 + Location: 71,56 + Owner: Neutral + Actor61: fenc + Location: 41,77 + Owner: Neutral + Actor62: fenc + Location: 42,77 + Owner: Neutral + Actor63: fenc + Location: 48,75 + Owner: Neutral + Actor64: fenc + Location: 45,75 + Owner: Neutral + Actor65: fenc + Location: 52,69 + Owner: Neutral + Actor66: fenc + Location: 52,70 + Owner: Neutral + Actor67: fenc + Location: 55,73 + Owner: Neutral + Actor68: fenc + Location: 54,74 + Owner: Neutral + Actor69: fenc + Location: 55,74 + Owner: Neutral + Actor70: tc05 + Location: 67,51 + Owner: Neutral + Actor71: tc04 + Location: 68,48 + Owner: Neutral + Actor72: tc01 + Location: 74,46 + Owner: Neutral + Actor73: tc02 + Location: 75,52 + Owner: Neutral + Actor74: tc02 + Location: 71,51 + Owner: Neutral + Actor75: tc03 + Location: 73,45 + Owner: Neutral + Actor76: tc04 + Location: 78,49 + Owner: Neutral + Actor77: tc04 + Location: 77,47 + Owner: Neutral + Actor78: t11 + Location: 74,42 + Owner: Neutral + Actor79: v11 + Location: 82,51 + Owner: Neutral + Actor80: utilpol1 + Location: 81,51 + Owner: Neutral + Actor81: v04 + Location: 75,47 + Owner: Neutral + Actor82: t06 + Location: 80,54 + Owner: Neutral + Actor83: t06 + Location: 76,57 + Owner: Neutral + Actor84: tc02 + Location: 78,55 + Owner: Neutral + Actor85: t03 + Location: 74,53 + Owner: Neutral + Actor86: t03 + Location: 72,59 + Owner: Neutral + Actor87: t10 + Location: 61,55 + Owner: Neutral + Actor88: t13 + Location: 67,55 + Owner: Neutral + Actor89: t14 + Location: 64,55 + Owner: Neutral + Actor90: v17 + Location: 61,70 + Owner: Neutral + Actor91: v18 + Location: 60,71 + Owner: Neutral + Actor92: v17 + Location: 59,71 + Owner: Neutral + Actor93: v14 + Location: 61,71 + Owner: Neutral + Actor94: v09 + Location: 63,69 + Owner: Neutral + Actor95: v08 + Location: 65,69 + Owner: Neutral + Actor96: v07 + Location: 62,71 + Owner: Neutral + Actor97: mine + Location: 65,84 + Owner: Neutral + Actor99: tc02 + Location: 56,75 + Owner: Neutral + Actor101: mine + Location: 45,64 + Owner: Neutral + Actor103: barl + Location: 66,70 + Owner: Neutral + Actor104: barl + Location: 102,25 + Owner: Neutral + Actor105: tc03 + Location: 41,33 + Owner: Neutral + Actor106: tc05 + Location: 38,32 + Owner: Neutral + Actor107: tc04 + Location: 36,29 + Owner: Neutral + Actor108: tc03 + Location: 37,16 + Owner: Neutral + Actor109: tc02 + Location: 37,18 + Owner: Neutral + Actor110: tc02 + Location: 34,20 + Owner: Neutral + Actor111: tc04 + Location: 35,25 + Owner: Neutral + Actor112: tc04 + Location: 18,38 + Owner: Neutral + Actor113: tc05 + Location: 24,39 + Owner: Neutral + Actor212: t08 + Owner: Neutral + Location: 32,45 + Actor115: tc01 + Location: 28,41 + Owner: Neutral + Actor116: tc01 + Location: 30,57 + Owner: Neutral + Actor117: tc02 + Location: 33,61 + Owner: Neutral + Actor118: tc01 + Location: 37,72 + Owner: Neutral + Actor119: tc02 + Location: 35,71 + Owner: Neutral + Actor120: t07 + Location: 34,64 + Owner: Neutral + Actor121: t05 + Location: 33,67 + Owner: Neutral + Actor122: tc01 + Location: 31,78 + Owner: Neutral + Actor123: t07 + Location: 34,75 + Owner: Neutral + Actor231: t01 + Owner: Neutral + Location: 58,93 + Actor125: tc05 + Location: 53,33 + Owner: Neutral + Actor126: tc02 + Location: 56,35 + Owner: Neutral + Actor127: tc02 + Location: 60,37 + Owner: Neutral + Actor128: tc03 + Location: 58,36 + Owner: Neutral + Actor129: t16 + Location: 66,40 + Owner: Neutral + Actor130: t05 + Location: 48,42 + Owner: Neutral + Actor131: tc03 + Location: 42,56 + Owner: Neutral + Actor132: tc02 + Location: 40,55 + Owner: Neutral + Actor133: mine + Location: 83,103 + Owner: Neutral + Actor134: mine + Location: 106,79 + Owner: Neutral + Actor135: mine + Location: 43,103 + Owner: Neutral + Actor136: mine + Location: 106,39 + Owner: Neutral + Actor137: mine + Location: 85,24 + Owner: Neutral + Actor6: mine + Location: 21,24 + Owner: Neutral + Actor139: mine + Location: 21,88 + Owner: Neutral + Actor140: mine + Location: 21,48 + Owner: Neutral + Actor211: mine + Owner: Neutral + Location: 26,88 + Actor207: mine + Owner: Neutral + Location: 40,108 + Actor143: mine + Location: 110,42 + Owner: Neutral + Actor202: mine + Owner: Neutral + Location: 85,19 + Actor145: tc02 + Location: 46,92 + Owner: Neutral + Actor146: tc02 + Location: 48,93 + Owner: Neutral + Actor147: tc05 + Location: 57,94 + Owner: Neutral + Actor148: tc01 + Location: 53,94 + Owner: Neutral + Actor149: tc02 + Location: 61,94 + Owner: Neutral + Actor150: tc03 + Location: 63,94 + Owner: Neutral + Actor151: tc01 + Location: 65,92 + Owner: Neutral + Actor152: t16 + Location: 43,87 + Owner: Neutral + Actor153: t02 + Location: 42,88 + Owner: Neutral + Actor154: t01 + Location: 46,82 + Owner: Neutral + Actor155: tc03 + Location: 90,110 + Owner: Neutral + Actor199: tc01 + Owner: Neutral + Location: 88,94 + Actor200: tc03 + Owner: Neutral + Location: 88,95 + Actor158: tc05 + Location: 90,101 + Owner: Neutral + Actor159: t05 + Location: 91,104 + Owner: Neutral + Actor160: t07 + Location: 90,108 + Owner: Neutral + Actor161: tc04 + Location: 90,105 + Owner: Neutral + Actor162: t08 + Location: 89,99 + Owner: Neutral + Actor163: t08 + Location: 93,82 + Owner: Neutral + Actor164: t17 + Location: 92,83 + Owner: Neutral + Actor165: tc02 + Location: 93,84 + Owner: Neutral + Actor166: tc02 + Location: 109,85 + Owner: Neutral + Actor167: tc04 + Location: 106,86 + Owner: Neutral + Actor236: tc02 + Owner: Neutral + Location: 95,85 + Actor169: tc02 + Location: 100,85 + Owner: Neutral + Actor170: t06 + Location: 98,86 + Owner: Neutral + Actor171: t16 + Location: 104,87 + Owner: Neutral + Actor172: tc03 + Location: 94,64 + Owner: Neutral + Actor173: tc01 + Location: 84,64 + Owner: Neutral + Actor174: t05 + Location: 92,64 + Owner: Neutral + Actor175: t06 + Location: 87,66 + Owner: Neutral + Actor176: t11 + Location: 81,61 + Owner: Neutral + Actor177: tc04 + Location: 85,65 + Owner: Neutral + Actor178: tc04 + Location: 88,65 + Owner: Neutral + Actor179: tc01 + Location: 84,53 + Owner: Neutral + Actor180: tc03 + Location: 86,53 + Owner: Neutral + Actor181: t01 + Location: 92,56 + Owner: Neutral + Actor182: t14 + Location: 88,54 + Owner: Neutral + Actor183: t17 + Location: 90,55 + Owner: Neutral + Actor184: t02 + Location: 99,45 + Owner: Neutral + Actor185: t07 + Location: 110,63 + Owner: Neutral + Actor186: t07 + Location: 92,77 + Owner: Neutral + Actor188: t07 + Location: 55,109 + Owner: Neutral + Actor189: t07 + Location: 51,94 + Owner: Neutral + Actor190: t07 + Location: 95,108 + Owner: Neutral + Actor191: t07 + Location: 105,88 + Owner: Neutral + Actor192: t07 + Location: 18,56 + Owner: Neutral + Actor193: t07 + Location: 17,76 + Owner: Neutral + Actor194: t13 + Location: 32,52 + Owner: Neutral + Actor195: t07 + Location: 54,23 + Owner: Neutral + Actor196: t07 + Location: 75,19 + Owner: Neutral + Actor197: t05 + Location: 74,20 + Owner: Neutral + Actor198: tc02 + Owner: Neutral + Location: 25,17 + Actor98: snowhut + Location: 58,65 + Owner: Neutral + Actor100: snowhut + Location: 75,43 + Owner: Neutral + Actor201: t05 + Owner: Neutral + Location: 86,97 + Actor203: tc01 + Owner: Neutral + Location: 89,49 + Actor204: mpspawn + Owner: Neutral + Location: 33,36 + Actor205: mpspawn + Owner: Neutral + Location: 65,24 + Actor206: mpspawn + Owner: Neutral + Location: 63,103 + Actor213: tc01 + Owner: Neutral + Location: 26,16 + Actor214: tc01 + Owner: Neutral + Location: 36,24 + Actor215: tc01 + Owner: Neutral + Location: 35,30 + Actor216: t02 + Owner: Neutral + Location: 37,27 + Actor217: t02 + Owner: Neutral + Location: 29,15 + Actor218: t05 + Owner: Neutral + Location: 38,21 + Actor219: t06 + Owner: Neutral + Location: 38,17 + Actor220: t06 + Owner: Neutral + Location: 36,16 + Actor221: t06 + Owner: Neutral + Location: 33,28 + Actor222: t06 + Owner: Neutral + Location: 33,20 + Actor223: t06 + Owner: Neutral + Location: 38,23 + Actor224: t06 + Owner: Neutral + Location: 30,42 + Actor225: tc01 + Owner: Neutral + Location: 20,39 + Actor226: t05 + Owner: Neutral + Location: 17,40 + Actor227: tc01 + Owner: Neutral + Location: 15,38 + Actor228: t06 + Owner: Neutral + Location: 55,35 + Actor229: t07 + Owner: Neutral + Location: 53,34 + Actor230: tc04 + Owner: Neutral + Location: 50,34 + Actor232: t06 + Owner: Neutral + Location: 65,93 + Actor233: t06 + Owner: Neutral + Location: 47,93 + Actor234: tc01 + Owner: Neutral + Location: 111,85 + Actor235: t01 + Owner: Neutral + Location: 95,84 + Actor237: tc04 + Owner: Neutral + Location: 29,110 + Actor238: tc01 + Owner: Neutral + Location: 32,108 + Actor239: t01 + Owner: Neutral + Location: 32,109 + Actor240: t01 + Owner: Neutral + Location: 35,105 + Actor245: mpspawn + Owner: Neutral + Location: 94,92 + Actor244: mpspawn + Owner: Neutral + Location: 104,59 + +Rules: rules.yaml diff --git a/mods/ura/maps/snow town/rules.yaml b/mods/ura/maps/snow town/rules.yaml new file mode 100644 index 0000000..80146bd --- /dev/null +++ b/mods/ura/maps/snow town/rules.yaml @@ -0,0 +1,20 @@ +World: + WeatherOverlay: + ChangingWindLevel: true + WindLevels: -5, -3, -2, 0, 2, 3, 5 + WindTick: 150, 550 + InstantWindChanges: false + UseSquares: true + ParticleSize: 1, 3 + ScatterDirection: -1, 1 + Gravity: 1.00, 2.00 + SwingOffset: 1.0, 1.5 + SwingSpeed: 0.001, 0.025 + SwingAmplitude: 1.0, 1.5 + ParticleColors: ECECEC, E4E4E4, D0D0D0, BCBCBC + LineTailAlphaValue: 0 + GlobalLightingPaletteEffect: + Red: 0.9 + Green: 0.9 + Blue: 1.0 + Ambient: 1.2 diff --git a/mods/ura/maps/snow-off/map.bin b/mods/ura/maps/snow-off/map.bin new file mode 100644 index 0000000..8c263ed Binary files /dev/null and b/mods/ura/maps/snow-off/map.bin differ diff --git a/mods/ura/maps/snow-off/map.png b/mods/ura/maps/snow-off/map.png new file mode 100644 index 0000000..4904fe1 Binary files /dev/null and b/mods/ura/maps/snow-off/map.png differ diff --git a/mods/ura/maps/snow-off/map.yaml b/mods/ura/maps/snow-off/map.yaml new file mode 100644 index 0000000..e2c9326 --- /dev/null +++ b/mods/ura/maps/snow-off/map.yaml @@ -0,0 +1,888 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Snow Off + +Author: Aaron Lloyd + +Tileset: SNOW + +MapSize: 62,52 + +Bounds: 1,1,60,50 + +Visibility: Lobby + +Categories: Conquest + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + Enemies: Multi0, Multi1 + PlayerReference@Multi0: + Name: Multi0 + Playable: True + Faction: Random + Enemies: Creeps + PlayerReference@Multi1: + Name: Multi1 + Playable: True + Faction: Random + Enemies: Creeps + +Actors: + Actor4: oilb + Owner: Neutral + Location: 25,23 + Actor3: oilb + Owner: Neutral + Location: 33,25 + Actor6: tc03 + Owner: Neutral + Location: 35,21 + Actor7: boxes02 + Owner: Neutral + Location: 27,24 + Actor8: boxes06 + Owner: Neutral + Location: 34,27 + Actor9: t17 + Owner: Neutral + Location: 30,24 + Actor10: tc03 + Owner: Neutral + Location: 21,23 + Actor12: tc04 + Owner: Neutral + Location: 26,27 + Actor14: t17 + Owner: Neutral + Location: 34,21 + Actor17: t02 + Owner: Neutral + Location: 37,24 + Actor18: t05 + Owner: Neutral + Location: 19,27 + Actor19: t05 + Owner: Neutral + Location: 33,21 + Actor20: t08 + Owner: Neutral + Location: 22,29 + Actor21: v07 + Owner: Neutral + Location: 30,23 + Actor23: mine + Owner: Neutral + Location: 47,30 + Actor45: c5 + Owner: Neutral + Location: 29,25 + SubCell: 3 + Facing: 93 + Actor71: cycl + Owner: Neutral + Location: 48,17 + Actor72: cycl + Owner: Neutral + Location: 49,17 + Actor74: cycl + Owner: Neutral + Location: 50,17 + Actor75: cycl + Owner: Neutral + Location: 51,17 + Actor79: oilb + Owner: Neutral + Location: 49,15 + Actor76: cycl + Owner: Neutral + Location: 48,16 + Actor77: cycl + Owner: Neutral + Location: 48,15 + Actor78: cycl + Owner: Neutral + Location: 51,16 + Actor73: cycl + Owner: Neutral + Location: 10,34 + Actor83: cycl + Owner: Neutral + Location: 11,34 + Actor84: cycl + Owner: Neutral + Location: 12,34 + Actor86: cycl + Owner: Neutral + Location: 13,34 + Actor87: cycl + Owner: Neutral + Location: 10,35 + Actor89: oilb + Owner: Neutral + Location: 11,35 + Actor91: cycl + Owner: Neutral + Location: 13,35 + Actor92: cycl + Owner: Neutral + Location: 10,36 + Actor93: cycl + Owner: Neutral + Location: 13,36 + Actor95: cycl + Owner: Neutral + Location: 13,37 + Actor90: v13 + Owner: Neutral + Location: 7,27 + Actor96: v03 + Owner: Neutral + Location: 58,21 + Actor97: v05 + Owner: Neutral + Location: 54,21 + Actor98: v04 + Owner: Neutral + Location: 57,19 + Actor104: t03 + Owner: Neutral + Location: 3,27 + Actor106: tc03 + Owner: Neutral + Location: 8,35 + Actor107: tc04 + Owner: Neutral + Location: 52,15 + Actor109: t15 + Owner: Neutral + Location: 53,21 + Actor110: t13 + Owner: Neutral + Location: 58,19 + Actor111: t08 + Owner: Neutral + Location: 57,22 + Actor112: tc05 + Owner: Neutral + Location: 4,47 + Actor114: t16 + Owner: Neutral + Location: 1,42 + Actor115: t11 + Owner: Neutral + Location: 1,46 + Actor116: tc04 + Owner: Neutral + Location: 4,45 + Actor117: tc03 + Owner: Neutral + Location: 2,47 + Actor118: t15 + Owner: Neutral + Location: 1,49 + Actor119: tc02 + Owner: Neutral + Location: 3,49 + Actor120: tc03 + Owner: Neutral + Location: 0,40 + Actor121: tc03 + Owner: Neutral + Location: 7,49 + Actor122: tc03 + Owner: Neutral + Location: 58,49 + Actor123: tc02 + Owner: Neutral + Location: 55,49 + Actor124: tc01 + Owner: Neutral + Location: 59,45 + Actor125: t15 + Owner: Neutral + Location: 56,47 + Actor126: t17 + Owner: Neutral + Location: 58,47 + Actor127: tc02 + Owner: Neutral + Location: 59,43 + Actor128: tc05 + Owner: Neutral + Location: 56,45 + Actor129: tc05 + Owner: Neutral + Location: 52,49 + Actor130: tc03 + Owner: Neutral + Location: 55,47 + Actor131: tc03 + Owner: Neutral + Location: 1,1 + Actor132: tc05 + Owner: Neutral + Location: 0,3 + Actor133: tc01 + Owner: Neutral + Location: 5,1 + Actor134: tc01 + Owner: Neutral + Location: 1,6 + Actor135: t02 + Owner: Neutral + Location: 4,2 + Actor136: t01 + Owner: Neutral + Location: 1,8 + Actor137: t01 + Owner: Neutral + Location: 57,2 + Actor138: t01 + Owner: Neutral + Location: 58,3 + Actor139: tc01 + Owner: Neutral + Location: 59,7 + Actor140: tc02 + Owner: Neutral + Location: 57,5 + Actor141: tc05 + Owner: Neutral + Location: 53,1 + Actor142: tc03 + Owner: Neutral + Location: 55,4 + Actor143: tc01 + Owner: Neutral + Location: 57,3 + Actor144: t10 + Owner: Neutral + Location: 58,5 + Actor145: t11 + Owner: Neutral + Location: 58,1 + Actor146: t13 + Owner: Neutral + Location: 59,3 + Actor147: t17 + Owner: Neutral + Location: 56,8 + Actor148: t16 + Owner: Neutral + Location: 3,4 + Actor149: t11 + Owner: Neutral + Location: 2,2 + Actor150: t11 + Owner: Neutral + Location: 6,3 + Actor151: tc01 + Owner: Neutral + Location: 7,1 + Actor152: tc03 + Owner: Neutral + Location: 9,2 + Actor153: tc03 + Owner: Neutral + Location: 10,1 + Actor154: tc04 + Owner: Neutral + Location: 8,0 + Actor156: tc04 + Owner: Neutral + Location: 51,0 + Actor159: tc03 + Owner: Neutral + Location: 0,10 + Actor161: tc02 + Owner: Neutral + Location: 38,1 + Actor162: tc05 + Owner: Neutral + Location: 23,48 + Actor163: t17 + Owner: Neutral + Location: 1,35 + Actor164: t11 + Owner: Neutral + Location: 59,15 + Actor165: t17 + Owner: Neutral + Location: 59,36 + Actor166: t16 + Owner: Neutral + Location: 8,44 + Actor167: t14 + Owner: Neutral + Location: 49,3 + Actor155: tc01 + Owner: Neutral + Location: 4,4 + Actor160: t15 + Owner: Neutral + Location: 2,5 + Actor168: v03 + Owner: Neutral + Location: 2,29 + Actor169: v09 + Owner: Neutral + Location: 3,31 + Actor170: tc01 + Owner: Neutral + Location: 6,29 + Actor171: t16 + Owner: Neutral + Location: 6,26 + Actor172: t17 + Owner: Neutral + Location: 8,26 + Actor173: t08 + Owner: Neutral + Location: 2,31 + Actor174: tc03 + Owner: Neutral + Location: 3,31 + Actor175: t01 + Owner: Neutral + Location: 57,20 + Actor176: t01 + Owner: Neutral + Location: 60,22 + Actor177: t06 + Owner: Neutral + Location: 2,26 + Actor180: t15 + Owner: Neutral + Location: 4,10 + Actor181: t10 + Owner: Neutral + Location: 56,39 + Actor182: t08 + Owner: Neutral + Location: 43,23 + Actor190: c3 + Owner: Neutral + Location: 4,28 + SubCell: 3 + Facing: 92 + Actor191: c4 + Owner: Neutral + Location: 55,20 + SubCell: 3 + Facing: 92 + Actor192: c9 + Owner: Neutral + Location: 6,31 + SubCell: 3 + Facing: 92 + Actor193: c9 + Owner: Neutral + Location: 57,23 + SubCell: 3 + Facing: 92 + Actor196: t11 + Owner: Neutral + Location: 42,48 + Actor197: tc01 + Owner: Neutral + Location: 43,49 + Actor198: tc01 + Owner: Neutral + Location: 18,1 + Actor199: tc02 + Owner: Neutral + Location: 16,2 + Actor183: tc05 + Owner: Neutral + Location: 23,29 + Actor184: t16 + Owner: Neutral + Location: 19,32 + Actor188: tc04 + Owner: Neutral + Location: 27,32 + Actor194: t15 + Owner: Neutral + Location: 28,33 + Actor200: tc01 + Owner: Neutral + Location: 30,33 + Actor201: t05 + Owner: Neutral + Location: 37,34 + Actor202: mine + Owner: Neutral + Location: 19,37 + Actor203: v10 + Owner: Neutral + Location: 40,37 + Actor204: t16 + Owner: Neutral + Location: 37,37 + Actor205: c3 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 40,38 + Actor206: tc01 + Owner: Neutral + Location: 41,37 + Actor207: v01 + Owner: Neutral + Location: 42,38 + Actor208: mine + Owner: Neutral + Location: 18,39 + Actor209: v03 + Owner: Neutral + Location: 37,39 + Actor210: c9 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 39,40 + Actor211: c7 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 41,40 + Actor212: t17 + Owner: Neutral + Location: 42,39 + Actor213: c10 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 43,40 + Actor214: t16 + Owner: Neutral + Location: 39,40 + Actor215: v12 + Owner: Neutral + Location: 40,41 + Actor216: t11 + Owner: Neutral + Location: 41,41 + Actor217: v05 + Owner: Neutral + Location: 42,42 + Actor218: tc02 + Owner: Neutral + Location: 44,38 + Actor185: v02 + Owner: Neutral + Location: 21,9 + Actor186: v04 + Owner: Neutral + Location: 22,10 + Actor187: c4 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 21,11 + Actor195: mine + Owner: Neutral + Location: 43,12 + Actor219: c10 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 23,13 + Actor220: v12 + Owner: Neutral + Location: 24,13 + Actor221: v11 + Owner: Neutral + Location: 21,14 + Actor222: mine + Owner: Neutral + Location: 42,14 + Actor223: t06 + Owner: Neutral + Location: 22,14 + Actor224: t16 + Owner: Neutral + Location: 24,14 + Actor227: t16 + Owner: Neutral + Location: 30,16 + Actor228: tc03 + Owner: Neutral + Location: 31,17 + Actor229: tc02 + Owner: Neutral + Location: 32,17 + Actor230: t17 + Owner: Neutral + Location: 42,17 + Actor231: t17 + Owner: Neutral + Location: 29,18 + Actor232: t16 + Owner: Neutral + Location: 30,19 + Actor234: tc04 + Owner: Neutral + Location: 37,19 + Actor235: t11 + Owner: Neutral + Location: 16,8 + Actor236: v08 + Owner: Neutral + Location: 18,9 + Actor237: t05 + Owner: Neutral + Location: 20,9 + Actor238: t08 + Owner: Neutral + Location: 17,11 + Actor239: c2 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 18,11 + Actor241: v03 + Owner: Neutral + Location: 18,12 + Actor242: c10 + Owner: Neutral + SubCell: 3 + Facing: 92 + Location: 20,13 + Actor243: tc02 + Owner: Neutral + Location: 19,13 + Actor245: mine + Owner: Neutral + Location: 13,20 + Actor178: v02 + Owner: Neutral + Location: 6,28 + Actor179: tc01 + Owner: Neutral + Location: 21,18 + Actor226: t15 + Owner: Neutral + Location: 15,28 + Actor233: tc01 + Owner: Neutral + Location: 28,19 + Actor246: tc03 + Owner: Neutral + Location: 26,29 + Actor247: tc03 + Owner: Neutral + Location: 39,31 + Actor248: tc02 + Owner: Neutral + Location: 35,19 + Actor249: t16 + Owner: Neutral + Location: 34,20 + Actor250: t15 + Owner: Neutral + Location: 23,26 + Actor252: utilpol2 + Owner: Neutral + Location: 54,20 + Actor253: tc05 + Owner: Neutral + Location: 47,21 + Actor254: tc02 + Owner: Neutral + Location: 18,29 + Actor255: tc03 + Owner: Neutral + Location: 31,30 + Actor256: t15 + Owner: Neutral + Location: 32,30 + Actor257: tc04 + Owner: Neutral + Location: 34,29 + Actor258: tc03 + Owner: Neutral + Location: 19,18 + Actor259: tc02 + Owner: Neutral + Location: 13,30 + Actor260: tc03 + Owner: Neutral + Location: 47,20 + Actor261: t17 + Owner: Neutral + Location: 42,20 + Actor262: t15 + Owner: Neutral + Location: 41,31 + Actor263: t12 + Owner: Neutral + Location: 17,27 + Actor264: t08 + Owner: Neutral + Location: 14,28 + Actor265: t01 + Owner: Neutral + Location: 30,29 + Actor266: t12 + Owner: Neutral + Location: 32,20 + Actor267: t16 + Owner: Neutral + Location: 11,9 + Actor268: t08 + Owner: Neutral + Location: 48,9 + Actor269: tc01 + Owner: Neutral + Location: 44,20 + Actor270: t05 + Owner: Neutral + Location: 40,21 + Actor271: t16 + Owner: Neutral + Location: 46,19 + Actor272: t15 + Owner: Neutral + Location: 40,22 + Actor273: t05 + Owner: Neutral + Location: 50,38 + Actor274: t10 + Owner: Neutral + Location: 26,19 + Actor275: tc02 + Owner: Neutral + Location: 20,23 + Actor276: t07 + Owner: Neutral + Location: 29,26 + Actor277: t08 + Owner: Neutral + Location: 29,30 + Actor278: t12 + Owner: Neutral + Location: 28,29 + Actor279: tc03 + Owner: Neutral + Location: 29,20 + Actor280: tc01 + Owner: Neutral + Location: 38,21 + Actor281: tc03 + Owner: Neutral + Location: 40,21 + Actor282: t14 + Owner: Neutral + Location: 42,21 + Actor283: tc03 + Owner: Neutral + Location: 17,28 + Actor284: t13 + Owner: Neutral + Location: 16,29 + Actor285: t16 + Owner: Neutral + Location: 15,29 + Actor286: t02 + Owner: Neutral + Location: 20,28 + Actor287: t03 + Owner: Neutral + Location: 37,22 + Actor288: t08 + Owner: Neutral + Location: 31,21 + Actor289: tc05 + Owner: Neutral + Location: 34,22 + Actor290: tc05 + Owner: Neutral + Location: 38,23 + Actor291: t16 + Owner: Neutral + Location: 39,24 + Actor292: t08 + Owner: Neutral + Location: 38,25 + Actor294: tc03 + Owner: Neutral + Location: 18,27 + Actor296: t06 + Owner: Neutral + Location: 21,27 + Actor297: tc04 + Owner: Neutral + Location: 21,27 + Actor298: tc03 + Owner: Neutral + Location: 58,25 + Actor299: tc01 + Owner: Neutral + Location: 2,23 + Actor300: t11 + Owner: Neutral + Location: 29,28 + Actor301: t03 + Owner: Neutral + Location: 38,31 + Actor302: t03 + Owner: Neutral + Location: 44,22 + Actor303: t13 + Owner: Neutral + Location: 43,21 + Actor304: t16 + Owner: Neutral + Location: 42,22 + Actor305: t05 + Owner: Neutral + Location: 46,20 + Actor306: tc01 + Owner: Neutral + Location: 10,28 + Actor307: t11 + Owner: Neutral + Location: 13,26 + Actor308: tc03 + Owner: Neutral + Location: 14,28 + Actor309: t12 + Owner: Neutral + Location: 15,27 + Actor293: tc01 + Owner: Neutral + Location: 25,26 + Actor295: t15 + Owner: Neutral + Location: 23,27 + Actor310: tc03 + Owner: Neutral + Location: 24,28 + Actor311: tc03 + Owner: Neutral + Location: 25,28 + Actor244: tc03 + Owner: Neutral + Location: 20,1 + Actor312: tc03 + Owner: Neutral + Location: 40,49 + Actor313: t13 + Owner: Neutral + Location: 1,27 + Actor314: t12 + Owner: Neutral + Location: 22,20 + Actor315: tc03 + Owner: Neutral + Location: 26,26 + Actor316: tc03 + Owner: Neutral + Location: 28,28 + Actor317: tc01 + Owner: Neutral + Location: 32,21 + Actor318: t13 + Owner: Neutral + Location: 33,22 + Actor319: t17 + Owner: Neutral + Location: 16,11 + Actor320: t02 + Owner: Neutral + Location: 11,11 + Actor321: t03 + Owner: Neutral + Location: 51,36 + Actor322: t05 + Owner: Neutral + Location: 31,29 + Actor323: t12 + Owner: Neutral + Location: 36,26 + Actor324: t08 + Owner: Neutral + Location: 17,24 + Actor325: tc01 + Owner: Neutral + Location: 1,43 + Actor326: tc01 + Owner: Neutral + Location: 7,45 + Actor327: t06 + Owner: Neutral + Location: 51,3 + Actor328: t06 + Owner: Neutral + Location: 47,42 + Actor329: t01 + Owner: Neutral + Location: 14,8 + Actor330: t10 + Owner: Neutral + Location: 7,2 + Actor331: t10 + Owner: Neutral + Location: 60,16 + Actor332: t16 + Owner: Neutral + Location: 58,44 + Actor333: t02 + Owner: Neutral + Location: 25,19 + Actor334: tc03 + Owner: Neutral + Location: 22,19 + Actor335: tc03 + Owner: Neutral + Location: 2,45 + Actor336: v11 + Owner: Neutral + Location: 52,23 + Actor337: tc02 + Owner: Neutral + Location: 58,27 + Actor338: t15 + Owner: Neutral + Location: 1,21 + Actor339: brl3 + Owner: Creeps + Location: 48,14 + Actor340: brl3 + Owner: Creeps + Location: 13,38 + Actor341: barl + Owner: Creeps + Location: 51,15 + Actor342: barl + Owner: Creeps + Location: 11,37 + Actor344: t06 + Owner: Neutral + Location: 46,21 + Actor345: t03 + Owner: Neutral + Location: 47,22 + Actor346: t05 + Owner: Neutral + Location: 45,22 + Actor347: mpspawn + Owner: Neutral + Location: 26,38 + Actor348: mpspawn + Owner: Neutral + Location: 35,12 + +Rules: rules.yaml diff --git a/mods/ura/maps/snow-off/rules.yaml b/mods/ura/maps/snow-off/rules.yaml new file mode 100644 index 0000000..551470f --- /dev/null +++ b/mods/ura/maps/snow-off/rules.yaml @@ -0,0 +1,15 @@ +World: + WeatherOverlay: + ParticleDensityFactor: 7 + ChangingWindLevel: true + WindLevels: -2, 0, 2 + WindTick: 150, 550 + InstantWindChanges: false + UseSquares: true + ParticleSize: 1, 3 + ScatterDirection: 0, 0 + Gravity: 0.50, 1.50 + SwingOffset: 1, 2 + SwingSpeed: 0.01, 0.02 + SwingAmplitude: 0, 0 + ParticleColors: fbfbfb90, f4f4f480, f1f1f1, ffffff50 diff --git a/mods/ura/maps/soviet-01/map.bin b/mods/ura/maps/soviet-01/map.bin new file mode 100644 index 0000000..9f63741 Binary files /dev/null and b/mods/ura/maps/soviet-01/map.bin differ diff --git a/mods/ura/maps/soviet-01/map.png b/mods/ura/maps/soviet-01/map.png new file mode 100644 index 0000000..dc77417 Binary files /dev/null and b/mods/ura/maps/soviet-01/map.png differ diff --git a/mods/ura/maps/soviet-01/map.yaml b/mods/ura/maps/soviet-01/map.yaml new file mode 100644 index 0000000..aef703a --- /dev/null +++ b/mods/ura/maps/soviet-01/map.yaml @@ -0,0 +1,588 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 01: Lesson in Blood + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 32,47,32,38 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@France: + Name: France + Faction: allies + Color: 5CC1A3 + Allies: Germany + Enemies: USSR + PlayerReference@Germany: + Name: Germany + NonCombatant: True + Faction: allies + Color: 505050 + Allies: France + Enemies: USSR + PlayerReference@USSR: + Name: USSR + Playable: True + AllowBots: False + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: France, Germany + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + +Actors: + Actor0: wood + Location: 44,50 + Owner: Neutral + Actor1: wood + Location: 44,51 + Owner: Neutral + Actor2: wood + Location: 44,52 + Owner: Neutral + Actor3: wood + Location: 44,53 + Owner: Neutral + Actor4: wood + Location: 45,53 + Owner: Neutral + Actor5: wood + Location: 56,65 + Owner: Neutral + Actor6: v14 + Location: 54,66 + Owner: Neutral + Actor7: v14 + Location: 55,66 + Owner: Neutral + Actor8: wood + Location: 56,66 + Owner: Neutral + Actor9: wood + Location: 53,67 + Owner: Neutral + Actor10: wood + Location: 55,67 + Owner: Neutral + Actor11: wood + Location: 56,67 + Owner: Neutral + Actor12: wood + Location: 45,69 + Owner: Neutral + Actor13: wood + Location: 46,69 + Owner: Neutral + Actor14: wood + Location: 47,69 + Owner: Neutral + Actor15: wood + Location: 45,70 + Owner: Neutral + Actor16: wood + Location: 51,70 + Owner: Neutral + Actor17: wood + Location: 53,71 + Owner: Neutral + Actor18: wood + Location: 52,72 + Owner: Neutral + Actor19: wood + Location: 53,72 + Owner: Neutral + Actor20: t16 + Location: 53,52 + Owner: Neutral + Actor21: tc03 + Location: 60,61 + Owner: Neutral + Actor22: tc01 + Location: 48,47 + Owner: Neutral + Actor23: t06 + Location: 73,59 + Owner: Neutral + Actor24: t01 + Location: 49,74 + Owner: Neutral + Actor25: t14 + Location: 60,69 + Owner: Neutral + Actor26: t16 + Location: 59,72 + Owner: Neutral + Actor27: t14 + Location: 60,72 + Owner: Neutral + Actor28: t07 + Location: 62,72 + Owner: Neutral + Actor29: t10 + Location: 54,74 + Owner: Neutral + Actor30: tc02 + Location: 46,49 + Owner: Neutral + Actor31: t01 + Location: 53,57 + Owner: Neutral + Actor32: tc05 + Location: 41,51 + Owner: Neutral + Actor33: t06 + Location: 44,53 + Owner: Neutral + Actor34: t01 + Location: 44,70 + Owner: Neutral + Actor35: t16 + Location: 52,72 + Owner: Neutral + Actor36: tc02 + Location: 32,51 + Owner: Neutral + Actor37: tc04 + Location: 32,55 + Owner: Neutral + Actor38: tc05 + Location: 32,60 + Owner: Neutral + Actor39: tc02 + Location: 42,57 + Owner: Neutral + Actor40: tc02 + Location: 43,68 + Owner: Neutral + Actor41: tc01 + Location: 42,67 + Owner: Neutral + Actor42: tc04 + Location: 32,72 + Owner: Neutral + Actor43: tc03 + Location: 51,77 + Owner: Neutral + Actor44: tc01 + Location: 39,72 + Owner: Neutral + Actor45: t17 + Location: 35,76 + Owner: Neutral + Actor46: t15 + Location: 59,75 + Owner: Neutral + Actor47: tc03 + Location: 35,65 + Owner: Neutral + Actor48: t01 + Location: 35,56 + Owner: Neutral + Actor49: t10 + Location: 47,59 + Owner: Neutral + Actor50: t08 + Location: 48,64 + Owner: Neutral + Actor51: barl + Location: 33,54 + Owner: Germany + Actor52: brl3 + Location: 57,53 + Owner: Germany + Actor53: v08 + Location: 41,54 + Owner: France + Health: 52 + Actor54: v07 + Location: 54,65 + Owner: France + Health: 44 + Actor55: v07 + Location: 38,52 + Owner: France + Health: 44 + Actor56: v06 + Location: 46,51 + Owner: France + Health: 99 + Actor57: v05 + Location: 36,55 + Owner: France + Health: 50 + Actor58: v04 + Location: 35,51 + Owner: France + Health: 35 + Actor59: v02 + Location: 36,57 + Owner: France + Health: 56 + Actor60: brl3 + Location: 34,52 + Owner: Germany + Actor61: barl + Location: 57,54 + Owner: Germany + Actor62: barl + Location: 55,54 + Owner: Germany + Actor63: brl3 + Location: 51,72 + Owner: Germany + Actor64: brl3 + Location: 51,71 + Owner: Germany + Actor65: brl3 + Location: 47,71 + Owner: Germany + BridgeBarrel: barl + Location: 46,71 + Owner: Germany + Actor67: barl + Location: 47,70 + Owner: Germany + Actor68: brl3 + Location: 43,50 + Owner: Germany + Actor69: brl3 + Location: 45,52 + Owner: Germany + Actor70: barl + Location: 41,51 + Owner: France + Actor71: barl + Location: 50,72 + Owner: Germany + Actor72: barl + Location: 42,50 + Owner: Germany + Actor75: barl + Location: 56,53 + Owner: Germany + Actor76: barl + Location: 58,53 + Owner: Germany + Actor77: brl3 + Location: 59,53 + Owner: Germany + Actor78: brl3 + Location: 54,53 + Owner: Germany + Actor79: barl + Location: 59,56 + Owner: Germany + Actor80: brl3 + Location: 48,66 + Owner: Germany + Actor81: barl + Location: 45,65 + Owner: Germany + Actor82: barl + Location: 34,57 + Owner: Germany + Actor83: brl3 + Location: 35,58 + Owner: Germany + Actor84: barl + Location: 46,67 + Owner: Germany + Actor85: barl + Location: 48,67 + Owner: Germany + Actor86: brl3 + Location: 38,65 + Owner: Germany + Actor87: barl + Location: 40,52 + Owner: Germany + Actor88: barl + Location: 39,64 + Owner: Germany + Actor89: brl3 + Location: 41,53 + Owner: Germany + Actor90: brl3 + Location: 46,66 + Owner: Germany + Actor94: barl + Location: 35,56 + Owner: Germany + Actor95: brl3 + Location: 38,64 + Owner: Germany + Actor96: brl3 + Location: 34,55 + Owner: Germany + Actor97: barl + Location: 35,55 + Owner: Germany + Actor98: barl + Location: 45,50 + Owner: Germany + Actor99: v04 + Location: 58,54 + Owner: France + Health: 41 + Actor100: v02 + Location: 56,54 + Owner: France + Health: 71 + Actor101: dome + Location: 45,79 + Owner: USSR + Actor102: barl + Location: 46,61 + Owner: Germany + Actor103: brl3 + Location: 43,66 + Owner: Germany + Actor104: barl + Location: 43,67 + Owner: Germany + Actor105: brl3 + Location: 59,57 + Owner: Germany + Actor106: barl + Location: 57,58 + Owner: Germany + Actor107: barl + Location: 58,58 + Owner: Germany + Actor108: brl3 + Location: 59,58 + Owner: Germany + Actor109: brl3 + Location: 56,58 + Owner: Germany + Actor110: barl + Location: 56,59 + Owner: Germany + Actor111: barl + Location: 56,60 + Owner: Germany + Actor112: barl + Location: 41,68 + Owner: Germany + Actor113: barl + Location: 42,67 + Owner: Germany + Actor114: brl3 + Location: 49,55 + Owner: Germany + Actor115: barl + Location: 48,55 + Owner: Germany + Actor116: barl + Location: 47,56 + Owner: Germany + Actor117: brl3 + Location: 46,56 + Owner: Germany + Actor118: pbox + Location: 46,55 + Owner: France + Actor119: pbox + Location: 48,54 + Owner: France + Actor120: barl + Location: 34,51 + Owner: Germany + Actor121: v05 + Location: 48,62 + Owner: France + Health: 41 + Actor123: jeep + Location: 46,52 + Owner: France + Health: 66 + Facing: 96 + Actor125: jeep + Location: 55,57 + Owner: France + Facing: 160 + Actor126: jeep + Location: 39,65 + Owner: France + Health: 63 + Facing: 64 + Actor127: c9 + Location: 50,64 + Owner: France + Facing: 192 + SubCell: 1 + Actor128: c8 + Location: 47,61 + Owner: France + SubCell: 3 + Actor129: c8 + Location: 41,50 + Owner: France + Facing: 224 + SubCell: 3 + Actor130: c6 + Location: 46,61 + Owner: France + Facing: 128 + SubCell: 2 + Actor131: c5 + Location: 46,61 + Owner: France + SubCell: 1 + Actor132: c4 + Location: 44,67 + Owner: France + Facing: 96 + SubCell: 1 + Actor133: c2 + Location: 40,54 + Owner: France + Facing: 160 + SubCell: 2 + Actor134: c2 + Location: 45,61 + Owner: France + Facing: 64 + SubCell: 4 + Actor135: e1 + Location: 54,60 + Owner: France + Facing: 160 + SubCell: 4 + Actor136: e1 + Location: 49,60 + Owner: France + Facing: 128 + SubCell: 2 + Actor137: c5 + Location: 45,51 + Owner: France + Facing: 224 + SubCell: 0 + Actor138: e1 + Location: 34,58 + Owner: France + Facing: 96 + SubCell: 0 + Actor139: e1 + Location: 53,54 + Owner: France + Facing: 128 + SubCell: 2 + Actor140: e1 + Location: 58,56 + Owner: France + Facing: 128 + SubCell: 1 + Actor141: e1 + Location: 58,52 + Owner: France + Facing: 160 + SubCell: 0 + Actor142: e1 + Location: 54,64 + Owner: France + Facing: 160 + SubCell: 3 + Actor143: c7 + Location: 56,54 + Owner: France + SubCell: 3 + Actor144: e1 + Location: 40,51 + Owner: France + Facing: 160 + SubCell: 0 + Actor145: e1 + Location: 35,53 + Owner: France + Facing: 96 + SubCell: 1 + Actor146: e1 + Location: 35,54 + Owner: France + SubCell: 4 + Actor147: e1 + Location: 43,64 + Owner: France + Facing: 96 + SubCell: 0 + Actor148: e1 + Location: 56,63 + Owner: France + Facing: 192 + SubCell: 2 + Actor149: e1 + Location: 40,67 + Owner: France + Facing: 32 + SubCell: 4 + Church: v01 + Location: 40,63 + Owner: France + Health: 54 + StartJeep: jeep + Location: 44,76 + Owner: France + Health: 52 + Facing: 32 + LonelyGuard: e1 + Location: 42,81 + Owner: USSR + Health: 14 + SubCell: 2 + Airfield1: afld + Location: 39,77 + Owner: USSR + Airfield2: afld + Location: 37,79 + Owner: USSR + Airfield3: afld + Location: 35,81 + Owner: USSR + Powerplant1: powr + Location: 43,82 + Owner: USSR + Powerplant2: powr + Location: 45,82 + Owner: USSR + ParadropEntryPoint1: waypoint + Location: 67,65 + Owner: Neutral + ParadropPoint1: waypoint + Location: 47,67 + Owner: Neutral + StartJeepMovePoint: waypoint + Location: 47,66 + Owner: Neutral + BridgeWaypoint: waypoint + Location: 47,70 + Owner: Neutral + Flare: flare + Location: 47,65 + Owner: France + YakEntry: waypoint + Location: 51,84 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/soviet-01/rules.yaml b/mods/ura/maps/soviet-01/rules.yaml new file mode 100644 index 0000000..4c06346 --- /dev/null +++ b/mods/ura/maps/soviet-01/rules.yaml @@ -0,0 +1,47 @@ +World: + LuaScript: + Scripts: soviet01.lua + MissionData: + Briefing: A pitiful excuse for resistance has blockaded itself in this village.\n\nStalin has decided to make an example of them. Kill them all and destroy their homes. You will have Yak aircraft to use in teaching these rebels a lesson. + BackgroundVideo: prolog.vqa + BriefingVideo: soviet1.vqa + StartVideo: flare.vqa + WinVideo: snstrafe.vqa + LossVideo: sfrozen.vqa + +V01: + SpawnActorOnDeath: + Actor: healcrate + +^CivBuilding: + MustBeDestroyed: + +JEEP: + Explodes: + ProximityExternalCondition@JAMMER: + Range: 10c0 + ValidStances: Enemy, Neutral + Condition: jammed + +YAK: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled + +AFLD: + AirstrikePower@spyplane: + Prerequisites: ~disabled + ParatroopersPower@paratroopers: + ChargeInterval: 1500 + DropItems: E1,E1,E1,E2,E2 + -RallyPoint: + -Sellable: + +DOME: + -Sellable: + +POWR: + -Sellable: diff --git a/mods/ura/maps/soviet-01/soviet01.lua b/mods/ura/maps/soviet-01/soviet01.lua new file mode 100644 index 0000000..cf2bbae --- /dev/null +++ b/mods/ura/maps/soviet-01/soviet01.lua @@ -0,0 +1,80 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +Yaks = { "yak", "yak", "yak" } +Airfields = { Airfield1, Airfield2, Airfield3 } + +InsertYaks = function() + local i = 1 + Utils.Do(Yaks, function(yakType) + local start = YakEntry.CenterPosition + WVec.New(0, (i - 1) * 1536, Actor.CruiseAltitude(yakType)) + local dest = StartJeep.Location + CVec.New(0, 2 * i) + local yak = Actor.Create(yakType, true, { CenterPosition = start, Owner = player, Facing = (Map.CenterOfCell(dest) - start).Facing }) + yak.Move(dest) + yak.ReturnToBase(Airfields[i]) + i = i + 1 + end) +end + +JeepDemolishingBridge = function() + StartJeep.Move(StartJeepMovePoint.Location) + + Trigger.OnIdle(StartJeep, function() + Trigger.ClearAll(StartJeep) + if not BridgeBarrel.IsDead then + BridgeBarrel.Kill() + end + + local bridge = Map.ActorsInBox(BridgeWaypoint.CenterPosition, Airfield1.CenterPosition, + function(self) return self.Type == "bridge1" end)[1] + + if not bridge.IsDead then + bridge.Kill() + end + end) +end + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + france = Player.GetPlayer("France") + germany = Player.GetPlayer("Germany") + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + VillageRaidObjective = player.AddPrimaryObjective("Raze the village.") + + Trigger.OnAllRemovedFromWorld(Airfields, function() + player.MarkFailedObjective(VillageRaidObjective) + end) + + JeepDemolishingBridge() + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + + Trigger.AfterDelay(DateTime.Seconds(2), InsertYaks) +end + +Tick = function() + if france.HasNoRequiredUnits() and germany.HasNoRequiredUnits() then + player.MarkCompletedObjective(VillageRaidObjective) + end +end diff --git a/mods/ura/maps/soviet-02a/map.bin b/mods/ura/maps/soviet-02a/map.bin new file mode 100644 index 0000000..b22bdb3 Binary files /dev/null and b/mods/ura/maps/soviet-02a/map.bin differ diff --git a/mods/ura/maps/soviet-02a/map.png b/mods/ura/maps/soviet-02a/map.png new file mode 100644 index 0000000..dc77417 Binary files /dev/null and b/mods/ura/maps/soviet-02a/map.png differ diff --git a/mods/ura/maps/soviet-02a/map.yaml b/mods/ura/maps/soviet-02a/map.yaml new file mode 100644 index 0000000..4b388a3 --- /dev/null +++ b/mods/ura/maps/soviet-02a/map.yaml @@ -0,0 +1,561 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 02a: The thin red line + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 36,38,50,40 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@USSR: + Name: USSR + Playable: True + AllowBots: False + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: Greece + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: E2E6F5 + Enemies: USSR + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + +Actors: + Actor0: t02 + Location: 37,45 + Owner: Neutral + Actor1: t06 + Location: 50,63 + Owner: Neutral + Actor2: t06 + Location: 59,71 + Owner: Neutral + Actor3: tc01 + Location: 52,76 + Owner: Neutral + Actor4: tc01 + Location: 37,66 + Owner: Neutral + Actor5: tc03 + Location: 37,65 + Owner: Neutral + Actor6: t16 + Location: 37,63 + Owner: Neutral + Actor7: t12 + Location: 37,70 + Owner: Neutral + Actor8: t08 + Location: 36,70 + Owner: Neutral + Actor9: t07 + Location: 36,68 + Owner: Neutral + Actor10: tc04 + Location: 40,74 + Owner: Neutral + Actor11: tc05 + Location: 42,69 + Owner: Neutral + Actor12: t10 + Location: 50,50 + Owner: Neutral + Actor13: t17 + Location: 68,47 + Owner: Neutral + Actor14: t13 + Location: 39,69 + Owner: Neutral + Actor15: t01 + Location: 69,60 + Owner: Neutral + Actor16: t01 + Location: 77,39 + Owner: Neutral + Actor17: tc01 + Location: 72,42 + Owner: Neutral + Actor18: t15 + Location: 76,64 + Owner: Neutral + Actor19: t01 + Location: 56,44 + Owner: Neutral + Actor20: t03 + Location: 61,41 + Owner: Neutral + Actor21: t01 + Location: 66,73 + Owner: Neutral + Actor22: t02 + Location: 66,71 + Owner: Neutral + Actor23: t01 + Location: 67,57 + Owner: Neutral + Actor24: t05 + Location: 69,51 + Owner: Neutral + Actor25: tc03 + Location: 47,48 + Owner: Neutral + Actor26: t05 + Location: 70,66 + Owner: Neutral + Actor27: t01 + Location: 59,51 + Owner: Neutral + Actor28: t06 + Location: 62,57 + Owner: Neutral + Actor29: tc05 + Location: 73,37 + Owner: Neutral + Actor30: tc04 + Location: 70,37 + Owner: Neutral + Actor31: tc04 + Location: 83,37 + Owner: Neutral + Actor32: tc03 + Location: 84,40 + Owner: Neutral + Actor33: t17 + Location: 82,39 + Owner: Neutral + Actor34: fact + Location: 72,52 + Owner: USSR + Actor35: weap + Location: 41,50 + Owner: Greece + Actor37: fact + Location: 39,54 + Owner: Greece + Actor39: powr + Location: 36,55 + Owner: Greece + Actor40: powr + Location: 36,52 + Owner: Greece + Actor41: tent + Location: 41,58 + Owner: Greece + Actor42: gun + Location: 39,61 + Owner: Greece + Facing: 96 + Actor44: powr + Location: 36,49 + Owner: Greece + Actor45: gun + Location: 50,55 + Owner: Greece + Facing: 96 + Actor46: gun + Location: 50,59 + Owner: Greece + Facing: 32 + Actor47: brl3 + Location: 38,48 + Owner: Greece + Actor48: v19 + Location: 39,48 + Owner: Greece + Actor49: v19 + Location: 40,46 + Owner: Greece + Actor50: brl3 + Location: 40,47 + Owner: Greece + Actor51: barl + Location: 39,49 + Owner: Greece + Actor52: brl3 + Location: 40,48 + Owner: Greece + Actor53: barl + Location: 38,49 + Owner: Greece + Actor54: brl3 + Location: 39,50 + Owner: Greece + Actor55: barl + Location: 38,51 + Owner: Greece + Actor56: barl + Location: 38,52 + Owner: Greece + Actor57: brl3 + Location: 39,53 + Owner: Greece + Actor58: barl + Location: 38,54 + Owner: Greece + Actor59: brl3 + Location: 38,53 + Owner: Greece + Actor60: brl3 + Location: 41,45 + Owner: Greece + Actor61: barl + Location: 41,46 + Owner: Greece + Actor62: brl3 + Location: 58,54 + Owner: Greece + Actor63: v19 + Location: 59,53 + Owner: Greece + Actor64: barl + Location: 58,52 + Owner: Greece + Actor66: barl + Location: 60,53 + Owner: Greece + Actor67: brl3 + Location: 58,53 + Owner: Greece + Actor68: barl + Location: 59,51 + Owner: Greece + Actor70: barl + Location: 60,59 + Owner: Greece + Actor71: v19 + Location: 61,59 + Owner: Greece + Actor73: barl + Location: 60,61 + Owner: Greece + Actor74: powr + Location: 79,52 + Owner: USSR + Actor75: powr + Location: 82,52 + Owner: USSR + Actor76: powr + Location: 83,56 + Owner: USSR + Actor77: afld + Location: 79,56 + Owner: USSR + Actor78: afld + Location: 75,56 + Owner: USSR + Actor80: jeep + Location: 57,43 + Owner: Greece + Facing: 96 + Actor81: jeep + Location: 46,70 + Owner: Greece + Facing: 96 + Actor82: jeep + Location: 42,48 + Owner: Greece + Facing: 32 + Actor83: e1 + Location: 70,52 + Owner: USSR + Facing: 160 + SubCell: 4 + Actor84: e1 + Location: 70,55 + Owner: USSR + Facing: 192 + SubCell: 3 + Actor86: e1 + Location: 44,67 + Owner: Greece + Facing: 64 + SubCell: 0 + Actor87: e1 + Location: 68,53 + Owner: USSR + Facing: 192 + SubCell: 2 + Actor88: e1 + Location: 69,54 + Owner: USSR + Facing: 160 + SubCell: 0 + Actor89: e1 + Location: 70,56 + Owner: USSR + Facing: 160 + SubCell: 4 + Actor90: e1 + Location: 69,57 + Owner: USSR + Facing: 192 + SubCell: 2 + Actor91: e1 + Location: 69,55 + Owner: USSR + Facing: 160 + SubCell: 3 + Actor92: dog + Location: 77,58 + Owner: USSR + Facing: 192 + SubCell: 3 + Actor93: dog + Location: 82,50 + Owner: USSR + Facing: 192 + SubCell: 0 + Actor96: dog + Location: 73,50 + Owner: USSR + Facing: 32 + SubCell: 3 + Actor97: dog + Location: 73,58 + Owner: USSR + Facing: 160 + SubCell: 1 + Actor98: e3 + Location: 47,44 + Owner: Greece + Facing: 96 + SubCell: 0 + Actor99: e3 + Location: 49,57 + Owner: Greece + Facing: 64 + SubCell: 1 + Actor100: e3 + Location: 44,49 + Owner: Greece + Facing: 96 + SubCell: 0 + Actor101: e3 + Location: 39,51 + Owner: Greece + Facing: 96 + SubCell: 4 + Actor102: e3 + Location: 43,60 + Owner: Greece + Facing: 64 + SubCell: 0 + Actor103: e3 + Location: 42,56 + Owner: Greece + Facing: 64 + SubCell: 3 + Actor104: e1 + Location: 48,43 + Owner: Greece + Facing: 96 + SubCell: 1 + Actor113: e1 + Location: 71,50 + Owner: USSR + SubCell: 2 + Actor114: e1 + Location: 74,50 + Owner: USSR + SubCell: 3 + waypoint8: waypoint + Location: 62,38 + Owner: Neutral + waypoint9: waypoint + Location: 52,72 + Owner: Neutral + waypoint10: waypoint + Location: 83,77 + Owner: Neutral + waypoint11: waypoint + Location: 64,62 + Owner: Neutral + waypoint23: waypoint + Location: 66,53 + Owner: Neutral + waypoint25: waypoint + Location: 75,59 + Owner: Neutral + waypoint26: waypoint + Location: 79,67 + Owner: Neutral + waypoint27: waypoint + Location: 85,63 + Owner: Neutral + waypoint28: waypoint + Location: 85,53 + Owner: Neutral + waypoint42: waypoint + Location: 42,53 + Owner: Neutral + waypoint49: waypoint + Location: 42,59 + Owner: Neutral + waypoint52: waypoint + Location: 60,60 + Owner: Neutral + waypoint53: waypoint + Location: 61,59 + Owner: Neutral + waypoint94: waypoint + Location: 77,53 + Owner: Neutral + waypoint95: waypoint + Location: 59,44 + Owner: Neutral + waypoint1: waypoint + Location: 47,57 + Owner: Neutral + waypoint4: waypoint + Location: 57,59 + Owner: Neutral + waypoint5: waypoint + Location: 63,52 + Owner: Neutral + waypoint6: waypoint + Location: 68,39 + Owner: Neutral + Actor121: fenc + Location: 68,59 + Owner: USSR + Actor122: fenc + Location: 68,58 + Owner: USSR + Actor123: fenc + Location: 68,57 + Owner: USSR + Actor124: fenc + Location: 68,56 + Owner: USSR + Actor125: fenc + Location: 68,52 + Owner: USSR + Actor126: fenc + Location: 68,51 + Owner: USSR + Actor127: fenc + Location: 70,51 + Owner: USSR + Actor128: fenc + Location: 75,51 + Owner: USSR + Actor129: fenc + Location: 76,51 + Owner: USSR + Actor130: fenc + Location: 77,51 + Owner: USSR + Actor131: fenc + Location: 78,51 + Owner: USSR + Actor132: fenc + Location: 79,51 + Owner: USSR + Actor133: fenc + Location: 69,51 + Owner: USSR + CameraWaypoint: waypoint + Location: 68,54 + Owner: Neutral + ParadropLZ: waypoint + Location: 45,43 + Owner: Neutral + AttackWaypoint1: waypoint + Location: 73,49 + Owner: Neutral + AttackWaypoint2: waypoint + Location: 73,76 + Owner: Neutral + CommandCenter: fcom + Location: 76,52 + Owner: USSR + AlliedDome: dome + Location: 45,50 + Owner: Greece + AlliedProc: proc + Location: 43,53 + Owner: Greece + Barrel: brl3 + Location: 60,60 + Owner: Greece + BridgeBarrel1: brl3 + Location: 61,58 + Owner: Greece + BridgeBarrel2: brl3 + Location: 59,54 + Owner: Greece + Follower: e1 + Location: 69,53 + Owner: USSR + Facing: 160 + SubCell: 2 + Fleeing1: e1 + Location: 62,52 + Owner: Greece + Facing: 64 + SubCell: 4 + Fleeing2: e1 + Location: 63,53 + Owner: Greece + Facing: 64 + SubCell: 4 + Attacker1: e1 + Location: 59,44 + Owner: Greece + Facing: 96 + SubCell: 4 + Attacker2: e1 + Location: 60,44 + Owner: Greece + Facing: 64 + SubCell: 1 + Attacker3: e1 + Location: 59,43 + Owner: Greece + Facing: 64 + SubCell: 4 + Attacker4: e1 + Location: 59,44 + Owner: Greece + Facing: 64 + SubCell: 1 + Hunter1: e3 + Location: 74,67 + Owner: Greece + SubCell: 3 + Hunter2: e1 + Location: 73,68 + Owner: Greece + SubCell: 3 + Hunter3: e1 + Location: 72,67 + Owner: Greece + SubCell: 4 + Hunter4: e1 + Location: 54,74 + Owner: Greece + SubCell: 2 + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/soviet-02a/rules.yaml b/mods/ura/maps/soviet-02a/rules.yaml new file mode 100644 index 0000000..f172708 --- /dev/null +++ b/mods/ura/maps/soviet-02a/rules.yaml @@ -0,0 +1,102 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: soviet02a.lua + MissionData: + Briefing: Tomorrow, the attack on Germany begins, but today, we must protect our facility from Allied attacks.\n\nKeep the Command Center intact at all costs, and destroy any Allied fortification you might find. + BriefingVideo: soviet2.vqa + StartVideo: spotter.vqa + WinVideo: sovtstar.vqa + LossVideo: sovcemet.vqa + +SPEN: + Buildable: + Prerequisites: ~disabled + +DOME: + Buildable: + Prerequisites: ~disabled + +WEAP: + Buildable: + Prerequisites: ~disabled + +FIX: + Buildable: + Prerequisites: ~disabled + +APWR: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +TSLA: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +E3: + Buildable: + Prerequisites: ~disabled + +E4: + Buildable: + Prerequisites: ~disabled + +E6: + Buildable: + Prerequisites: ~disabled + +SHOK: + Buildable: + Prerequisites: ~disabled + +SNIPER: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + AirstrikePower@spyplane: + Prerequisites: ~disabled + ParatroopersPower@paratroopers: + Prerequisites: ~disabled + +HARV: + Harvester: + SearchFromProcRadius: 50 + SearchFromOrderRadius: 50 + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E2,E2,E2,E2,E2 diff --git a/mods/ura/maps/soviet-02a/soviet02a.lua b/mods/ura/maps/soviet-02a/soviet02a.lua new file mode 100644 index 0000000..7c14b3b --- /dev/null +++ b/mods/ura/maps/soviet-02a/soviet02a.lua @@ -0,0 +1,145 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +CameraTriggerArea = { CPos.New(42, 45), CPos.New(43, 45), CPos.New(44, 45), CPos.New(45, 45), CPos.New(46, 45), CPos.New(47, 45), CPos.New(48, 45), CPos.New(48, 56), CPos.New(48, 57), CPos.New(48, 58), CPos.New(48, 59), CPos.New(40, 63), CPos.New(41, 63), CPos.New(42, 63), CPos.New(43, 63), CPos.New(44, 63), CPos.New(45, 63), CPos.New(46, 63), CPos.New(47, 63) } +PassingBridgeLocation = { CPos.New(59, 56), CPos.New(60, 56) } + +CmdAtk = { Attacker1, Attacker2, Attacker3, Attacker4 } +FleeingUnits = { Fleeing1, Fleeing2 } +HuntingUnits = { Hunter1, Hunter2, Hunter3, Hunter4 } + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + greece = Player.GetPlayer("Greece") + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + CommandCenterIntact = player.AddPrimaryObjective("Protect the Command Center.") + DestroyAllAllied = player.AddPrimaryObjective("Destroy all Allied units and structures.") + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "MissionAccomplished") + end) + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "MissionFailed") + end) + + Camera.Position = CameraWaypoint.CenterPosition + + Trigger.OnKilled(CommandCenter, function() + player.MarkFailedObjective(CommandCenterIntact) + end) + + Trigger.AfterDelay(0, function() + local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == greece and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(buildings, function(actor) + Trigger.OnDamaged(actor, function(building, attacker) + if building.Owner == greece and building.Health < building.MaxHealth * 0.8 then + building.StartBuildingRepairs() + if attacker.Type ~= "yak" and not AlreadyHunting then + AlreadyHunting = true + Utils.Do(greece.GetGroundAttackers(), function(unit) + Trigger.OnIdle(unit, unit.Hunt) + end) + end + end + end) + end) + + -- Find the bridge actors + bridgepart1 = Map.ActorsInBox(waypoint23.CenterPosition, waypoint49.CenterPosition, function(self) return self.Type == "br1" end)[1] + bridgepart2 = Map.ActorsInBox(waypoint23.CenterPosition, waypoint49.CenterPosition, function(self) return self.Type == "br2" end)[1] + end) + + -- Discover the area around the bridge exposing the two german soldiers + -- When the two infantry near the bridge are discovered move them across the bridge to waypoint4 + -- in the meanwhile one USSR soldier hunts them down + Trigger.AfterDelay(DateTime.Seconds(1), function() + Actor.Create("camera", true, { Owner = player, Location = waypoint23.Location }) + + Utils.Do(FleeingUnits, function(unit) + unit.Move(waypoint4.Location) + end) + Follower.AttackMove(waypoint4.Location) + end) + + -- To make it look more smooth we will blow up the bridge when the barrel closest to it blows up + Trigger.OnAnyKilled({ BridgeBarrel1, BridgeBarrel2 }, function() + -- Destroy the bridge + if not bridgepart1.IsDead then + bridgepart1.Kill() + end + if not bridgepart2.IsDead then + bridgepart2.Kill() + end + end) + + -- If player passes over the bridge, blow up the barrel and destroy the bridge + Trigger.OnEnteredFootprint(PassingBridgeLocation, function(unit, id) + if unit.Owner == player then + Trigger.RemoveFootprintTrigger(id) + + -- Also don't if the bridge is already dead + if bridgepart1.IsDead and bridgepart2.IsDead then + return + end + + -- Don't "shoot" at the barrels if there is no-one to shoot + if not FleeingUnits[1].IsDead then + FleeingUnits[1].Attack(Barrel, true, true) + elseif not FleeingUnits[2].IsDead then + FleeingUnits[2].Attack(Barrel, true, true) + end + end + end) + + -- Four infantry from the small island move towards the USSR command center and attack it after 24 Seconds + Trigger.AfterDelay(DateTime.Seconds(24), function() + Utils.Do(CmdAtk, function(unit) + unit.AttackMove(AttackWaypoint1.Location) + Trigger.OnIdle(unit, unit.Hunt) + end) + end) + + -- Start hunting + Hunter4.AttackMove(AttackWaypoint2.Location) -- Move the unit in the correct direction first + Utils.Do(HuntingUnits, function(unit) + Trigger.OnIdle(unit, unit.Hunt) + end) + + -- When destroying the allied radar dome or the refinery drop 2 badgers with 5 grenadiers each + Trigger.OnAnyKilled({ AlliedDome, AlliedProc }, function() + local powerproxy = Actor.Create("powerproxy.paratroopers", true, { Owner = player }) + powerproxy.SendParatroopers(ParadropLZ.CenterPosition, false, Facing.South) + powerproxy.SendParatroopers(ParadropLZ.CenterPosition, false, Facing.SouthEast) + powerproxy.Destroy() + end) +end + +Tick = function() + if greece.HasNoRequiredUnits() then + player.MarkCompletedObjective(CommandCenterIntact) + player.MarkCompletedObjective(DestroyAllAllied) + end + + if player.HasNoRequiredUnits() then + player.MarkFailedObjective(DestroyAllAllied) + end + + if greece.Resources > greece.ResourceCapacity / 2 then + greece.Resources = greece.ResourceCapacity / 2 + end +end diff --git a/mods/ura/maps/soviet-02b/map.bin b/mods/ura/maps/soviet-02b/map.bin new file mode 100644 index 0000000..15a6dae Binary files /dev/null and b/mods/ura/maps/soviet-02b/map.bin differ diff --git a/mods/ura/maps/soviet-02b/map.png b/mods/ura/maps/soviet-02b/map.png new file mode 100644 index 0000000..e92632f Binary files /dev/null and b/mods/ura/maps/soviet-02b/map.png differ diff --git a/mods/ura/maps/soviet-02b/map.yaml b/mods/ura/maps/soviet-02b/map.yaml new file mode 100644 index 0000000..94e7168 --- /dev/null +++ b/mods/ura/maps/soviet-02b/map.yaml @@ -0,0 +1,486 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 02b: The thin red line + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 36,52,54,35 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Enemies: USSR + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: E2E6F5 + Enemies: USSR + PlayerReference@USSR: + Name: USSR + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: Greece, Creeps + +Actors: + Actor0: sbag + Location: 53,52 + Owner: Greece + Actor1: sbag + Location: 54,52 + Owner: Greece + Actor2: sbag + Location: 53,53 + Owner: Neutral + Actor3: sbag + Location: 54,53 + Owner: Greece + Actor4: sbag + Location: 53,56 + Owner: Greece + Actor5: sbag + Location: 54,56 + Owner: Greece + Actor6: sbag + Location: 53,57 + Owner: Greece + Actor7: sbag + Location: 54,57 + Owner: Greece + Actor8: sbag + Location: 81,68 + Owner: Greece + Actor9: sbag + Location: 83,68 + Owner: Greece + Actor10: sbag + Location: 87,68 + Owner: Greece + Actor11: sbag + Location: 89,68 + Owner: Greece + Actor12: sbag + Location: 81,69 + Owner: Greece + Actor13: sbag + Location: 82,69 + Owner: Greece + Actor14: sbag + Location: 83,69 + Owner: Greece + Actor15: sbag + Location: 87,69 + Owner: Greece + Actor16: sbag + Location: 88,69 + Owner: Greece + Actor17: sbag + Location: 89,69 + Owner: Greece + Actor18: v14 + Location: 87,84 + Owner: Neutral + Actor19: v15 + Location: 88,84 + Owner: Neutral + Actor20: v16 + Location: 86,85 + Owner: Neutral + Actor21: v17 + Location: 87,85 + Owner: Neutral + Actor22: v18 + Location: 88,85 + Owner: Neutral + Actor23: tc05 + Location: 75,63 + Owner: Neutral + Actor24: tc02 + Location: 82,58 + Owner: Neutral + Actor25: tc01 + Location: 85,57 + Owner: Neutral + Actor26: t07 + Location: 83,60 + Owner: Neutral + Actor27: tc04 + Location: 36,55 + Owner: Neutral + Actor28: tc05 + Location: 41,52 + Owner: Neutral + Actor29: t01 + Location: 73,62 + Owner: Neutral + Actor30: tc01 + Location: 64,63 + Owner: Neutral + Actor31: t06 + Location: 69,62 + Owner: Neutral + Actor32: t07 + Location: 67,63 + Owner: Neutral + Actor33: tc02 + Location: 73,57 + Owner: Neutral + Actor34: t07 + Location: 74,55 + Owner: Neutral + Actor35: tc05 + Location: 61,60 + Owner: Neutral + Actor36: tc01 + Location: 69,72 + Owner: Neutral + Actor37: tc05 + Location: 36,81 + Owner: Neutral + Actor38: tc02 + Location: 43,85 + Owner: Neutral + Actor39: tc01 + Location: 47,85 + Owner: Neutral + Actor40: tc01 + Location: 39,84 + Owner: Neutral + Actor41: tc04 + Location: 51,65 + Owner: Neutral + Actor42: tc05 + Location: 47,66 + Owner: Neutral + Actor43: tc02 + Location: 88,65 + Owner: Neutral + Actor44: tc04 + Location: 79,84 + Owner: Neutral + Actor45: tc04 + Location: 66,72 + Owner: Neutral + Actor46: weap + Location: 84,59 + Owner: Greece + Actor47: dome + Location: 72,55 + Owner: Greece + Actor50: fact + Location: 75,55 + Owner: Greece + Actor51: proc + Location: 80,59 + Owner: Greece + Actor52: powr + Location: 83,55 + Owner: Greece + Actor53: powr + Location: 85,55 + Owner: Greece + Actor54: brl3 + Location: 69,64 + Owner: Creeps + Actor55: brl3 + Location: 68,65 + Owner: Creeps + Actor57: barl + Location: 73,64 + Owner: Creeps + Actor58: barl + Location: 72,63 + Owner: Creeps + Actor59: barl + Location: 70,63 + Owner: Creeps + Actor61: brl3 + Location: 70,56 + Owner: Creeps + Actor62: brl3 + Location: 71,56 + Owner: Creeps + Actor63: brl3 + Location: 70,55 + Owner: Creeps + Actor64: barl + Location: 69,54 + Owner: Creeps + Actor65: brl3 + Location: 68,54 + Owner: Creeps + Actor66: barl + Location: 67,53 + Owner: Creeps + Actor68: v03 + Location: 81,85 + Owner: Creeps + Actor69: v06 + Location: 87,83 + Owner: Creeps + Actor70: fact + Location: 41,76 + Owner: USSR + Actor71: powr + Location: 46,80 + Owner: USSR + Actor72: powr + Location: 49,80 + Owner: USSR + Actor73: powr + Location: 43,80 + Owner: USSR + Actor75: afld + Location: 45,77 + Owner: USSR + Actor76: afld + Location: 49,77 + Owner: USSR + Actor78: brl3 + Location: 82,70 + Owner: Greece + Actor79: brl3 + Location: 83,70 + Owner: Greece + Actor80: brl3 + Location: 88,70 + Owner: Greece + Actor81: barl + Location: 87,70 + Owner: Greece + Actor82: barl + Location: 84,69 + Owner: Greece + Actor83: tent + Location: 70,57 + Owner: Greece + Actor84: barl + Location: 74,55 + Owner: Creeps + Actor85: powr + Location: 52,80 + Owner: USSR + Actor86: jeep + Location: 85,66 + Owner: Greece + Facing: 128 + Actor89: jeep + Location: 55,56 + Owner: Greece + Facing: 224 + Actor90: jeep + Location: 79,54 + Owner: Greece + Facing: 128 + Actor92: e1 + Location: 47,75 + Owner: USSR + Facing: 64 + SubCell: 4 + Actor93: e1 + Location: 48,75 + Owner: USSR + Facing: 64 + SubCell: 3 + Actor94: e1 + Location: 47,76 + Owner: USSR + Facing: 64 + SubCell: 2 + Actor95: e1 + Location: 48,76 + Owner: USSR + Facing: 64 + SubCell: 1 + Actor96: dog + Location: 49,73 + Owner: USSR + Facing: 64 + SubCell: 3 + Actor97: dog + Location: 49,76 + Owner: USSR + Facing: 64 + SubCell: 1 + Actor98: dog + Location: 49,75 + Owner: USSR + Facing: 64 + SubCell: 3 + Actor99: dog + Location: 49,74 + Owner: USSR + Facing: 64 + SubCell: 1 + Actor100: e3 + Location: 88,68 + Owner: Greece + Facing: 160 + SubCell: 3 + Actor103: e1 + Location: 79,64 + Owner: Greece + Facing: 96 + SubCell: 3 + Actor104: e1 + Location: 79,64 + Owner: Greece + Facing: 96 + SubCell: 4 + Actor105: e3 + Location: 78,57 + Owner: Greece + Facing: 160 + SubCell: 4 + Actor106: e2 + Location: 47,73 + Owner: USSR + Facing: 64 + SubCell: 4 + Actor107: e2 + Location: 47,74 + Owner: USSR + Facing: 64 + SubCell: 2 + Actor108: e2 + Location: 48,74 + Owner: USSR + Facing: 64 + SubCell: 1 + Actor109: e2 + Location: 48,73 + Owner: USSR + Facing: 64 + SubCell: 3 + Actor110: e1 + Location: 72,61 + Owner: Greece + Facing: 160 + SubCell: 0 + Actor111: e1 + Location: 40,54 + Owner: Greece + Facing: 96 + SubCell: 0 + Actor112: e1 + Location: 83,85 + Owner: Greece + Facing: 224 + SubCell: 3 + Actor113: e1 + Location: 82,68 + Owner: Greece + Facing: 96 + SubCell: 4 + Actor114: e1 + Location: 69,55 + Owner: Greece + Facing: 160 + SubCell: 0 + BarrelBase: brl3 + Location: 71,55 + Owner: Creeps + BarrelBridge: brl3 + Location: 72,65 + Owner: Creeps + BridgeCheck1: waypoint + Owner: Neutral + Location: 60,60 + BridgeCheck2: waypoint + Owner: Neutral + Location: 80,75 + CameraStart: Camera + Location: 60,77 + Owner: Neutral + CameraBridge: Camera + Location: 69,67 + Owner: Neutral + CameraBase1: Camera + Location: 70,56 + Owner: Neutral + CameraBase2: Camera + Location: 82,58 + Owner: Neutral + CameraBaseEntrance: Camera + Location: 85,67 + Owner: Neutral + Church1: v01 + Location: 67,73 + Owner: Creeps + Church2: v01 + Location: 86,81 + Owner: Creeps + ForwardCommand: fcom + Location: 45,73 + Owner: USSR + BridgeGun1: gun + Location: 68,64 + Owner: Greece + Facing: 160 + BridgeGun2: gun + Location: 74,64 + Owner: Greece + Facing: 160 + IntroSoldier1: e1 + Location: 71,65 + Owner: Greece + Facing: 160 + SubCell: 3 + IntroSoldier2: e1 + Location: 71,60 + Owner: Greece + Facing: 128 + SubCell: 3 + IntroSoldier3: e1 + Location: 70,60 + Owner: Greece + Facing: 128 + SubCell: 4 + ParachuteBase1: waypoint + Location: 66,54 + Owner: Neutral + ParachuteBase2: waypoint + Location: 66,56 + Owner: Neutral + ParachuteBaseEntrance: waypoint + Location: 85,68 + Owner: Neutral + TransportTruck: truk + Location: 75,58 + Owner: Greece + Facing: 192 + TransportWaypoint1: waypoint + Location: 75,58 + Owner: Neutral + TransportWaypoint2: waypoint + Location: 86,83 + Owner: Neutral + TransportWaypoint3: waypoint + Location: 67,75 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/soviet-02b/rules.yaml b/mods/ura/maps/soviet-02b/rules.yaml new file mode 100644 index 0000000..426e5fd --- /dev/null +++ b/mods/ura/maps/soviet-02b/rules.yaml @@ -0,0 +1,119 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: soviet02b.lua + MissionData: + Briefing: Tomorrow, the attack on Germany begins, but today, we must protect our facility from Allied attacks.\n\nKeep the Command Center intact at all costs, and destroy any Allied fortification you might find. + BriefingVideo: soviet2.vqa + StartVideo: spotter.vqa + WinVideo: sovtstar.vqa + LossVideo: sovcemet.vqa + +SPEN: + Buildable: + Prerequisites: ~disabled + +DOME: + Buildable: + Prerequisites: ~disabled + +WEAP: + Buildable: + Prerequisites: ~disabled + +FIX: + Buildable: + Prerequisites: ~disabled + +APWR: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +TSLA: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +E3: + Buildable: + Prerequisites: ~disabled + +E4: + Buildable: + Prerequisites: ~disabled + +E6: + Buildable: + Prerequisites: ~disabled + +SHOK: + Buildable: + Prerequisites: ~disabled + +SNIPER: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled + +AFLD: + Buildable: + Prerequisites: ~disabled + AirstrikePower@spyplane: + Prerequisites: ~disabled + ParatroopersPower@paratroopers: + Prerequisites: ~disabled + +GUN: + -RepairableBuilding: + +HARV: + Harvester: + SearchFromProcRadius: 50 + SearchFromOrderRadius: 50 + +MONEYCRATE: + GiveCashCrateAction: + Amount: 2000 + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E2,E2,E2 + +powerproxy.paratroopers2: + Inherits: powerproxy.paratroopers + ParatroopersPower: + DropItems: E2,E2,E2,E2,E2 + +powerproxy.paratroopers3: + Inherits: powerproxy.paratroopers + ParatroopersPower: + DropItems: E1,E1,E1,E1,E1 diff --git a/mods/ura/maps/soviet-02b/soviet02b.lua b/mods/ura/maps/soviet-02b/soviet02b.lua new file mode 100644 index 0000000..4ec70ad --- /dev/null +++ b/mods/ura/maps/soviet-02b/soviet02b.lua @@ -0,0 +1,182 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +IntroAttackers = { IntroSoldier1, IntroSoldier2, IntroSoldier3 } + +BridgeShroudTrigger = { CPos.New(63, 71), CPos.New(64, 71), CPos.New(65, 71), CPos.New(69, 65), CPos.New(70, 65), CPos.New(71, 65) } +BridgeExplosionTrigger = { CPos.New(66, 69), CPos.New(67, 69), CPos.New(68, 69) } +TransportTrigger = { CPos.New(75, 58) } +EnemyBaseShroudTrigger = { CPos.New(64, 52), CPos.New(64, 53), CPos.New(64, 54), CPos.New(64, 55), CPos.New(64, 56), CPos.New(64, 57), CPos.New(64, 58), CPos.New(64, 59), CPos.New(64, 60), CPos.New(64, 61), CPos.New(64, 62), CPos.New(64, 63), CPos.New(64, 64) } +ParachuteTrigger = { CPos.New(80, 66), CPos.New(81, 66), CPos.New(82, 66), CPos.New(83, 66), CPos.New(84, 66), CPos.New(85, 66),CPos.New(86, 66), CPos.New(87, 66), CPos.New(88, 66), CPos.New(89, 66) } +EnemyBaseEntranceShroudTrigger = { CPos.New(80, 73), CPos.New(81, 73), CPos.New(82, 73), CPos.New(83, 73), CPos.New(84, 73), CPos.New(85, 73),CPos.New(86, 73), CPos.New(87, 73), CPos.New(88, 73), CPos.New(89, 73) } + +SendUSSRParadrops = function() + paraproxy1 = Actor.Create("powerproxy.paratroopers", false, { Owner = player }) + paraproxy1.SendParatroopers(ParachuteBaseEntrance.CenterPosition, false, Facing.North) + paraproxy1.Destroy() +end + +SendUSSRParadropsBase = function() + paraproxy2 = Actor.Create("powerproxy.paratroopers2", false, { Owner = player }) + paraproxy2.SendParatroopers(ParachuteBase1.CenterPosition, false, Facing.East) + paraproxy2.Destroy() + paraproxy3 = Actor.Create("powerproxy.paratroopers3", false, { Owner = player }) + paraproxy3.SendParatroopers(ParachuteBase2.CenterPosition, false, Facing.East) + paraproxy3.Destroy() +end + +Trigger.OnEnteredFootprint(BridgeShroudTrigger, function(a, id) + if not bridgeShroudTrigger and a.Owner == player then + bridgeShroudTrigger = true + local cameraBridge = Actor.Create("camera", true, { Owner = player, Location = CameraBridge.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), function() + cameraBridge.Destroy() + end) + end +end) + +Trigger.OnEnteredFootprint(BridgeExplosionTrigger, function(a, id) + if not bridgeExplosionTrigger and a.Owner == player then + bridgeExplosionTrigger = true + if not BarrelBridge.IsDead then + BarrelBridge.Kill() + end + end +end) + +Trigger.OnEnteredFootprint(EnemyBaseEntranceShroudTrigger, function(a, id) + if not enemyBaseEntranceShroudTrigger and a.Owner == player then + enemyBaseEntranceShroudTrigger = true + local cameraBaseEntrance = Actor.Create("camera", true, { Owner = player, Location = CameraBaseEntrance.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), function() + cameraBaseEntrance.Destroy() + end) + end +end) + +Trigger.OnEnteredFootprint(EnemyBaseShroudTrigger, function(a, id) + if not enemyBaseShroudTrigger and a.Owner == player then + enemyBaseShroudTrigger = true + local cameraBase1 = Actor.Create("camera", true, { Owner = player, Location = CameraBase1.Location }) + local cameraBase2 = Actor.Create("camera", true, { Owner = player, Location = CameraBase2.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), function() + cameraBase1.Destroy() + cameraBase2.Destroy() + end) + end +end) + +Trigger.OnEnteredFootprint(ParachuteTrigger, function(a, id) + if not parachuteTrigger and a.Owner == player then + parachuteTrigger = true + SendUSSRParadrops() + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + end +end) + +Trigger.OnEnteredFootprint(TransportTrigger, function(a, id) + if not transportTrigger and a.Type == "truk" then + transportTrigger = true + if not TransportTruck.IsDead then + TransportTruck.Wait(DateTime.Seconds(5)) + TransportTruck.Move(TransportWaypoint2.Location) + TransportTruck.Wait(DateTime.Seconds(5)) + TransportTruck.Move(TransportWaypoint3.Location) + TransportTruck.Wait(DateTime.Seconds(5)) + TransportTruck.Move(TransportWaypoint1.Location) + end + Trigger.AfterDelay(DateTime.Seconds(10), function() + transportTrigger = false + end) + end +end) + +Trigger.OnKilled(BarrelBase, function() + SendUSSRParadropsBase() + Media.PlaySpeechNotification(player, "ReinforcementsArrived") +end) + +Trigger.OnKilled(BarrelBridge, function() + local bridgepart = Map.ActorsInBox(BridgeCheck1.CenterPosition, BridgeCheck2.CenterPosition, function(self) return self.Type == "br1" end)[1] + if not bridgepart.IsDead then + bridgepart.Kill() + end +end) + +Trigger.OnKilled(Church1, function() + Actor.Create("moneycrate", true, { Owner = player, Location = TransportWaypoint3.Location }) +end) + +Trigger.OnKilled(Church2, function() + Actor.Create("healcrate", true, { Owner = player, Location = Church2.Location }) +end) + +Trigger.OnKilled(ForwardCommand, function() + enemy.MarkCompletedObjective(alliedObjective) +end) + +Trigger.OnKilled(IntroSoldier1, function() + local cameraIntro = Actor.Create("camera", true, { Owner = player, Location = CameraStart.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), function() + cameraIntro.Destroy() + end) +end) + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + enemy = Player.GetPlayer("Greece") + Utils.Do(IntroAttackers, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + Trigger.AfterDelay(0, function() + local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == enemy and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(buildings, function(actor) + Trigger.OnDamaged(actor, function(building, attacker) + if building.Owner == enemy and building.Health < building.MaxHealth * 0.8 then + building.StartBuildingRepairs() + end + end) + end) + end) + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + end) + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "Lose") + end) + alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.") + sovietObjective1 = player.AddPrimaryObjective("Protect the Command Center.") + sovietObjective2 = player.AddPrimaryObjective("Destroy all Allied units and structures.") +end + +Tick = function() + if player.HasNoRequiredUnits() then + enemy.MarkCompletedObjective(alliedObjective) + end + + if enemy.HasNoRequiredUnits() then + player.MarkCompletedObjective(sovietObjective1) + player.MarkCompletedObjective(sovietObjective2) + end + + if enemy.Resources >= enemy.ResourceCapacity * 0.75 then + enemy.Cash = enemy.Cash + enemy.Resources - enemy.ResourceCapacity * 0.25 + enemy.Resources = enemy.ResourceCapacity * 0.25 + end +end diff --git a/mods/ura/maps/soviet-03/map.bin b/mods/ura/maps/soviet-03/map.bin new file mode 100644 index 0000000..df791e3 Binary files /dev/null and b/mods/ura/maps/soviet-03/map.bin differ diff --git a/mods/ura/maps/soviet-03/map.png b/mods/ura/maps/soviet-03/map.png new file mode 100644 index 0000000..e92632f Binary files /dev/null and b/mods/ura/maps/soviet-03/map.png differ diff --git a/mods/ura/maps/soviet-03/map.yaml b/mods/ura/maps/soviet-03/map.yaml new file mode 100644 index 0000000..1dcbe10 --- /dev/null +++ b/mods/ura/maps/soviet-03/map.yaml @@ -0,0 +1,1168 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 03: Covert cleanup + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 24,22,70,49 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Enemies: Greece, USSR + PlayerReference@England: + Name: England + Faction: allies + Color: E2E6F5 + Allies: Greece, BadGuy + Enemies: USSR + PlayerReference@BadGuy: + Name: BadGuy + Faction: soviet + Color: FE1100 + Allies: England, Greece, USSR + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: E2E6F5 + Allies: England, BadGuy + Enemies: USSR, Creeps + PlayerReference@USSR: + Name: USSR + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: Greece, England, Creeps + +Actors: + Actor0: wood + Location: 86,36 + Owner: Neutral + Actor1: wood + Location: 88,36 + Owner: Neutral + Actor2: wood + Location: 89,36 + Owner: Neutral + Actor3: wood + Location: 90,36 + Owner: Neutral + Actor4: v16 + Location: 85,37 + Owner: Neutral + Actor5: v17 + Location: 86,37 + Owner: Neutral + Actor6: v14 + Location: 87,37 + Owner: Neutral + Actor7: wood + Location: 90,37 + Owner: Neutral + Actor8: wood + Location: 91,37 + Owner: Neutral + Actor9: wood + Location: 92,37 + Owner: Neutral + Actor10: wood + Location: 93,37 + Owner: Neutral + Actor11: wood + Location: 93,38 + Owner: Neutral + Actor12: wood + Location: 93,39 + Owner: Neutral + Actor13: wood + Location: 90,40 + Owner: Neutral + Actor14: wood + Location: 91,40 + Owner: Neutral + Actor15: wood + Location: 92,40 + Owner: Neutral + Actor16: wood + Location: 93,40 + Owner: Neutral + Actor17: sbag + Location: 60,50 + Owner: Neutral + Actor18: sbag + Location: 61,50 + Owner: Neutral + Actor19: sbag + Location: 62,50 + Owner: Neutral + Actor20: sbag + Location: 63,50 + Owner: Neutral + Actor21: sbag + Location: 67,50 + Owner: Neutral + Actor22: sbag + Location: 68,50 + Owner: Neutral + Actor23: wood + Location: 34,61 + Owner: Neutral + Actor24: wood + Location: 36,61 + Owner: Neutral + Actor25: wood + Location: 37,61 + Owner: Neutral + Actor26: wood + Location: 38,61 + Owner: Neutral + Actor27: wood + Location: 39,61 + Owner: Neutral + Actor28: wood + Location: 39,62 + Owner: Neutral + Actor29: wood + Location: 39,63 + Owner: Neutral + Actor30: wood + Location: 39,64 + Owner: Neutral + Actor31: t14 + Location: 60,55 + Owner: Neutral + Actor32: tc02 + Location: 18,51 + Owner: Neutral + Actor33: tc01 + Location: 7,67 + Owner: Neutral + Actor34: tc03 + Location: 7,61 + Owner: Neutral + Actor35: t15 + Location: 19,47 + Owner: Neutral + Actor36: tc04 + Location: 60,31 + Owner: Neutral + Actor37: t15 + Location: 64,32 + Owner: Neutral + Actor38: t03 + Location: 69,68 + Owner: Neutral + Actor39: tc03 + Location: 63,29 + Owner: Neutral + Actor40: t10 + Location: 14,46 + Owner: Neutral + Actor41: tc03 + Location: 11,48 + Owner: Neutral + Actor42: t01 + Location: 11,45 + Owner: Neutral + Actor43: tc04 + Location: 45,42 + Owner: Neutral + Actor44: t11 + Location: 46,39 + Owner: Neutral + Actor45: t07 + Location: 63,39 + Owner: Neutral + Actor46: t07 + Location: 14,61 + Owner: Neutral + Actor47: t12 + Location: 18,56 + Owner: Neutral + Actor48: tc02 + Location: 70,35 + Owner: Neutral + Actor49: tc01 + Location: 84,43 + Owner: Neutral + Actor50: t10 + Location: 83,37 + Owner: Neutral + Actor51: t02 + Location: 81,37 + Owner: Neutral + Actor52: t08 + Location: 90,35 + Owner: Neutral + Actor53: t12 + Location: 50,41 + Owner: Neutral + Actor54: t01 + Location: 50,64 + Owner: Neutral + Actor55: t13 + Location: 45,45 + Owner: Neutral + Actor56: tc03 + Location: 42,34 + Owner: Neutral + Actor57: tc02 + Location: 44,34 + Owner: Neutral + Actor58: tc05 + Location: 21,55 + Owner: Neutral + Actor59: tc04 + Location: 20,43 + Owner: Neutral + Actor60: tc05 + Location: 17,43 + Owner: Neutral + Actor61: t12 + Location: 18,45 + Owner: Neutral + Actor62: t14 + Location: 21,44 + Owner: Neutral + Actor63: tc05 + Location: 5,38 + Owner: Neutral + Actor64: tc02 + Location: 7,36 + Owner: Neutral + Actor65: tc01 + Location: 5,37 + Owner: Neutral + Actor66: t16 + Location: 5,39 + Owner: Neutral + Actor67: tc03 + Location: 64,37 + Owner: Neutral + Actor68: t02 + Location: 68,53 + Owner: Neutral + Actor69: t03 + Location: 17,69 + Owner: Neutral + Actor70: tc04 + Location: 50,48 + Owner: Neutral + Actor71: tc03 + Location: 48,43 + Owner: Neutral + Actor72: tc04 + Location: 28,38 + Owner: Neutral + Actor73: tc02 + Location: 25,38 + Owner: Neutral + Actor74: tc02 + Location: 80,58 + Owner: Neutral + Actor75: tc01 + Location: 79,66 + Owner: Neutral + Actor76: t17 + Location: 73,65 + Owner: Neutral + Actor77: t15 + Location: 77,65 + Owner: Neutral + Actor78: t10 + Location: 85,62 + Owner: Neutral + Actor79: t14 + Location: 83,58 + Owner: Neutral + Actor80: tc02 + Location: 12,52 + Owner: Neutral + Actor81: t16 + Location: 17,59 + Owner: Neutral + Actor82: tc03 + Location: 5,65 + Owner: Neutral + Actor83: tc02 + Location: 7,52 + Owner: Neutral + Actor84: tc02 + Location: 27,31 + Owner: Neutral + Actor85: tc01 + Location: 21,35 + Owner: Neutral + Actor86: tc03 + Location: 21,34 + Owner: Neutral + Actor87: t14 + Location: 21,39 + Owner: Neutral + Actor88: tc05 + Location: 67,22 + Owner: Neutral + Actor89: t17 + Location: 85,32 + Owner: Neutral + Actor90: tc01 + Location: 18,29 + Owner: Neutral + Actor91: t02 + Location: 39,30 + Owner: Neutral + Actor92: t08 + Location: 38,32 + Owner: Neutral + Actor93: tc03 + Location: 81,61 + Owner: Neutral + Actor94: t12 + Location: 80,62 + Owner: Neutral + Actor95: tc04 + Location: 85,23 + Owner: Neutral + Actor96: tc01 + Location: 81,28 + Owner: Neutral + Actor97: t16 + Location: 89,30 + Owner: Neutral + Actor98: t08 + Location: 71,27 + Owner: Neutral + Actor99: tc01 + Location: 42,62 + Owner: Neutral + Actor100: tc03 + Location: 72,56 + Owner: Neutral + Actor101: t15 + Location: 71,49 + Owner: Neutral + Actor102: t13 + Location: 79,51 + Owner: Neutral + Actor103: tc01 + Location: 33,68 + Owner: Neutral + Actor104: tc05 + Location: 43,68 + Owner: Neutral + Actor105: tc02 + Location: 54,68 + Owner: Neutral + Actor106: t08 + Location: 52,63 + Owner: Neutral + Actor107: t08 + Location: 51,65 + Owner: Neutral + Actor108: t08 + Location: 55,62 + Owner: Neutral + Actor109: t06 + Location: 58,64 + Owner: Neutral + Actor110: t15 + Location: 35,61 + Owner: Neutral + Actor111: t08 + Location: 43,30 + Owner: Neutral + Actor112: tc02 + Location: 50,63 + Owner: Neutral + Actor113: tc03 + Location: 80,47 + Owner: Neutral + Actor117: v03 + Location: 42,66 + Owner: Greece + Actor118: v04 + Location: 45,62 + Owner: Greece + Health: 47 + Actor120: v07 + Location: 42,37 + Owner: Greece + Actor122: brl3 + Location: 43,38 + Owner: Creeps + Actor123: barl + Location: 44,37 + Owner: Creeps + Actor126: barl + Location: 44,38 + Owner: Creeps + Actor131: barl + Location: 80,31 + Owner: Creeps + Actor132: brl3 + Location: 83,30 + Owner: Creeps + Actor133: brl3 + Location: 74,31 + Owner: Creeps + Actor134: barl + Location: 73,31 + Owner: Creeps + Actor136: v06 + Location: 90,39 + Owner: Greece + Actor138: barl + Location: 81,49 + Owner: Creeps + Actor139: brl3 + Location: 78,49 + Owner: Creeps + Actor140: barl + Location: 79,49 + Owner: Creeps + Actor141: barl + Location: 76,49 + Owner: Creeps + Actor143: v04 + Location: 81,53 + Owner: Greece + Health: 39 + Actor145: v02 + Location: 62,38 + Owner: Greece + Actor146: v04 + Location: 56,39 + Owner: Greece + Health: 41 + Actor148: v08 + Location: 62,41 + Owner: Greece + Actor150: brl3 + Location: 58,43 + Owner: Creeps + Actor151: barl + Location: 59,42 + Owner: Creeps + Actor153: barl + Location: 61,42 + Owner: Creeps + Actor154: brl3 + Location: 62,42 + Owner: Creeps + Actor155: barl + Location: 57,42 + Owner: Creeps + Actor156: barl + Location: 57,43 + Owner: Creeps + Actor157: barl + Location: 55,44 + Owner: Creeps + Actor158: brl3 + Location: 55,45 + Owner: Creeps + Actor159: brl3 + Location: 42,39 + Owner: Creeps + Actor160: brl3 + Location: 45,38 + Owner: Creeps + Actor161: barl + Location: 46,38 + Owner: Creeps + Actor162: brl3 + Location: 55,46 + Owner: Creeps + Actor163: barl + Location: 63,41 + Owner: Creeps + Actor164: brl3 + Location: 76,48 + Owner: Creeps + Actor165: barl + Location: 77,48 + Owner: Creeps + Actor166: barl + Location: 73,30 + Owner: Creeps + Actor167: barl + Location: 83,31 + Owner: Creeps + Actor168: brl3 + Location: 80,49 + Owner: Creeps + Actor169: v13 + Location: 63,36 + Owner: Greece + Actor171: brl3 + Location: 81,31 + Owner: Creeps + Actor172: e1 + Location: 16,31 + Owner: Greece + Facing: 128 + SubCell: 4 + Actor173: e1 + Location: 16,31 + Owner: Greece + Facing: 192 + SubCell: 0 + Actor174: e1 + Location: 17,33 + Owner: Greece + Facing: 160 + SubCell: 1 + Actor175: e1 + Location: 17,33 + Owner: Greece + Facing: 128 + SubCell: 4 + Actor176: e3 + Location: 17,33 + Owner: Greece + Facing: 128 + SubCell: 2 + Actor177: e3 + Location: 17,31 + Owner: Greece + SubCell: 1 + Actor183: e1 + Location: 77,61 + Owner: Greece + SubCell: 2 + Actor184: e1 + Location: 64,41 + Owner: Greece + Facing: 64 + SubCell: 3 + Actor185: e1 + Location: 64,42 + Owner: Greece + Facing: 96 + SubCell: 0 + Actor186: e1 + Location: 63,42 + Owner: Greece + Facing: 128 + SubCell: 0 + Actor187: e1 + Location: 59,45 + Owner: Greece + Facing: 32 + SubCell: 2 + Actor188: e1 + Location: 56,44 + Owner: Greece + Facing: 32 + SubCell: 4 + Actor191: e1 + Location: 56,45 + Owner: Greece + Facing: 64 + SubCell: 4 + Actor192: e1 + Location: 57,44 + Owner: Greece + Facing: 64 + SubCell: 2 + Actor193: e1 + Location: 60,44 + Owner: Greece + Facing: 32 + SubCell: 1 + Actor194: e1 + Location: 56,46 + Owner: Greece + Facing: 64 + SubCell: 4 + Actor195: e1 + Location: 53,37 + Owner: Greece + Facing: 96 + SubCell: 2 + Actor196: e1 + Location: 52,38 + Owner: Greece + Facing: 96 + SubCell: 3 + Actor197: e1 + Location: 52,37 + Owner: Greece + Facing: 96 + SubCell: 4 + Actor264: fenc + Owner: BadGuy + Location: 89,32 + Actor265: fenc + Owner: BadGuy + Location: 88,32 + Actor266: fenc + Owner: BadGuy + Location: 87,32 + Actor267: fenc + Owner: BadGuy + Location: 86,32 + Actor268: fenc + Owner: BadGuy + Location: 85,32 + Actor269: fenc + Owner: BadGuy + Location: 84,32 + Actor270: fenc + Owner: BadGuy + Location: 83,32 + Actor271: fenc + Owner: BadGuy + Location: 82,32 + Actor272: fenc + Owner: BadGuy + Location: 81,32 + Actor273: fenc + Owner: BadGuy + Location: 80,32 + Actor274: fenc + Owner: BadGuy + Location: 70,22 + Actor275: fenc + Owner: BadGuy + Location: 70,23 + Actor276: fenc + Owner: BadGuy + Location: 70,24 + Actor277: fenc + Owner: BadGuy + Location: 70,25 + Actor278: fenc + Owner: BadGuy + Location: 70,26 + Actor279: fenc + Owner: BadGuy + Location: 70,27 + Actor280: fenc + Owner: BadGuy + Location: 70,28 + Actor281: fenc + Owner: BadGuy + Location: 70,29 + Actor282: fenc + Owner: BadGuy + Location: 70,30 + Actor283: fenc + Owner: BadGuy + Location: 70,31 + Actor284: fenc + Owner: BadGuy + Location: 70,32 + Actor285: fenc + Owner: BadGuy + Location: 71,32 + Actor286: fenc + Owner: BadGuy + Location: 72,32 + Actor287: fenc + Owner: BadGuy + Location: 73,32 + Actor288: fenc + Owner: BadGuy + Location: 74,32 + Actor289: fenc + Owner: Neutral + Location: 72,43 + Actor290: fenc + Owner: Neutral + Location: 73,43 + Actor291: fenc + Owner: Neutral + Location: 74,43 + Actor292: fenc + Owner: Neutral + Location: 75,43 + Actor293: fenc + Owner: Neutral + Location: 75,42 + Actor294: fenc + Owner: Neutral + Location: 75,44 + Actor295: fenc + Owner: Neutral + Location: 77,44 + Actor296: fenc + Owner: Neutral + Location: 77,43 + Actor297: fenc + Owner: Neutral + Location: 77,42 + Actor298: fenc + Owner: Neutral + Location: 78,43 + Actor299: fenc + Owner: Neutral + Location: 79,43 + Actor300: fenc + Owner: Neutral + Location: 80,43 + Actor301: fenc + Owner: Neutral + Location: 76,46 + Actor302: fenc + Owner: Neutral + Location: 75,46 + Actor303: fenc + Owner: Neutral + Location: 74,46 + Actor304: fenc + Owner: Neutral + Location: 77,46 + Actor305: fenc + Owner: Neutral + Location: 78,46 + Actor306: fenc + Owner: Neutral + Location: 76,58 + Actor307: fenc + Owner: Neutral + Location: 76,59 + Actor308: fenc + Owner: Neutral + Location: 76,60 + Actor309: fenc + Owner: Neutral + Location: 75,60 + Actor310: fenc + Owner: Neutral + Location: 78,60 + Actor311: fenc + Owner: Neutral + Location: 79,60 + Actor312: fenc + Owner: Neutral + Location: 78,59 + Actor313: fenc + Owner: Neutral + Location: 78,58 + Actor314: fenc + Owner: Neutral + Location: 65,41 + Actor315: fenc + Owner: Neutral + Location: 65,42 + Actor316: fenc + Owner: Neutral + Location: 65,43 + Actor317: fenc + Owner: Neutral + Location: 64,43 + Actor318: fenc + Owner: Neutral + Location: 63,43 + Actor319: fenc + Owner: Neutral + Location: 62,43 + Actor320: fenc + Owner: Neutral + Location: 61,43 + Actor321: fenc + Owner: Neutral + Location: 60,43 + Actor322: fenc + Owner: Neutral + Location: 59,43 + Actor323: fenc + Owner: Neutral + Location: 59,44 + Actor324: fenc + Owner: Neutral + Location: 58,44 + Actor325: fenc + Owner: Neutral + Location: 58,45 + Actor326: fenc + Owner: Neutral + Location: 63,45 + Actor327: fenc + Owner: Neutral + Location: 62,45 + Actor328: fenc + Owner: Neutral + Location: 61,45 + Actor329: fenc + Owner: Neutral + Location: 61,46 + Actor330: fenc + Owner: Neutral + Location: 60,46 + Actor331: fenc + Owner: Neutral + Location: 59,46 + Actor332: fenc + Owner: Neutral + Location: 59,47 + Actor333: fenc + Owner: Neutral + Location: 58,47 + Actor334: fenc + Owner: Neutral + Location: 57,47 + Actor335: fenc + Owner: Neutral + Location: 56,47 + Actor336: fenc + Owner: Neutral + Location: 56,46 + Actor337: fenc + Owner: Neutral + Location: 56,45 + Actor338: fenc + Owner: Neutral + Location: 56,44 + Actor339: fenc + Owner: Neutral + Location: 56,43 + Actor340: fenc + Owner: Neutral + Location: 55,43 + Actor341: fenc + Owner: Neutral + Location: 58,40 + Actor342: fenc + Owner: Neutral + Location: 58,41 + Actor343: fenc + Owner: Neutral + Location: 57,41 + Actor344: fenc + Owner: Neutral + Location: 56,41 + Actor345: fenc + Owner: Neutral + Location: 55,41 + Actor346: fenc + Owner: Neutral + Location: 58,42 + Actor347: fenc + Owner: Neutral + Location: 61,41 + Actor348: fenc + Owner: Neutral + Location: 60,41 + Actor349: fenc + Owner: Neutral + Location: 60,40 + waypoint8: waypoint + Location: 79,28 + Owner: Neutral + waypoint12: waypoint + Location: 58,49 + Owner: Neutral + waypoint26: waypoint + Location: 59,62 + Owner: Neutral + waypoint37: waypoint + Location: 72,31 + Owner: Neutral + waypoint38: waypoint + Location: 82,31 + Owner: Neutral + waypoint41: waypoint + Location: 35,37 + Owner: Neutral + waypoint43: waypoint + Location: 73,43 + Owner: Neutral + waypoint56: waypoint + Location: 40,70 + Owner: Neutral + waypoint57: waypoint + Location: 39,73 + Owner: Neutral + waypoint60: waypoint + Location: 58,22 + Owner: Neutral + waypoint61: waypoint + Location: 58,20 + Owner: Neutral + waypoint79: waypoint + Location: 93,65 + Owner: Neutral + waypoint83: waypoint + Location: 37,67 + Owner: Neutral + waypoint85: waypoint + Location: 34,65 + Owner: Neutral + waypoint90: waypoint + Location: 76,29 + Owner: Neutral + waypoint95: waypoint + Location: 77,60 + Owner: Neutral + waypoint99: waypoint + Location: 58,59 + Owner: Neutral + BarrierSoldier1: e1 + Location: 63,49 + Owner: Greece + Facing: 160 + SubCell: 4 + BarrierSoldier2: e1 + Location: 64,50 + Owner: Greece + Facing: 128 + SubCell: 0 + BarrierSoldier3: e1 + Location: 64,49 + Owner: Greece + Facing: 96 + SubCell: 4 + BarrierSoldier4: e1 + Location: 66,50 + Owner: Greece + Facing: 96 + SubCell: 4 + BarrierSoldier5: e1 + Location: 65,49 + Owner: Greece + Facing: 160 + SubCell: 3 + BarrierSoldier6: e1 + Location: 66,49 + Owner: Greece + Facing: 128 + SubCell: 3 + BaseBarrel1: barl + Location: 72,31 + Owner: Creeps + BaseBarrel2: brl3 + Location: 82,31 + Owner: Creeps + BaseBuilding1: ftur + Location: 75,32 + Owner: BadGuy + BaseBuilding2: ftur + Location: 79,32 + Owner: BadGuy + BaseBuilding3: apwr + Location: 71,23 + Owner: BadGuy + BaseBuilding4: apwr + Location: 86,27 + Owner: BadGuy + BaseBuilding5: barl + Location: 74,24 + Owner: Creeps + BaseBuilding6: miss + Location: 78,27 + Owner: BadGuy + CameraBarrier: waypoint + Location: 64,51 + Owner: Neutral + CameraFinalArea: waypoint + Location: 38,36 + Owner: Neutral + CameraSpyHideout31: waypoint + Location: 63,40 + Owner: Neutral + CameraSpyHideout32: waypoint + Location: 58,45 + Owner: Neutral + CameraSpyHideout33: waypoint + Location: 58,37 + Owner: Neutral + CameraSpyVillage: waypoint + Location: 58,63 + Owner: Neutral + CameraVillage: waypoint + Location: 40,63 + Owner: Neutral + CameraWater1: camera + Owner: Neutral + Location: 38,48 + CameraWater2: camera + Owner: Neutral + Location: 29,48 + CameraWater3: camera + Owner: Neutral + Location: 29,55 + CameraWater4: camera + Owner: Neutral + Location: 29,63 + CameraWater5: camera + Owner: Neutral + Location: 38,55 + CameraWater6: camera + Owner: Neutral + Location: 50,55 + EnemyReinforcements1: waypoint + Location: 45,63 + Owner: Neutral + EnemyReinforcements2: waypoint + Location: 42,66 + Owner: Neutral + EnemyReinforcements1Goal: waypoint + Location: 44,63 + Owner: Neutral + EnemyReinforcements2Goal: waypoint + Location: 41,65 + Owner: Neutral + FarmArea: waypoint + Location: 89,39 + Owner: Neutral + Farmer1: c7 + Location: 88,39 + Owner: Greece + SubCell: 4 + Farmer2: c6 + Location: 90,38 + Owner: Greece + SubCell: 3 + Farmer3: e3 + Location: 89,37 + Owner: Greece + Facing: 160 + SubCell: 2 + FarmSpawn: waypoint + Location: 90,39 + Owner: Neutral + HelicopterEscape: waypoint + Location: 20,33 + Owner: Neutral + HelicopterGoal: waypoint + Location: 31,33 + Owner: Neutral + HelicopterSpawn: waypoint + Location: 24,33 + Owner: Neutral + Hideout1Barrel: brl3 + Location: 77,49 + Owner: Creeps + Hideout1PBox: pbox + Location: 76,47 + Owner: Greece + Hideout3Barrel: brl3 + Location: 60,42 + Owner: Creeps + IntroCamera: waypoint + Location: 76,40 + Owner: Neutral + Playerbase: waypoint + Location: 77,25 + Owner: Neutral + RedBuilding1: v05 + Location: 37,67 + Owner: Greece + Health: 39 + RedBuilding2: v05 + Location: 56,37 + Owner: Greece + Health: 39 + RedBuilding3: v05 + Location: 72,53 + Owner: Greece + Health: 43 + ReinforcementDropOff: waypoint + Location: 63,61 + Owner: Neutral + ReinforcementGoal: waypoint + Location: 76,25 + Owner: Neutral + ReinforcementSpawn: waypoint + Location: 77,22 + Owner: Neutral + RSoldier1: e3 + Location: 73,35 + Owner: Greece + SubCell: 1 + RSoldier2: e3 + Location: 80,35 + Owner: Greece + SubCell: 2 + RSoldier3: e3 + Location: 36,37 + Owner: Greece + Facing: 64 + SubCell: 1 + RSoldier4: e3 + Location: 36,37 + Owner: Greece + Facing: 64 + SubCell: 4 + RSoldierTrap: barl + Location: 42,38 + Owner: Creeps + RStandoff: waypoint + Location: 77,57 + Owner: Neutral + SpyGoal: waypoint + Location: 31,34 + Owner: Neutral + SpyHideout1: v01 + Location: 77,52 + Owner: Greece + SpyHideout2: v01 + Location: 37,63 + Owner: Greece + SpyHideout3: v01 + Location: 61,36 + Owner: Greece + SpyHideout4: v01 + Location: 36,32 + Owner: Greece + SpyWaypoint1: waypoint + Location: 76,42 + Owner: Neutral + SpyWaypoint2: waypoint + Location: 75,53 + Owner: Neutral + SpyWaypoint3: waypoint + Location: 74,63 + Owner: Neutral + SpyWaypoint4: waypoint + Location: 47,65 + Owner: Neutral + TheSpy: spy + Location: 77,28 + Owner: England + SubCell: 1 + Transport: lst + Location: 28,65 + Owner: Greece + TransportPath1: waypoint + Location: 31,65 + Owner: Neutral + TransportPath1Water: waypoint + Location: 30,65 + Owner: Neutral + TransportPath2Water: waypoint + Location: 47,51 + Owner: Neutral + TransportPath2: waypoint + Location: 47,50 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Notifications: notifications.yaml diff --git a/mods/ura/maps/soviet-03/notifications.yaml b/mods/ura/maps/soviet-03/notifications.yaml new file mode 100644 index 0000000..b50090b --- /dev/null +++ b/mods/ura/maps/soviet-03/notifications.yaml @@ -0,0 +1,3 @@ +Sounds: + Notifications: + sking: sking1 \ No newline at end of file diff --git a/mods/ura/maps/soviet-03/rules.yaml b/mods/ura/maps/soviet-03/rules.yaml new file mode 100644 index 0000000..be71429 --- /dev/null +++ b/mods/ura/maps/soviet-03/rules.yaml @@ -0,0 +1,57 @@ +World: + LuaScript: + Scripts: soviet03.lua + MissionData: + Briefing: A spy who has compromised the security of one of the northern sarin gas sites has been traced back to Lund, Sweden, by Nadia's intelligence groups.\n\nHe has been marked for death and a squad of Soviet troops was dispatched to the location to hunt him down. + BriefingVideo: soviet3.vqa + StartVideo: search.vqa + WinVideo: execute.vqa + LossVideo: take_off.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +Player: + LobbyPrerequisiteCheckbox@GLOBALBOUNTY: + Enabled: False + Locked: True + +^Helicopter: + Health: + HP: 9000 + +FENC: + Health: + HP: 9000 + +V01: + Cargo: + Types: Infantry + MaxWeight: 1 + PipCount: 1 + +V05: + SpawnActorOnDeath: + Actor: healcrate + +DOG: + # HACK: Disable experience without killing the linter + -GainsExperience: + ExternalCondition@RANK-VETERAN: + Condition: rank-veteran + ExternalCondition@RANK-ELITE: + Condition: rank-elite + -GrantCondition@RANK-ELITE: + +SPY: + Mobile: + Speed: 80 + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E2,E2 diff --git a/mods/ura/maps/soviet-03/soviet03.lua b/mods/ura/maps/soviet-03/soviet03.lua new file mode 100644 index 0000000..6cfed53 --- /dev/null +++ b/mods/ura/maps/soviet-03/soviet03.lua @@ -0,0 +1,395 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +if Map.LobbyOption("difficulty") == "easy" then + remainingTime = DateTime.Minutes(7) +elseif Map.LobbyOption("difficulty") == "normal" then + remainingTime = DateTime.Minutes(6) +elseif Map.LobbyOption("difficulty") == "hard" then + remainingTime = DateTime.Minutes(5) +end + +USSRReinforcements1 = { "dog", "dog", "dog", "dog", "dog" } +USSRReinforcements2 = { "e1", "e2", "e2" } +USSRReinforcementsFarm = { "e1", "e1", "e1", "e2", "e2" } +EnemyReinforcements1SpyHideout2 = { "e1", "e3" } +EnemyReinforcements2SpyHideout2 = { "e3", "e3" } +ExtractionHeliType = "tran" +ExtractionPath = { HelicopterSpawn.Location, HelicopterGoal.Location } +Farmers = { Farmer1, Farmer2, Farmer3 } +BarrierSoldiers = { BarrierSoldier1, BarrierSoldier2, BarrierSoldier3, BarrierSoldier4, BarrierSoldier5, BarrierSoldier6 } +RedBuildings = { RedBuildung1, RedBuilding2, RedBuilding3 } +BaseBuildings1 = { BaseBarrel1, BaseBarrel2, BaseBuilding1, BaseBuilding2 } +BaseBuildings2 = { BaseBuilding3, BaseBuilding4, BaseBuilding5, BaseBuilding6 } + +SpyHideout1Trigger = { CPos.New(84, 45), CPos.New(85, 45), CPos.New(86, 45), CPos.New(87, 45), CPos.New(88, 45), CPos.New(89, 45), CPos.New(90, 45) } +SpyHideout2PathTrigger = { CPos.New(70, 61), CPos.New(70, 62), CPos.New(70, 63), CPos.New(70, 64), CPos.New(70, 65) } +SpyHideout2Trigger = { CPos.New(50, 63), CPos.New(50, 64), CPos.New(50, 65), CPos.New(50, 66), CPos.New(50, 67), CPos.New(50, 68), CPos.New(50, 69) } +SpyTransport1CheckpointTrigger = { CPos.New(31, 65) } +SpyTransport2CheckpointTrigger = { CPos.New(47, 51) } +Barrier1Trigger = { CPos.New(59,57), CPos.New(60,57), CPos.New(61,57), CPos.New(62,57), CPos.New(63,57), CPos.New(64,57), CPos.New(65,57), CPos.New(66,57), CPos.New(67,57), CPos.New(68,57) } +Barrier2Trigger = { CPos.New(63, 47), CPos.New(64, 47), CPos.New(65, 47), CPos.New(66, 47), CPos.New(67, 47), CPos.New(68, 47) } +SpyHideout3Trigger = { CPos.New(58, 45), CPos.New(58, 46), CPos.New(58, 47) } +RTrapTrigger = { CPos.New(46, 34), CPos.New(47, 35), CPos.New(48, 36), CPos.New(48, 37), CPos.New(48, 38), CPos.New(48, 39) } +SpyHideout4Trigger = { CPos.New(41, 34), CPos.New(41, 35), CPos.New(41, 36), CPos.New(41, 37), CPos.New(41, 38) } + +IntroSequence = function() + TheSpy.DisguiseAsType("e1", player) + Actor.Create("camera", true, { Owner = player, Location = Playerbase.Location }) + Actor.Create("camera", true, { Owner = player, Location = IntroCamera.Location }) + Actor.Create("camera", true, { Owner = player, Location = FarmArea.Location }) + if not TheSpy.IsDead then + TheSpy.Move(SpyWaypoint1.Location) + TheSpy.Move(SpyWaypoint2.Location) + end + Trigger.AfterDelay(DateTime.Seconds(1), function() + Media.PlaySoundNotification(player, "sking") + end) + Trigger.AfterDelay(DateTime.Seconds(2), function() + Media.PlaySpeechNotification(player, "ExplosiveChargePlaced") + end) + Trigger.AfterDelay(DateTime.Seconds(4), function() + if not RSoldier1.IsDead and not BaseBarrel1.IsDead then + RSoldier1.Attack(BaseBarrel1) + end + if not RSoldier2.IsDead and not BaseBarrel2.IsDead then + RSoldier2.Attack(BaseBarrel2) + end + end) + Trigger.AfterDelay(DateTime.Seconds(5), function() + Utils.Do(BaseBuildings1, function(actor) + if not actor.IsDead then + actor.Kill() + end + end) + end) + Trigger.AfterDelay(DateTime.Seconds(6), function() + Utils.Do(BaseBuildings2, function(actor) + if not actor.IsDead then + actor.Kill() + end + end) + if not RSoldier1.IsDead then + RSoldier1.Move(SpyWaypoint2.Location) + end + if not RSoldier2.IsDead then + RSoldier2.Move(SpyWaypoint2.Location) + end + end) + Trigger.AfterDelay(DateTime.Seconds(8), function() + Dogs = Reinforcements.Reinforce(player, USSRReinforcements1, { ReinforcementSpawn.Location, ReinforcementGoal.Location }, 0) + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + timerstarted = true + end) + Trigger.AfterDelay(DateTime.Seconds(9), function() + Media.PlaySoundNotification(player, "AlertBleep") + end) + Trigger.AfterDelay(DateTime.Seconds(10), function() + Media.PlaySpeechNotification(player, "TimerStarted") + end) +end + +SendUSSRParadrops = function() + paraproxy = Actor.Create("powerproxy.paratroopers", false, { Owner = player }) + paraproxy.SendParatroopers(ReinforcementDropOff.CenterPosition, false, 0) + paraproxy.Destroy() +end + +SpyFinalSequency = function() + if not SpyHideout4.IsDead then + SpyHideout4.UnloadPassengers() + Trigger.AfterDelay(DateTime.Seconds(1), function() + if not TheSpy.IsDead then + TheSpy.Move(SpyGoal.Location) + end + end) + end +end + +SpyHelicopterEscape = function() + if not spyHelicopterEscape then + spyHelicopterEscape = true + SpyFinalSequency() + Actor.Create("camera", true, { Owner = player, Location = CameraFinalArea.Location }) + ExtractionHeli = Reinforcements.ReinforceWithTransport(greece, ExtractionHeliType, nil, ExtractionPath)[1] + local exitPos = CPos.New(ExtractionPath[1].X, ExtractionPath[2].Y) + Trigger.AfterDelay(DateTime.Seconds(5), function() + if not TheSpy.IsDead and not ExtractionHeli.IsDead then + TheSpy.EnterTransport(ExtractionHeli) + end + end) + Trigger.AfterDelay(DateTime.Seconds(7), function() + if not ExtractionHeli.IsDead then + ExtractionHeli.Move(HelicopterEscape.Location) + end + end) + Trigger.AfterDelay(DateTime.Seconds(12), function() + enemy.MarkCompletedObjective(alliedObjective) + end) + end +end + +Trigger.OnAllKilled(Farmers, function() + Reinforcements.Reinforce(player, USSRReinforcementsFarm, { FarmSpawn.Location, FarmArea.Location }, 0) + player.MarkCompletedObjective(sovietObjective2) +end) + +Trigger.OnAllKilled(RedBuildings, function() + player.MarkCompletedObjective(sovietObjective3) +end) + +Trigger.OnAnyKilled(BarrierSoldiers, function() + if barrier1Trigger then + Utils.Do(BarrierSoldiers, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + end +end) + +Trigger.OnEnteredFootprint(SpyHideout1Trigger, function(a, id) + if not spyHideout1Trigger and a.Owner == player then + spyHideout1Trigger = true + Trigger.RemoveFootprintTrigger(id) + Actor.Create("camera", true, { Owner = player, Location = SpyHideout1.Location }) + if not TheSpy.IsDead and not SpyHideout1.IsDead then + TheSpy.EnterTransport(SpyHideout1) + end + end +end) + +Trigger.OnEnteredFootprint(SpyHideout2PathTrigger, function(a, id) + if not spyHideout2PathTrigger and a.Owner == player then + spyHideout2PathTrigger = true + Trigger.RemoveFootprintTrigger(id) + Actor.Create("camera", true, { Owner = player, Location = CameraSpyVillage.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraVillage.Location }) + if not TheSpy.IsDead and not SpyHideout2.IsDead then + TheSpy.EnterTransport(SpyHideout2) + end + end +end) + +Trigger.OnEnteredFootprint(SpyHideout2Trigger, function(a, id) + if not spyHideout2Trigger and a.Owner == player then + spyHideout2Trigger = true + SpyGuards1 = Reinforcements.Reinforce(greece, EnemyReinforcements1SpyHideout2, { EnemyReinforcements1.Location, EnemyReinforcements1Goal.Location }, 0) + SpyGuards2 = Reinforcements.Reinforce(greece, EnemyReinforcements2SpyHideout2, { EnemyReinforcements2.Location, EnemyReinforcements2Goal.Location }, 0) + Utils.Do(SpyGuards1, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + Utils.Do(SpyGuards2, function(actor) + if not actor.IsDead then + Trigger.OnIdle(actor, actor.Hunt) + end + end) + if not SpyHideout2.IsDead and not Transport.IsDead then + SpyHideout2.UnloadPassengers() + Transport.Move(TransportPath1Water.Location) + end + Trigger.AfterDelay(DateTime.Seconds(1), function() + if not TheSpy.IsDead then + TheSpy.Move(TransportPath1.Location) + TheSpy.EnterTransport(Transport) + end + end) + Trigger.AfterDelay(DateTime.Seconds(7), function() + SendUSSRParadrops() + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + end) + end +end) + +Trigger.OnEnteredFootprint(SpyTransport1CheckpointTrigger, function(a, id) + if not spyTransport1CheckpointTrigger and a.Owner == enemy then + spyTransport1CheckpointTrigger = true + Trigger.AfterDelay(DateTime.Seconds(2), function() + Actor.Create("camera", true, { Owner = player, Location = CameraWater1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraWater2.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraWater3.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraWater4.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraWater5.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraWater6.Location }) + Actor.Create("camera", true, { Owner = player, Location = TransportPath2.Location }) + if not Transport.IsDead then + Transport.Wait(25) + Transport.Move(TransportPath2Water.Location) + end + end) + end +end) + +Trigger.OnEnteredFootprint(SpyTransport2CheckpointTrigger, function(a, id) + if not spyTransport2CheckpointTrigger and a.Owner == greece then + spyTransport2CheckpointTrigger = true + Transport.UnloadPassengers() + Trigger.AfterDelay(DateTime.Seconds(1), function() + if not TheSpy.IsDead then + if not Hideout3Barrel.IsDead then + TheSpy.EnterTransport(SpyHideout3) + elseif not SpyHideout4.IsDead then + TheSpy.EnterTransport(SpyHideout4) + else + TheSpy.Move(SpyGoal.Location) + end + end + end) + end +end) + +Trigger.OnEnteredFootprint(Barrier1Trigger, function(a, id) + if not barrier1Trigger and a.Owner == player then + barrier1Trigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraBarrier.Location }) + end +end) + +Trigger.OnEnteredFootprint(Barrier2Trigger, function(a, id) + if not barrier2Trigger and a.Owner == player then + barrier2Trigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraSpyHideout31.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraSpyHideout32.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraSpyHideout33.Location }) + end +end) + +Trigger.OnEnteredFootprint(SpyHideout3Trigger, function(a, id) + if not spyHideout3Trigger and a.Owner == player then + spyHideout3Trigger = true + if Map.LobbyOption("difficulty") ~= "hard" then + Reinforcements.Reinforce(player, USSRReinforcements2, { ReinforcementSpawn.Location, CameraSpyHideout33.Location }, 0) + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + end + end +end) + +Trigger.OnEnteredFootprint(RTrapTrigger, function(a, id) + if not rTrapTrigger and a.Owner == player then + rTrapTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraFinalArea.Location }) + if not RSoldier3.IsDead and not RSoldierTrap.IsDead then + RSoldier3.Attack(RSoldierTrap) + end + if not RSoldier4.IsDead and not RSoldierTrap.IsDead then + RSoldier4.Attack(RSoldierTrap) + end + end +end) + +Trigger.OnEnteredFootprint(SpyHideout4Trigger, function(a, id) + if not spyHideout4Trigger and a.Owner == player then + spyHideout4Trigger = true + SpyFinalSequency() + Actor.Create("camera", true, { Owner = player, Location = HelicopterGoal.Location }) + end +end) + +Trigger.OnKilled(Hideout1Barrel, function() + if not Hideout1PBox.IsDead then + Hideout1PBox.Kill() + end + Trigger.AfterDelay(DateTime.Seconds(1), function() + if not SpyHideout1.IsDead then + SpyHideout1.UnloadPassengers() + end + end) + Trigger.AfterDelay(DateTime.Seconds(2), function() + if not TheSpy.IsDead then + TheSpy.Move(SpyWaypoint3.Location) + TheSpy.Move(SpyWaypoint4.Location) + end + end) + if not RSoldier1.IsDead then + RSoldier1.Move(RStandoff.Location) + end + if not RSoldier2.IsDead then + RSoldier2.Move(RStandoff.Location) + end +end) + +Trigger.OnKilled(Hideout3Barrel, function() + if not SpyHideout3.IsDead then + SpyHideout3.UnloadPassengers() + end + Trigger.AfterDelay(DateTime.Seconds(1), function() + if not TheSpy.IsDead then + TheSpy.Move(SpyGoal.Location) + end + end) + Trigger.AfterDelay(DateTime.Seconds(7), function() + if not TheSpy.IsDead and not SpyHideout4.IsDead then + TheSpy.EnterTransport(SpyHideout4) + end + end) +end) + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + enemy = Player.GetPlayer("England") + greece = Player.GetPlayer("Greece") + Camera.Position = Playerbase.CenterPosition + IntroSequence() + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + end) + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "Lose") + end) + alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.") + sovietObjective1 = player.AddPrimaryObjective("Kill the enemy spy.") + sovietObjective2 = player.AddSecondaryObjective("Clear the nearby farm for reinforcements.") + sovietObjective3 = player.AddSecondaryObjective("Scavenge the civilian buildings for supplies.") +end + +Trigger.OnKilled(TheSpy, function() + player.MarkCompletedObjective(sovietObjective1) +end) + +Tick = function() + Trigger.AfterDelay(DateTime.Seconds(12), function() + if player.HasNoRequiredUnits() then + enemy.MarkCompletedObjective(alliedObjective) + end + end) + if not SpyHideout4.IsDead and SpyHideout4.HasPassengers then + spyReachedHideout4 = true + end + if remainingTime == DateTime.Minutes(5) and Map.LobbyOption("difficulty") ~= "hard" then + Media.PlaySpeechNotification(player, "WarningFiveMinutesRemaining") + elseif remainingTime == DateTime.Minutes(4) then + Media.PlaySpeechNotification(player, "WarningFourMinutesRemaining") + elseif remainingTime == DateTime.Minutes(3) then + Media.PlaySpeechNotification(player, "WarningThreeMinutesRemaining") + elseif remainingTime == DateTime.Minutes(2) then + Media.PlaySpeechNotification(player, "WarningTwoMinutesRemaining") + elseif remainingTime == DateTime.Minutes(1) then + Media.PlaySpeechNotification(player, "WarningOneMinuteRemaining") + end + if remainingTime > 0 and timerstarted then + UserInterface.SetMissionText("Time Remaining: " .. Utils.FormatTime(remainingTime), player.Color) + remainingTime = remainingTime - 1 + elseif remainingTime == 0 and not spyReachedHideout4 then + UserInterface.SetMissionText("") + enemy.MarkCompletedObjective(alliedObjective) + elseif remainingTime == 0 and spyReachedHideout4 then + UserInterface.SetMissionText("") + SpyHelicopterEscape() + end +end diff --git a/mods/ura/maps/soviet-04a/map.bin b/mods/ura/maps/soviet-04a/map.bin new file mode 100644 index 0000000..0366e16 Binary files /dev/null and b/mods/ura/maps/soviet-04a/map.bin differ diff --git a/mods/ura/maps/soviet-04a/map.png b/mods/ura/maps/soviet-04a/map.png new file mode 100644 index 0000000..dc77417 Binary files /dev/null and b/mods/ura/maps/soviet-04a/map.png differ diff --git a/mods/ura/maps/soviet-04a/map.yaml b/mods/ura/maps/soviet-04a/map.yaml new file mode 100644 index 0000000..6323816 --- /dev/null +++ b/mods/ura/maps/soviet-04a/map.yaml @@ -0,0 +1,617 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 04a: Behind the lines + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 38,45,72,46 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Spain: + Name: Spain + Faction: england + Allies: Greece + Enemies: USSR + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: E2E6F5 + Allies: Spain + Enemies: USSR + PlayerReference@USSR: + Name: USSR + Playable: True + AllowBots: False + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: Greece, Spain + +Actors: + Actor0: sbag + Location: 71,43 + Owner: Neutral + Actor1: sbag + Location: 72,43 + Owner: Neutral + Actor2: sbag + Location: 72,44 + Owner: Neutral + Actor3: cycl + Location: 47,45 + Owner: Neutral + Actor4: cycl + Location: 48,45 + Owner: Neutral + Actor5: cycl + Location: 49,45 + Owner: Neutral + Actor6: cycl + Location: 50,45 + Owner: Neutral + Actor7: cycl + Location: 53,45 + Owner: Neutral + Actor8: sbag + Location: 72,45 + Owner: Neutral + Actor9: sbag + Location: 72,46 + Owner: Neutral + Actor10: sbag + Location: 73,46 + Owner: Neutral + Actor11: sbag + Location: 74,46 + Owner: Neutral + Actor12: cycl + Location: 46,47 + Owner: Neutral + Actor13: sbag + Location: 72,47 + Owner: Neutral + Actor14: cycl + Location: 46,48 + Owner: Neutral + Actor15: sbag + Location: 71,48 + Owner: Neutral + Actor16: sbag + Location: 72,48 + Owner: Neutral + Actor17: cycl + Location: 46,49 + Owner: Neutral + Actor18: sbag + Location: 71,52 + Owner: Neutral + Actor19: sbag + Location: 72,52 + Owner: Neutral + Actor20: sbag + Location: 72,53 + Owner: Neutral + Actor21: sbag + Location: 72,54 + Owner: Neutral + Actor22: sbag + Location: 72,55 + Owner: Neutral + Actor23: sbag + Location: 73,55 + Owner: Neutral + Actor24: sbag + Location: 74,55 + Owner: Neutral + Actor25: sbag + Location: 72,56 + Owner: Neutral + Actor26: sbag + Location: 86,56 + Owner: Neutral + Actor27: sbag + Location: 88,56 + Owner: Neutral + Actor28: sbag + Location: 89,56 + Owner: Neutral + Actor29: sbag + Location: 90,56 + Owner: Neutral + Actor30: sbag + Location: 91,56 + Owner: Neutral + Actor31: sbag + Location: 92,56 + Owner: Neutral + Actor32: sbag + Location: 67,57 + Owner: Neutral + Actor33: sbag + Location: 68,57 + Owner: Neutral + Actor34: sbag + Location: 69,57 + Owner: Neutral + Actor35: sbag + Location: 70,57 + Owner: Neutral + Actor36: sbag + Location: 71,57 + Owner: Neutral + Actor37: sbag + Location: 72,57 + Owner: Neutral + Actor38: sbag + Location: 78,58 + Owner: Neutral + Actor39: sbag + Location: 79,58 + Owner: Neutral + Actor40: sbag + Location: 80,58 + Owner: Neutral + Actor41: sbag + Location: 81,58 + Owner: Neutral + Actor42: sbag + Location: 82,58 + Owner: Neutral + Actor43: sbag + Location: 83,58 + Owner: Neutral + Actor44: sbag + Location: 57,69 + Owner: Neutral + Actor45: sbag + Location: 61,69 + Owner: Neutral + Actor46: sbag + Location: 44,72 + Owner: Neutral + Actor47: sbag + Location: 48,72 + Owner: Neutral + Actor48: tc04 + Location: 97,67 + Owner: Neutral + Actor49: tc05 + Location: 71,79 + Owner: Neutral + Actor50: t10 + Location: 100,59 + Owner: Neutral + Actor51: t13 + Location: 78,50 + Owner: Neutral + Actor52: tc01 + Location: 68,55 + Owner: Neutral + Actor53: t08 + Location: 73,47 + Owner: Neutral + Actor54: tc01 + Location: 29,86 + Owner: Neutral + Actor55: t08 + Location: 36,84 + Owner: Neutral + Actor56: t06 + Location: 36,87 + Owner: Neutral + Actor57: t11 + Location: 38,74 + Owner: Neutral + Actor58: tc02 + Location: 42,75 + Owner: Neutral + Actor59: tc03 + Location: 60,80 + Owner: Neutral + Actor60: tc05 + Location: 54,73 + Owner: Neutral + Actor61: tc01 + Location: 47,87 + Owner: Neutral + Actor62: t16 + Location: 56,79 + Owner: Neutral + Actor63: tc04 + Location: 79,70 + Owner: Neutral + Actor64: tc01 + Location: 108,73 + Owner: Neutral + Actor65: t07 + Location: 94,60 + Owner: Neutral + Actor66: tc05 + Location: 91,66 + Owner: Neutral + Actor67: t17 + Location: 82,64 + Owner: Neutral + Actor68: tc04 + Location: 28,80 + Owner: Neutral + Actor69: tc05 + Location: 29,75 + Owner: Neutral + Actor70: tc02 + Location: 27,76 + Owner: Neutral + Actor71: t17 + Location: 42,52 + Owner: Neutral + Actor72: t01 + Location: 53,81 + Owner: Neutral + Actor73: tc01 + Location: 99,77 + Owner: Neutral + Actor74: mine + Location: 106,86 + Owner: Neutral + Actor75: mine + Location: 70,87 + Owner: Neutral + Actor76: tc04 + Location: 39,46 + Owner: Neutral + Actor77: tc05 + Location: 45,61 + Owner: Neutral + Actor78: tc02 + Location: 41,48 + Owner: Neutral + Actor79: tc04 + Location: 98,45 + Owner: Neutral + Actor80: t15 + Location: 95,48 + Owner: Neutral + Actor81: tc03 + Location: 38,68 + Owner: Neutral + Actor82: t08 + Location: 38,67 + Owner: Neutral + Actor83: t08 + Location: 40,69 + Owner: Neutral + Actor84: tc05 + Location: 38,79 + Owner: Neutral + Actor104: brl3 + Location: 95,50 + Owner: Greece + Actor105: barl + Location: 93,49 + Owner: Greece + Actor106: brl3 + Location: 94,50 + Owner: Greece + Actor107: barl + Location: 93,50 + Owner: Greece + Actor108: v19 + Location: 92,48 + Owner: Greece + Actor110: brl3 + Location: 83,57 + Owner: Greece + Actor111: barl + Location: 82,57 + Owner: Greece + Actor112: barl + Location: 81,57 + Owner: Greece + Actor113: brl3 + Location: 88,55 + Owner: Greece + Actor114: barl + Location: 87,55 + Owner: Greece + Actor115: brl3 + Location: 87,56 + Owner: Greece + Actor116: brl3 + Location: 57,46 + Owner: Greece + Actor117: barl + Location: 57,47 + Owner: Greece + Actor118: brl3 + Location: 92,50 + Owner: Greece + Actor119: barl + Location: 92,49 + Owner: Greece + Actor120: barl + Location: 94,49 + Owner: Greece + Actor133: 2tnk + Location: 69,54 + Owner: Greece + Facing: 64 + Actor136: 1tnk + Location: 59,68 + Owner: Greece + Facing: 128 + Actor137: 1tnk + Location: 46,71 + Owner: Greece + Facing: 128 + Actor139: jeep + Location: 57,54 + Owner: Greece + Facing: 96 + Actor140: 1tnk + Location: 62,46 + Owner: Greece + Facing: 160 + Actor141: 1tnk + Location: 60,57 + Owner: Greece + Facing: 128 + Actor142: 1tnk + Location: 54,57 + Owner: Greece + Facing: 128 + Actor143: 2tnk + Location: 92,53 + Owner: Greece + Facing: 192 + Actor144: 2tnk + Location: 92,55 + Owner: Greece + Facing: 192 + Actor145: 2tnk + Location: 86,58 + Owner: Greece + Facing: 160 + Actor146: jeep + Location: 89,60 + Owner: Greece + Facing: 160 + Actor151: 2tnk + Location: 40,55 + Owner: Greece + Facing: 128 + Actor152: 2tnk + Location: 44,55 + Owner: Greece + Facing: 128 + Actor154: 2tnk + Location: 67,64 + Owner: Greece + Facing: 160 + Actor155: 2tnk + Location: 69,63 + Owner: Greece + Facing: 160 + Actor159: mine + Location: 77,46 + Owner: Neutral + Radar: dome + Location: 49,46 + Owner: Greece + CYard: fact + Location: 58,45 + Owner: Greece + Proc: proc + Location: 63,53 + Owner: Greece + FreeActor: False + Silo1: silo + Location: 62,52 + Owner: Greece + Silo2: silo + Location: 63,53 + Owner: Greece + Silo3: silo + Location: 65,52 + Owner: Greece + Silo4: silo + Location: 66,53 + Owner: Greece + Barr: tent + Location: 50,52 + Owner: Greece + Gun1: gun + Location: 87,57 + Owner: Greece + Facing: 96 + Gun2: gun + Location: 84,58 + Owner: Greece + Facing: 96 + Gun3: gun + Location: 53,48 + Owner: Greece + Facing: 96 + Gun4: gun + Location: 67,65 + Owner: Greece + Facing: 96 + Gun5: gun + Location: 70,63 + Owner: Greece + Facing: 96 + Pbox1: pbox + Location: 57,70 + Owner: Greece + Pbox2: powr + Location: 51,45 + Owner: Greece + Pbox3: pbox + Location: 61,70 + Owner: Greece + Pbox4: pbox + Location: 67,63 + Owner: Greece + Pbox5: pbox + Location: 44,73 + Owner: Greece + Pbox6: pbox + Location: 48,73 + Owner: Greece + village1: v11 + Location: 57,80 + Owner: Spain + village2: v03 + Location: 49,77 + Owner: Spain + Health: 75 + village3: v02 + Location: 43,77 + Owner: Spain + village4: v01 + Location: 40,75 + Owner: Spain + village5: v05 + Location: 55,76 + Owner: Spain + Health: 39 + Weap: weap + Location: 67,45 + Owner: Greece + Gap1: gap + Location: 83,52 + Owner: Greece + Gap2: gap + Location: 59,66 + Owner: Greece + Powr1: powr + Location: 47,47 + Owner: Greece + Powr2: powr + Location: 93,46 + Owner: Greece + Powr3: powr + Location: 96,45 + Owner: Greece + APwr: apwr + Location: 49,57 + Owner: Greece + Fix1: fix + Location: 56,55 + Owner: Greece + Tank1: 3tnk + Location: 88,87 + Owner: USSR + Tank2: 3tnk + Location: 84,87 + Owner: USSR + Tank3: 3tnk + Location: 87,86 + Owner: USSR + Tank4: 3tnk + Location: 85,86 + Owner: USSR + Tank5: v2rl + Location: 86,87 + Owner: USSR + civ1: c6 + Location: 53,80 + Owner: Spain + Facing: 64 + SubCell: 2 + civ2: c7 + Location: 58,79 + Owner: Spain + SubCell: 3 + civ3: c5 + Location: 57,81 + Owner: Spain + Facing: 64 + SubCell: 3 + Harvester: harv + Location: 76,47 + Owner: Greece + Facing: 160 + Runner1: jeep + Location: 88,83 + Owner: Greece + Runner2: jeep + Location: 84,83 + Owner: Greece + Facing: 64 + GreeceCYard: waypoint + Location: 59,47 + Owner: Neutral + BridgeEntrancePoint: waypoint + Location: 83,55 + Owner: Neutral + SovietBasePoint: waypoint + Location: 86,88 + Owner: Neutral + ToRadarPoint: waypoint + Location: 42,60 + Owner: Neutral + InVillagePoint: waypoint + Location: 56,82 + Owner: Neutral + NRoadPoint: waypoint + Location: 80,45 + Owner: Neutral + SWRoadPoint: waypoint + Location: 38,90 + Owner: Neutral + VillagePoint: waypoint + Location: 57,80 + Owner: Neutral + CrossroadsNorthPoint: waypoint + Location: 80,49 + Owner: Neutral + StartPoint: waypoint + Location: 86,90 + Owner: Neutral + SovietBaseEntryPointW: waypoint + Location: 69,79 + Owner: Neutral + NearRadarPoint: waypoint + Location: 43,47 + Owner: Neutral + NERoadTurnPoint: waypoint + Location: 106,54 + Owner: Neutral + CrossroadsEastPoint: waypoint + Location: 106,64 + Owner: Neutral + VillageEntrancePoint: waypoint + Location: 59,75 + Owner: Neutral + StartCamPoint: waypoint + Location: 86,87 + Owner: Neutral + SovietBaseEntryPointNE: waypoint + Location: 96,77 + Owner: Neutral + V2MovePoint: waypoint + Location: 84,83 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/soviet-04a/rules.yaml b/mods/ura/maps/soviet-04a/rules.yaml new file mode 100644 index 0000000..e465bfe --- /dev/null +++ b/mods/ura/maps/soviet-04a/rules.yaml @@ -0,0 +1,95 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: soviet04a.lua, soviet04a-AI.lua, soviet04a-reinforcements_teams.lua + MissionData: + Briefing: The Allied base in this region is proving to be problematic.\n\nYour mission is to take it out so that we can begin to move forces through this area.\n\nAs long as they have communications they will be able to call upon heavy reinforcements.\n\nCrush their communications, and they should be easier to remove. + BriefingVideo: soviet4.vqa + StartVideo: sovmcv.vqa + WinVideo: radrraid.vqa + LossVideo: allymorf.vqa + MapOptions: + TechLevel: medium + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +AFLD: + ParatroopersPower@paratroopers: + DropItems: E1,E1,E1,E2,E2 + +TSLA: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +APWR: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +E3: + Buildable: + Prerequisites: ~tent + +E4: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +SPY: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +APC: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled + +SPEN: + Buildable: + Prerequisites: ~disabled + +SYRD: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/soviet-04a/soviet04a-AI.lua b/mods/ura/maps/soviet-04a/soviet04a-AI.lua new file mode 100644 index 0000000..475954f --- /dev/null +++ b/mods/ura/maps/soviet-04a/soviet04a-AI.lua @@ -0,0 +1,122 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +IdlingUnits = function() + local lazyUnits = Greece.GetGroundAttackers() + + Utils.Do(lazyUnits, function(unit) + Trigger.OnDamaged(unit, function() + Trigger.ClearAll(unit) + Trigger.AfterDelay(0, function() IdleHunt(unit) end) + end) + end) +end + +BaseBarracks = { type = "tent", pos = CVec.New(-9, 6), cost = 400, exists = true } +BaseProc = { type = "proc", pos = CVec.New(4, 7), cost = 1400, exists = true } +BaseWeaponsFactory = { type = "weap", pos = CVec.New(8, -1), cost = 2000, exists = true } +BaseBuildings = +{ + { type = "powr", pos = CVec.New(0, 4), cost = 300 }, + BaseBarracks, + BaseProc, + BaseWeaponsFactory +} + +BuildBase = function() + for i,v in ipairs(BaseBuildings) do + if not v.exists then + BuildBuilding(v) + return + end + end + + Trigger.AfterDelay(DateTime.Seconds(10), BuildBase) +end + +BuildBuilding = function(building) + Trigger.AfterDelay(Actor.BuildTime(building.type), function() + if CYard.IsDead or CYard.Owner ~= Greece then + return + elseif Harvester.IsDead and Greece.Resources <= 299 then + return + end + + local actor = Actor.Create(building.type, true, { Owner = Greece, Location = GreeceCYard.Location + building.pos }) + Greece.Cash = Greece.Cash - building.cost + + building.exists = true + Trigger.OnKilled(actor, function() building.exists = false end) + Trigger.OnDamaged(actor, function(building) + if building.Owner == Greece and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + + Trigger.AfterDelay(DateTime.Seconds(10), BuildBase) + end) +end + +ProduceInfantry = function() + if not BaseBarracks.exists then + return + elseif Harvester.IsDead and Greece.Resources <= 299 then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(3), DateTime.Seconds(9)) + local toBuild = { Utils.Random(AlliedInfantryTypes) } + local Path = Utils.Random(AttackPaths) + Greece.Build(toBuild, function(unit) + InfAttack[#InfAttack + 1] = unit[1] + + if #InfAttack >= 10 then + SendUnits(InfAttack, Path) + InfAttack = { } + Trigger.AfterDelay(DateTime.Minutes(2), ProduceInfantry) + else + Trigger.AfterDelay(delay, ProduceInfantry) + end + end) +end + +ProduceArmor = function() + if not BaseWeaponsFactory.exists then + return + elseif Harvester.IsDead and Greece.Resources <= 599 then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(12), DateTime.Seconds(17)) + local toBuild = { Utils.Random(AlliedArmorTypes) } + local Path = Utils.Random(AttackPaths) + Greece.Build(toBuild, function(unit) + ArmorAttack[#ArmorAttack + 1] = unit[1] + + if #ArmorAttack >= 6 then + SendUnits(ArmorAttack, Path) + ArmorAttack = { } + Trigger.AfterDelay(DateTime.Minutes(3), ProduceArmor) + else + Trigger.AfterDelay(delay, ProduceArmor) + end + end) +end + +SendUnits = function(units, waypoints) + Utils.Do(units, function(unit) + if not unit.IsDead then + Utils.Do(waypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) + unit.Hunt() + end + end) +end diff --git a/mods/ura/maps/soviet-04a/soviet04a-reinforcements_teams.lua b/mods/ura/maps/soviet-04a/soviet04a-reinforcements_teams.lua new file mode 100644 index 0000000..e266ce4 --- /dev/null +++ b/mods/ura/maps/soviet-04a/soviet04a-reinforcements_teams.lua @@ -0,0 +1,96 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +Civs = { civ1, civ2, civ3 } +Village = { civ1, civ2, civ3, village1, village2, village5 } +SovietMCV = { "mcv" } +InfantryReinfGreece = { "e1", "e1", "e1", "e1", "e1" } +Avengers = { "jeep", "1tnk", "2tnk", "2tnk", "1tnk" } +Patrol1Group = { "jeep", "jeep", "2tnk", "2tnk" } +Patrol2Group = { "jeep", "1tnk", "1tnk", "1tnk" } +AlliedInfantryTypes = { "e1", "e3" } +AlliedArmorTypes = { "jeep", "jeep", "1tnk", "1tnk", "1tnk" } +InfAttack = { } +ArmorAttack = { } + +SovietStartToBasePath = { StartPoint.Location, SovietBasePoint.Location } +InfReinfPath = { SWRoadPoint.Location, InVillagePoint.Location } +ArmorReinfPath = { NRoadPoint.Location, CrossroadsNorthPoint.Location } +Patrol1Path = { NearRadarPoint.Location, ToRadarPoint.Location, InVillagePoint.Location, ToRadarPoint.Location } +Patrol2Path = { BridgeEntrancePoint.Location, NERoadTurnPoint.Location, CrossroadsEastPoint.Location, BridgeEntrancePoint.Location } + +VillageCamArea = { CPos.New(68, 75),CPos.New(68, 76),CPos.New(68, 77),CPos.New(68, 78),CPos.New(68, 79), CPos.New(68, 80), CPos.New(68, 81), CPos.New(68, 82) } + +if Map.LobbyOption("difficulty") == "easy" then + ArmorReinfGreece = { "jeep", "1tnk", "1tnk" } +else + ArmorReinfGreece = { "jeep", "jeep", "1tnk", "1tnk", "1tnk" } +end + +AttackPaths = +{ + { VillageEntrancePoint }, + { BridgeEntrancePoint, NERoadTurnPoint, CrossroadsEastPoint } +} + +ReinfInf = function() + if Radar.IsDead or Radar.Owner ~= Greece then + return + end + + Reinforcements.Reinforce(Greece, InfantryReinfGreece, InfReinfPath, 0, function(soldier) + soldier.Hunt() + end) +end + +ReinfArmor = function() + if not Radar.IsDead and Radar.Owner == Greece then + RCheck = true + Reinforcements.Reinforce(Greece, ArmorReinfGreece, ArmorReinfPath, 0, function(soldier) + soldier.Hunt() + end) + end +end + +BringPatrol1 = function() + if Radar.IsDead or Radar.Owner ~= Greece then + return + end + + local units = Reinforcements.Reinforce(Greece, Patrol1Group, { SWRoadPoint.Location }, 0) + Utils.Do(units, function(patrols) + patrols.Patrol(Patrol1Path, true, 250) + end) + + Trigger.OnAllKilled(units, function() + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Minutes(4), BringPatrol1) + else + Trigger.AfterDelay(DateTime.Minutes(7), BringPatrol1) + end + end) +end + +BringPatrol2 = function() + if Radar.IsDead or Radar.Owner ~= Greece then + return + end + + local units = Reinforcements.Reinforce(Greece, Patrol2Group, { NRoadPoint.Location }, 0) + Utils.Do(units, function(patrols) + patrols.Patrol(Patrol2Path, true, 250) + end) + + Trigger.OnAllKilled(units, function() + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Minutes(4), BringPatrol2) + else + Trigger.AfterDelay(DateTime.Minutes(7), BringPatrol2) + end + end) +end diff --git a/mods/ura/maps/soviet-04a/soviet04a.lua b/mods/ura/maps/soviet-04a/soviet04a.lua new file mode 100644 index 0000000..dbcffbb --- /dev/null +++ b/mods/ura/maps/soviet-04a/soviet04a.lua @@ -0,0 +1,163 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] + +RunInitialActivities = function() + Harvester.FindResources() + IdlingUnits() + Trigger.AfterDelay(10, function() + BringPatrol1() + BringPatrol2() + BuildBase() + end) + + Utils.Do(Map.NamedActors, function(actor) + if actor.Owner == Greece and actor.HasProperty("StartBuildingRepairs") then + Trigger.OnDamaged(actor, function(building) + if building.Owner == Greece and building.Health < 3/4 * building.MaxHealth then + building.StartBuildingRepairs() + end + end) + end + end) + + Reinforcements.Reinforce(player, SovietMCV, SovietStartToBasePath, 0, function(mcv) + mcv.Move(StartCamPoint.Location) + end) + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + + Trigger.OnKilled(Barr, function(building) + BaseBarracks.exists = false + end) + + Trigger.OnKilled(Proc, function(building) + BaseProc.exists = false + end) + + Trigger.OnKilled(Weap, function(building) + BaseWeaponsFactory.exists = false + end) + + Trigger.OnEnteredFootprint(VillageCamArea, function(actor, id) + if actor.Owner == player then + Trigger.RemoveFootprintTrigger(id) + + if not AllVillagersDead then + VillageCamera = Actor.Create("camera", true, { Owner = player, Location = VillagePoint.Location }) + end + end + end) + + Trigger.OnAllKilled(Village, function() + if VillageCamera then + VillageCamera.Destroy() + end + AllVillagersDead = true + end) + + Trigger.OnAnyKilled(Civs, function() + Trigger.ClearAll(civ1) + Trigger.ClearAll(civ2) + Trigger.ClearAll(civ3) + local units = Reinforcements.Reinforce(Greece, Avengers, { SWRoadPoint.Location }, 0) + Utils.Do(units, function(unit) + unit.Hunt() + end) + end) + + Runner1.Move(CrossroadsEastPoint.Location) + Runner2.Move(InVillagePoint.Location) + Tank5.Move(V2MovePoint.Location) + Trigger.AfterDelay(DateTime.Seconds(2), function() + Tank1.Stop() + Tank2.Stop() + Tank3.Stop() + Tank4.Stop() + Tank5.Stop() + Trigger.AfterDelay(1, function() + Tank1.Move(SovietBaseEntryPointNE.Location) + Tank2.Move(SovietBaseEntryPointW.Location) + Tank3.Move(SovietBaseEntryPointNE.Location) + Tank4.Move(SovietBaseEntryPointW.Location) + Tank5.Move(V2MovePoint.Location) + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry) + Trigger.AfterDelay(DateTime.Minutes(2), ProduceArmor) + + if Map.LobbyOption("difficulty") == "hard" or Map.LobbyOption("difficulty") == "normal" then + Trigger.AfterDelay(DateTime.Seconds(15), ReinfInf) + end + Trigger.AfterDelay(DateTime.Minutes(1), ReinfInf) + Trigger.AfterDelay(DateTime.Minutes(3), ReinfInf) + Trigger.AfterDelay(DateTime.Minutes(2), ReinfArmor) +end + +Tick = function() + if Greece.HasNoRequiredUnits() then + player.MarkCompletedObjective(KillAll) + player.MarkCompletedObjective(KillRadar) + end + + if player.HasNoRequiredUnits() then + Greece.MarkCompletedObjective(BeatUSSR) + end + + if Greece.Resources >= Greece.ResourceCapacity * 0.75 then + Greece.Cash = Greece.Cash + Greece.Resources - Greece.ResourceCapacity * 0.25 + Greece.Resources = Greece.ResourceCapacity * 0.25 + end + + if RCheck then + RCheck = false + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Seconds(150), ReinfArmor) + elseif Map.LobbyOption("difficulty") == "normal" then + Trigger.AfterDelay(DateTime.Minutes(5), ReinfArmor) + else + Trigger.AfterDelay(DateTime.Minutes(8), ReinfArmor) + end + end +end + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + Greece = Player.GetPlayer("Greece") + + RunInitialActivities() + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + KillAll = player.AddPrimaryObjective("Defeat the Allied forces.") + BeatUSSR = Greece.AddPrimaryObjective("Defeat the Soviet forces.") + KillRadar = player.AddSecondaryObjective("Destroy Allied Radar Dome to stop enemy\nreinforcements.") + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "Lose") + end) + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + end) + + Trigger.OnKilled(Radar, function() + player.MarkCompletedObjective(KillRadar) + Media.PlaySpeechNotification(player, "ObjectiveMet") + end) + + Camera.Position = StartCamPoint.CenterPosition +end diff --git a/mods/ura/maps/soviet-04b/map.bin b/mods/ura/maps/soviet-04b/map.bin new file mode 100644 index 0000000..a4df51f Binary files /dev/null and b/mods/ura/maps/soviet-04b/map.bin differ diff --git a/mods/ura/maps/soviet-04b/map.png b/mods/ura/maps/soviet-04b/map.png new file mode 100644 index 0000000..dc77417 Binary files /dev/null and b/mods/ura/maps/soviet-04b/map.png differ diff --git a/mods/ura/maps/soviet-04b/map.yaml b/mods/ura/maps/soviet-04b/map.yaml new file mode 100644 index 0000000..a9012a1 --- /dev/null +++ b/mods/ura/maps/soviet-04b/map.yaml @@ -0,0 +1,648 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 04b: Behind the lines + +Author: Westwood Studios + +Tileset: SNOW + +MapSize: 128,128 + +Bounds: 28,45,91,49 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Spain: + Name: Spain + Faction: england + Allies: Greece + Enemies: USSR + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: E2E6F5 + Allies: Spain + Enemies: USSR + PlayerReference@USSR: + Name: USSR + Playable: True + AllowBots: False + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: Greece, Spain + +Actors: + Helper: proc + Owner: Greece + Location: 92,75 + FreeActor: False + Actor0: sbag + Location: 85,50 + Owner: Neutral + Actor1: sbag + Location: 86,50 + Owner: Neutral + Actor2: sbag + Location: 103,50 + Owner: Neutral + Actor3: sbag + Location: 104,50 + Owner: Neutral + Actor4: sbag + Location: 105,50 + Owner: Neutral + Actor5: sbag + Location: 106,50 + Owner: Neutral + Actor6: sbag + Location: 109,50 + Owner: Neutral + Actor7: sbag + Location: 110,50 + Owner: Neutral + Actor8: sbag + Location: 113,50 + Owner: Neutral + Actor9: sbag + Location: 114,50 + Owner: Neutral + Actor10: sbag + Location: 85,51 + Owner: Neutral + Actor11: sbag + Location: 106,51 + Owner: Neutral + Actor12: sbag + Location: 109,51 + Owner: Neutral + Actor13: sbag + Location: 114,51 + Owner: Neutral + Actor14: sbag + Location: 85,52 + Owner: Neutral + Actor15: sbag + Location: 106,52 + Owner: Neutral + Actor16: sbag + Location: 109,52 + Owner: Neutral + Actor17: sbag + Location: 114,52 + Owner: Neutral + Actor18: sbag + Location: 85,53 + Owner: Neutral + Actor19: sbag + Location: 106,53 + Owner: Neutral + Actor20: sbag + Location: 109,53 + Owner: Neutral + Actor21: sbag + Location: 110,53 + Owner: Neutral + Actor22: sbag + Location: 113,53 + Owner: Neutral + Actor23: sbag + Location: 114,53 + Owner: Neutral + Actor24: sbag + Location: 85,54 + Owner: Neutral + Actor25: sbag + Location: 106,54 + Owner: Neutral + Actor26: sbag + Location: 106,55 + Owner: Neutral + Actor27: sbag + Location: 106,56 + Owner: Neutral + Actor28: sbag + Location: 106,57 + Owner: Neutral + Actor29: sbag + Location: 106,58 + Owner: Neutral + Actor30: sbag + Location: 85,59 + Owner: Neutral + Actor31: sbag + Location: 106,59 + Owner: Neutral + Actor32: sbag + Location: 85,60 + Owner: Neutral + Actor33: sbag + Location: 106,60 + Owner: Neutral + Actor34: sbag + Location: 85,61 + Owner: Neutral + Actor35: sbag + Location: 106,61 + Owner: Neutral + Actor36: sbag + Location: 85,62 + Owner: Neutral + Actor37: sbag + Location: 101,62 + Owner: Neutral + Actor38: sbag + Location: 102,62 + Owner: Neutral + Actor39: sbag + Location: 103,62 + Owner: Neutral + Actor40: sbag + Location: 104,62 + Owner: Neutral + Actor41: sbag + Location: 105,62 + Owner: Neutral + Actor42: sbag + Location: 106,62 + Owner: Neutral + Actor43: sbag + Location: 85,63 + Owner: Neutral + Actor44: sbag + Location: 100,63 + Owner: Neutral + Actor45: sbag + Location: 101,63 + Owner: Neutral + Actor46: sbag + Location: 85,64 + Owner: Neutral + Actor47: sbag + Location: 86,64 + Owner: Neutral + Actor48: sbag + Location: 87,64 + Owner: Neutral + Actor49: sbag + Location: 88,64 + Owner: Neutral + Actor50: sbag + Location: 89,64 + Owner: Neutral + Actor51: sbag + Location: 90,64 + Owner: Neutral + Actor52: sbag + Location: 97,64 + Owner: Neutral + Actor53: sbag + Location: 98,64 + Owner: Neutral + Actor54: sbag + Location: 99,64 + Owner: Neutral + Actor55: sbag + Location: 100,64 + Owner: Neutral + Actor56: t01 + Location: 112,62 + Owner: Neutral + Actor57: tc01 + Location: 109,61 + Owner: Neutral + Actor58: tc04 + Location: 110,45 + Owner: Neutral + Actor59: tc03 + Location: 114,45 + Owner: Neutral + Actor60: tc05 + Location: 99,45 + Owner: Neutral + Actor61: tc01 + Location: 117,79 + Owner: Neutral + Actor62: tc02 + Location: 109,79 + Owner: Neutral + Actor63: tc01 + Location: 113,48 + Owner: Neutral + Actor64: tc04 + Location: 116,51 + Owner: Neutral + Actor65: tc05 + Location: 113,53 + Owner: Neutral + Actor66: tc02 + Location: 109,54 + Owner: Neutral + Actor67: tc05 + Location: 73,60 + Owner: Neutral + Actor68: tc04 + Location: 82,63 + Owner: Neutral + Actor69: tc01 + Location: 77,62 + Owner: Neutral + Actor70: tc02 + Location: 78,60 + Owner: Neutral + Actor71: tc05 + Location: 95,66 + Owner: Neutral + Actor72: tc03 + Location: 86,62 + Owner: Neutral + Actor73: tc02 + Location: 95,69 + Owner: Neutral + Actor74: tc01 + Location: 102,62 + Owner: Neutral + Actor75: t11 + Location: 107,61 + Owner: Neutral + Actor76: tc04 + Location: 82,49 + Owner: Neutral + Actor77: tc04 + Location: 50,69 + Owner: Neutral + Actor78: tc01 + Location: 58,70 + Owner: Neutral + Actor79: tc01 + Location: 84,89 + Owner: Neutral + Actor80: tc04 + Location: 94,80 + Owner: Neutral + Actor81: tc05 + Location: 93,85 + Owner: Neutral + Actor82: tc05 + Location: 29,55 + Owner: Neutral + Actor83: tc03 + Location: 39,48 + Owner: Neutral + Actor84: tc02 + Location: 29,51 + Owner: Neutral + Actor85: tc01 + Location: 36,56 + Owner: Neutral + Actor86: tc04 + Location: 42,48 + Owner: Neutral + Actor87: t15 + Location: 36,50 + Owner: Neutral + Actor88: tc05 + Location: 48,49 + Owner: Neutral + Actor89: tc04 + Location: 67,49 + Owner: Neutral + Actor90: t17 + Location: 71,71 + Owner: Neutral + Actor91: tc04 + Location: 50,78 + Owner: Neutral + Actor92: tc04 + Location: 34,65 + Owner: Neutral + Actor93: tc04 + Location: 57,91 + Owner: Neutral + Actor94: tc05 + Location: 60,91 + Owner: Neutral + Actor95: tc02 + Location: 72,90 + Owner: Neutral + Actor114: pbox + Location: 89,65 + Owner: Greece + Actor115: pbox + Location: 97,65 + Owner: Greece + Actor116: pbox + Location: 84,60 + Owner: Greece + Actor117: pbox + Location: 84,53 + Owner: Greece + Actor118: pbox + Location: 51,71 + Owner: Greece + Actor119: pbox + Location: 57,71 + Owner: Greece + Actor125: gun + Location: 84,61 + Owner: Greece + Facing: 192 + Actor126: gun + Location: 97,63 + Owner: Greece + Facing: 128 + Actor129: 1tnk + Location: 56,71 + Owner: Greece + Facing: 96 + Actor130: 1tnk + Location: 53,71 + Owner: Greece + Facing: 96 + Actor135: mcv + Location: 33,90 + Owner: USSR + Actor136: 1tnk + Location: 117,62 + Owner: Greece + Facing: 96 + Actor137: 1tnk + Location: 114,62 + Owner: Greece + Facing: 96 + Actor138: 2tnk + Location: 111,53 + Owner: Greece + Facing: 128 + Actor139: 2tnk + Location: 112,53 + Owner: Greece + Facing: 128 + Actor142: jeep + Location: 74,91 + Owner: Greece + Actor143: jeep + Location: 48,49 + Owner: Greece + Facing: 160 + Actor144: 1tnk + Location: 86,90 + Owner: Greece + Facing: 32 + Actor145: 1tnk + Location: 96,86 + Owner: Greece + Facing: 96 + Actor146: 2tnk + Location: 96,47 + Owner: Greece + Facing: 160 + Actor148: e1 + Location: 76,57 + Owner: Greece + SubCell: 0 + Actor149: e1 + Location: 77,58 + Owner: Greece + SubCell: 2 + Actor150: e1 + Location: 76,58 + Owner: Greece + SubCell: 0 + Actor151: e3 + Location: 73,58 + Owner: Greece + SubCell: 0 + Actor152: e3 + Location: 72,57 + Owner: Greece + SubCell: 4 + Actor153: e3 + Location: 72,58 + Owner: Greece + SubCell: 2 + Actor154: e3 + Location: 95,80 + Owner: Greece + SubCell: 3 + Actor155: e3 + Location: 96,80 + Owner: Greece + SubCell: 0 + Actor160: dog + Location: 33,86 + Owner: USSR + SubCell: 1 + Actor161: dog + Location: 34,86 + Owner: USSR + SubCell: 1 + Actor162: dog + Location: 33,85 + Owner: USSR + SubCell: 1 + Actor163: dog + Location: 34,85 + Owner: USSR + SubCell: 1 + Actor164: e3 + Location: 102,53 + Owner: Greece + SubCell: 1 + Actor165: e3 + Location: 95,52 + Owner: Greece + SubCell: 0 + Actor166: e3 + Location: 102,57 + Owner: Greece + SubCell: 0 + Actor167: mine + Location: 37,55 + Owner: Neutral + Actor168: mine + Location: 52,88 + Owner: Neutral + Actor169: mine + Location: 91,87 + Owner: Neutral + Radar: dome + Location: 111,50 + Owner: Greece + Pbox1: pbox + Location: 111,80 + Owner: Greece + Pbox2: pbox + Location: 116,80 + Owner: Greece + NavyYard: syrd + Location: 78,65 + Owner: Greece + CYard: fact + Location: 103,51 + Owner: Greece + Proc: proc + Location: 99,54 + Owner: Greece + FreeActor: False + Silo1: silo + Location: 104,55 + Owner: Greece + Silo2: silo + Location: 104,56 + Owner: Greece + Silo3: silo + Location: 105,56 + Owner: Greece + Silo4: silo + Location: 105,55 + Owner: Greece + Powr: powr + Location: 100,50 + Owner: Greece + Powr2: powr + Location: 88,61 + Owner: Greece + Powr3: powr + Location: 96,50 + Owner: Greece + Powr4: powr + Location: 86,52 + Owner: Greece + Powr5: powr + Location: 89,51 + Owner: Greece + Powr6: powr + Location: 98,50 + Owner: Greece + Barr: tent + Location: 96,54 + Owner: Greece + Gap1: gap + Location: 86,51 + Owner: Greece + Gap2: gap + Location: 90,63 + Owner: Greece + Weap: weap + Location: 92,50 + Owner: Greece + village1: v01 + Location: 37,48 + Owner: Spain + village2: v03 + Location: 42,47 + Owner: Spain + village3: v05 + Location: 44,50 + Owner: Spain + village4: v06 + Location: 40,50 + Owner: Spain + village5: v07 + Location: 36,52 + Owner: Spain + Harvester: harv + Location: 93,78 + Owner: Greece + Facing: 128 + Tank1: 3tnk + Location: 32,87 + Owner: USSR + Tank2: 3tnk + Location: 34,87 + Owner: USSR + Tank3: v2rl + Location: 32,88 + Owner: USSR + Tank4: v2rl + Location: 34,88 + Owner: USSR + civ1: c1 + Location: 41,53 + Owner: Spain + Facing: 160 + SubCell: 0 + civ2: c2 + Location: 47,49 + Owner: Spain + Facing: 224 + SubCell: 1 + civ3: c3 + Location: 39,51 + Owner: Spain + SubCell: 2 + civ4: c4 + Location: 46,52 + Owner: Spain + Facing: 96 + SubCell: 4 + Guard1: 1tnk + Location: 105,59 + Owner: Greece + Facing: 64 + Guard2: 1tnk + Location: 105,60 + Owner: Greece + Facing: 64 + Guard3: 2tnk + Location: 105,61 + Owner: Greece + Facing: 64 + NRoadPoint: waypoint + Location: 75,45 + Owner: Neutral + CrossroadsPoint: waypoint + Location: 74,57 + Owner: Neutral + VillagePoint: waypoint + Location: 40,58 + Owner: Neutral + ToVillageRoadPoint: waypoint + Location: 52,57 + Owner: Neutral + InBasePoint: waypoint + Location: 94,57 + Owner: Neutral + OrefieldSouthPoint: waypoint + Location: 91,84 + Owner: Neutral + ToBridgePoint: waypoint + Location: 66,66 + Owner: Neutral + ToRadarBridgePoint: waypoint + Location: 107,88 + Owner: Neutral + IslandPoint: waypoint + Location: 113,75 + Owner: Neutral + EntranceSouthPoint: waypoint + Location: 93,67 + Owner: Neutral + GreeceCYard: waypoint + Location: 104,52 + Owner: Neutral + VillageCamPoint: waypoint + Location: 43,52 + Owner: Neutral + StartCamPoint: waypoint + Location: 33,88 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/soviet-04b/rules.yaml b/mods/ura/maps/soviet-04b/rules.yaml new file mode 100644 index 0000000..da697fa --- /dev/null +++ b/mods/ura/maps/soviet-04b/rules.yaml @@ -0,0 +1,87 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: soviet04b.lua, soviet04b-AI.lua, soviet04b-reinforcements_teams.lua + MissionData: + Briefing: The Allied base in this region is proving to be problematic.\n\nYour mission is to take it out so that we can begin to move forces through this area.\n\nAs long as they have communications they will be able to call upon heavy reinforcements.\n\nCrush their communications, and they should be easier to remove. + BriefingVideo: soviet4.vqa + StartVideo: sovmcv.vqa + WinVideo: radrraid.vqa + LossVideo: allymorf.vqa + MapOptions: + TechLevel: medium + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +AFLD: + ParatroopersPower@paratroopers: + DropItems: E1,E1,E1,E2,E2 + +TSLA: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +APWR: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +E3: + Buildable: + Prerequisites: ~tent + +E4: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +SPY: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +APC: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/soviet-04b/soviet04b-AI.lua b/mods/ura/maps/soviet-04b/soviet04b-AI.lua new file mode 100644 index 0000000..1fd6bc7 --- /dev/null +++ b/mods/ura/maps/soviet-04b/soviet04b-AI.lua @@ -0,0 +1,118 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +IdlingUnits = function() + local lazyUnits = Greece.GetGroundAttackers() + + Utils.Do(lazyUnits, function(unit) + Trigger.OnDamaged(unit, function() + Trigger.ClearAll(unit) + Trigger.AfterDelay(0, function() IdleHunt(unit) end) + end) + end) +end + +BasePower = { type = "powr", pos = CVec.New(-4, -2), cost = 300, exists = true } +BaseBarracks = { type = "tent", pos = CVec.New(-8, 1), cost = 400, exists = true } +BaseProc = { type = "proc", pos = CVec.New(-5, 1), cost = 1400, exists = true } +BaseWeaponsFactory = { type = "weap", pos = CVec.New(-12, -1), cost = 2000, exists = true } + +BaseBuildings = { BasePower, BaseBarracks, BaseProc, BaseWeaponsFactory } + +BuildBase = function() + for i,v in ipairs(BaseBuildings) do + if not v.exists then + BuildBuilding(v) + return + end + end + + Trigger.AfterDelay(DateTime.Seconds(10), BuildBase) +end + +BuildBuilding = function(building) + Trigger.AfterDelay(Actor.BuildTime(building.type), function() + if CYard.IsDead or CYard.Owner ~= Greece then + return + elseif Harvester.IsDead and Greece.Resources <= 299 then + return + end + + local actor = Actor.Create(building.type, true, { Owner = Greece, Location = GreeceCYard.Location + building.pos }) + Greece.Cash = Greece.Cash - building.cost + + building.exists = true + Trigger.OnKilled(actor, function() building.exists = false end) + Trigger.OnDamaged(actor, function(building) + if building.Owner == Greece and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + + Trigger.AfterDelay(DateTime.Seconds(10), BuildBase) + end) +end + +ProduceInfantry = function() + if not BaseBarracks.exists then + return + elseif Harvester.IsDead and Greece.Resources <= 299 then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(3), DateTime.Seconds(9)) + local toBuild = { Utils.Random(AlliedInfantryTypes) } + local Path = Utils.Random(AttackPaths) + Greece.Build(toBuild, function(unit) + InfAttack[#InfAttack + 1] = unit[1] + + if #InfAttack >= 10 then + SendUnits(InfAttack, Path) + InfAttack = { } + Trigger.AfterDelay(DateTime.Minutes(2), ProduceInfantry) + else + Trigger.AfterDelay(delay, ProduceInfantry) + end + end) +end + +ProduceArmor = function() + if not BaseWeaponsFactory.exists then + return + elseif Harvester.IsDead and Greece.Resources <= 599 then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(12), DateTime.Seconds(17)) + local toBuild = { Utils.Random(AlliedArmorTypes) } + local Path = Utils.Random(AttackPaths) + Greece.Build(toBuild, function(unit) + ArmorAttack[#ArmorAttack + 1] = unit[1] + + if #ArmorAttack >= 6 then + SendUnits(ArmorAttack, Path) + ArmorAttack = { } + Trigger.AfterDelay(DateTime.Minutes(3), ProduceArmor) + else + Trigger.AfterDelay(delay, ProduceArmor) + end + end) +end + +SendUnits = function(units, waypoints) + Utils.Do(units, function(unit) + if not unit.IsDead then + Utils.Do(waypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) + unit.Hunt() + end + end) +end diff --git a/mods/ura/maps/soviet-04b/soviet04b-reinforcements_teams.lua b/mods/ura/maps/soviet-04b/soviet04b-reinforcements_teams.lua new file mode 100644 index 0000000..03ae034 --- /dev/null +++ b/mods/ura/maps/soviet-04b/soviet04b-reinforcements_teams.lua @@ -0,0 +1,96 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +Civs = { civ1, civ2, civ3, civ4 } +Village = { civ1, civ3, civ4, village1, village3 } +Guards = { Guard1, Guard2, Guard3 } +SovietMCV = { "mcv" } +InfantryReinfGreece = { "e1", "e1", "e1", "e1", "e1" } +Avengers = { "jeep", "1tnk", "2tnk", "2tnk", "1tnk" } +Patrol1Group = { "jeep", "jeep", "2tnk", "2tnk" } +Patrol2Group = { "jeep", "1tnk", "1tnk", "1tnk" } +AlliedInfantryTypes = { "e1", "e3" } +AlliedArmorTypes = { "jeep", "jeep", "1tnk", "1tnk", "1tnk" } +InfAttack = { } +ArmorAttack = { } + +InfReinfPath = { NRoadPoint.Location, CrossroadsPoint.Location, ToVillageRoadPoint.Location, VillagePoint.Location } +Patrol1Path = { ToVillageRoadPoint.Location, ToBridgePoint.Location, InBasePoint.Location } +Patrol2Path = { EntranceSouthPoint.Location, ToRadarBridgePoint.Location, IslandPoint.Location, ToRadarBridgePoint.Location } + +VillageCamArea = { CPos.New(37, 58),CPos.New(37, 59),CPos.New(37, 60),CPos.New(38, 60),CPos.New(39, 60), CPos.New(40, 60), CPos.New(41, 60), CPos.New(35, 57), CPos.New(34, 57), CPos.New(33, 57), CPos.New(32, 57) } + +if Map.LobbyOption("difficulty") == "easy" then + ArmorReinfGreece = { "jeep", "1tnk", "1tnk" } +else + ArmorReinfGreece = { "jeep", "jeep", "1tnk", "1tnk", "1tnk" } +end + +AttackPaths = +{ + { CrossroadsPoint, ToVillageRoadPoint, VillagePoint }, + { EntranceSouthPoint, OrefieldSouthPoint }, + { CrossroadsPoint, ToBridgePoint } +} + +ReinfInf = function() + if Radar.IsDead or Radar.Owner ~= Greece then + return + end + + Reinforcements.Reinforce(Greece, InfantryReinfGreece, InfReinfPath, 0, function(soldier) + soldier.Hunt() + end) +end + +ReinfArmor = function() + if not Radar.IsDead and Radar.Owner == Greece then + RCheck = true + Reinforcements.Reinforce(Greece, ArmorReinfGreece, InfReinfPath, 0, function(soldier) + soldier.Hunt() + end) + end +end + +BringPatrol1 = function() + if Radar.IsDead or Radar.Owner ~= Greece then + return + end + + local units = Reinforcements.Reinforce(Greece, Patrol1Group, { NRoadPoint.Location }, 0) + Utils.Do(units, function(patrols) + patrols.Patrol(Patrol1Path, true, 250) + end) + + Trigger.OnAllKilled(units, function() + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Minutes(4), BringPatrol1) + else + Trigger.AfterDelay(DateTime.Minutes(7), BringPatrol1) + end + end) +end + +BringPatrol2 = function() + if Radar.IsDead or Radar.Owner ~= Greece then + return + end + + local units = Reinforcements.Reinforce(Greece, Patrol2Group, { NRoadPoint.Location }, 0) + Utils.Do(units, function(patrols) + patrols.Patrol(Patrol2Path, true, 250) + end) + + Trigger.OnAllKilled(units, function() + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Minutes(4), BringPatrol2) + else + Trigger.AfterDelay(DateTime.Minutes(7), BringPatrol2) + end + end) +end diff --git a/mods/ura/maps/soviet-04b/soviet04b.lua b/mods/ura/maps/soviet-04b/soviet04b.lua new file mode 100644 index 0000000..0d5d4d9 --- /dev/null +++ b/mods/ura/maps/soviet-04b/soviet04b.lua @@ -0,0 +1,156 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] + +RunInitialActivities = function() + Harvester.FindResources() + Helper.Destroy() + IdlingUnits() + Trigger.AfterDelay(DateTime.Seconds(1), function() + BringPatrol1() + Trigger.AfterDelay(DateTime.Seconds(5), function() + BringPatrol2() + end) + BuildBase() + end) + + Utils.Do(Map.NamedActors, function(actor) + if actor.Owner == Greece and actor.HasProperty("StartBuildingRepairs") then + Trigger.OnDamaged(actor, function(building) + if building.Owner == Greece and building.Health < 3/4 * building.MaxHealth then + building.StartBuildingRepairs() + end + end) + end + end) + + Trigger.OnKilled(Powr, function(building) + BasePower.exists = false + end) + + Trigger.OnKilled(Barr, function(building) + BaseBarracks.exists = false + end) + + Trigger.OnKilled(Proc, function(building) + BaseProc.exists = false + end) + + Trigger.OnKilled(Weap, function(building) + BaseWeaponsFactory.exists = false + end) + + Trigger.OnEnteredFootprint(VillageCamArea, function(actor, id) + if actor.Owner == player then + Trigger.RemoveFootprintTrigger(id) + + if not AllVillagersDead then + VillageCamera = Actor.Create("camera", true, { Owner = player, Location = VillagePoint.Location }) + end + end + end) + + Trigger.OnAllKilled(Village, function() + if VillageCamera then + VillageCamera.Destroy() + end + AllVillagersDead = true + end) + + Trigger.OnAnyKilled(Civs, function() + Trigger.ClearAll(civ1) + Trigger.ClearAll(civ2) + Trigger.ClearAll(civ3) + Trigger.ClearAll(civ4) + local units = Reinforcements.Reinforce(Greece, Avengers, { NRoadPoint.Location }, 0) + Utils.Do(units, function(unit) + unit.Hunt() + end) + end) + + Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry) + Trigger.AfterDelay(DateTime.Minutes(2), ProduceArmor) + + if Map.LobbyOption("difficulty") == "hard" or Map.LobbyOption("difficulty") == "normal" then + Trigger.AfterDelay(DateTime.Seconds(5), ReinfInf) + end + Trigger.AfterDelay(DateTime.Minutes(1), ReinfInf) + Trigger.AfterDelay(DateTime.Minutes(3), ReinfInf) + Trigger.AfterDelay(DateTime.Minutes(2), ReinfArmor) +end + +Tick = function() + if Greece.HasNoRequiredUnits() then + player.MarkCompletedObjective(KillAll) + player.MarkCompletedObjective(KillRadar) + end + + if player.HasNoRequiredUnits() then + Greece.MarkCompletedObjective(BeatUSSR) + end + + if Greece.Resources >= Greece.ResourceCapacity * 0.75 then + Greece.Cash = Greece.Cash + Greece.Resources - Greece.ResourceCapacity * 0.25 + Greece.Resources = Greece.ResourceCapacity * 0.25 + end + + if RCheck then + RCheck = false + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Seconds(150), ReinfArmor) + elseif Map.LobbyOption("difficulty") == "normal" then + Trigger.AfterDelay(DateTime.Minutes(5), ReinfArmor) + else + Trigger.AfterDelay(DateTime.Minutes(8), ReinfArmor) + end + end +end + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + Greece = Player.GetPlayer("Greece") + + RunInitialActivities() + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + KillAll = player.AddPrimaryObjective("Defeat the Allied forces.") + BeatUSSR = Greece.AddPrimaryObjective("Defeat the Soviet forces.") + KillRadar = player.AddSecondaryObjective("Destroy Allied Radar Dome to stop enemy\nreinforcements.") + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "Lose") + end) + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + end) + + Trigger.OnKilled(Radar, function() + player.MarkCompletedObjective(KillRadar) + Media.PlaySpeechNotification(player, "ObjectiveMet") + end) + + Trigger.OnDamaged(Harvester, function() + Utils.Do(Guards, function(unit) + if not unit.IsDead and not Harvester.IsDead then + unit.AttackMove(Harvester.Location) + end + end) + end) + + Camera.Position = StartCamPoint.CenterPosition +end diff --git a/mods/ura/maps/soviet-05/map.bin b/mods/ura/maps/soviet-05/map.bin new file mode 100644 index 0000000..68e748c Binary files /dev/null and b/mods/ura/maps/soviet-05/map.bin differ diff --git a/mods/ura/maps/soviet-05/map.png b/mods/ura/maps/soviet-05/map.png new file mode 100644 index 0000000..dc77417 Binary files /dev/null and b/mods/ura/maps/soviet-05/map.png differ diff --git a/mods/ura/maps/soviet-05/map.yaml b/mods/ura/maps/soviet-05/map.yaml new file mode 100644 index 0000000..5195653 --- /dev/null +++ b/mods/ura/maps/soviet-05/map.yaml @@ -0,0 +1,605 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 05: Distant Thunder + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 20,42,90,50 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: E2E6F5 + Allies: GoodGuy, France + Enemies: USSR + PlayerReference@USSR: + Name: USSR + Faction: soviet + Playable: True + AllowBots: False + Required: True + LockFaction: True + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: Greece, GoodGuy, France + PlayerReference@GoodGuy: + Name: GoodGuy + Faction: allies + Color: E2E6F5 + Allies: Greece, France + Enemies: USSR + PlayerReference@France: + Name: France + Faction: allies + Color: 0CF7B2 + Allies: Greece, GoodGuy + Enemies: USSR + +Actors: + Actor0: sbag + Location: 60,42 + Owner: Neutral + Actor1: sbag + Location: 61,42 + Owner: Neutral + Actor2: sbag + Location: 60,43 + Owner: Neutral + Actor3: sbag + Location: 60,44 + Owner: Neutral + Actor4: sbag + Location: 60,48 + Owner: Neutral + Actor5: sbag + Location: 60,49 + Owner: Neutral + Actor6: sbag + Location: 60,50 + Owner: Neutral + Actor7: sbag + Location: 61,50 + Owner: Neutral + Actor8: tc01 + Location: 33,41 + Owner: Neutral + Actor9: tc03 + Location: 20,52 + Owner: Neutral + Actor10: tc02 + Location: 24,62 + Owner: Neutral + Actor11: t06 + Location: 62,84 + Owner: Neutral + Actor12: t07 + Location: 85,78 + Owner: Neutral + Actor13: t14 + Location: 84,77 + Owner: Neutral + Actor14: t12 + Location: 95,77 + Owner: Neutral + Actor15: t07 + Location: 78,77 + Owner: Neutral + Actor16: t02 + Location: 81,74 + Owner: Neutral + Actor17: t16 + Location: 46,79 + Owner: Neutral + Actor18: tc03 + Location: 47,78 + Owner: Neutral + Actor19: t10 + Location: 45,78 + Owner: Neutral + Actor20: t14 + Location: 45,77 + Owner: Neutral + Actor21: t17 + Location: 45,76 + Owner: Neutral + Actor22: t08 + Location: 60,83 + Owner: Neutral + Actor23: t17 + Location: 81,71 + Owner: Neutral + Actor24: tc02 + Location: 45,48 + Owner: Neutral + Actor25: tc01 + Location: 32,90 + Owner: Neutral + Actor26: tc03 + Location: 33,89 + Owner: Neutral + Actor27: tc05 + Location: 20,83 + Owner: Neutral + Actor28: t11 + Location: 25,88 + Owner: Neutral + Actor29: t17 + Location: 20,90 + Owner: Neutral + Actor30: tc01 + Location: 24,90 + Owner: Neutral + Actor31: tc04 + Location: 23,89 + Owner: Neutral + Actor32: tc05 + Location: 20,89 + Owner: Neutral + Actor33: t01 + Location: 28,47 + Owner: Neutral + Actor34: t05 + Location: 24,42 + Owner: Neutral + Actor35: tc04 + Location: 36,54 + Owner: Neutral + Actor36: tc01 + Location: 36,51 + Owner: Neutral + Actor37: tc02 + Location: 61,42 + Owner: Neutral + Actor38: tc02 + Location: 63,70 + Owner: Neutral + Actor39: t12 + Location: 73,79 + Owner: Neutral + Actor40: tc03 + Location: 82,64 + Owner: Neutral + Actor41: t03 + Location: 46,58 + Owner: Neutral + Actor42: tc05 + Location: 57,50 + Owner: Neutral + Actor43: t16 + Location: 59,41 + Owner: Neutral + Actor44: tc01 + Location: 56,51 + Owner: Neutral + Actor45: t11 + Location: 47,48 + Owner: Neutral + Actor46: t05 + Location: 51,48 + Owner: Neutral + Actor47: mine + Location: 27,48 + Owner: Neutral + Actor48: t01 + Location: 71,81 + Owner: Neutral + Actor49: t02 + Location: 71,82 + Owner: Neutral + Actor50: t02 + Location: 81,61 + Owner: Neutral + Actor51: t03 + Location: 80,57 + Owner: Neutral + Actor52: t05 + Location: 80,58 + Owner: Neutral + Actor53: tc01 + Location: 78,61 + Owner: Neutral + Actor54: agun + Location: 73,46 + Owner: Greece + Actor55: gun + Location: 69,49 + Owner: Greece + Facing: 32 + Radar: dome + Location: 70,45 + Owner: France + Actor57: fact + Location: 67,42 + Owner: Greece + Actor58: powr + Location: 74,47 + Owner: Greece + Actor59: brl3 + Location: 66,42 + Owner: Greece + Actor60: brl3 + Location: 71,42 + Owner: Greece + Actor61: brl3 + Location: 71,43 + Owner: Greece + Actor62: brl3 + Location: 76,43 + Owner: Greece + Actor63: barl + Location: 71,44 + Owner: Greece + Actor64: brl3 + Location: 73,47 + Owner: Greece + Actor65: barl + Location: 66,43 + Owner: Greece + Actor66: brl3 + Location: 70,42 + Owner: Greece + Actor67: gun + Location: 61,44 + Owner: Greece + Facing: 192 + Actor68: gun + Location: 61,48 + Owner: Greece + Facing: 160 + Actor69: agun + Location: 68,47 + Owner: Greece + Actor70: proc + Location: 63,42 + Owner: Greece + FreeActor: False + Barr: tent + Location: 63,47 + Owner: Greece + Navalyard: syrd + Location: 78,48 + Owner: Greece + Actor73: powr + Location: 74,42 + Owner: Greece + Actor74: powr + Location: 72,42 + Owner: Greece + Actor75: powr + Location: 72,48 + Owner: Greece + startmcv: mcv + Location: 22,80 + Owner: USSR + Facing: 192 + Actor77: 2tnk + Location: 59,43 + Owner: Greece + Facing: 32 + TurretFacing: 32 + Actor78: 1tnk + Location: 58,48 + Owner: Greece + Facing: 32 + TurretFacing: 32 + Actor79: 1tnk + Location: 57,44 + Owner: Greece + Facing: 96 + TurretFacing: 96 + Actor80: 1tnk + Location: 67,49 + Owner: Greece + Facing: 224 + TurretFacing: 224 + Harvester: harv + Location: 45,45 + Owner: Greece + Facing: 96 + mcvGG: mcv + Location: 75,46 + Owner: GoodGuy + Facing: 192 + Actor83: 1tnk + Location: 43,47 + Owner: Greece + Facing: 224 + TurretFacing: 64 + Actor84: e1 + Location: 61,45 + Owner: Greece + Facing: 160 + SubCell: 1 + Actor85: e1 + Location: 62,46 + Owner: Greece + Facing: 160 + SubCell: 0 + Actor86: e1 + Location: 61,49 + Owner: Greece + Facing: 224 + SubCell: 2 + Runner1: e1 + Location: 25,75 + Owner: GoodGuy + SubCell: 0 + Runner2: e1 + Location: 25,76 + Owner: GoodGuy + SubCell: 2 + Runner3: e1 + Location: 26,75 + Owner: GoodGuy + SubCell: 0 + Actor90: e1 + Location: 64,49 + Owner: Greece + Facing: 96 + SubCell: 2 + Actor91: e3 + Location: 66,44 + Owner: Greece + Facing: 160 + SubCell: 4 + Actor92: e3 + Location: 63,49 + Owner: Greece + Facing: 160 + SubCell: 4 + Actor93: e1 + Location: 58,46 + Owner: Greece + Facing: 160 + SubCell: 2 + Actor94: e1 + Location: 60,48 + Owner: Greece + SubCell: 2 + Actor96: e3 + Location: 41,45 + Owner: Greece + SubCell: 4 + Facing: 64 + TurretFacing: 128 + Actor97: e3 + Location: 41,44 + Owner: Greece + SubCell: 1 + Facing: 96 + TurretFacing: 160 + Actor98: e3 + Location: 40,45 + Owner: Greece + SubCell: 4 + Facing: 64 + TurretFacing: 160 + Actor99: e3 + Location: 40,43 + Owner: Greece + SubCell: 1 + Facing: 96 + TurretFacing: 160 + Actor100: e1 + Location: 39,45 + Owner: Greece + Facing: 160 + SubCell: 0 + Actor101: e1 + Location: 39,44 + Owner: Greece + SubCell: 1 + Facing: 96 + TurretFacing: 192 + Minelayer: mnly + Owner: GoodGuy + Location: 67,45 + Facing: 92 + Actor166: pt + Owner: GoodGuy + Location: 67,54 + Facing: 92 + TurretFacing: 92 + Actor167: pt + Owner: GoodGuy + Location: 67,59 + Facing: 60 + TurretFacing: 60 + Actor168: pt + Owner: GoodGuy + Location: 83,56 + Facing: 28 + TurretFacing: 28 + Actor169: pt + Owner: GoodGuy + Location: 83,51 + Facing: 92 + TurretFacing: 92 + mcvtransport: lst + Owner: GoodGuy + Location: 80,45 + Facing: 92 + Actor171: dd + Owner: GoodGuy + Location: 91,51 + Facing: 28 + TurretFacing: 28 + Actor172: dd + Owner: GoodGuy + Location: 84,44 + Facing: 92 + TurretFacing: 92 + Actor173: dd + Owner: GoodGuy + Location: 96,44 + Facing: 92 + TurretFacing: 92 + Actor174: pt + Owner: GoodGuy + Location: 96,51 + Facing: 92 + TurretFacing: 92 + Actor175: dd + Owner: GoodGuy + Location: 101,49 + Facing: 60 + TurretFacing: 60 + Actor176: pt + Owner: GoodGuy + Location: 107,70 + Facing: 188 + TurretFacing: 188 + Actor177: pt + Owner: GoodGuy + Location: 58,89 + Facing: 60 + TurretFacing: 60 + Helper: proc + Owner: Greece + Location: 42,42 + FreeActor: False + Actor181: mine + Owner: Neutral + Location: 63,65 + Actor182: mine + Owner: Neutral + Location: 81,78 + StartPoint: waypoint + Location: 20,80 + Owner: Neutral + SovietBasePoint: waypoint + Location: 24,77 + Owner: Neutral + MCVStartMovePoint: waypoint + Location: 28,76 + Owner: Neutral + CrossroadPoint: waypoint + Location: 52,46 + Owner: Neutral + GreeceBaseEPoint: waypoint + Location: 60,46 + Owner: Neutral + NReinfPathPoint1: waypoint + Location: 107,68 + Owner: Neutral + SReinfPathPoint1: waypoint + Location: 100,81 + Owner: Neutral + SReinfPathPoint2: waypoint + Location: 83,90 + Owner: Neutral + NearExpPoint: waypoint + Location: 94,49 + Owner: Neutral + CoastGuardPoint: waypoint + Location: 96,56 + Owner: Neutral + MCVDeploy: waypoint + Location: 96,60 + Owner: Neutral + ReinfSouthPoint: waypoint + Location: 44,91 + Owner: Neutral + WIslandPoint: waypoint + Location: 41,61 + Owner: Neutral + NearDockPoint: waypoint + Location: 85,46 + Owner: Neutral + SReinfPathPoint4: waypoint + Location: 58,88 + Owner: Neutral + PatrolPoint1: waypoint + Location: 91,69 + Owner: Neutral + PatrolPoint4: waypoint + Location: 73,70 + Owner: Neutral + SReinfPathPoint3: waypoint + Location: 69,90 + Owner: Neutral + PatrolPoint2: waypoint + Location: 89,80 + Owner: Neutral + BetweenBasesPoint: waypoint + Location: 78,73 + Owner: Neutral + PatrolPoint3: waypoint + Location: 78,80 + Owner: Neutral + USSRExpansionPoint: waypoint + Location: 56,77 + Owner: Neutral + PrepGGArmyPoint: waypoint + Location: 71,74 + Owner: Neutral + ReinfNorthPoint: waypoint + Location: 81,42 + Owner: Neutral + ReinfEastPoint: waypoint + Location: 109,75 + Owner: Neutral + NWOrefieldPoint: waypoint + Location: 32,49 + Owner: Neutral + AtUSSRBasePoint: waypoint + Location: 27,61 + Owner: Neutral + DDAttackPoint: waypoint + Location: 40,78 + Owner: Neutral + RunnerPoint: waypoint + Location: 28,50 + Owner: Neutral + USSRlstPoint: waypoint + Location: 48,83 + Owner: Neutral + CFBPoint: waypoint + Location: 42,90 + Owner: Neutral + GreeceBasePoint: waypoint + Location: 69,46 + Owner: Neutral + ReinfRoadPoint: waypoint + Location: 52,42 + Owner: Neutral + EIslandPoint: waypoint + Location: 51,58 + Owner: Neutral + mcvGGLoadPoint: waypoint + Location: 77,45 + Owner: Neutral + lstBeachPoint: waypoint + Location: 78,45 + Owner: Neutral + GGUnloadPoint: waypoint + Location: 94,54 + Owner: Neutral + ParaPoint: waypoint + Location: 29,75 + Owner: Neutral + StartCamPoint: waypoint + Location: 21,80 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/soviet-05/rules.yaml b/mods/ura/maps/soviet-05/rules.yaml new file mode 100644 index 0000000..b504f1e --- /dev/null +++ b/mods/ura/maps/soviet-05/rules.yaml @@ -0,0 +1,103 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: soviet05.lua, soviet05-AI.lua, soviet05-reinforcements_teams.lua + MissionData: + Briefing: Khalkis island contains a large quantity of ore that we need.\n\nThe Allies are well aware of our plans, and intend to establish their own base there. See to it that they fail.\n\nIn addition, capture their radar center so we can track Allied activity in this area. + BriefingVideo: soviet5.vqa + StartVideo: double.vqa + WinVideo: strafe.vqa + LossVideo: sovbatl.vqa + MapOptions: + TechLevel: medium + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +MCV.CAM: + Inherits: CAMERA + RevealsShroud: + Range: 4c0 + Type: CenterPosition + +AFLD: + ParatroopersPower@paratroopers: + DropItems: E1,E1,E1,E2,E2 + +TSLA: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +HPAD: + Buildable: + Prerequisites: ~disabled + +APWR: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +E3: + Buildable: + Prerequisites: ~tent + +E4: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +SPY: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +APC: + Buildable: + Prerequisites: ~disabled + +DOME: + ExternalCondition@lua: + Condition: french + WithColoredOverlay@IDISABLE: + RequiresCondition: !french && disabled + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E1,E1 + +AGUN: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/soviet-05/soviet05-AI.lua b/mods/ura/maps/soviet-05/soviet05-AI.lua new file mode 100644 index 0000000..8c31aeb --- /dev/null +++ b/mods/ura/maps/soviet-05/soviet05-AI.lua @@ -0,0 +1,168 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +IdlingUnits = function() + local lazyUnits = Utils.Where(Map.ActorsInWorld, function(actor) + return actor.HasProperty("Hunt") and (actor.Owner == GoodGuy or actor.Owner == Greece) end) + + Utils.Do(lazyUnits, function(unit) + Trigger.OnDamaged(unit, function() + Trigger.ClearAll(unit) + Trigger.AfterDelay(0, function() IdleHunt(unit) end) + end) + end) +end + +BaseBuildings = +{ + { type = "powr", pos = CVec.New(3, -2), cost = 300 }, + { type = "tent", pos = CVec.New(0, 4), cost = 400 }, + { type = "hbox", pos = CVec.New(3, 6), cost = 600 }, + { type = "proc", pos = CVec.New(4, 2), cost = 1400 }, + { type = "powr", pos = CVec.New(5, -3), cost = 300 }, + { type = "weap", pos = CVec.New(-5, 3), cost = 2000 }, + { type = "hbox", pos = CVec.New(-6, 5), cost = 600 }, + { type = "gun", pos = CVec.New(0, 8), cost = 600 }, + { type = "gun", pos = CVec.New(-4, 7), cost = 600 }, + { type = "powr", pos = CVec.New(-4, -3), cost = 300 }, + { type = "proc", pos = CVec.New(-9, 1), cost = 1400 }, + { type = "powr", pos = CVec.New(-8, -2), cost = 300 }, + { type = "silo", pos = CVec.New(6, 0), cost = 150 }, + { type = "agun", pos = CVec.New(-3, 0), cost = 800 }, + { type = "powr", pos = CVec.New(-6, -2), cost = 300 }, + { type = "agun", pos = CVec.New(4, 1), cost = 800 }, + { type = "gun", pos = CVec.New(-9, 5), cost = 600 }, + { type = "gun", pos = CVec.New(-2, -3), cost = 600 }, + { type = "powr", pos = CVec.New(4, 6), cost = 300 }, + { type = "gun", pos = CVec.New(3, -6), cost = 600 }, + { type = "hbox", pos = CVec.New(3, -4), cost = 600 }, + { type = "gun", pos = CVec.New(2, 3), cost = 600 } +} + +BuildBase = function() + if not CheckForCYard() then + return + end + + for i,v in ipairs(BaseBuildings) do + if not v.exists then + BuildBuilding(v) + return + end + end + + Trigger.AfterDelay(DateTime.Seconds(5), BuildBase) +end + +BuildBuilding = function(building) + Trigger.AfterDelay(Actor.BuildTime(building.type), function() + local actor = Actor.Create(building.type, true, { Owner = GoodGuy, Location = MCVDeploy.Location + building.pos }) + GoodGuy.Cash = GoodGuy.Cash - building.cost + + building.exists = true + Trigger.OnKilled(actor, function() building.exists = false end) + Trigger.OnDamaged(actor, function(building) + if building.Owner == GoodGuy and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + + Trigger.AfterDelay(DateTime.Seconds(1), BuildBase) + end) +end + +ProduceInfantry = function() + if Barr.IsDead then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(3), DateTime.Seconds(9)) + local toBuild = { Utils.Random(AlliedInfantryTypes) } + Greece.Build(toBuild, function(unit) + GreeceInfAttack[#GreeceInfAttack + 1] = unit[1] + + if #GreeceInfAttack >= 7 then + SendUnits(GreeceInfAttack, InfantryWaypoints) + GreeceInfAttack = { } + Trigger.AfterDelay(DateTime.Minutes(2), ProduceInfantry) + else + Trigger.AfterDelay(delay, ProduceInfantry) + end + end) +end + +ProduceShips = function() + if Navalyard.IsDead then + return + end + + Greece.Build( {"dd"}, function(unit) + Ships[#Ships + 1] = unit[1] + + if #Ships >= 2 then + SendUnits(Ships, ShipWaypoints) + Ships = { } + Trigger.AfterDelay(DateTime.Minutes(6), ProduceShips) + else + Trigger.AfterDelay(Actor.BuildTime("dd"), ProduceShips) + end + end) +end + +ProduceInfantryGG = function() + if not BaseBuildings[2][4] then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(3), DateTime.Seconds(9)) + local toBuild = { Utils.Random(AlliedInfantryTypes) } + GoodGuy.Build(toBuild, function(unit) + GGInfAttack[#GGInfAttack + 1] = unit[1] + + if #GGInfAttack >= 10 then + SendUnits(GGInfAttack, InfantryGGWaypoints) + GGInfAttack = { } + Trigger.AfterDelay(DateTime.Minutes(2), ProduceInfantryGG) + else + Trigger.AfterDelay(delay, ProduceInfantryGG) + end + end) +end + +ProduceTanksGG = function() + if not BaseBuildings[6][4] then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(12), DateTime.Seconds(17)) + local toBuild = { Utils.Random(AlliedTankTypes) } + GoodGuy.Build(toBuild, function(unit) + TankAttackGG[#TankAttackGG + 1] = unit[1] + + if #TankAttackGG >= 6 then + SendUnits(TankAttackGG, TanksGGWaypoints) + TankAttackGG = { } + Trigger.AfterDelay(DateTime.Minutes(3), ProduceTanksGG) + else + Trigger.AfterDelay(delay, ProduceTanksGG) + end + end) +end + +SendUnits = function(units, waypoints) + Utils.Do(units, function(unit) + if not unit.IsDead then + Utils.Do(waypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) + unit.Hunt() + end + end) +end diff --git a/mods/ura/maps/soviet-05/soviet05-reinforcements_teams.lua b/mods/ura/maps/soviet-05/soviet05-reinforcements_teams.lua new file mode 100644 index 0000000..8d5f5bc --- /dev/null +++ b/mods/ura/maps/soviet-05/soviet05-reinforcements_teams.lua @@ -0,0 +1,176 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +SovietStartReinf = { "e2", "e2" } +SovietStartToBasePath = { StartPoint.Location, SovietBasePoint.Location } +SovietMCVReinf = { "mcv", "3tnk", "3tnk", "e1", "e1" } +SovExpansionPointGuard = { "2tnk", "2tnk", "e3", "e3", "e3" } + +if Map.LobbyOption("difficulty") == "easy" then + ArmorReinfGreece = { "jeep", "1tnk", "1tnk" } +else + ArmorReinfGreece = { "jeep", "jeep", "1tnk", "1tnk", "1tnk" } +end +InfantryReinfGreece = { "e1", "e1", "e1", "e1", "e1" } +CrossroadsReinfPath = { ReinfRoadPoint.Location } +ArtyReinf = { "e3", "e3", "e3", "arty", "arty" } +CoastGuardReinf = { "e1", "e1", "e3", "e1", "e3" } +DDPatrol1 = { "dd", "dd", "dd" } +DDPatrol1Path = { EIslandPoint.Location, WIslandPoint.Location, DDAttackPoint.Location, SReinfPathPoint4.Location, DDAttackPoint.Location, WIslandPoint.Location, EIslandPoint.Location, NearDockPoint.Location } +DDPatrol2 = { "dd", "dd" } +DDPatrol2Path = { NReinfPathPoint1.Location, SReinfPathPoint1.Location, SReinfPathPoint2.Location, SReinfPathPoint1.Location, NReinfPathPoint1.Location, NearDockPoint.Location } +ShipArrivePath = { ReinfNorthPoint.Location, NearDockPoint.Location } + +AlliedInfantryTypes = { "e1", "e3" } +AlliedTankTypes = { "jeep", "1tnk" } +AlliedAttackPath = { GreeceBaseEPoint.Location, CrossroadPoint.Location, NWOrefieldPoint.Location, AtUSSRBasePoint.Location } +AlliedCrossroadsToRadarPath = { ReinfRoadPoint.Location, CrossroadPoint.Location, GreeceBaseEPoint.Location, GreeceBasePoint.Location } +SouthReinfPath = { ReinfEastPoint.Location, SReinfPathPoint1.Location, SReinfPathPoint2.Location, SReinfPathPoint3.Location, SReinfPathPoint4.Location, USSRlstPoint.Location } +NorthReinfPath = { ReinfEastPoint.Location, NReinfPathPoint1.Location, GGUnloadPoint.Location } +GoodGuyOrefieldPatrolPath = { PatrolPoint1.Location, PatrolPoint2.Location, PatrolPoint3.Location, PatrolPoint4.Location } + +Ships = { } +GreeceInfAttack = { } +GGInfAttack = { } +TankAttackGG = { } + +ShipWaypoints = { EIslandPoint, WIslandPoint, DDAttackPoint } +InfantryWaypoints = { CrossroadPoint, NWOrefieldPoint, AtUSSRBasePoint, SovietBasePoint } +InfantryGGWaypoints = { PatrolPoint2, BetweenBasesPoint, PrepGGArmyPoint } +TanksGGWaypoints = { PatrolPoint2, BetweenBasesPoint, PrepGGArmyPoint } + +Para = function() + local powerproxy = Actor.Create("powerproxy.paratroopers", false, { Owner = player }) + local units = powerproxy.SendParatroopers(ParaPoint.CenterPosition, false, 28) + powerproxy.Destroy() +end + +Para2 = function() + local powerproxy = Actor.Create("powerproxy.paratroopers", false, { Owner = player }) + local units = powerproxy.SendParatroopers(USSRExpansionPoint.CenterPosition, false, 28) + powerproxy.Destroy() +end + +ReinfInf = function() + Reinforcements.Reinforce(Greece, InfantryReinfGreece, CrossroadsReinfPath, 0, function(soldier) + soldier.Hunt() + end) +end + +ReinfArmor = function() + RCheck = false + Reinforcements.Reinforce(Greece, ArmorReinfGreece, CrossroadsReinfPath, 0, function(soldier) + soldier.Hunt() + end) +end + +IslandTroops1 = function() + local units = Reinforcements.ReinforceWithTransport(GoodGuy, "lst", CoastGuardReinf, { ReinfEastPoint.Location, NReinfPathPoint1.Location, GGUnloadPoint.Location }, { ReinfEastPoint.Location })[2] + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function(coastguard) + coastguard.AttackMove(CoastGuardPoint.Location) + end) + end) + if not CheckForCYard() then + return + elseif Map.LobbyOption("difficulty") == "easy" then + return + else + Trigger.OnAllKilled(units, function() + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Minutes(3), IslandTroops1) + else + Trigger.AfterDelay(DateTime.Minutes(5), IslandTroops1) + end + end) + end +end + +IslandTroops2 = function() + local units = Reinforcements.ReinforceWithTransport(GoodGuy, "lst", ArmorReinfGreece, NorthReinfPath, { ReinfEastPoint.Location })[2] + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function(patrols) + patrols.Patrol(GoodGuyOrefieldPatrolPath, true, 150) + end) + end) + if not CheckForCYard() then + return + elseif Map.LobbyOption("difficulty") == "easy" then + return + else + Trigger.OnAllKilled(units, function() + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Minutes(3), IslandTroops2) + else + Trigger.AfterDelay(DateTime.Minutes(5), IslandTroops2) + end + end) + end +end + +IslandTroops3 = function() + local units = Reinforcements.ReinforceWithTransport(GoodGuy, "lst", SovExpansionPointGuard, SouthReinfPath, { ReinfEastPoint.Location })[2] + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function(guards) + guards.AttackMove(USSRExpansionPoint.Location) + end) + end) + if not CheckForCYard() then + return + elseif Map.LobbyOption("difficulty") == "easy" then + return + else + Trigger.OnAllKilled(units, function() + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Minutes(3), IslandTroops3) + else + Trigger.AfterDelay(DateTime.Minutes(5), IslandTroops3) + end + end) + end +end + +BringDDPatrol1 = function() + local units = Reinforcements.Reinforce(Greece, DDPatrol1, ShipArrivePath, 0) + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function(patrols) + patrols.Patrol(DDPatrol1Path, true, 250) + end) + end) + if not CheckForCYard() then + return + else + Trigger.OnAllKilled(units, function() + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Minutes(4), BringDDPatrol1) + else + Trigger.AfterDelay(DateTime.Minutes(7), BringDDPatrol1) + end + end) + end +end + +BringDDPatrol2 = function() + local units = Reinforcements.Reinforce(Greece, DDPatrol2, ShipArrivePath, 0) + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function(patrols) + patrols.Patrol(DDPatrol2Path, true, 250) + end) + end) + if not CheckForCYard() then + return + else + Trigger.OnAllKilled(units, function() + if Map.LobbyOption("difficulty") == "hard" then + Trigger.AfterDelay(DateTime.Minutes(4), BringDDPatrol2) + else + Trigger.AfterDelay(DateTime.Minutes(7), BringDDPatrol2) + end + end) + end +end diff --git a/mods/ura/maps/soviet-05/soviet05.lua b/mods/ura/maps/soviet-05/soviet05.lua new file mode 100644 index 0000000..ef829c4 --- /dev/null +++ b/mods/ura/maps/soviet-05/soviet05.lua @@ -0,0 +1,288 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +CheckForBase = function() + baseBuildings = Map.ActorsInBox(Map.TopLeft, CFBPoint.CenterPosition, function(actor) + return actor.Type == "fact" or actor.Type == "powr" + end) + + return #baseBuildings >= 2 +end + +CheckForCYard = function() + ConYard = Map.ActorsInBox(mcvGGLoadPoint.CenterPosition, ReinfEastPoint.CenterPosition, function(actor) + return actor.Type == "fact" and actor.Owner == GoodGuy + end) + + return #ConYard >= 1 +end + +CheckForSPen = function() + return Utils.Any(Map.ActorsInWorld, function(actor) return actor.Type == "spen" end) +end + +RunInitialActivities = function() + if Map.LobbyOption("difficulty") == "hard" then + Expand() + ExpansionCheck = true + else + ExpansionCheck = false + end + + Trigger.AfterDelay(1, function() + Harvester.FindResources() + Helper.Destroy() + IdlingUnits() + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + + local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == Greece and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(buildings, function(actor) + Trigger.OnDamaged(actor, function(building) + if building.Owner == Greece and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + end) + end) + + Reinforcements.Reinforce(player, SovietStartReinf, SovietStartToBasePath, 0, function(soldier) + soldier.AttackMove(SovietBasePoint.Location) + end) + + Actor.Create("camera", true, { Owner = player, Location = GreeceBasePoint.Location }) + Actor.Create("camera", true, { Owner = player, Location = SovietBasePoint.Location }) + + startmcv.Move(MCVStartMovePoint.Location) + Runner1.Move(RunnerPoint.Location) + Runner2.Move(RunnerPoint.Location) + Runner3.Move(RunnerPoint.Location) + + ProduceInfantry() + Trigger.AfterDelay(DateTime.Minutes(2), ProduceShips) + + if Map.LobbyOption("difficulty") == "hard" or Map.LobbyOption("difficulty") == "normal" then + Trigger.AfterDelay(DateTime.Seconds(25), ReinfInf) + end + Trigger.AfterDelay(DateTime.Minutes(2), ReinfInf) + Trigger.AfterDelay(DateTime.Minutes(3), BringDDPatrol2) + Trigger.AfterDelay(DateTime.Minutes(5), ReinfInf) + Trigger.AfterDelay(DateTime.Minutes(6), BringDDPatrol1) +end + +Expand = function() + if ExpansionCheck then + return + elseif mcvtransport.IsDead then + return + elseif mcvGG.IsDead then + return + end + + mcvGG.Move(mcvGGLoadPoint.Location) + mcvtransport.Move(lstBeachPoint.Location) + Media.DisplayMessage("Allied MCV detected moving to the island.") + + Reinforcements.Reinforce(GoodGuy, { "dd", "dd" }, ShipArrivePath, 0, function(ddsquad) + ddsquad.AttackMove(NearExpPoint.Location) end) + + ExpansionCheck = true + Trigger.ClearAll(mcvGG) + Trigger.ClearAll(mcvtransport) + Trigger.AfterDelay(DateTime.Seconds(3), function() + if mcvtransport.IsDead then + return + elseif mcvGG.IsDead then + return + end + + mcvGG.EnterTransport(mcvtransport) + mcvtransport.Move(GGUnloadPoint.Location) + mcvtransport.UnloadPassengers() + Trigger.AfterDelay(DateTime.Seconds(12), function() + if mcvGG.IsDead then + return + end + + mcvGG.Move(MCVDeploy.Location) + Trigger.AfterDelay(DateTime.Seconds(4), function() + if not mcvGG.IsDead then + mcvGG.Deploy() + Trigger.AfterDelay(DateTime.Seconds(4), function() + local fact = Map.ActorsInBox(mcvGGLoadPoint.CenterPosition, ReinfEastPoint.CenterPosition, function(actor) + return actor.Type == "fact" and actor.Owner == GoodGuy end) + if #fact == 0 then + return + else + Trigger.OnDamaged(fact[1], function() + if fact[1].Owner == GoodGuy and fact[1].Health < fact[1].MaxHealth * 3/4 then + fact[1].StartBuildingRepairs() + end + end) + end + end) + + IslandTroops1() + Trigger.AfterDelay(DateTime.Minutes(3), IslandTroops2) + Trigger.AfterDelay(DateTime.Minutes(6), IslandTroops3) + Trigger.AfterDelay(DateTime.Seconds(7), BuildBase) + end + + if not mcvtransport.IsDead then + mcvtransport.Move(ReinfNorthPoint.Location) + mcvtransport.Destroy() + end + end) + end) + end) +end + +Tick = function() + if Greece.HasNoRequiredUnits() and GoodGuy.HasNoRequiredUnits() then + player.MarkCompletedObjective(KillAll) + player.MarkCompletedObjective(HoldObjective) + end + + if player.HasNoRequiredUnits() then + GoodGuy.MarkCompletedObjective(BeatUSSR) + end + + if Greece.Resources >= Greece.ResourceCapacity * 0.75 then + Greece.Cash = Greece.Cash + Greece.Resources - Greece.ResourceCapacity * 0.25 + Greece.Resources = Greece.ResourceCapacity * 0.25 + end + + if GoodGuy.Resources >= GoodGuy.ResourceCapacity * 0.75 then + GoodGuy.Cash = GoodGuy.Cash + GoodGuy.Resources - GoodGuy.ResourceCapacity * 0.25 + GoodGuy.Resources = GoodGuy.ResourceCapacity * 0.25 + end + + if not baseEstablished and CheckForBase() then + baseEstablished = true + Para() + end + + if not SPenEstablished and CheckForSPen() then + SPenEstablished = true + + local units = Reinforcements.ReinforceWithTransport(Greece, "lst", ArtyReinf, SouthReinfPath, { ReinfEastPoint.Location })[2] + Utils.Do(units, function(unit) IdleHunt(unit) end) + if not ExpansionCheck then + Expand() + ExpansionCheck = true + end + end + + if not RCheck then + RCheck = true + if Map.LobbyOption("difficulty") == "easy" and ReinfCheck then + Trigger.AfterDelay(DateTime.Minutes(6), ReinfArmor) + elseif Map.LobbyOption("difficulty") == "normal" then + Trigger.AfterDelay(DateTime.Minutes(4), ReinfArmor) + else + Trigger.AfterDelay(DateTime.Minutes(3), ReinfArmor) + end + end +end + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + GoodGuy = Player.GetPlayer("GoodGuy") + Greece = Player.GetPlayer("Greece") + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + Media.PlaySpeechNotification(player, "ObjectiveMet") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + CaptureObjective = player.AddPrimaryObjective("Capture the Radar Dome.") + KillAll = player.AddPrimaryObjective("Defeat the Allied forces.") + BeatUSSR = GoodGuy.AddPrimaryObjective("Defeat the Soviet forces.") + + RunInitialActivities() + + Trigger.OnDamaged(mcvGG, Expand) + Trigger.OnDamaged(mcvtransport, Expand) + + Trigger.OnKilled(Radar, function() + if not player.IsObjectiveCompleted(CaptureObjective) then + player.MarkFailedObjective(CaptureObjective) + end + + if HoldObjective then + player.MarkFailedObjective(HoldObjective) + end + end) + + Radar.GrantCondition("french") + Trigger.OnCapture(Radar, function() + HoldObjective = player.AddPrimaryObjective("Defend the Radar Dome.") + player.MarkCompletedObjective(CaptureObjective) + Beacon.New(player, MCVDeploy.CenterPosition) + if Map.LobbyOption("difficulty") == "easy" then + Actor.Create("camera", true, { Owner = player, Location = MCVDeploy.Location }) + Media.DisplayMessage("Movement of an Allied expansion base discovered.") + else + Actor.Create("MCV.CAM", true, { Owner = player, Location = MCVDeploy.Location }) + Media.DisplayMessage("Coordinates of an Allied expansion base discovered.") + end + + if not ExpansionCheck then + Expand() + ExpansionCheck = true + end + + Reinforcements.Reinforce(Greece, ArmorReinfGreece, AlliedCrossroadsToRadarPath , 0, IdleHunt) + + Radar.RevokeCondition(1) + Trigger.ClearAll(Radar) + Trigger.AfterDelay(0, function() + Trigger.OnRemovedFromWorld(Radar, function() + player.MarkFailedObjective(HoldObjective) + end) + end) + end) + + Trigger.OnEnteredProximityTrigger(USSRExpansionPoint.CenterPosition, WDist.New(4 * 1024), function(unit, id) + if unit.Owner == player and Radar.Owner == player then + Trigger.RemoveProximityTrigger(id) + + Para2() + ProduceInfantryGG() + ProduceTanksGG() + + local units = Reinforcements.ReinforceWithTransport(player, "lst", SovietMCVReinf, { ReinfSouthPoint.Location, USSRlstPoint.Location }, { ReinfSouthPoint.Location })[2] + Utils.Do(units, function(unit) + Trigger.OnAddedToWorld(unit, function() + if unit.Type == "mcv" then + unit.Move(USSRExpansionPoint.Location) + else + unit.AttackMove(USSRExpansionPoint.Location) + end + end) + end) + + Media.PlaySpeechNotification(player, "ReinforcementsArrived") + end + end) + + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "Lose") + end) + + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + end) + + Camera.Position = StartCamPoint.CenterPosition +end diff --git a/mods/ura/maps/soviet-06a/map.bin b/mods/ura/maps/soviet-06a/map.bin new file mode 100644 index 0000000..63c5895 Binary files /dev/null and b/mods/ura/maps/soviet-06a/map.bin differ diff --git a/mods/ura/maps/soviet-06a/map.png b/mods/ura/maps/soviet-06a/map.png new file mode 100644 index 0000000..e92632f Binary files /dev/null and b/mods/ura/maps/soviet-06a/map.png differ diff --git a/mods/ura/maps/soviet-06a/map.yaml b/mods/ura/maps/soviet-06a/map.yaml new file mode 100644 index 0000000..f8113ef --- /dev/null +++ b/mods/ura/maps/soviet-06a/map.yaml @@ -0,0 +1,828 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 06a: Bridge over the River Grotzny + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 5,1,93,53 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: E2E6F5 + Enemies: USSR + PlayerReference@USSR: + Name: USSR + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: Greece + +Actors: + Actor0: cycl + Location: 17,1 + Owner: Greece + Actor1: cycl + Location: 18,1 + Owner: Greece + Actor2: cycl + Location: 19,1 + Owner: Greece + Actor3: cycl + Location: 20,1 + Owner: Greece + Actor4: cycl + Location: 21,1 + Owner: Greece + Actor5: cycl + Location: 22,1 + Owner: Greece + Actor6: cycl + Location: 23,1 + Owner: Greece + Actor7: cycl + Location: 24,1 + Owner: Greece + Actor8: cycl + Location: 25,1 + Owner: Greece + Actor9: cycl + Location: 26,1 + Owner: Greece + Actor10: cycl + Location: 27,1 + Owner: Greece + Actor11: cycl + Location: 28,1 + Owner: Greece + Actor12: cycl + Location: 29,1 + Owner: Greece + Actor13: cycl + Location: 30,1 + Owner: Greece + Actor14: cycl + Location: 31,1 + Owner: Greece + Actor15: cycl + Location: 32,1 + Owner: Greece + Actor16: cycl + Location: 33,1 + Owner: Greece + Actor17: cycl + Location: 34,1 + Owner: Greece + Actor18: cycl + Location: 35,1 + Owner: Greece + Actor19: cycl + Location: 17,2 + Owner: Greece + Actor20: cycl + Location: 17,3 + Owner: Greece + Actor21: cycl + Location: 18,3 + Owner: Greece + Actor22: cycl + Location: 17,4 + Owner: Greece + Actor23: cycl + Location: 18,4 + Owner: Greece + Actor24: cycl + Location: 17,10 + Owner: Greece + Actor25: cycl + Location: 18,10 + Owner: Greece + Actor26: cycl + Location: 17,11 + Owner: Greece + Actor27: cycl + Location: 18,11 + Owner: Greece + Actor28: cycl + Location: 17,12 + Owner: Greece + Actor29: cycl + Location: 17,13 + Owner: Greece + Actor30: cycl + Location: 17,14 + Owner: Greece + Actor31: cycl + Location: 17,15 + Owner: Greece + Actor32: cycl + Location: 17,16 + Owner: Greece + Actor33: cycl + Location: 17,17 + Owner: Greece + Actor34: cycl + Location: 17,18 + Owner: Greece + Actor35: cycl + Location: 18,18 + Owner: Greece + Actor36: cycl + Location: 18,19 + Owner: Greece + Actor37: cycl + Location: 31,19 + Owner: Greece + Actor38: cycl + Location: 32,19 + Owner: Greece + Actor39: cycl + Location: 18,20 + Owner: Greece + Actor40: cycl + Location: 31,20 + Owner: Greece + Actor41: cycl + Location: 17,21 + Owner: Greece + Actor42: cycl + Location: 18,21 + Owner: Greece + Actor43: cycl + Location: 31,21 + Owner: Greece + Actor44: cycl + Location: 17,22 + Owner: Greece + Actor45: sbag + Location: 19,22 + Owner: Greece + Actor46: sbag + Location: 20,22 + Owner: Greece + Actor47: sbag + Location: 21,22 + Owner: Greece + Actor48: sbag + Location: 27,22 + Owner: Greece + Actor49: sbag + Location: 28,22 + Owner: Greece + Actor50: sbag + Location: 29,22 + Owner: Greece + Actor51: cycl + Location: 31,22 + Owner: Greece + Actor52: cycl + Location: 17,23 + Owner: Greece + Actor53: sbag + Location: 21,23 + Owner: Greece + Actor54: sbag + Location: 27,23 + Owner: Greece + Actor55: cycl + Location: 31,23 + Owner: Greece + Actor56: cycl + Location: 17,24 + Owner: Greece + Actor57: cycl + Location: 18,24 + Owner: Greece + Actor58: cycl + Location: 19,24 + Owner: Greece + Actor59: cycl + Location: 20,24 + Owner: Greece + Actor60: cycl + Location: 21,24 + Owner: Greece + Actor61: cycl + Location: 27,24 + Owner: Greece + Actor62: cycl + Location: 28,24 + Owner: Greece + Actor63: cycl + Location: 29,24 + Owner: Greece + Actor64: cycl + Location: 30,24 + Owner: Greece + Actor65: cycl + Location: 31,24 + Owner: Greece + Actor66: sbag + Location: 71,31 + Owner: Greece + Actor67: sbag + Location: 72,31 + Owner: Greece + Actor68: sbag + Location: 71,32 + Owner: Greece + Actor69: sbag + Location: 72,32 + Owner: Greece + Actor70: sbag + Location: 72,33 + Owner: Greece + Actor71: sbag + Location: 73,33 + Owner: Greece + Actor72: sbag + Location: 73,34 + Owner: Greece + Actor73: sbag + Location: 74,34 + Owner: Greece + Actor74: sbag + Location: 75,34 + Owner: Greece + Actor75: sbag + Location: 74,35 + Owner: Greece + Actor76: sbag + Location: 75,35 + Owner: Greece + Actor77: t17 + Location: 66,28 + Owner: Neutral + Actor78: t08 + Location: 83,35 + Owner: Neutral + Actor79: t16 + Location: 82,34 + Owner: Neutral + Actor80: tc04 + Location: 80,36 + Owner: Neutral + Actor81: tc05 + Location: 77,34 + Owner: Neutral + Actor82: tc01 + Location: 79,32 + Owner: Neutral + Actor83: tc01 + Location: 61,52 + Owner: Neutral + Actor84: tc02 + Location: 61,49 + Owner: Neutral + Actor85: tc03 + Location: 58,52 + Owner: Neutral + Actor86: tc05 + Location: 52,47 + Owner: Neutral + Actor87: t16 + Location: 35,21 + Owner: Neutral + Actor88: tc04 + Location: 36,24 + Owner: Neutral + Actor89: t15 + Location: 38,22 + Owner: Neutral + Actor90: t12 + Location: 31,24 + Owner: Neutral + Actor91: tc05 + Location: 95,15 + Owner: Neutral + Actor92: tc01 + Location: 94,19 + Owner: Neutral + Actor93: tc03 + Location: 85,13 + Owner: Neutral + Actor94: tc02 + Location: 94,6 + Owner: Neutral + Actor95: tc01 + Location: 96,11 + Owner: Neutral + Actor96: tc04 + Location: 84,4 + Owner: Neutral + Actor97: t17 + Location: 83,13 + Owner: Neutral + Actor98: t16 + Location: 88,11 + Owner: Neutral + Actor99: t16 + Location: 91,23 + Owner: Neutral + Actor100: t14 + Location: 93,24 + Owner: Neutral + Actor101: t11 + Location: 95,22 + Owner: Neutral + Actor102: tc05 + Location: 32,22 + Owner: Neutral + Actor103: tc05 + Location: 5,12 + Owner: Neutral + Actor104: tc01 + Location: 9,12 + Owner: Neutral + Actor105: tc05 + Location: 50,34 + Owner: Neutral + Actor106: tc04 + Location: 53,34 + Owner: Neutral + Actor107: tc05 + Location: 74,47 + Owner: Neutral + Actor108: tc04 + Location: 80,43 + Owner: Neutral + Actor109: tc02 + Location: 78,42 + Owner: Neutral + Actor110: tc01 + Location: 74,46 + Owner: Neutral + Actor111: t17 + Location: 73,48 + Owner: Neutral + Actor112: t16 + Location: 77,46 + Owner: Neutral + Actor113: t15 + Location: 80,41 + Owner: Neutral + Actor114: t14 + Location: 68,52 + Owner: Neutral + Actor115: t13 + Location: 84,40 + Owner: Neutral + Actor116: tc02 + Location: 65,52 + Owner: Neutral + Actor117: tc01 + Location: 66,49 + Owner: Neutral + Actor118: t08 + Location: 32,20 + Owner: Neutral + Actor119: tc02 + Location: 18,52 + Owner: Neutral + Actor120: t15 + Location: 27,51 + Owner: Neutral + Actor121: t11 + Location: 40,40 + Owner: Neutral + Actor122: t10 + Location: 41,34 + Owner: Neutral + Actor123: t10 + Location: 43,29 + Owner: Neutral + Actor124: t08 + Location: 41,32 + Owner: Neutral + Actor125: t08 + Location: 42,41 + Owner: Neutral + Actor126: tc05 + Location: 29,28 + Owner: Neutral + Actor127: tc02 + Location: 19,26 + Owner: Neutral + Actor128: tc04 + Location: 17,24 + Owner: Neutral + Actor129: t14 + Location: 37,33 + Owner: Neutral + Actor130: tc01 + Location: 38,28 + Owner: Neutral + Actor131: t16 + Location: 39,27 + Owner: Neutral + Actor132: t16 + Location: 37,28 + Owner: Neutral + Actor133: t10 + Location: 11,49 + Owner: Neutral + Actor134: tc05 + Location: 12,24 + Owner: Neutral + Actor135: tc04 + Location: 5,30 + Owner: Neutral + Actor136: tc02 + Location: 12,12 + Owner: Neutral + Actor137: t16 + Location: 11,12 + Owner: Neutral + Actor234: t12 + Owner: Neutral + Location: 15,14 + Actor139: t08 + Location: 16,15 + Owner: Neutral + Actor140: t01 + Location: 8,12 + Owner: Neutral + Actor141: t10 + Location: 13,33 + Owner: Neutral + Actor142: t15 + Location: 7,40 + Owner: Neutral + Actor143: t14 + Location: 17,32 + Owner: Neutral + Actor144: tc02 + Location: 5,39 + Owner: Neutral + Actor145: tc03 + Location: 85,6 + Owner: Neutral + Actor233: t01 + Owner: Neutral + Location: 15,13 + Actor147: t10 + Location: 14,12 + Owner: Neutral + Actor148: tc05 + Location: 81,4 + Owner: Neutral + Actor149: t01 + Location: 61,9 + Owner: Neutral + Actor150: tc03 + Location: 71,6 + Owner: Neutral + Actor151: t17 + Location: 60,6 + Owner: Neutral + Actor152: t11 + Location: 70,3 + Owner: Neutral + Actor153: tc05 + Location: 22,2 + Owner: Neutral + Actor154: tc03 + Location: 28,2 + Owner: Neutral + Actor155: tc01 + Location: 33,1 + Owner: Neutral + Actor156: hbox + Location: 19,23 + Owner: Greece + Actor157: hbox + Location: 29,23 + Owner: Greece + Actor158: gun + Location: 20,23 + Owner: Greece + Facing: 128 + Actor159: gun + Location: 28,23 + Owner: Greece + Facing: 128 + Actor163: gap + Location: 24,22 + Owner: Greece + Actor164: syrd + Location: 35,14 + Owner: Greece + Actor167: gun + Location: 33,5 + Owner: Greece + Facing: 192 + Actor168: gun + Location: 33,9 + Owner: Greece + Facing: 192 + Actor169: v07 + Location: 66,4 + Owner: Greece + Health: 45 + Actor170: v03 + Location: 64,8 + Owner: Greece + Actor171: v01 + Location: 71,8 + Owner: Greece + Actor172: v05 + Location: 61,8 + Owner: Greece + Health: 43 + Actor173: v06 + Location: 68,4 + Owner: Greece + Actor174: powr + Location: 20,2 + Owner: Greece + Actor175: powr + Location: 25,2 + Owner: Greece + Actor179: 2tnk + Location: 73,35 + Owner: Greece + Facing: 160 + Actor180: 2tnk + Location: 72,34 + Owner: Greece + Facing: 160 + Actor181: 2tnk + Location: 71,33 + Owner: Greece + Facing: 160 + Actor182: arty + Location: 74,33 + Owner: Greece + Facing: 160 + Actor183: arty + Location: 73,32 + Owner: Greece + Facing: 160 + Actor186: 3tnk + Location: 56,47 + Owner: USSR + Facing: 32 + Actor187: 3tnk + Location: 60,49 + Owner: USSR + Facing: 32 + Actor191: v2rl + Location: 57,49 + Owner: USSR + Facing: 32 + Actor193: 2tnk + Location: 73,31 + Owner: Greece + Facing: 160 + Actor194: 2tnk + Location: 75,33 + Owner: Greece + Facing: 160 + Actor195: 2tnk + Location: 85,18 + Owner: Greece + Facing: 160 + Actor196: 2tnk + Location: 88,20 + Owner: Greece + Facing: 160 + Actor197: 2tnk + Location: 22,23 + Owner: Greece + Facing: 128 + Actor198: 2tnk + Location: 26,23 + Owner: Greece + Facing: 128 + Actor199: arty + Location: 18,23 + Owner: Greece + Facing: 96 + Actor200: arty + Location: 30,23 + Owner: Greece + Facing: 160 + Actor202: 1tnk + Location: 23,21 + Owner: Greece + Facing: 128 + Actor203: 1tnk + Location: 25,21 + Owner: Greece + Facing: 128 + Actor204: 2tnk + Location: 40,6 + Owner: Greece + Facing: 192 + Actor205: 2tnk + Location: 40,8 + Owner: Greece + Facing: 192 + Actor206: arty + Location: 40,7 + Owner: Greece + Facing: 192 + Actor207: 1tnk + Location: 77,10 + Owner: Greece + Facing: 192 + Actor208: 1tnk + Location: 77,11 + Owner: Greece + Facing: 192 + Actor209: 1tnk + Location: 77,12 + Owner: Greece + Facing: 192 + Actor210: ca + Location: 87,29 + Owner: Greece + Facing: 224 + Actor211: ca + Location: 87,25 + Owner: Greece + Facing: 160 + Actor212: ca + Location: 76,22 + Owner: Greece + Facing: 224 + Actor213: pt + Location: 38,4 + Owner: Greece + Facing: 192 + Actor214: pt + Location: 38,10 + Owner: Greece + Facing: 192 + Actor215: dd + Location: 55,15 + Owner: Greece + Facing: 192 + Actor216: waypoint + Location: 39,13 + Owner: Neutral + Actor235: silo + Owner: Greece + Location: 26,9 + Actor236: silo + Owner: Greece + Location: 24,9 + Actor237: silo + Owner: Greece + Location: 27,2 + Actor238: silo + Owner: Greece + Location: 27,3 + waypoint78: waypoint + Location: 83,23 + Owner: Neutral + waypoint79: waypoint + Location: 87,19 + Owner: Neutral + waypoint80: waypoint + Location: 84,22 + Owner: Neutral + waypoint81: waypoint + Location: 76,22 + Owner: Neutral + waypoint82: waypoint + Location: 87,29 + Owner: Neutral + AGun: agun + Owner: Greece + Location: 25,5 + TurretFacing: 92 + APCWaypoint1: waypoint + Location: 52,50 + Owner: Neutral + APCWaypoint2: waypoint + Location: 58,51 + Owner: Neutral + Apwr: apwr + Location: 18,12 + Owner: Greece + Apwr2: apwr + Owner: Greece + Location: 27,6 + AttackWaypoint1: waypoint + Owner: Neutral + Location: 24,30 + AttackWaypoint2: waypoint + Owner: Neutral + Location: 35,30 + Barr: tent + Location: 29,16 + Owner: Greece + BaseAttacker1: 1tnk + Location: 76,35 + Owner: Greece + Facing: 160 + BaseAttacker2: 1tnk + Location: 71,30 + Owner: Greece + Facing: 160 + CameraBarrier: camera + Location: 70,36 + Owner: Neutral + CameraBase1: camera + Location: 34,40 + Owner: Neutral + CameraBase2: camera + Location: 24,40 + Owner: Neutral + CameraBase3: camera + Location: 30,46 + Owner: Neutral + CameraBase4: camera + Location: 48,39 + Owner: Neutral + CameraStart: camera + Location: 58,48 + Owner: Neutral + CYard: fact + Location: 30,2 + Owner: Greece + CYardLocation: waypoint + Owner: Neutral + Location: 31,4 + Dome: dome + Location: 23,5 + Owner: Greece + EnemyEntry1: waypoint + Owner: Neutral + Location: 10,1 + EnemyEntry2: waypoint + Owner: Neutral + Location: 97,37 + EnemyRally1: waypoint + Owner: Neutral + Location: 9,23 + EnemyRally2: waypoint + Owner: Neutral + Location: 88,37 + Harvester: harv + Location: 12,10 + Owner: Greece + IntroEnemy1: 1tnk + Location: 63,42 + Owner: Greece + Health: 28 + Facing: 160 + IntroEnemy2: jeep + Location: 64,42 + Owner: Greece + Health: 43 + Facing: 160 + IntroEnemy3: 1tnk + Location: 64,43 + Owner: Greece + Health: 50 + Facing: 160 + Mcv: mcv + Location: 61,45 + Owner: USSR + Facing: 96 + McvWaypoint: waypoint + Location: 53,53 + Owner: Neutral + Proc: proc + Location: 24,9 + Owner: Greece + FreeActor: False + Truck1: truk + Location: 54,52 + Owner: USSR + Facing: 32 + Truck2: truk + Location: 55,51 + Owner: USSR + Facing: 32 + Weap: weap + Location: 22,15 + Owner: Greece + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/soviet-06a/rules.yaml b/mods/ura/maps/soviet-06a/rules.yaml new file mode 100644 index 0000000..4c3b9c8 --- /dev/null +++ b/mods/ura/maps/soviet-06a/rules.yaml @@ -0,0 +1,168 @@ +Player: + PlayerResources: + DefaultCash: 11500 + +World: + LuaScript: + Scripts: soviet06a.lua, soviet06a-AI.lua, soviet06a-reinforcements_teams.lua + MissionData: + Briefing: There is a special cargo that needs to be transported to a nearby Soviet base in the northeast.\n\nMake sure the trucks reach their destination intact. Along the way, there is a bridge which the Allies may have destroyed.\n\nIf so, use the Naval options at your disposal. Our attack subs will make short work of any Allied boats you discover. + BriefingVideo: soviet6.vqa + StartVideo: onthprwl.vqa + WinVideo: sitduck.vqa + LossVideo: dpthchrg.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +APWR: + Buildable: + Prerequisites: ~structures.allies + +ARTY: + Buildable: + Prerequisites: ~vehicles.allies, ~techlevel.low + +ATEK: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +TSLA: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +E3: + Buildable: + Prerequisites: ~tent + +E7: + Buildable: + Prerequisites: ~disabled + +SHOK: + Buildable: + Prerequisites: ~disabled + +SPY: + Buildable: + Prerequisites: ~disabled + +SNIPER: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +2TNK: + Buildable: + Prerequisites: ~vehicles.allies, ~techlevel.low + +4TNK: + Buildable: + Prerequisites: ~disabled + +APC: + Buildable: + Prerequisites: ~disabled + +TRUK: + -SpawnActorOnDeath: + -DeliversCash: + Buildable: + Prerequisites: ~disabled + +QTNK: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +HELI: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +HARV: + Harvester: + SearchFromProcRadius: 50 + SearchFromOrderRadius: 50 + +AFLD: + ParatroopersPower@paratroopers: + DropItems: E1,E1,E1,E1,E1 + +MONEYCRATE: + GiveCashCrateAction: + Amount: 2000 + +V01: + SpawnActorOnDeath: + Actor: moneycrate + +V05: + SpawnActorOnDeath: + Actor: healcrate diff --git a/mods/ura/maps/soviet-06a/soviet06a-AI.lua b/mods/ura/maps/soviet-06a/soviet06a-AI.lua new file mode 100644 index 0000000..1334023 --- /dev/null +++ b/mods/ura/maps/soviet-06a/soviet06a-AI.lua @@ -0,0 +1,119 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +IdlingUnits = function() + local lazyUnits = enemy.GetGroundAttackers() + + Utils.Do(lazyUnits, function(unit) + Trigger.OnDamaged(unit, function() + Trigger.ClearAll(unit) + Trigger.AfterDelay(0, function() IdleHunt(unit) end) + end) + end) +end + +BaseApwr = { type = "apwr", pos = CVec.New(-13, 7), cost = 500, exists = true } +BaseTent = { type = "tent", pos = CVec.New(-2, 12), cost = 400, exists = true } +BaseProc = { type = "proc", pos = CVec.New(-7, 5), cost = 1400, exists = true } +BaseWeap = { type = "weap", pos = CVec.New(-9, 11), cost = 2000, exists = true } +BaseApwr2 = { type = "apwr", pos = CVec.New(-4, 1), cost = 500, exists = true } + +BaseBuildings = { BaseApwr, BaseTent, BaseProc, BaseWeap, BaseApwr2 } + +BuildBase = function() + for i,v in ipairs(BaseBuildings) do + if not v.exists then + BuildBuilding(v) + return + end + end + + Trigger.AfterDelay(DateTime.Seconds(10), BuildBase) +end + +BuildBuilding = function(building) + Trigger.AfterDelay(Actor.BuildTime(building.type), function() + if CYard.IsDead or CYard.Owner ~= enemy then + return + elseif Harvester.IsDead and enemy.Resources <= 299 then + return + end + + local actor = Actor.Create(building.type, true, { Owner = enemy, Location = CYardLocation.Location + building.pos }) + enemy.Cash = enemy.Cash - building.cost + + building.exists = true + Trigger.OnKilled(actor, function() building.exists = false end) + Trigger.OnDamaged(actor, function(building) + if building.Owner == enemy and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + + Trigger.AfterDelay(DateTime.Seconds(10), BuildBase) + end) +end + +ProduceInfantry = function() + if not BaseTent.exists then + return + elseif Harvester.IsDead and enemy.Resources <= 299 then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(3), DateTime.Seconds(9)) + local toBuild = { Utils.Random(AlliedInfantryTypes) } + local Path = Utils.Random(AttackPaths) + enemy.Build(toBuild, function(unit) + InfAttack[#InfAttack + 1] = unit[1] + + if #InfAttack >= 10 then + SendUnits(InfAttack, Path) + InfAttack = { } + Trigger.AfterDelay(DateTime.Minutes(2), ProduceInfantry) + else + Trigger.AfterDelay(delay, ProduceInfantry) + end + end) +end + +ProduceArmor = function() + if not BaseWeap.exists then + return + elseif Harvester.IsDead and enemy.Resources <= 599 then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(12), DateTime.Seconds(17)) + local toBuild = { Utils.Random(AlliedArmorTypes) } + local Path = Utils.Random(AttackPaths) + enemy.Build(toBuild, function(unit) + ArmorAttack[#ArmorAttack + 1] = unit[1] + + if #ArmorAttack >= 6 then + SendUnits(ArmorAttack, Path) + ArmorAttack = { } + Trigger.AfterDelay(DateTime.Minutes(3), ProduceArmor) + else + Trigger.AfterDelay(delay, ProduceArmor) + end + end) +end + +SendUnits = function(units, waypoints) + Utils.Do(units, function(unit) + if not unit.IsDead then + Utils.Do(waypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) + IdleHunt(unit) + end + end) +end diff --git a/mods/ura/maps/soviet-06a/soviet06a-reinforcements_teams.lua b/mods/ura/maps/soviet-06a/soviet06a-reinforcements_teams.lua new file mode 100644 index 0000000..c9015df --- /dev/null +++ b/mods/ura/maps/soviet-06a/soviet06a-reinforcements_teams.lua @@ -0,0 +1,67 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +EnemyReinforcements = +{ + easy = + { + { "e1", "e1", "e3" }, + { "e1", "e3", "jeep" }, + { "e1", "jeep", "1tnk" } + }, + + normal = + { + { "e1", "e1", "e3", "e3" }, + { "e1", "e3", "jeep", "jeep" }, + { "e1", "jeep", "1tnk", "2tnk" } + }, + + hard = + { + { "e1", "e1", "e3", "e3", "e1" }, + { "e1", "e3", "jeep", "jeep", "1tnk" }, + { "e1", "jeep", "1tnk", "2tnk", "arty" } + } +} + +EnemyAttackDelay = +{ + easy = DateTime.Minutes(5), + normal = DateTime.Minutes(2) + DateTime.Seconds(40), + hard = DateTime.Minutes(1) + DateTime.Seconds(30) +} + +EnemyPaths = +{ + { EnemyEntry1.Location, EnemyRally1.Location }, + { EnemyEntry2.Location, EnemyRally2.Location } +} + +wave = 0 +SendEnemies = function() + Trigger.AfterDelay(EnemyAttackDelay[Map.LobbyOption("difficulty")], function() + + wave = wave + 1 + if wave > 3 then + wave = 1 + end + + if wave == 1 then + local units = Reinforcements.ReinforceWithTransport(enemy, "tran", EnemyReinforcements[Map.LobbyOption("difficulty")][wave], EnemyPaths[1], { EnemyPaths[1][1] })[2] + Utils.Do(units, IdleHunt) + else + local units = Reinforcements.ReinforceWithTransport(enemy, "lst", EnemyReinforcements[Map.LobbyOption("difficulty")][wave], EnemyPaths[2], { EnemyPaths[2][1] })[2] + Utils.Do(units, IdleHunt) + end + + if not Dome.IsDead then + SendEnemies() + end + end) +end diff --git a/mods/ura/maps/soviet-06a/soviet06a.lua b/mods/ura/maps/soviet-06a/soviet06a.lua new file mode 100644 index 0000000..bcbe4a2 --- /dev/null +++ b/mods/ura/maps/soviet-06a/soviet06a.lua @@ -0,0 +1,163 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +ArmorAttack = { } +AttackPaths = { { AttackWaypoint1 }, { AttackWaypoint2 } } +BaseAttackers = { BaseAttacker1, BaseAttacker2 } +InfAttack = { } +IntroAttackers = { IntroEnemy1, IntroEnemy2, IntroEnemy3 } +Trucks = { Truck1, Truck2 } + +AlliedInfantryTypes = { "e1", "e1", "e3" } +AlliedArmorTypes = { "jeep", "jeep", "1tnk", "1tnk", "2tnk", "2tnk", "arty" } + +SovietReinforcements1 = { "e6", "e6", "e6", "e6", "e6" } +SovietReinforcements2 = { "e4", "e4", "e2", "e2", "e2" } +SovietReinforcements1Waypoints = { McvWaypoint.Location, APCWaypoint1.Location } +SovietReinforcements2Waypoints = { McvWaypoint.Location, APCWaypoint2.Location } + +TruckGoalTrigger = { CPos.New(83, 7), CPos.New(83, 8), CPos.New(83, 9), CPos.New(83, 10), CPos.New(84, 10), CPos.New(84, 11), CPos.New(84, 12), CPos.New(85, 12), CPos.New(86, 12), CPos.New(87, 12), CPos.New(87, 13), CPos.New(88, 13), CPos.New(89, 13), CPos.New(90, 13), CPos.New(90, 14), CPos.New(90, 15), CPos.New(91, 15), CPos.New(92, 15), CPos.New(93, 15), CPos.New(94, 15) } +CameraBarrierTrigger = { CPos.New(65, 39), CPos.New(65, 40), CPos.New(66, 40), CPos.New(66, 41), CPos.New(67, 41), CPos.New(67, 42), CPos.New(68, 42), CPos.New(68, 43), CPos.New(68, 44) } +CameraBaseTrigger = { CPos.New(53, 42), CPos.New(54, 42), CPos.New(54, 41), CPos.New(55, 41), CPos.New(56, 41), CPos.New(56, 40), CPos.New(57, 40), CPos.New(57, 39), CPos.New(58, 39), CPos.New(59, 39), CPos.New(59, 38), CPos.New(60, 38), CPos.New(61, 38) } + +Trigger.OnEnteredFootprint(TruckGoalTrigger, function(a, id) + if not truckGoalTrigger and a.Owner == player and a.Type == "truk" then + truckGoalTrigger = true + player.MarkCompletedObjective(sovietObjective) + player.MarkCompletedObjective(SaveAllTrucks) + end +end) + +Trigger.OnEnteredFootprint(CameraBarrierTrigger, function(a, id) + if not cameraBarrierTrigger and a.Owner == player then + cameraBarrierTrigger = true + local cameraBarrier = Actor.Create("camera", true, { Owner = player, Location = CameraBarrier.Location }) + Trigger.AfterDelay(DateTime.Seconds(15), function() + cameraBarrier.Destroy() + end) + end +end) + +Trigger.OnEnteredFootprint(CameraBaseTrigger, function(a, id) + if not cameraBaseTrigger and a.Owner == player then + cameraBaseTrigger = true + local cameraBase1 = Actor.Create("camera", true, { Owner = player, Location = CameraBase1.Location }) + local cameraBase2 = Actor.Create("camera", true, { Owner = player, Location = CameraBase2.Location }) + local cameraBase3 = Actor.Create("camera", true, { Owner = player, Location = CameraBase3.Location }) + local cameraBase4 = Actor.Create("camera", true, { Owner = player, Location = CameraBase4.Location }) + Trigger.AfterDelay(DateTime.Minutes(1), function() + cameraBase1.Destroy() + cameraBase2.Destroy() + cameraBase3.Destroy() + cameraBase4.Destroy() + end) + end +end) + +Trigger.OnAllKilled(Trucks, function() + enemy.MarkCompletedObjective(alliedObjective) +end) + +Trigger.OnAnyKilled(Trucks, function() + player.MarkFailedObjective(SaveAllTrucks) +end) + +Trigger.OnKilled(Apwr, function(building) + BaseApwr.exists = false +end) + +Trigger.OnKilled(Barr, function(building) + BaseTent.exists = false +end) + +Trigger.OnKilled(Proc, function(building) + BaseProc.exists = false +end) + +Trigger.OnKilled(Weap, function(building) + BaseWeap.exists = false +end) + +Trigger.OnKilled(Apwr2, function(building) + BaseApwr2.exists = false +end) + +Trigger.OnKilledOrCaptured(Dome, function() + Trigger.AfterDelay(DateTime.Seconds(2), function() + player.MarkCompletedObjective(sovietObjective2) + Media.PlaySpeechNotification(player, "ObjectiveMet") + end) +end) + +-- Activate the AI once the player deployed the Mcv +Trigger.OnRemovedFromWorld(Mcv, function() + if not mcvDeployed then + mcvDeployed = true + BuildBase() + SendEnemies() + Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry) + Trigger.AfterDelay(DateTime.Minutes(2), ProduceArmor) + Trigger.AfterDelay(DateTime.Minutes(2), function() + Utils.Do(BaseAttackers, function(actor) + IdleHunt(actor) + end) + end) + end +end) + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + enemy = Player.GetPlayer("Greece") + Camera.Position = CameraStart.CenterPosition + Mcv.Move(McvWaypoint.Location) + Harvester.FindResources() + Utils.Do(IntroAttackers, function(actor) + IdleHunt(actor) + end) + Utils.Do(Map.NamedActors, function(actor) + if actor.Owner == enemy and actor.HasProperty("StartBuildingRepairs") then + Trigger.OnDamaged(actor, function(building) + if building.Owner == enemy and building.Health < 3/4 * building.MaxHealth then + building.StartBuildingRepairs() + end + end) + end + end) + Reinforcements.ReinforceWithTransport(player, "apc", SovietReinforcements1, SovietReinforcements1Waypoints) + Reinforcements.ReinforceWithTransport(player, "apc", SovietReinforcements2, SovietReinforcements2Waypoints) + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + end) + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "Lose") + end) + alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.") + sovietObjective = player.AddPrimaryObjective("Escort the Convoy.") + sovietObjective2 = player.AddSecondaryObjective("Destroy or capture the Allied radar dome to stop\nenemy reinforcements.") + SaveAllTrucks = player.AddSecondaryObjective("Keep all trucks alive.") +end + +Tick = function() + if player.HasNoRequiredUnits() then + enemy.MarkCompletedObjective(alliedObjective) + end + + if enemy.Resources >= enemy.ResourceCapacity * 0.75 then + enemy.Cash = enemy.Cash + enemy.Resources - enemy.ResourceCapacity * 0.25 + enemy.Resources = enemy.ResourceCapacity * 0.25 + end +end diff --git a/mods/ura/maps/soviet-06b/map.bin b/mods/ura/maps/soviet-06b/map.bin new file mode 100644 index 0000000..f563616 Binary files /dev/null and b/mods/ura/maps/soviet-06b/map.bin differ diff --git a/mods/ura/maps/soviet-06b/map.png b/mods/ura/maps/soviet-06b/map.png new file mode 100644 index 0000000..e92632f Binary files /dev/null and b/mods/ura/maps/soviet-06b/map.png differ diff --git a/mods/ura/maps/soviet-06b/map.yaml b/mods/ura/maps/soviet-06b/map.yaml new file mode 100644 index 0000000..1a10521 --- /dev/null +++ b/mods/ura/maps/soviet-06b/map.yaml @@ -0,0 +1,520 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 06b: Bridge over the River VizchGoi + +Author: Westwood Studios + +Tileset: TEMPERAT + +MapSize: 128,128 + +Bounds: 18,10,81,58 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: E2E6F5 + Enemies: USSR + PlayerReference@USSR: + Name: USSR + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Enemies: Greece + +Actors: + Actor0: cycl + Location: 17,14 + Owner: Neutral + Actor1: cycl + Location: 17,15 + Owner: Neutral + Actor2: cycl + Location: 17,16 + Owner: Neutral + Actor3: cycl + Location: 17,17 + Owner: Neutral + Actor4: cycl + Location: 17,18 + Owner: Neutral + Actor5: sbag + Location: 62,37 + Owner: Greece + Actor6: sbag + Location: 63,37 + Owner: Greece + Actor7: sbag + Location: 64,37 + Owner: Greece + Actor8: sbag + Location: 65,37 + Owner: Greece + Actor9: sbag + Location: 65,38 + Owner: Greece + Actor10: sbag + Location: 66,38 + Owner: Greece + Actor11: sbag + Location: 71,38 + Owner: Greece + Actor12: sbag + Location: 72,38 + Owner: Greece + Actor13: sbag + Location: 73,38 + Owner: Greece + Actor14: sbag + Location: 74,38 + Owner: Greece + Actor15: sbag + Location: 82,38 + Owner: Greece + Actor16: sbag + Location: 83,38 + Owner: Greece + Actor17: sbag + Location: 70,39 + Owner: Greece + Actor18: sbag + Location: 71,39 + Owner: Greece + Actor19: sbag + Location: 83,39 + Owner: Greece + Actor20: sbag + Location: 83,40 + Owner: Greece + Actor21: sbag + Location: 57,43 + Owner: Greece + Actor22: sbag + Location: 58,43 + Owner: Greece + Actor23: sbag + Location: 57,44 + Owner: Greece + Actor24: sbag + Location: 80,46 + Owner: Greece + Actor25: sbag + Location: 80,47 + Owner: Greece + Actor26: sbag + Location: 63,48 + Owner: Greece + Actor27: sbag + Location: 64,48 + Owner: Greece + Actor28: sbag + Location: 79,48 + Owner: Greece + Actor29: sbag + Location: 80,48 + Owner: Greece + Actor30: sbag + Location: 64,49 + Owner: Greece + Actor31: sbag + Location: 64,50 + Owner: Greece + Actor32: sbag + Location: 65,50 + Owner: Greece + Actor33: t17 + Location: 66,28 + Owner: Neutral + Actor34: t08 + Location: 83,35 + Owner: Neutral + Actor35: t16 + Location: 82,34 + Owner: Neutral + Actor36: tc04 + Location: 63,26 + Owner: Neutral + Actor37: tc05 + Location: 67,30 + Owner: Neutral + Actor38: tc01 + Location: 79,32 + Owner: Neutral + Actor39: tc04 + Location: 34,20 + Owner: Neutral + Actor40: tc05 + Location: 82,15 + Owner: Neutral + Actor41: tc04 + Location: 90,17 + Owner: Neutral + Actor42: tc01 + Location: 92,18 + Owner: Neutral + Actor43: tc03 + Location: 82,14 + Owner: Neutral + Actor44: tc01 + Location: 95,15 + Owner: Neutral + Actor45: tc02 + Location: 83,12 + Owner: Neutral + Actor46: t17 + Location: 85,12 + Owner: Neutral + Actor47: t16 + Location: 86,13 + Owner: Neutral + Actor48: t16 + Location: 92,24 + Owner: Neutral + Actor49: t14 + Location: 93,24 + Owner: Neutral + Actor50: t11 + Location: 93,21 + Owner: Neutral + Actor51: tc05 + Location: 54,23 + Owner: Neutral + Actor52: tc05 + Location: 74,46 + Owner: Neutral + Actor53: tc04 + Location: 80,43 + Owner: Neutral + Actor54: tc02 + Location: 81,42 + Owner: Neutral + Actor55: tc01 + Location: 73,40 + Owner: Neutral + Actor56: t17 + Location: 71,40 + Owner: Neutral + Actor57: t15 + Location: 80,36 + Owner: Neutral + Actor58: t12 + Location: 31,57 + Owner: Neutral + Actor59: tc04 + Location: 54,26 + Owner: Neutral + Actor60: t14 + Location: 50,31 + Owner: Neutral + Actor62: t05 + Location: 48,39 + Owner: Neutral + Actor63: t06 + Location: 47,39 + Owner: Neutral + Actor66: t08 + Location: 49,38 + Owner: Neutral + Actor68: t08 + Location: 50,39 + Owner: Neutral + Actor69: tc05 + Location: 35,58 + Owner: Neutral + Actor70: tc04 + Location: 44,55 + Owner: Neutral + Actor71: tc02 + Location: 34,66 + Owner: Neutral + Actor72: tc04 + Location: 56,65 + Owner: Neutral + Actor73: t17 + Location: 49,66 + Owner: Neutral + Actor74: t16 + Location: 50,65 + Owner: Neutral + Actor75: tc02 + Location: 54,66 + Owner: Neutral + Actor76: tc01 + Location: 52,66 + Owner: Neutral + Actor77: tc02 + Location: 58,58 + Owner: Neutral + Actor78: t15 + Location: 59,60 + Owner: Neutral + Actor79: t14 + Location: 48,38 + Owner: Neutral + Actor81: tc03 + Location: 49,20 + Owner: Neutral + Actor82: tc02 + Location: 36,19 + Owner: Neutral + Actor83: t15 + Location: 39,25 + Owner: Neutral + Actor84: t08 + Location: 38,27 + Owner: Neutral + Actor85: t08 + Location: 40,25 + Owner: Neutral + Actor86: t13 + Location: 49,40 + Owner: Neutral + Actor88: t02 + Location: 50,37 + Owner: Neutral + Actor90: hbox + Location: 58,46 + Owner: Greece + Actor91: hbox + Location: 62,47 + Owner: Greece + Actor92: gun + Location: 57,46 + Owner: Greece + Facing: 160 + Actor93: gun + Location: 61,48 + Owner: Greece + Facing: 160 + Actor103: 2tnk + Location: 76,30 + Owner: Greece + Facing: 160 + Actor104: 2tnk + Location: 76,29 + Owner: Greece + Facing: 160 + Actor106: arty + Location: 63,47 + Owner: Greece + Facing: 160 + Actor107: arty + Location: 58,44 + Owner: Greece + Facing: 160 + Actor110: 3tnk + Location: 43,63 + Owner: USSR + Facing: 32 + Actor111: 3tnk + Location: 44,62 + Owner: USSR + Facing: 32 + Actor112: v2rl + Location: 41,64 + Owner: USSR + Facing: 32 + Actor113: v2rl + Location: 43,64 + Owner: USSR + Facing: 32 + Actor115: 2tnk + Location: 75,30 + Owner: Greece + Facing: 160 + Actor116: 2tnk + Location: 75,31 + Owner: Greece + Facing: 160 + Actor117: 2tnk + Location: 83,20 + Owner: Greece + Facing: 160 + Actor118: 2tnk + Location: 88,21 + Owner: Greece + Facing: 160 + Actor119: 2tnk + Location: 62,44 + Owner: Greece + Facing: 160 + Actor120: 1tnk + Location: 59,44 + Owner: Greece + Facing: 160 + Actor121: 1tnk + Location: 63,46 + Owner: Greece + Facing: 160 + Actor123: ca + Location: 87,29 + Owner: Greece + Facing: 224 + Actor124: ca + Location: 87,31 + Owner: Greece + Facing: 160 + Actor125: ca + Location: 75,25 + Owner: Greece + Facing: 224 + Actor126: pt + Location: 71,16 + Owner: Greece + Facing: 224 + Actor127: pt + Location: 65,20 + Owner: Greece + Facing: 224 + Actor128: dd + Location: 70,20 + Owner: Greece + Facing: 224 + Actor129: waypoint + Location: 46,60 + Owner: Neutral + Actor144: silo + Owner: Greece + Location: 73,46 + Actor145: silo + Owner: Greece + Location: 73,47 + Actor146: silo + Owner: Greece + Location: 73,48 + Actor147: silo + Owner: Greece + Location: 73,49 + Actor148: sbag + Owner: Greece + Location: 65,51 + waypoint69: waypoint + Location: 21,28 + Owner: Neutral + waypoint78: waypoint + Location: 83,23 + Owner: Neutral + waypoint79: waypoint + Location: 87,19 + Owner: Neutral + waypoint80: waypoint + Location: 84,22 + Owner: Neutral + waypoint81: waypoint + Location: 76,22 + Owner: Neutral + waypoint82: waypoint + Location: 87,29 + Owner: Neutral + waypoint94: waypoint + Location: 49,16 + Owner: Neutral + AGun: agun + Owner: Greece + Location: 69,49 + TurretFacing: 92 + APCWaypoint1: waypoint + Location: 39,62 + Owner: Neutral + APCWaypoint2: waypoint + Location: 46,66 + Owner: Neutral + Apwr: apwr + Location: 76,41 + Owner: Greece + Apwr2: apwr + Location: 77,45 + Owner: Greece + AttackWaypoint1: waypoint + Owner: Neutral + Location: 26,55 + AttackWaypoint2: waypoint + Owner: Neutral + Location: 41,55 + Barr: tent + Location: 67,45 + Owner: Greece + CameraStart: camera + Location: 46,61 + Owner: Neutral + CYard: fact + Location: 70,46 + Owner: Greece + CYardLocation: waypoint + Owner: Neutral + Location: 71,49 + Dome: dome + Location: 67,49 + Owner: Greece + EnemyEntry1: waypoint + Owner: Neutral + Location: 53,10 + EnemyEntry2: waypoint + Owner: Neutral + Location: 18,62 + EnemyRally1: waypoint + Owner: Neutral + Location: 53,31 + EnemyRally2: waypoint + Owner: Neutral + Location: 25,62 + Harvester: harv + Location: 77,39 + Owner: Greece + IntroEnemy1: 1tnk + Location: 55,49 + Owner: Greece + Facing: 160 + IntroEnemy2: 2tnk + Location: 56,50 + Owner: Greece + Facing: 160 + IntroEnemy3: 1tnk + Location: 58,50 + Owner: Greece + Facing: 160 + Mcv: mcv + Location: 51,55 + Owner: USSR + Health: 82 + Facing: 160 + McvWaypoint: waypoint + Location: 39,67 + Owner: Neutral + Proc: proc + Location: 71,41 + Owner: Greece + FreeActor: False + Truck1: truk + Location: 42,66 + Owner: USSR + Facing: 32 + Truck2: truk + Location: 39,65 + Owner: USSR + Facing: 32 + Weap: weap + Location: 67,41 + Owner: Greece + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/soviet-06b/rules.yaml b/mods/ura/maps/soviet-06b/rules.yaml new file mode 100644 index 0000000..74890e3 --- /dev/null +++ b/mods/ura/maps/soviet-06b/rules.yaml @@ -0,0 +1,156 @@ +Player: + PlayerResources: + DefaultCash: 11500 + +World: + LuaScript: + Scripts: soviet06b.lua, soviet06b-AI.lua, soviet06b-reinforcements_teams.lua + MissionData: + Briefing: There is a special cargo that needs to be transported to a nearby Soviet base in the northeast.\n\nMake sure the trucks reach their destination intact. Along the way, there is a bridge which the Allies may have destroyed.\n\nIf so, use the Naval options at your disposal. Our attack subs will make short work of any Allied boats you discover. + BriefingVideo: soviet6.vqa + StartVideo: onthprwl.vqa + WinVideo: sitduck.vqa + LossVideo: dpthchrg.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +APWR: + Buildable: + Prerequisites: ~structures.allies + +ARTY: + Buildable: + Prerequisites: ~vehicles.allies, ~techlevel.low + +ATEK: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +TSLA: + Buildable: + Prerequisites: ~disabled + +SAM: + Buildable: + Prerequisites: ~disabled + +IRON: + Buildable: + Prerequisites: ~disabled + +MECH: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +E3: + Buildable: + Prerequisites: ~tent + +E7: + Buildable: + Prerequisites: ~disabled + +SHOK: + Buildable: + Prerequisites: ~disabled + +SPY: + Buildable: + Prerequisites: ~disabled + +SNIPER: + Buildable: + Prerequisites: ~disabled + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled + +FTRK: + Buildable: + Prerequisites: ~disabled + +2TNK: + Buildable: + Prerequisites: ~vehicles.allies, ~techlevel.low + +4TNK: + Buildable: + Prerequisites: ~disabled + +APC: + Buildable: + Prerequisites: ~disabled + +TRUK: + -SpawnActorOnDeath: + -DeliversCash: + Buildable: + Prerequisites: ~disabled + +QTNK: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +MSUB: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +CA: + Buildable: + Prerequisites: ~disabled + +HELI: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +HARV: + Harvester: + SearchFromProcRadius: 50 + SearchFromOrderRadius: 50 + +AFLD: + ParatroopersPower@paratroopers: + DropItems: E1,E1,E1,E1,E1 diff --git a/mods/ura/maps/soviet-06b/soviet06b-AI.lua b/mods/ura/maps/soviet-06b/soviet06b-AI.lua new file mode 100644 index 0000000..ac1cf26 --- /dev/null +++ b/mods/ura/maps/soviet-06b/soviet06b-AI.lua @@ -0,0 +1,119 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +IdleHunt = function(unit) if not unit.IsDead then Trigger.OnIdle(unit, unit.Hunt) end end + +IdlingUnits = function() + local lazyUnits = enemy.GetGroundAttackers() + + Utils.Do(lazyUnits, function(unit) + Trigger.OnDamaged(unit, function() + Trigger.ClearAll(unit) + Trigger.AfterDelay(0, function() IdleHunt(unit) end) + end) + end) +end + +BaseApwr = { type = "apwr", pos = CVec.New(5, -9), cost = 500, exists = true } +BaseTent = { type = "tent", pos = CVec.New(-4, -4), cost = 400, exists = true } +BaseProc = { type = "proc", pos = CVec.New(0, -8), cost = 1400, exists = true } +BaseWeap = { type = "weap", pos = CVec.New(-4, -8), cost = 2000, exists = true } +BaseApwr2 = { type = "apwr", pos = CVec.New(6, -5), cost = 500, exists = true } + +BaseBuildings = { BaseApwr, BaseTent, BaseProc, BaseWeap, BaseApwr2 } + +BuildBase = function() + for i,v in ipairs(BaseBuildings) do + if not v.exists then + BuildBuilding(v) + return + end + end + + Trigger.AfterDelay(DateTime.Seconds(10), BuildBase) +end + +BuildBuilding = function(building) + Trigger.AfterDelay(Actor.BuildTime(building.type), function() + if CYard.IsDead or CYard.Owner ~= enemy then + return + elseif Harvester.IsDead and enemy.Resources <= 299 then + return + end + + local actor = Actor.Create(building.type, true, { Owner = enemy, Location = CYardLocation.Location + building.pos }) + enemy.Cash = enemy.Cash - building.cost + + building.exists = true + Trigger.OnKilled(actor, function() building.exists = false end) + Trigger.OnDamaged(actor, function(building) + if building.Owner == enemy and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + + Trigger.AfterDelay(DateTime.Seconds(10), BuildBase) + end) +end + +ProduceInfantry = function() + if not BaseTent.exists then + return + elseif Harvester.IsDead and enemy.Resources <= 299 then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(3), DateTime.Seconds(9)) + local toBuild = { Utils.Random(AlliedInfantryTypes) } + local Path = Utils.Random(AttackPaths) + enemy.Build(toBuild, function(unit) + InfAttack[#InfAttack + 1] = unit[1] + + if #InfAttack >= 10 then + SendUnits(InfAttack, Path) + InfAttack = { } + Trigger.AfterDelay(DateTime.Minutes(2), ProduceInfantry) + else + Trigger.AfterDelay(delay, ProduceInfantry) + end + end) +end + +ProduceArmor = function() + if not BaseWeap.exists then + return + elseif Harvester.IsDead and enemy.Resources <= 599 then + return + end + + local delay = Utils.RandomInteger(DateTime.Seconds(12), DateTime.Seconds(17)) + local toBuild = { Utils.Random(AlliedArmorTypes) } + local Path = Utils.Random(AttackPaths) + enemy.Build(toBuild, function(unit) + ArmorAttack[#ArmorAttack + 1] = unit[1] + + if #ArmorAttack >= 6 then + SendUnits(ArmorAttack, Path) + ArmorAttack = { } + Trigger.AfterDelay(DateTime.Minutes(3), ProduceArmor) + else + Trigger.AfterDelay(delay, ProduceArmor) + end + end) +end + +SendUnits = function(units, waypoints) + Utils.Do(units, function(unit) + if not unit.IsDead then + Utils.Do(waypoints, function(waypoint) + unit.AttackMove(waypoint.Location) + end) + IdleHunt(unit) + end + end) +end diff --git a/mods/ura/maps/soviet-06b/soviet06b-reinforcements_teams.lua b/mods/ura/maps/soviet-06b/soviet06b-reinforcements_teams.lua new file mode 100644 index 0000000..c9015df --- /dev/null +++ b/mods/ura/maps/soviet-06b/soviet06b-reinforcements_teams.lua @@ -0,0 +1,67 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +EnemyReinforcements = +{ + easy = + { + { "e1", "e1", "e3" }, + { "e1", "e3", "jeep" }, + { "e1", "jeep", "1tnk" } + }, + + normal = + { + { "e1", "e1", "e3", "e3" }, + { "e1", "e3", "jeep", "jeep" }, + { "e1", "jeep", "1tnk", "2tnk" } + }, + + hard = + { + { "e1", "e1", "e3", "e3", "e1" }, + { "e1", "e3", "jeep", "jeep", "1tnk" }, + { "e1", "jeep", "1tnk", "2tnk", "arty" } + } +} + +EnemyAttackDelay = +{ + easy = DateTime.Minutes(5), + normal = DateTime.Minutes(2) + DateTime.Seconds(40), + hard = DateTime.Minutes(1) + DateTime.Seconds(30) +} + +EnemyPaths = +{ + { EnemyEntry1.Location, EnemyRally1.Location }, + { EnemyEntry2.Location, EnemyRally2.Location } +} + +wave = 0 +SendEnemies = function() + Trigger.AfterDelay(EnemyAttackDelay[Map.LobbyOption("difficulty")], function() + + wave = wave + 1 + if wave > 3 then + wave = 1 + end + + if wave == 1 then + local units = Reinforcements.ReinforceWithTransport(enemy, "tran", EnemyReinforcements[Map.LobbyOption("difficulty")][wave], EnemyPaths[1], { EnemyPaths[1][1] })[2] + Utils.Do(units, IdleHunt) + else + local units = Reinforcements.ReinforceWithTransport(enemy, "lst", EnemyReinforcements[Map.LobbyOption("difficulty")][wave], EnemyPaths[2], { EnemyPaths[2][1] })[2] + Utils.Do(units, IdleHunt) + end + + if not Dome.IsDead then + SendEnemies() + end + end) +end diff --git a/mods/ura/maps/soviet-06b/soviet06b.lua b/mods/ura/maps/soviet-06b/soviet06b.lua new file mode 100644 index 0000000..904bf8e --- /dev/null +++ b/mods/ura/maps/soviet-06b/soviet06b.lua @@ -0,0 +1,128 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +IntroAttackers = { IntroEnemy1, IntroEnemy2, IntroEnemy3 } +Trucks = { Truck1, Truck2 } +InfAttack = { } +ArmorAttack = { } +AttackPaths = { { AttackWaypoint1 }, { AttackWaypoint2 } } + +AlliedInfantryTypes = { "e1", "e1", "e3" } +AlliedArmorTypes = { "jeep", "jeep", "1tnk", "1tnk", "2tnk", "2tnk", "arty" } + +SovietReinforcements1 = { "e6", "e6", "e6", "e6", "e6" } +SovietReinforcements2 = { "e4", "e4", "e2", "e2", "e2" } +SovietReinforcements1Waypoints = { McvWaypoint.Location, APCWaypoint1.Location } +SovietReinforcements2Waypoints = { McvWaypoint.Location, APCWaypoint2.Location } + +TruckGoalTrigger = { CPos.New(85, 10), CPos.New(85, 11), CPos.New(85, 12), CPos.New(86, 13), CPos.New(87, 13), CPos.New(88, 13), CPos.New(88, 14), CPos.New(89, 14), CPos.New(90, 14), CPos.New(90, 15), CPos.New(91, 15), CPos.New(91, 16), CPos.New(91, 17), CPos.New(92, 17), CPos.New(93, 17), CPos.New(94, 17), CPos.New(94, 18), CPos.New(95, 18), CPos.New(96, 18), CPos.New(96, 19), CPos.New(97, 19), CPos.New(98, 19)} + +Trigger.OnEnteredFootprint(TruckGoalTrigger, function(a, id) + if not truckGoalTrigger and a.Owner == player and a.Type == "truk" then + truckGoalTrigger = true + player.MarkCompletedObjective(sovietObjective) + player.MarkCompletedObjective(SaveAllTrucks) + end +end) + +Trigger.OnAllKilled(Trucks, function() + enemy.MarkCompletedObjective(alliedObjective) +end) + +Trigger.OnAnyKilled(Trucks, function() + player.MarkFailedObjective(SaveAllTrucks) +end) + +Trigger.OnKilled(Apwr, function(building) + BaseApwr.exists = false +end) + +Trigger.OnKilled(Barr, function(building) + BaseTent.exists = false +end) + +Trigger.OnKilled(Proc, function(building) + BaseProc.exists = false +end) + +Trigger.OnKilled(Weap, function(building) + BaseWeap.exists = false +end) + +Trigger.OnKilled(Apwr2, function(building) + BaseApwr2.exists = false +end) + +Trigger.OnKilledOrCaptured(Dome, function() + Trigger.AfterDelay(DateTime.Seconds(2), function() + player.MarkCompletedObjective(sovietObjective2) + Media.PlaySpeechNotification(player, "ObjectiveMet") + end) +end) + +Trigger.OnRemovedFromWorld(Mcv, function() + if not mcvDeployed then + mcvDeployed = true + BuildBase() + SendEnemies() + Trigger.AfterDelay(DateTime.Minutes(1), ProduceInfantry) + Trigger.AfterDelay(DateTime.Minutes(2), ProduceArmor) + end +end) + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + enemy = Player.GetPlayer("Greece") + Camera.Position = CameraStart.CenterPosition + Mcv.Move(McvWaypoint.Location) + Harvester.FindResources() + Utils.Do(IntroAttackers, function(actor) + IdleHunt(actor) + end) + Reinforcements.ReinforceWithTransport(player, "apc", SovietReinforcements1, SovietReinforcements1Waypoints) + Reinforcements.ReinforceWithTransport(player, "apc", SovietReinforcements2, SovietReinforcements2Waypoints) + Utils.Do(Map.NamedActors, function(actor) + if actor.Owner == enemy and actor.HasProperty("StartBuildingRepairs") then + Trigger.OnDamaged(actor, function(building) + if building.Owner == enemy and building.Health < 3/4 * building.MaxHealth then + building.StartBuildingRepairs() + end + end) + end + end) + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + end) + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "Lose") + end) + alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.") + sovietObjective = player.AddPrimaryObjective("Escort the Convoy.") + sovietObjective2 = player.AddSecondaryObjective("Destroy or capture the Allied radar dome to stop\nenemy reinforcements.") + SaveAllTrucks = player.AddSecondaryObjective("Keep all trucks alive.") +end + +Tick = function() + if player.HasNoRequiredUnits() then + enemy.MarkCompletedObjective(alliedObjective) + end + + if enemy.Resources >= enemy.ResourceCapacity * 0.75 then + enemy.Cash = enemy.Cash + enemy.Resources - enemy.ResourceCapacity * 0.25 + enemy.Resources = enemy.ResourceCapacity * 0.25 + end +end diff --git a/mods/ura/maps/soviet-07/map.bin b/mods/ura/maps/soviet-07/map.bin new file mode 100644 index 0000000..b6090bb Binary files /dev/null and b/mods/ura/maps/soviet-07/map.bin differ diff --git a/mods/ura/maps/soviet-07/map.png b/mods/ura/maps/soviet-07/map.png new file mode 100644 index 0000000..dc77417 Binary files /dev/null and b/mods/ura/maps/soviet-07/map.png differ diff --git a/mods/ura/maps/soviet-07/map.yaml b/mods/ura/maps/soviet-07/map.yaml new file mode 100644 index 0000000..921adb2 --- /dev/null +++ b/mods/ura/maps/soviet-07/map.yaml @@ -0,0 +1,795 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: 07: Core of the matter + +Author: Westwood Studios + +Tileset: INTERIOR + +MapSize: 128,128 + +Bounds: 40,43,70,45 + +Visibility: MissionSelector + +Categories: Campaign + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: england + PlayerReference@Creeps: + Name: Creeps + NonCombatant: True + Faction: england + Enemies: Greece, USSR + PlayerReference@Greece: + Name: Greece + Faction: allies + Color: E2E6F5 + Allies: Soviet + Enemies: USSR, Creeps + PlayerReference@USSR: + Name: USSR + AllowBots: False + Playable: True + Required: True + LockFaction: True + Faction: soviet + LockColor: True + Color: FE1100 + LockSpawn: True + LockTeam: True + Allies: Soviet + Enemies: Greece, Creeps + PlayerReference@Soviet: + Name: Soviet + Faction: soviet + Color: FE1100 + Allies: USSR, Greece + PlayerReference@Spain: + Name: Spain + Faction: allies + Color: 0CBB4A + +Actors: + Actor0: boxes01 + Location: 49,46 + Owner: Neutral + Actor1: boxes02 + Location: 42,46 + Owner: Neutral + Actor2: boxes03 + Location: 49,48 + Owner: Neutral + Actor3: boxes04 + Location: 42,48 + Owner: Neutral + Actor4: boxes06 + Location: 48,46 + Owner: Neutral + Actor5: boxes07 + Location: 49,47 + Owner: Neutral + Actor6: boxes01 + Location: 67,74 + Owner: Neutral + Actor7: boxes01 + Location: 47,68 + Owner: Neutral + Actor8: boxes02 + Location: 42,67 + Owner: Neutral + Actor9: boxes01 + Location: 43,67 + Owner: Neutral + Actor10: boxes01 + Location: 44,67 + Owner: Neutral + Actor11: boxes03 + Location: 48,60 + Owner: Neutral + Actor12: boxes03 + Location: 44,68 + Owner: Neutral + Actor13: boxes04 + Location: 46,66 + Owner: Neutral + Actor14: boxes04 + Location: 47,69 + Owner: Neutral + Actor15: boxes03 + Location: 44,69 + Owner: Neutral + Actor16: boxes02 + Location: 44,62 + Owner: Neutral + Actor17: boxes02 + Location: 49,68 + Owner: Neutral + Actor18: boxes01 + Location: 48,66 + Owner: Neutral + Actor19: boxes01 + Location: 43,65 + Owner: Neutral + Actor20: boxes02 + Location: 46,65 + Owner: Neutral + Actor21: boxes03 + Location: 44,65 + Owner: Neutral + Actor22: boxes01 + Location: 43,62 + Owner: Neutral + Actor23: boxes04 + Location: 43,63 + Owner: Neutral + Actor24: boxes05 + Location: 43,64 + Owner: Neutral + Actor25: boxes05 + Location: 41,67 + Owner: Neutral + Actor26: boxes05 + Location: 47,66 + Owner: Neutral + Actor27: boxes05 + Location: 46,62 + Owner: Neutral + Actor28: boxes06 + Location: 48,62 + Owner: Neutral + Actor29: boxes04 + Location: 49,62 + Owner: Neutral + Actor30: boxes03 + Location: 49,63 + Owner: Neutral + Actor31: boxes03 + Location: 46,64 + Owner: Neutral + Actor32: boxes03 + Location: 48,68 + Owner: Neutral + Actor33: boxes02 + Location: 46,61 + Owner: Neutral + Actor34: boxes01 + Location: 46,60 + Owner: Neutral + Actor35: boxes04 + Location: 43,59 + Owner: Neutral + Actor36: boxes04 + Location: 43,60 + Owner: Neutral + Actor37: boxes05 + Location: 42,57 + Owner: Neutral + Actor38: boxes06 + Location: 43,58 + Owner: Neutral + Actor39: boxes07 + Location: 45,62 + Owner: Neutral + Actor40: boxes08 + Location: 45,56 + Owner: Neutral + Actor41: boxes05 + Location: 46,57 + Owner: Neutral + Actor42: boxes03 + Location: 48,57 + Owner: Neutral + Actor43: boxes03 + Location: 44,55 + Owner: Neutral + Actor44: boxes09 + Location: 46,54 + Owner: Neutral + Actor45: boxes08 + Location: 45,55 + Owner: Neutral + Actor46: boxes07 + Location: 45,54 + Owner: Neutral + Actor47: boxes05 + Location: 45,53 + Owner: Neutral + Actor48: boxes04 + Location: 47,55 + Owner: Neutral + Actor49: boxes03 + Location: 47,54 + Owner: Neutral + Actor50: boxes03 + Location: 47,60 + Owner: Neutral + Actor51: boxes02 + Location: 46,59 + Owner: Neutral + Actor52: boxes01 + Location: 49,57 + Owner: Neutral + Actor53: boxes05 + Location: 46,63 + Owner: Neutral + Actor54: boxes01 + Location: 41,57 + Owner: Neutral + Actor55: boxes01 + Location: 45,57 + Owner: Neutral + Actor56: boxes02 + Location: 45,58 + Owner: Neutral + Actor57: boxes03 + Location: 45,59 + Owner: Neutral + Actor58: boxes01 + Location: 46,56 + Owner: Neutral + Actor59: boxes01 + Location: 43,57 + Owner: Neutral + Actor60: boxes01 + Location: 46,55 + Owner: Neutral + Actor61: boxes06 + Location: 86,69 + Owner: Neutral + Actor65: barl + Location: 98,45 + Owner: Creeps + Actor66: barl + Location: 98,49 + Owner: Creeps + Actor67: brl3 + Location: 98,46 + Owner: Creeps + Actor68: brl3 + Location: 100,44 + Owner: Creeps + Actor69: barl + Location: 105,48 + Owner: Creeps + Actor70: barl + Location: 106,49 + Owner: Creeps + Actor71: barl + Location: 105,50 + Owner: Creeps + Actor72: brl3 + Location: 105,51 + Owner: Creeps + Actor73: barl + Location: 106,52 + Owner: Creeps + Actor75: barl + Location: 105,54 + Owner: Creeps + Actor76: barl + Location: 105,55 + Owner: Creeps + Actor77: brl3 + Location: 105,56 + Owner: Creeps + Actor78: brl3 + Location: 106,57 + Owner: Creeps + Actor79: barl + Location: 105,58 + Owner: Creeps + Actor80: barl + Location: 105,59 + Owner: Creeps + Actor81: barl + Location: 106,60 + Owner: Creeps + Actor82: barl + Location: 105,61 + Owner: Creeps + Actor83: brl3 + Location: 106,62 + Owner: Creeps + Actor84: barl + Location: 104,63 + Owner: Creeps + Actor86: barl + Location: 98,47 + Owner: Creeps + Actor87: brl3 + Location: 98,48 + Owner: Creeps + Actor88: brl3 + Location: 105,63 + Owner: Creeps + Actor89: barl + Location: 101,44 + Owner: Creeps + Actor90: brl3 + Location: 69,74 + Owner: Creeps + Actor93: brl3 + Location: 64,73 + Owner: Creeps + Actor94: barl + Location: 62,73 + Owner: Creeps + Actor95: barl + Location: 65,73 + Owner: Creeps + Actor97: barl + Location: 70,74 + Owner: Creeps + Actor98: brl3 + Location: 70,72 + Owner: Creeps + Actor99: barl + Location: 69,72 + Owner: Creeps + Actor100: brl3 + Location: 43,46 + Owner: Creeps + Actor101: barl + Location: 45,45 + Owner: Creeps + Actor102: brl3 + Location: 47,46 + Owner: Creeps + Actor103: barl + Location: 44,45 + Owner: Creeps + Actor104: brl3 + Location: 46,45 + Owner: Creeps + Actor105: brl3 + Location: 63,73 + Owner: Creeps + Actor106: brl3 + Location: 49,71 + Owner: Creeps + Actor107: barl + Location: 48,71 + Owner: Creeps + Actor108: brl3 + Location: 47,72 + Owner: Creeps + Actor110: barl + Location: 45,72 + Owner: Creeps + Actor111: brl3 + Location: 45,71 + Owner: Creeps + Actor112: brl3 + Location: 44,70 + Owner: Creeps + Actor113: barl + Location: 43,71 + Owner: Creeps + Actor114: brl3 + Location: 44,72 + Owner: Creeps + Actor115: brl3 + Location: 42,72 + Owner: Creeps + Actor116: barl + Location: 42,70 + Owner: Creeps + Actor117: brl3 + Location: 43,69 + Owner: Creeps + Actor118: barl + Location: 42,73 + Owner: Creeps + Actor119: barl + Location: 42,74 + Owner: Creeps + Actor120: barl + Location: 83,67 + Owner: Creeps + Actor121: barl + Location: 83,68 + Owner: Creeps + Actor122: barl + Location: 83,69 + Owner: Creeps + Actor124: barl + Location: 81,79 + Owner: Creeps + Actor125: barl + Location: 81,80 + Owner: Creeps + Actor126: brl3 + Location: 82,80 + Owner: Creeps + Actor127: bio + Location: 65,46 + Owner: Greece + Actor128: bio + Location: 87,46 + Owner: Greece + Actor130: barl + Location: 80,79 + Owner: Creeps + Actor133: barl + Location: 99,44 + Owner: Creeps + Actor134: brl3 + Location: 98,44 + Owner: Creeps + Actor135: brl3 + Location: 99,45 + Owner: Creeps + Actor136: barl + Location: 102,44 + Owner: Creeps + Actor138: barl + Location: 78,80 + Owner: Creeps + Actor139: brl3 + Location: 79,80 + Owner: Creeps + Actor150: e1 + Location: 84,67 + Owner: Greece + Facing: 192 + SubCell: 4 + Actor172: e1 + Location: 77,80 + Owner: Greece + Facing: 224 + SubCell: 2 + Actor214: healcrate + Owner: Neutral + Location: 88,69 + Actor227: flare + Owner: Spain + Location: 75,49 + Actor226: flare + Owner: Spain + Location: 76,49 + Actor228: flare + Owner: Spain + Location: 75,48 + Actor229: flare + Owner: Spain + Location: 76,48 + Actor223: brl3 + Owner: Creeps + Location: 105,53 + BarlCC: barl + Location: 83,70 + Owner: Creeps + CameraCC: camera + Owner: Neutral + Location: 87,69 + CameraFTurBottom: camera + Owner: Neutral + Location: 62,80 + CameraFTurLeft: camera + Owner: Neutral + Location: 59,65 + CameraFTurRight: camera + Owner: Neutral + Location: 93,65 + CameraGoalCenter1: camera + Owner: Neutral + Location: 75,51 + CameraGoalCenter2: camera + Owner: Neutral + Location: 75,55 + CameraGoalCenter3: camera + Owner: Neutral + Location: 75,61 + CameraGoalLeft1: camera + Owner: Neutral + Location: 68,58 + CameraGoalLeft2: camera + Owner: Neutral + Location: 68,63 + CameraGoalRight1: camera + Owner: Neutral + Location: 84,58 + CameraGoalRight2: camera + Owner: Neutral + Location: 84,63 + CameraRSoldier: camera + Owner: Neutral + Location: 62,72 + CameraStart1: camera + Owner: Neutral + Location: 102,48 + CameraStart2: camera + Owner: Neutral + Location: 102,54 + CameraSoldierTrap2: camera + Owner: Neutral + Location: 47,71 + CCGuard1: e1 + Location: 87,67 + Owner: Greece + Facing: 192 + SubCell: 3 + CCGuard2: e1 + Location: 88,67 + Owner: Greece + Facing: 192 + SubCell: 4 + CCGuard3: e1 + Location: 88,68 + Owner: Greece + Facing: 192 + SubCell: 1 + CCGuard4: e1 + Location: 87,68 + Owner: Greece + Facing: 192 + SubCell: 3 + Dog1: dog + Location: 84,84 + Owner: Soviet + Facing: 224 + SubCell: 1 + Dog2: dog + Owner: Soviet + Location: 84,83 + SubCell: 3 + Facing: 92 + Dog3: dog + Location: 82,83 + Owner: Soviet + SubCell: 4 + Dog4: dog + Location: 80,83 + Owner: Soviet + Facing: 64 + SubCell: 2 + Dog5: dog + Location: 85,82 + Owner: Soviet + Facing: 224 + SubCell: 1 + Dog6: dog + Location: 85,79 + Owner: Soviet + Facing: 192 + SubCell: 4 + Dog7: dog + Location: 85,81 + Owner: Soviet + Facing: 192 + SubCell: 4 + Dog8: dog + Location: 86,83 + Owner: Soviet + Facing: 224 + SubCell: 1 + Dog9: dog + Location: 86,84 + Owner: Soviet + SubCell: 0 + Dog10: dog + Location: 86,82 + Owner: Soviet + Facing: 192 + SubCell: 0 + Dog11: dog + Location: 82,84 + Owner: Soviet + Facing: 32 + SubCell: 1 + Dog12: dog + Location: 83,84 + Owner: Soviet + SubCell: 1 + Dog13: dog + Location: 86,81 + Owner: Soviet + Facing: 32 + SubCell: 1 + Dog14: dog + Location: 85,83 + Owner: Soviet + SubCell: 3 + Dog15: dog + Location: 81,83 + Owner: Soviet + SubCell: 4 + Dog16: dog + Location: 86,80 + Owner: Soviet + SubCell: 4 + Dog17: dog + Location: 85,84 + Owner: Soviet + SubCell: 0 + Dog18: dog + Location: 81,84 + Owner: Soviet + SubCell: 1 + Dog19: dog + Location: 86,79 + Owner: Soviet + Facing: 224 + SubCell: 0 + EntranceGuard1: e1 + Location: 100,57 + Owner: Greece + SubCell: 1 + EntranceGuard2: e1 + Location: 99,55 + Owner: Greece + SubCell: 1 + EntranceGuard3: e1 + Location: 100,56 + Owner: Greece + SubCell: 2 + EntranceGuard4: e1 + Location: 98,56 + Owner: Greece + SubCell: 2 + EntranceGuard5: e1 + Location: 98,57 + Owner: Greece + SubCell: 1 + EntranceGuard6: e1 + Location: 99,56 + Owner: Greece + SubCell: 2 + EntranceGuard7: e1 + Location: 97,56 + Owner: Greece + SubCell: 2 + EntranceGuard8: e1 + Location: 99,56 + Owner: Greece + SubCell: 3 + Tanya: e7 + Location: 75,54 + Owner: Greece + Facing: 128 + SubCell: 2 + GoalGuard1: e1 + Location: 74,54 + Owner: Greece + Facing: 128 + SubCell: 2 + GoalGuard2: e1 + Location: 73,54 + Owner: Greece + Facing: 128 + SubCell: 2 + GoalGuard3: e1 + Location: 76,54 + Owner: Greece + Facing: 128 + SubCell: 2 + GoalGuard4: e1 + Location: 77,54 + Owner: Greece + Facing: 128 + SubCell: 2 + FTurBottom: ftur + Location: 62,79 + Owner: Greece + FTur1Goal: waypoint + Owner: Neutral + Location: 77,53 + FTur2Goal: waypoint + Owner: Neutral + Location: 74,53 + FTurLeft: ftur + Location: 45,50 + Owner: Greece + FTurPrisoners: ftur + Location: 59,64 + Owner: Greece + FTurRight: ftur + Location: 93,64 + Owner: Greece + PBox: pbox + Location: 83,81 + Owner: Greece + PBoxBrl: brl3 + Location: 80,80 + Owner: Creeps + Prisoner1: e6 + Location: 44,46 + Owner: Soviet + Facing: 160 + SubCell: 4 + Prisoner2: e6 + Location: 44,47 + Owner: Soviet + Facing: 128 + SubCell: 4 + Prisoner3: e6 + Location: 46,47 + Owner: Soviet + Facing: 96 + SubCell: 0 + Prisoner4: e6 + Location: 45,47 + Owner: Soviet + Facing: 96 + SubCell: 1 + Prisoner5: e6 + Location: 46,46 + Owner: Soviet + Facing: 128 + SubCell: 3 + Prisoner6: e1 + Location: 46,46 + Owner: Soviet + Health: 51 + SubCell: 4 + PrisonEntranceGuard: e1 + Location: 46,69 + Owner: Greece + Facing: 128 + SubCell: 1 + PrisonerGuard1: e1 + Location: 45,48 + Owner: Greece + SubCell: 0 + PrisonerGuard2: e1 + Location: 46,49 + Owner: Greece + Facing: 128 + SubCell: 0 + PrisonerGuard3: e1 + Location: 44,49 + Owner: Greece + Facing: 128 + SubCell: 0 + RSoldier1: e3 + Owner: Greece + Location: 65,72 + SubCell: 3 + Facing: 92 + TurretFacing: 92 + RSoldier2: e3 + Location: 65,74 + Owner: Greece + Facing: 92 + SubCell: 2 + TurretFacing: 92 + RSoldierTrap1: brl3 + Owner: Creeps + Location: 68,72 + RSoldierTrap2: barl + Owner: Creeps + Location: 68,74 + StartingUnitsSpawn: waypoint + Location: 102,43 + Owner: Neutral + SoldierTrap1: brl3 + Owner: Creeps + Location: 98,50 + SoldierTrap2: barl + Owner: Creeps + Location: 46,71 + SoldierTrap1Waypoint1: waypoint + Location: 102,46 + Owner: Neutral + SoldierTrap1Waypoint2: waypoint + Owner: Neutral + Location: 104,53 + SoldierTrap1Waypoint3: waypoint + Owner: Neutral + Location: 93,72 + SoldierTrap2Waypoint: waypoint + Owner: Neutral + Location: 45,52 + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ura/maps/soviet-07/rules.yaml b/mods/ura/maps/soviet-07/rules.yaml new file mode 100644 index 0000000..3978f84 --- /dev/null +++ b/mods/ura/maps/soviet-07/rules.yaml @@ -0,0 +1,38 @@ +World: + LuaScript: + Scripts: soviet07.lua + MissionData: + Briefing: The Allies have infiltrated one of our nuclear reactors! They have tampered with the core so that a meltdown is imminent within 30 minutes. They must not succeed!\n\nEnter the base and find any remaining technicians. Guide them to the 4 coolant stations so they can activate them, then activate the main computer. The security systems have been armed so beware.\n\nKill any Allies you find. + BriefingVideo: soviet7.vqa + StartVideo: countdwn.vqa + WinVideo: averted.vqa + LossVideo: nukestok.vqa + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +Player: + LobbyPrerequisiteCheckbox@GLOBALBOUNTY: + Enabled: False + Locked: True + +CAMERA: + RevealsShroud: + Range: 6c0 + +FTUR: + Valued: + Cost: 0 + Power: + Amount: 0 + -Sellable: + +PBOX: + -AutoTarget: + -AutoTargetPriority@DEFAULT: + -AutoTargetPriority@ATTACKANYTHING: diff --git a/mods/ura/maps/soviet-07/soviet07.lua b/mods/ura/maps/soviet-07/soviet07.lua new file mode 100644 index 0000000..d5c7bcf --- /dev/null +++ b/mods/ura/maps/soviet-07/soviet07.lua @@ -0,0 +1,333 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +if Map.LobbyOption("difficulty") == "easy" then + remainingTime = DateTime.Minutes(7) +elseif Map.LobbyOption("difficulty") == "normal" then + remainingTime = DateTime.Minutes(6) +elseif Map.LobbyOption("difficulty") == "hard" then + remainingTime = DateTime.Minutes(5) +end + +Dogs = { Dog1, Dog2, Dog3, Dog4, Dog5, Dog6, Dog7, Dog8, Dog9, Dog10, Dog11, Dog12, Dog13, Dog14, Dog15, Dog16, Dog17, Dog18, Dog19 } +Engineers = { Prisoner1, Prisoner2, Prisoner3, Prisoner4, Prisoner5 } +PrisonerGuards = { PrisonerGuard1, PrisonerGuard2, PrisonerGuard3 } +EntranceGuards = { EntranceGuard1, EntranceGuard2, EntranceGuard3, EntranceGuard4, EntranceGuard5, EntranceGuard6, EntranceGuard7, EntranceGuard8, EntranceGuard9, EntranceGuard10 } +GoalGuards = { GoalGuard1, GoalGuard2, GoalGuard3, GoalGuard4 } +CCGuards = { CCGuard1, CCGuard2, CCGuard3, CCGuard4 } +StartingUnitsReinforcements = { "e1", "e1", "e1", "e1" } + +CameraCCTrigger = { CPos.New(83, 71), CPos.New(84,71) } +CameraGoalCenterTrigger = { CPos.New(74, 66), CPos.New(75, 66), CPos.New(76, 66), CPos.New(77, 66) } +CameraGoalLeftTrigger = { CPos.New(62, 59), CPos.New(62, 60), CPos.New(62, 62), CPos.New(62, 63) } +CameraGoalRightTrigger = { CPos.New(90, 59), CPos.New(90, 60), CPos.New(90, 62), CPos.New(90, 63) } +ControlCenterTrigger = { CPos.New(87, 67), CPos.New(88, 67) } +ControlCenterEngineerTrigger = { CPos.New(87, 67), CPos.New(88, 67) } +FTurBottomTrigger = { CPos.New(67, 82), CPos.New(67, 83) } +FTurLeftTrigger = { CPos.New(57, 70), CPos.New(58, 70), CPos.New(59, 70), CPos.New(60, 70) } +FTurRightTrigger = { CPos.New(97, 68), CPos.New(97, 69), CPos.New(97, 70) } +GoalCenterTrigger = { CPos.New(73, 52), CPos.New(74, 52), CPos.New(75, 52), CPos.New(76, 52), CPos.New(77, 52), CPos.New(78, 52) } +GoalLeft1Trigger = { CPos.New(65, 58), CPos.New(66, 58), CPos.New(67, 58), CPos.New(65, 59), CPos.New(66, 59), CPos.New(67, 59) } +GoalLeft2Trigger = { CPos.New(65, 64), CPos.New(66, 64), CPos.New(67, 64), CPos.New(65, 65), CPos.New(66, 65), CPos.New(67, 65) } +GoalRight1Trigger = { CPos.New(86, 57), CPos.New(87, 57), CPos.New(88, 57), CPos.New(86, 58), CPos.New(87, 58), CPos.New(88, 58) } +GoalRight2Trigger = { CPos.New(86, 64), CPos.New(87, 64), CPos.New(88, 64), CPos.New(86, 65), CPos.New(87, 65), CPos.New(88, 65) } +RSoldierTrapTrigger = { CPos.New(72, 72), CPos.New(72,73), CPos.New(72,74) } +SoldierTrap2Trigger = { CPos.New(51, 73), CPos.New(51, 74) } + +Trigger.OnEnteredFootprint(CameraCCTrigger, function(a, id) + if not cameraCCTrigger and a.Owner == player then + cameraCCTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraCC.Location }) + end +end) + +Trigger.OnEnteredFootprint(CameraGoalCenterTrigger, function(a, id) + if not cameraGoalCenterTrigger and a.Owner == player then + cameraGoalCenterTrigger = true + if not controlCenterEngineerTrigger then + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter2.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter3.Location }) + end + end +end) + +Trigger.OnEnteredFootprint(CameraGoalLeftTrigger, function(a, id) + if not cameraGoalLeftTrigger and a.Owner == player then + cameraGoalLeftTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraGoalLeft1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalLeft2.Location }) + end +end) + +Trigger.OnEnteredFootprint(CameraGoalRightTrigger, function(a, id) + if not cameraGoalRightTrigger and a.Owner == player then + cameraGoalRightTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraGoalRight1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalRight2.Location }) + end +end) + +Trigger.OnEnteredFootprint(ControlCenterTrigger, function(a, id) + if not controlCenterTrigger and a.Owner == player and a.Type == "e1" then + controlCenterTrigger = true + FTurPrisoners.Kill() + FTurLeft.Kill() + FTurRight.Kill() + FTurBottom.Kill() + player.MarkCompletedObjective(sovietObjective1) + end +end) + +Trigger.OnEnteredFootprint(ControlCenterEngineerTrigger, function(a, id) + if not controlCenterEngineerTrigger and a.Owner == player and a.Type == "e6" then + controlCenterEngineerTrigger = true + local fturA = Actor.Create("ftur", true, { Owner = player, Location = FTur1Goal.Location}) + local fturB = Actor.Create("ftur", true, { Owner = player, Location = FTur2Goal.Location}) + Camera.Position = CameraGoalCenter1.CenterPosition + + if not cameraGoalRightTrigger then + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter2.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraGoalCenter3.Location }) + end + + Utils.Do(GoalGuards, function(actor) + if not actor.IsDead then + actor.AttackMove(FTur1Goal.Location) + end + end) + + if not Tanya.IsDead then + Tanya.Demolish(fturA) + Tanya.Demolish(fturB) + end + + player.MarkCompletedObjective(sovietObjective4) + end +end) + +Trigger.OnEnteredFootprint(FTurBottomTrigger, function(a, id) + if not fTurBottomTrigger and a.Owner == player then + fTurBottomTrigger = true + if not rSoldierTrapTrigger then + Actor.Create("camera", true, { Owner = player, Location = CameraRSoldier.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraFTurBottom.Location }) + end + end +end) + +Trigger.OnEnteredFootprint(FTurLeftTrigger, function(a, id) + if not fTurLeftTrigger and a.Owner == player then + fTurLeftTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraFTurLeft.Location }) + end +end) + +Trigger.OnEnteredFootprint(FTurRightTrigger, function(a, id) + if not fTurRightTrigger and a.Owner == player then + fTurRightTrigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraFTurRight.Location }) + end +end) + +Trigger.OnEnteredFootprint(GoalCenterTrigger, function(a, id) + if not goalCenterTrigger and a.Owner == player and a.Type == "e6" then + goalCenterTrigger = true + player.MarkCompletedObjective(sovietObjective5) + end +end) + +Trigger.OnEnteredFootprint(GoalLeft1Trigger, function(a, id) + if not goalLeft1Trigger and a.Owner == player and a.Type == "e6" then + goalLeft1Trigger = true + Media.PlaySpeechNotification(player, "ControlCenterDeactivated") + end +end) + +Trigger.OnEnteredFootprint(GoalLeft2Trigger, function(a, id) + if not goalLeft2Trigger and a.Owner == player and a.Type == "e6" then + goalLeft2Trigger = true + Media.PlaySpeechNotification(player, "ControlCenterDeactivated") + end +end) + +Trigger.OnEnteredFootprint(GoalRight1Trigger, function(a, id) + if not goalRight1Trigger and a.Owner == player and a.Type == "e6" then + goalRight1Trigger = true + Media.PlaySpeechNotification(player, "ControlCenterDeactivated") + end +end) + +Trigger.OnEnteredFootprint(GoalRight2Trigger, function(a, id) + if not goalRight2Trigger and a.Owner == player and a.Type == "e6" then + goalRight2Trigger = true + Media.PlaySpeechNotification(player, "ControlCenterDeactivated") + end +end) + +Trigger.OnEnteredFootprint(RSoldierTrapTrigger, function(a, id) + if not rSoldierTrapTrigger and a.Owner == player then + rSoldierTrapTrigger = true + if not fTurBottomTrigger then + Actor.Create("camera", true, { Owner = player, Location = CameraRSoldier.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraFTurBottom.Location }) + end + + if not RSoldier1.IsDead and not RSoldierTrap1.IsDead then + RSoldier1.Attack(RSoldierTrap1) + end + + if not RSoldier2.IsDead and not RSoldierTrap2.IsDead then + RSoldier2.Attack(RSoldierTrap2) + end + end +end) + +Trigger.OnEnteredFootprint(SoldierTrap2Trigger, function(a, id) + if not soldierTrap2Trigger and a.Owner == player then + soldierTrap2Trigger = true + Actor.Create("camera", true, { Owner = player, Location = CameraSoldierTrap2.Location }) + if not SoldierTrap2.IsDead then + PrisonEntranceGuard.Attack(SoldierTrap2) + end + PrisonEntranceGuard.Move(SoldierTrap2Waypoint.Location) + end +end) + +Trigger.OnAllKilled(Engineers, function() + enemy.MarkCompletedObjective(alliedObjective) +end) + +Trigger.OnAllKilled(PrisonerGuards, function() + Utils.Do(Engineers, function(actor) + actor.Owner = player + end) + + Prisoner6.Owner = player + player.MarkCompletedObjective(sovietObjective2) +end) + +Trigger.OnKilled(BarlCC, function() + if not cameraCCTrigger then + Actor.Create("camera", true, { Owner = player, Location = CameraCC.Location }) + cameraCCTrigger = true + end + + Utils.Do(CCGuards, function(actor) + if not actor.IsDead then + actor.Hunt() + end + end) +end) + +Trigger.OnKilled(PBoxBrl, function() + PBox.Kill() + Utils.Do(Dogs, function(actor) + actor.Owner = player + end) + player.MarkCompletedObjective(sovietObjective6) +end) + +Trigger.OnKilled(PrisonEntranceGuard, function() + if controlCenterTrigger then + Utils.Do(PrisonerGuards, function(actor) + if not actor.IsDead then + actor.Hunt() + end + end) + end +end) + +IntroSequence = function() + StartingUnits = Reinforcements.Reinforce(player, StartingUnitsReinforcements, { StartingUnitsSpawn.Location, SoldierTrap1Waypoint1.Location }, 0) + Trigger.AfterDelay(DateTime.Seconds(3), function() + Utils.Do(EntranceGuards, function(actor) + if not SoldierTrap1.IsDead then + actor.Attack(SoldierTrap1) + end + actor.AttackMove(SoldierTrap1Waypoint1.Location) + actor.AttackMove(SoldierTrap1Waypoint2.Location) + actor.AttackMove(SoldierTrap1Waypoint3.Location) + end) + Media.PlaySpeechNotification(player, "TimerStarted") + timerStarted = true + end) + + -- Trigger a game over if the player lost all human units before the security system has been deactivated + Trigger.OnAllKilled(StartingUnits, function() + if not controlCenterTrigger then + enemy.MarkCompletedObjective(alliedObjective) + end + end) +end + +WorldLoaded = function() + player = Player.GetPlayer("USSR") + enemy = Player.GetPlayer("Greece") + + Camera.Position = SoldierTrap1Waypoint1.CenterPosition + Actor.Create("camera", true, { Owner = player, Location = CameraStart1.Location }) + Actor.Create("camera", true, { Owner = player, Location = CameraStart2.Location }) + + IntroSequence() + + Trigger.OnObjectiveAdded(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + Trigger.OnObjectiveCompleted(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(player, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + Trigger.OnPlayerWon(player, function() + Media.PlaySpeechNotification(player, "Win") + end) + Trigger.OnPlayerLost(player, function() + Media.PlaySpeechNotification(player, "Lose") + end) + + alliedObjective = enemy.AddPrimaryObjective("Destroy all Soviet troops.") + sovietObjective1 = player.AddPrimaryObjective("Deactivate the security system.") + sovietObjective2 = player.AddPrimaryObjective("Rescue the engineers.") + sovietObjective3 = player.AddPrimaryObjective("Get the engineers to the coolant stations.") + sovietObjective4 = player.AddPrimaryObjective("Use an Engineer to reprogram the security system.") + sovietObjective5 = player.AddPrimaryObjective("Get an Engineer to the reactor core.") + sovietObjective6 = player.AddSecondaryObjective("Free the dogs.") +end + +Tick = function() + if player.HasNoRequiredUnits() and timerStarted then + enemy.MarkCompletedObjective(alliedObjective) + end + + if remainingTime == DateTime.Minutes(5) and Map.LobbyOption("difficulty") ~= "hard" then + Media.PlaySpeechNotification(player, "WarningFiveMinutesRemaining") + elseif remainingTime == DateTime.Minutes(4) then + Media.PlaySpeechNotification(player, "WarningFourMinutesRemaining") + elseif remainingTime == DateTime.Minutes(3) then + Media.PlaySpeechNotification(player, "WarningThreeMinutesRemaining") + elseif remainingTime == DateTime.Minutes(2) then + Media.PlaySpeechNotification(player, "WarningTwoMinutesRemaining") + elseif remainingTime == DateTime.Minutes(1) then + Media.PlaySpeechNotification(player, "WarningOneMinuteRemaining") + end + + if goalLeft1Trigger and goalLeft2Trigger and goalRight1Trigger and goalRight2Trigger then + player.MarkCompletedObjective(sovietObjective3) + end + + if remainingTime > 0 and timerStarted then + UserInterface.SetMissionText("Time until Meltdown: " .. Utils.FormatTime(remainingTime), player.Color) + remainingTime = remainingTime - 1 + elseif remainingTime == 0 then + UserInterface.SetMissionText("") + enemy.MarkCompletedObjective(alliedObjective) + end +end diff --git a/mods/ura/maps/soviet-07/weapons.yaml b/mods/ura/maps/soviet-07/weapons.yaml new file mode 100644 index 0000000..077f968 --- /dev/null +++ b/mods/ura/maps/soviet-07/weapons.yaml @@ -0,0 +1,5 @@ +M1Carbine: + Range: 3c0 + +FireballLauncher: + Range: 3c128 diff --git a/mods/ura/maps/sudden-death.oramap b/mods/ura/maps/sudden-death.oramap new file mode 100644 index 0000000..4fdc0b5 Binary files /dev/null and b/mods/ura/maps/sudden-death.oramap differ diff --git a/mods/ura/maps/sunstroke.oramap b/mods/ura/maps/sunstroke.oramap new file mode 100644 index 0000000..eb21bb2 Binary files /dev/null and b/mods/ura/maps/sunstroke.oramap differ diff --git a/mods/ura/maps/survival01/map.bin b/mods/ura/maps/survival01/map.bin new file mode 100644 index 0000000..a2b65ac Binary files /dev/null and b/mods/ura/maps/survival01/map.bin differ diff --git a/mods/ura/maps/survival01/map.png b/mods/ura/maps/survival01/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/survival01/map.png differ diff --git a/mods/ura/maps/survival01/map.yaml b/mods/ura/maps/survival01/map.yaml new file mode 100644 index 0000000..898e5c3 --- /dev/null +++ b/mods/ura/maps/survival01/map.yaml @@ -0,0 +1,1196 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Survival 01 + +Author: Nuke'm Bro + +Tileset: TEMPERAT + +MapSize: 96,64 + +Bounds: 4,4,88,56 + +Visibility: MissionSelector + +Categories: Mission + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Allies: + Name: Allies + Playable: True + AllowBots: False + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: 0CF7B2 + LockSpawn: True + LockTeam: True + Enemies: Soviets + PlayerReference@Soviets: + Name: Soviets + Faction: soviet + Color: FF0101 + Enemies: Allies + +Actors: + Actor113: fenc + Location: 46,54 + Owner: Allies + Actor115: fenc + Location: 46,55 + Owner: Allies + Actor88: brik + Location: 48,54 + Owner: Allies + Actor84: hpad + Location: 66,47 + Owner: Allies + Actor5: brik + Location: 72,55 + Owner: Allies + Actor4: brik + Location: 72,54 + Owner: Allies + Actor6: brik + Location: 72,53 + Owner: Allies + Actor77: brik + Location: 67,57 + Owner: Allies + Actor8: brik + Location: 72,52 + Owner: Allies + Actor9: brik + Location: 72,51 + Owner: Allies + Actor13: brik + Location: 75,50 + Owner: Allies + Actor12: brik + Location: 75,51 + Owner: Allies + Actor11: brik + Location: 74,51 + Owner: Allies + Actor10: brik + Location: 73,51 + Owner: Allies + Actor14: brik + Location: 75,49 + Owner: Allies + Actor15: brik + Location: 75,48 + Owner: Allies + Actor16: brik + Location: 76,48 + Owner: Allies + Actor17: brik + Location: 76,47 + Owner: Allies + Actor18: brik + Location: 75,47 + Owner: Allies + Actor19: brik + Location: 75,41 + Owner: Allies + Actor20: brik + Location: 75,42 + Owner: Allies + Actor21: brik + Location: 76,42 + Owner: Allies + Actor22: brik + Location: 76,41 + Owner: Allies + Actor23: brik + Location: 74,41 + Owner: Allies + Actor24: brik + Location: 73,41 + Owner: Allies + Actor25: brik + Location: 72,41 + Owner: Allies + Actor26: brik + Location: 71,41 + Owner: Allies + Actor27: brik + Location: 71,40 + Owner: Allies + Actor28: brik + Location: 70,40 + Owner: Allies + Actor29: brik + Location: 70,41 + Owner: Allies + Actor30: brik + Location: 61,40 + Owner: Allies + Actor31: brik + Location: 61,41 + Owner: Allies + Actor83: hpad + Location: 57,48 + Owner: Allies + Actor33: brik + Location: 60,40 + Owner: Allies + Actor1: brik + Location: 57,56 + Owner: Allies + Actor35: brik + Location: 59,40 + Owner: Allies + Actor36: brik + Location: 58,40 + Owner: Allies + Actor37: brik + Location: 57,40 + Owner: Allies + Actor38: brik + Location: 57,41 + Owner: Allies + Actor39: brik + Location: 56,41 + Owner: Allies + Actor40: brik + Location: 55,41 + Owner: Allies + Actor41: brik + Location: 54,41 + Owner: Allies + Actor42: brik + Location: 53,41 + Owner: Allies + Actor43: brik + Location: 53,42 + Owner: Allies + Actor44: brik + Location: 52,42 + Owner: Allies + Actor45: brik + Location: 51,42 + Owner: Allies + Actor46: brik + Location: 50,42 + Owner: Allies + Actor47: brik + Location: 49,42 + Owner: Allies + Actor48: brik + Location: 48,42 + Owner: Allies + Actor49: brik + Location: 48,43 + Owner: Allies + Actor50: brik + Location: 49,43 + Owner: Allies + Actor51: brik + Location: 48,52 + Owner: Allies + Actor52: brik + Location: 48,51 + Owner: Allies + Actor53: brik + Location: 48,50 + Owner: Allies + Actor54: brik + Location: 48,49 + Owner: Allies + Actor55: brik + Location: 48,48 + Owner: Allies + Actor71: brik + Location: 64,56 + Owner: Allies + Actor58: brik + Location: 46,47 + Owner: Allies + Actor57: brik + Location: 46,48 + Owner: Allies + Actor56: brik + Location: 47,48 + Owner: Allies + Actor59: brik + Location: 47,47 + Owner: Allies + Actor72: brik + Location: 64,57 + Owner: Allies + Actor65: brik + Location: 51,57 + Owner: Allies + Actor66: brik + Location: 50,57 + Owner: Allies + Actor61: brik + Location: 55,57 + Owner: Allies + Actor2: brik + Location: 57,57 + Owner: Allies + Actor34: brik + Location: 56,57 + Owner: Allies + Actor62: brik + Location: 54,57 + Owner: Allies + Actor74: brik + Location: 63,56 + Owner: Allies + Actor79: brik + Location: 65,57 + Owner: Allies + Actor80: apwr + Location: 68,54 + Owner: Allies + Actor81: powr + Location: 65,53 + Owner: Allies + Actor63: brik + Location: 53,57 + Owner: Allies + Actor64: brik + Location: 52,57 + Owner: Allies + Actor68: brik + Location: 72,57 + Owner: Allies + Actor73: brik + Location: 63,57 + Owner: Allies + Actor69: brik + Location: 71,57 + Owner: Allies + Actor76: brik + Location: 68,57 + Owner: Allies + Actor78: brik + Location: 66,57 + Owner: Allies + Actor75: brik + Location: 69,57 + Owner: Allies + Actor70: brik + Location: 70,57 + Owner: Allies + Actor7: brik + Location: 72,56 + Owner: Allies + Actor60: brik + Location: 56,56 + Owner: Allies + Actor408: weap + Location: 53,46 + Owner: Allies + Actor32: tent + Location: 62,47 + Owner: Allies + Actor0: brik + Location: 48,53 + Owner: Allies + Actor111: proc + Location: 43,55 + Owner: Allies + Actor112: fenc + Location: 45,54 + Owner: Allies + Actor116: fenc + Location: 46,56 + Owner: Allies + Actor89: fenc + Location: 65,46 + Owner: Allies + Actor90: fenc + Location: 66,46 + Owner: Allies + Actor91: fenc + Location: 67,46 + Owner: Allies + Actor92: fenc + Location: 68,46 + Owner: Allies + Actor93: fenc + Location: 68,47 + Owner: Allies + Actor94: fenc + Location: 68,48 + Owner: Allies + Actor95: fenc + Location: 68,49 + Owner: Allies + Actor96: fenc + Location: 57,47 + Owner: Allies + Actor97: fenc + Location: 58,47 + Owner: Allies + Actor98: fenc + Location: 59,47 + Owner: Allies + Actor99: fenc + Location: 59,48 + Owner: Allies + Actor100: fenc + Location: 59,49 + Owner: Allies + Actor101: fix + Location: 50,52 + Owner: Allies + Actor102: dome + Location: 55,53 + Owner: Allies + Actor103: powr + Location: 58,41 + Owner: Allies + Actor104: apwr + Location: 71,48 + Owner: Allies + Actor105: fact + Location: 59,51 + Owner: Allies + Actor106: powr + Location: 55,42 + Owner: Allies + Actor107: gun + Location: 64,42 + Owner: Allies + Actor108: pbox + Location: 67,42 + Owner: Allies + Actor109: pbox + Location: 74,45 + Owner: Allies + Actor110: gun + Location: 50,45 + Owner: Allies + Actor114: fenc + Location: 44,54 + Owner: Allies + Actor118: fenc + Location: 42,57 + Owner: Allies + Actor117: fenc + Location: 46,57 + Owner: Allies + Actor67: brik + Location: 49,57 + Owner: Allies + Actor82: brik + Location: 48,57 + Owner: Allies + Actor85: brik + Location: 48,56 + Owner: Allies + Actor87: brik + Location: 48,55 + Owner: Allies + Actor86: brik + Location: 49,56 + Owner: Allies + Actor119: fenc + Location: 42,56 + Owner: Allies + Actor120: mine + Location: 30,58 + Owner: Neutral + Actor121: oilb + Location: 43,38 + Owner: Neutral + Actor122: oilb + Location: 36,37 + Owner: Neutral + Actor124: oilb + Location: 88,46 + Owner: Allies + Actor123: oilb + Location: 80,46 + Owner: Allies + Actor130: fenc + Location: 88,48 + Owner: Neutral + Actor129: fenc + Location: 89,48 + Owner: Neutral + Actor125: fenc + Location: 90,45 + Owner: Neutral + Actor127: fenc + Location: 90,47 + Owner: Neutral + Actor126: fenc + Location: 90,46 + Owner: Neutral + Actor128: fenc + Location: 90,48 + Owner: Neutral + Actor131: fenc + Location: 87,48 + Owner: Neutral + Actor141: fenc + Location: 78,11 + Owner: Neutral + Actor160: fenc + Location: 77,4 + Owner: Neutral + Actor159: fenc + Location: 76,4 + Owner: Neutral + Actor162: fenc + Location: 74,4 + Owner: Neutral + Actor161: fenc + Location: 78,4 + Owner: Neutral + Actor136: fenc + Location: 75,11 + Owner: Neutral + Actor137: fenc + Location: 75,10 + Owner: Neutral + Actor138: fenc + Location: 76,10 + Owner: Neutral + Actor139: fenc + Location: 77,10 + Owner: Neutral + Actor140: fenc + Location: 78,10 + Owner: Neutral + Actor143: barl + Location: 79,6 + Owner: Soviets + Actor144: brl3 + Location: 74,5 + Owner: Soviets + Actor145: brl3 + Location: 75,7 + Owner: Soviets + Actor146: barl + Location: 74,6 + Owner: Soviets + Actor147: barl + Location: 80,5 + Owner: Soviets + Actor148: brl3 + Location: 84,6 + Owner: Soviets + Actor149: brl3 + Location: 85,5 + Owner: Soviets + Actor150: brl3 + Location: 83,6 + Owner: Soviets + Actor151: barl + Location: 84,5 + Owner: Soviets + Actor142: brl3 + Location: 79,5 + Owner: Soviets + Actor152: barl + Location: 82,6 + Owner: Soviets + Actor153: barl + Location: 84,7 + Owner: Soviets + Actor154: barl + Location: 85,6 + Owner: Soviets + Actor155: barl + Location: 89,5 + Owner: Soviets + Actor171: fenc + Location: 87,4 + Owner: Neutral + Actor172: fenc + Location: 88,4 + Owner: Neutral + Actor156: brl3 + Location: 90,5 + Owner: Soviets + Actor170: fenc + Location: 86,4 + Owner: Neutral + Actor169: fenc + Location: 85,4 + Owner: Neutral + Actor158: fenc + Location: 75,4 + Owner: Neutral + Actor168: fenc + Location: 84,4 + Owner: Neutral + Actor157: barl + Location: 90,6 + Owner: Soviets + Actor167: fenc + Location: 83,4 + Owner: Neutral + Actor166: fenc + Location: 82,4 + Owner: Neutral + Actor165: fenc + Location: 81,4 + Owner: Neutral + Actor164: fenc + Location: 80,4 + Owner: Neutral + Actor163: fenc + Location: 79,4 + Owner: Neutral + Actor173: fenc + Location: 89,4 + Owner: Neutral + Actor174: fenc + Location: 90,4 + Owner: Neutral + Actor175: fenc + Location: 91,4 + Owner: Neutral + Actor176: fenc + Location: 91,5 + Owner: Neutral + Actor177: fenc + Location: 91,6 + Owner: Neutral + Actor178: fenc + Location: 91,7 + Owner: Neutral + Actor179: fenc + Location: 91,8 + Owner: Neutral + Actor180: fenc + Location: 90,8 + Owner: Neutral + Actor181: fenc + Location: 90,7 + Owner: Neutral + Actor187: t11 + Location: 69,10 + Owner: Neutral + Actor186: t16 + Location: 58,6 + Owner: Neutral + Actor185: tc04 + Location: 57,8 + Owner: Neutral + Actor184: mine + Location: 85,22 + Owner: Neutral + Actor188: tc01 + Location: 69,6 + Owner: Neutral + Actor189: t12 + Location: 62,13 + Owner: Neutral + Actor193: fenc + Location: 75,16 + Owner: Neutral + Actor194: fenc + Location: 75,15 + Owner: Neutral + Actor191: fenc + Location: 74,15 + Owner: Neutral + Actor192: fenc + Location: 74,16 + Owner: Neutral + Actor190: fenc + Location: 74,14 + Owner: Neutral + Actor199: e1 + Location: 79,15 + Owner: Soviets + Actor200: e2 + Location: 81,17 + Owner: Soviets + Actor201: v2rl + Location: 76,15 + Owner: Soviets + Actor202: tc04 + Location: 4,15 + Owner: Neutral + Actor203: tc01 + Location: 7,17 + Owner: Neutral + Actor204: t15 + Location: 9,16 + Owner: Neutral + Actor205: tc05 + Location: 4,26 + Owner: Neutral + Actor206: tc02 + Location: 5,24 + Owner: Neutral + Actor207: tc04 + Location: 7,25 + Owner: Neutral + Actor208: tc03 + Location: 40,21 + Owner: Neutral + Actor210: tc04 + Location: 34,22 + Owner: Neutral + Actor211: tc02 + Location: 32,33 + Owner: Neutral + Actor212: t16 + Location: 35,33 + Owner: Neutral + Actor213: t11 + Location: 49,37 + Owner: Neutral + Actor214: tc04 + Location: 82,39 + Owner: Neutral + Actor215: tc01 + Location: 89,39 + Owner: Neutral + Actor216: tc05 + Location: 85,39 + Owner: Neutral + Actor217: t16 + Location: 80,41 + Owner: Neutral + Actor218: fenc + Location: 79,48 + Owner: Neutral + Actor219: fenc + Location: 80,48 + Owner: Neutral + Actor220: fenc + Location: 81,48 + Owner: Neutral + Actor221: fenc + Location: 82,48 + Owner: Neutral + Actor222: fenc + Location: 82,47 + Owner: Neutral + Actor223: tc02 + Location: 21,41 + Owner: Neutral + Actor224: tc04 + Location: 35,43 + Owner: Neutral + Actor225: tc02 + Location: 38,44 + Owner: Neutral + Actor226: t16 + Location: 38,42 + Owner: Neutral + Actor227: t13 + Location: 44,33 + Owner: Neutral + Actor228: t02 + Location: 39,31 + Owner: Neutral + Actor229: tc04 + Location: 54,13 + Owner: Neutral + Actor230: t07 + Location: 47,12 + Owner: Neutral + Actor235: brik + Location: 12,18 + Owner: Neutral + Actor267: brik + Location: 33,17 + Owner: Neutral + Actor237: brik + Location: 11,19 + Owner: Neutral + Actor231: brik + Location: 11,16 + Owner: Neutral + Actor238: brik + Location: 12,19 + Owner: Neutral + Actor232: brik + Location: 11,17 + Owner: Neutral + Actor307: v2rl + Location: 31,9 + Owner: Soviets + Actor306: v2rl + Location: 31,18 + Owner: Soviets + Actor234: brik + Location: 12,16 + Owner: Neutral + Actor233: brik + Location: 12,17 + Owner: Neutral + Actor236: brik + Location: 11,18 + Owner: Neutral + Actor293: brik + Location: 25,4 + Owner: Neutral + Actor291: brik + Location: 26,4 + Owner: Neutral + Actor295: brik + Location: 23,4 + Owner: Neutral + Actor294: brik + Location: 24,4 + Owner: Neutral + Actor290: brik + Location: 27,4 + Owner: Neutral + Actor289: brik + Location: 28,4 + Owner: Neutral + Actor288: brik + Location: 29,4 + Owner: Neutral + Actor287: brik + Location: 30,4 + Owner: Neutral + Actor286: brik + Location: 31,4 + Owner: Neutral + Actor285: brik + Location: 32,5 + Owner: Neutral + Actor284: brik + Location: 32,4 + Owner: Neutral + Actor283: brik + Location: 33,4 + Owner: Neutral + Actor261: brik + Location: 29,19 + Owner: Neutral + Actor262: brik + Location: 30,19 + Owner: Neutral + Actor260: brik + Location: 28,19 + Owner: Neutral + Actor265: brik + Location: 32,18 + Owner: Neutral + Actor259: brik + Location: 27,19 + Owner: Neutral + Actor264: brik + Location: 32,19 + Owner: Neutral + Actor246: brik + Location: 14,19 + Owner: Neutral + Actor242: brik + Location: 13,19 + Owner: Neutral + Actor263: brik + Location: 31,19 + Owner: Neutral + Actor266: brik + Location: 33,18 + Owner: Neutral + Actor247: brik + Location: 15,19 + Owner: Neutral + Actor248: brik + Location: 16,19 + Owner: Neutral + Actor249: brik + Location: 17,19 + Owner: Neutral + Actor251: brik + Location: 19,19 + Owner: Neutral + Actor250: brik + Location: 18,19 + Owner: Neutral + Actor254: brik + Location: 19,18 + Owner: Neutral + Actor253: brik + Location: 20,18 + Owner: Neutral + Actor252: brik + Location: 20,19 + Owner: Neutral + Actor281: brik + Location: 33,6 + Owner: Neutral + Actor277: brik + Location: 33,9 + Owner: Neutral + Actor276: brik + Location: 32,10 + Owner: Neutral + Actor270: brik + Location: 33,15 + Owner: Neutral + Actor278: brik + Location: 33,8 + Owner: Neutral + Actor275: brik + Location: 33,10 + Owner: Neutral + Actor274: brik + Location: 33,11 + Owner: Neutral + Actor273: brik + Location: 32,15 + Owner: Neutral + Actor271: brik + Location: 32,16 + Owner: Neutral + Actor282: brik + Location: 33,5 + Owner: Neutral + Actor272: brik + Location: 32,11 + Owner: Neutral + Actor279: brik + Location: 33,7 + Owner: Neutral + Actor269: brik + Location: 33,16 + Owner: Neutral + Actor268: brik + Location: 33,19 + Owner: Neutral + Actor258: brik + Location: 26,18 + Owner: Neutral + Actor255: brik + Location: 25,18 + Owner: Neutral + Actor256: brik + Location: 25,19 + Owner: Neutral + Actor257: brik + Location: 26,19 + Owner: Neutral + Actor309: e1 + Location: 52,44 + Owner: Allies + Actor305: v2rl + Location: 17,18 + Owner: Soviets + Actor304: e3 + Location: 17,17 + Owner: Soviets + Actor303: e1 + Location: 29,15 + Owner: Soviets + Actor300: e1 + Location: 25,16 + Owner: Soviets + Actor301: e2 + Location: 21,17 + Owner: Soviets + Actor302: e3 + Location: 28,10 + Owner: Soviets + Actor310: e1 + Location: 50,47 + Owner: Allies + Actor311: e1 + Location: 62,43 + Owner: Allies + Actor312: e1 + Location: 64,44 + Owner: Allies + Actor313: e3 + Location: 66,44 + Owner: Allies + Actor314: e1 + Location: 69,43 + Owner: Allies + Actor315: e1 + Location: 73,43 + Owner: Allies + Actor316: jeep + Location: 54,49 + Owner: Allies + Actor317: 1tnk + Location: 69,45 + Owner: Allies + Actor318: 1tnk + Location: 52,46 + Owner: Allies + Actor296: tc02 + Location: 73,32 + Owner: Neutral + Actor298: tc01 + Location: 77,34 + Owner: Neutral + Actor299: tc04 + Location: 83,35 + Owner: Neutral + Actor308: tc01 + Location: 86,35 + Owner: Neutral + Actor319: t07 + Location: 90,27 + Owner: Neutral + Actor320: tc01 + Location: 80,26 + Owner: Neutral + Actor321: brik + Location: 60,41 + Owner: Allies + Actor135: e1 + Location: 63,39 + Owner: Soviets + Actor209: e2 + Location: 65,40 + Owner: Soviets + Actor280: e1 + Location: 68,40 + Owner: Soviets + Actor292: e1 + Location: 76,44 + Owner: Soviets + Actor322: e2 + Location: 78,46 + Owner: Soviets + Actor323: e1 + Location: 46,44 + Owner: Soviets + Actor324: e3 + Location: 45,46 + Owner: Soviets + Actor325: e3 + Location: 66,39 + Owner: Soviets + Actor326: v2rl + Location: 61,37 + Owner: Soviets + Actor327: brl3 + Location: 79,47 + Owner: Allies + Actor328: barl + Location: 79,46 + Owner: Allies + Actor329: brl3 + Location: 87,45 + Owner: Allies + Actor330: barl + Location: 87,46 + Owner: Allies + Actor331: barl + Location: 88,45 + Owner: Allies + Actor332: oilb + Location: 74,53 + Owner: Allies + Actor333: fenc + Location: 73,55 + Owner: Allies + Actor334: fenc + Location: 74,55 + Owner: Allies + Actor335: fenc + Location: 75,55 + Owner: Allies + Actor336: fenc + Location: 75,52 + Owner: Allies + Actor337: fenc + Location: 76,52 + Owner: Allies + Actor338: fenc + Location: 74,52 + Owner: Allies + Actor339: brl3 + Location: 73,53 + Owner: Allies + Actor340: barl + Location: 73,52 + Owner: Allies + Actor297: brik + Location: 22,4 + Owner: Neutral + Actor341: brik + Location: 21,4 + Owner: Neutral + Actor342: brik + Location: 21,5 + Owner: Neutral + Actor343: brik + Location: 22,5 + Owner: Neutral + Actor346: t15 + Location: 57,24 + Owner: Neutral + FlameTower3: ftur + Location: 78,17 + Owner: Soviets + AdvancedPowerPlant3: apwr + Location: 88,13 + Owner: Soviets + Silo1: silo + Location: 84,13 + Owner: Soviets + Silo2: silo + Location: 84,12 + Owner: Soviets + Refinery: proc + Location: 81,11 + Owner: Soviets + SovietAirfield1: afld.mission + Location: 86,5 + Owner: Soviets + SovietAirfield2: afld.mission + Location: 80,6 + Owner: Soviets + SovietAirfield3: afld.mission + Location: 75,5 + Owner: Soviets + FlameTower1: ftur + Location: 23,16 + Owner: Soviets + FlameTower2: ftur + Location: 29,13 + Owner: Soviets + Sam1: sam + Location: 62,27 + Owner: Soviets + Sam2: sam + Location: 17,31 + Owner: Soviets + Sam3: sam + Location: 76,11 + Owner: Soviets + Sam4: sam + Location: 29,17 + Owner: Soviets + RadarDome: dome + Location: 14,16 + Owner: Soviets + SubPen: spen + Location: 13,9 + Owner: Soviets + Barrack1: barr + Location: 28,7 + Owner: Soviets + WarFactory: weap + Location: 22,12 + Owner: Soviets + AdvancedPowerPlant1: apwr + Location: 24,6 + Owner: Soviets + AdvancedPowerPlant2: apwr + Location: 16,14 + Owner: Soviets + BadgerEntryPoint1: waypoint + Location: 4,54 + Owner: Neutral + BadgerEntryPoint2: waypoint + Location: 4,47 + Owner: Neutral + ParaDrop1: waypoint + Location: 54,51 + Owner: Neutral + ParaDrop2: waypoint + Location: 67,51 + Owner: Neutral + Alliesbase: waypoint + Location: 60,48 + Owner: Neutral + Alliesbase1: waypoint + Location: 66,45 + Owner: Neutral + Alliesbase2: waypoint + Location: 51,46 + Owner: Neutral + Alliesbase3: waypoint + Location: 72,45 + Owner: Neutral + AlliesEntryPoint: waypoint + Location: 60,59 + Owner: Neutral + AlliesBaseGate1: waypoint + Location: 64,33 + Owner: Neutral + AlliesBaseGate2: waypoint + Location: 42,42 + Owner: Neutral + SovietEntryPoint1: waypoint + Location: 4,31 + Owner: Neutral + SovietEntryPoint2: waypoint + Location: 4,21 + Owner: Neutral + SovietEntryPoint3: waypoint + Location: 37,4 + Owner: Neutral + SovietEntryPoint4: waypoint + Location: 65,4 + Owner: Neutral + SovietEntryPoint5: waypoint + Location: 91,19 + Owner: Neutral + SovietEntryPoint7: waypoint + Location: 91,43 + Owner: Neutral + SovietRallyPoint1: waypoint + Location: 23,39 + Owner: Neutral + SovietRallyPoint2: waypoint + Location: 23,21 + Owner: Neutral + SovietRallyPoint3: waypoint + Location: 37,13 + Owner: Neutral + SovietRallyPoint4: waypoint + Location: 65,13 + Owner: Neutral + SovietRallyPoint5: waypoint + Location: 80,19 + Owner: Neutral + SovietInfantryEntry1: waypoint + Location: 28,9 + Owner: Neutral + SovietInfantryRally1: waypoint + Location: 23,26 + Owner: Neutral + NavalEntryPoint: waypoint + Location: 4,59 + Owner: Neutral + NavalWaypoint1: waypoint + Location: 41,48 + Owner: Neutral + NavalWaypoint2: waypoint + Location: 26,54 + Owner: Neutral + NavalWaypoint3: waypoint + Location: 42,53 + Owner: Neutral + AirReinforcementsEntry1: waypoint + Location: 91,55 + Owner: Neutral + AirReinforcementsRally1: waypoint + Location: 63,26 + Owner: Neutral + AirReinforcementsEntry2: waypoint + Location: 83,59 + Owner: Neutral + AirReinforcementsRally2: waypoint + Location: 17,31 + Owner: Neutral + HiddenATEK: waypoint + Location: 58,61 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml diff --git a/mods/ura/maps/survival01/rules.yaml b/mods/ura/maps/survival01/rules.yaml new file mode 100644 index 0000000..d7da59c --- /dev/null +++ b/mods/ura/maps/survival01/rules.yaml @@ -0,0 +1,180 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: survival01.lua + MissionData: + Briefing: LANDCOM 66 HQS.\nTOP SECRET.\nTO: FIELD COMMANDER A34\n\nTHE SOVIETS STARTED HEAVY ATTACKS AT OUR POSITION.\n SURVIVE AND HOLD THE BASE UNTIL OUR FRENCH ALLIES ARRIVE.\n\nCONFIRMATION CODE 5593.\n\nTRANSMISSION ENDS. + ScriptLobbyDropdown@difficulty: + ID: difficulty + Label: Difficulty + Values: + easy: Easy + normal: Normal + hard: Hard + Default: easy + +^Palettes: + IndexedPlayerPalette: + PlayerIndex: + Soviets: 229, 230, 231, 232, 233, 234, 235, 8, 236, 237, 238, 239, 221, 222, 223, 223 + Allies: 224, 224, 225, 225, 226, 184, 185, 186, 187, 188, 188, 189, 190, 190, 191, 191 + +powerproxy.paratroopers: + ParatroopersPower: + DropItems: E1,E1,E1,E2,E2 + +powerproxy.allied: + Inherits: powerproxy.paratroopers + ParatroopersPower: + DropItems: ARTY,ARTY,ARTY + +CAMERA.sam: + Inherits: CAMERA + RevealsShroud: + Range: 4c0 + +AFLD.mission: + Inherits: AFLD + -AirstrikePower@spyplane: + -ParatroopersPower@paratroopers: + -AirstrikePower@parabombs: + -SupportPowerChargeBar: + RenderSprites: + Image: AFLD + +ATEK.mission: + Inherits: ATEK + GpsPower: + ChargeInterval: 0 + Power: + Amount: 0 + -Selectable: + -Targetable: + -GivesBuildableArea: + -Huntable: + RenderSprites: + Image: ATEK + Interactable: + +GUN: + Valued: + Cost: 1000 + +E7: + Buildable: + Prerequisites: ~disabled + +SHOK: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: ~disabled + +HELI: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +SYRD: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled + +ATEK: + Buildable: + Prerequisites: ~disabled + +4TNK: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +TTNK: + Buildable: + Prerequisites: ~disabled + +CTNK: + Buildable: + Prerequisites: ~disabled + +DOME: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +MGG: + Buildable: + Prerequisites: ~disabled + +STNK: + Buildable: + Prerequisites: ~disabled + +QTNK: + Buildable: + Prerequisites: ~disabled + +DTRK: + Buildable: + Prerequisites: ~disabled + +FACF: + Buildable: + Prerequisites: ~disabled + +WEAF: + Buildable: + Prerequisites: ~disabled + +SYRF: + Buildable: + Prerequisites: ~disabled + +DOMF: + Buildable: + Prerequisites: ~disabled + +ATEF: + Buildable: + Prerequisites: ~disabled + +MSLF: + Buildable: + Prerequisites: ~disabled + +PDOF: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/survival01/survival01.lua b/mods/ura/maps/survival01/survival01.lua new file mode 100644 index 0000000..280a91a --- /dev/null +++ b/mods/ura/maps/survival01/survival01.lua @@ -0,0 +1,432 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +Difficulty = Map.LobbyOption("difficulty") + +if Difficulty == "easy" then + AttackAtFrameIncrement = DateTime.Seconds(22) + AttackAtFrameIncrementInf = DateTime.Seconds(16) + TimerTicks = DateTime.Minutes(15) + IncrementTurningPoint = TimerTicks / 2 + DamageModifier = 0.5 + LongBowReinforcements = { "heli", "heli" } + ParadropArtillery = true +elseif Difficulty == "normal" then + AttackAtFrameIncrement = DateTime.Seconds(18) + AttackAtFrameIncrementInf = DateTime.Seconds(12) + TimerTicks = DateTime.Minutes(20) + IncrementTurningPoint = TimerTicks / 2 + MoreParas = true + DamageModifier = 0.75 + LongBowReinforcements = { "heli", "heli" } +else --Difficulty == "hard" + AttackAtFrameIncrement = DateTime.Seconds(14) + AttackAtFrameIncrementInf = DateTime.Seconds(8) + TimerTicks = DateTime.Minutes(25) + IncrementTurningPoint = DateTime.Minutes(10) + MoreParas = true + AttackAtFrameNaval = DateTime.Minutes(3) + DateTime.Seconds(45) + SpawnNavalUnits = true + DamageModifier = 1 + LongBowReinforcements = { "heli" } +end + +AlliedAirReinforcementsWaypoints = +{ + { AirReinforcementsEntry1.Location, AirReinforcementsRally1.Location }, + { AirReinforcementsEntry2.Location, AirReinforcementsRally2.Location } +} +FrenchReinforcements = { "2tnk", "2tnk", "2tnk", "2tnk", "2tnk", "1tnk", "1tnk", "1tnk", "arty", "arty", "arty", "jeep", "jeep" } + +SpawningSovietUnits = true +SpawningInfantry = true +AttackAtFrameInf = DateTime.Seconds(12) +AttackAtFrame = DateTime.Seconds(18) +SovietAttackGroupSize = 5 +SovietInfantryGroupSize = 7 +FactoryClearRange = 10 +ParadropTicks = DateTime.Seconds(30) +ParadropWaypoints = +{ + { 192 + 4, ParaDrop1}, + { 192 - 4, ParaDrop2}, + { 192 + 4, Alliesbase2}, + { 192 - 4, Alliesbase1} +} +NavalTransportPassengers = { "e1", "e1", "e2", "e4", "e4" } +NavalReinforcementsWaypoints = { NavalWaypoint1, NavalWaypoint2, NavalWaypoint2, NavalWaypoint3 } +Squad1 = { "e1", "e1" } +Squad2 = { "e2", "e2" } +SovietVehicles = { "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "3tnk", "v2rl", "v2rl", "ftrk", "ftrk", "ftrk", "apc", "apc" } +SovietInfantry = { "e1", "e1", "e1", "e1", "e2", "e2", "e2", "e4", "e4", "e3" } +SovietEntryPoints = { SovietEntryPoint1, SovietEntryPoint2, SovietEntryPoint3, SovietEntryPoint4, SovietEntryPoint5 } +SovietRallyPoints = { SovietRallyPoint1, SovietRallyPoint2, SovietRallyPoint3, SovietRallyPoint4, SovietRallyPoint5 } +SovietGateRallyPoints = { AlliesBaseGate2, AlliesBaseGate2, AlliesBaseGate1, AlliesBaseGate1, AlliesBaseGate1 } + +Airfields = { SovietAirfield1, SovietAirfield2, SovietAirfield3 } +SovietBuildings = { Barrack1, SubPen, RadarDome, AdvancedPowerPlant1, AdvancedPowerPlant2, AdvancedPowerPlant3, WarFactory, Refinery, Silo1, Silo2, FlameTower1, FlameTower2, FlameTower3, Sam1, Sam2, Sam3, Sam4, SovietAirfield1, SovietAirfield2, SovietAirfield3 } + +IdleTrigger = function(units, dest) + Utils.Do(units, function(unit) + + if not unit.IsDead then + Trigger.OnIdle(unit, function() + local bool = Utils.All(units, function(unit) return unit.IsIdle end) + if bool then + SetupHuntTrigger(units) + end + end) + + Trigger.OnDamaged(unit, function() + SetupHuntTrigger(units) + end) + + Trigger.OnCapture(unit, function() + Trigger.ClearAll(unit) + end) + end + end) +end + +SetupHuntTrigger = function(units) + Utils.Do(units, function(unit) + if not unit.IsDead then + Trigger.ClearAll(unit) + Trigger.AfterDelay(0, function() + if not unit.IsDead then + Trigger.OnIdle(unit, unit.Hunt) + Trigger.OnCapture(unit, function() + Trigger.ClearAll(unit) + end) + end + end) + end + end) +end + +ticked = TimerTicks +Tick = function() + if KillObj and soviets.HasNoRequiredUnits() then + allies.MarkCompletedObjective(KillObj) + end + + if allies.HasNoRequiredUnits() then + soviets.MarkCompletedObjective(SovietObj) + end + + if soviets.Resources > soviets.ResourceCapacity / 2 then + soviets.Resources = soviets.ResourceCapacity / 2 + end + + if ticked > 0 then + if DateTime.Minutes(20) == ticked then + Media.PlaySpeechNotification(allies, "TwentyMinutesRemaining") + + elseif DateTime.Minutes(10) == ticked then + Media.PlaySpeechNotification(allies, "TenMinutesRemaining") + + elseif DateTime.Minutes(5) == ticked then + Media.PlaySpeechNotification(allies, "WarningFiveMinutesRemaining") + + elseif DateTime.Minutes(4) == ticked then + Media.PlaySpeechNotification(allies, "WarningFourMinutesRemaining") + + Trigger.AfterDelay(ParadropTicks, function() + SendSovietParadrops(ParadropWaypoints[3]) + SendSovietParadrops(ParadropWaypoints[2]) + end) + Trigger.AfterDelay(ParadropTicks * 2, function() + SendSovietParadrops(ParadropWaypoints[4]) + SendSovietParadrops(ParadropWaypoints[1]) + end) + + elseif DateTime.Minutes(3) == ticked then + Media.PlaySpeechNotification(allies, "WarningThreeMinutesRemaining") + + elseif DateTime.Minutes(2) == ticked then + Media.PlaySpeechNotification(allies, "WarningTwoMinutesRemaining") + + AttackAtFrameIncrement = DateTime.Seconds(4) + AttackAtFrameIncrementInf = DateTime.Seconds(4) + + elseif DateTime.Minutes(1) == ticked then + Media.PlaySpeechNotification(allies, "WarningOneMinuteRemaining") + + elseif DateTime.Seconds(45) == ticked then + Media.PlaySpeechNotification(allies, "AlliedForcesApproaching") + end + + UserInterface.SetMissionText("French reinforcements arrive in " .. Utils.FormatTime(ticked), TimerColor) + ticked = ticked - 1 + elseif ticked == 0 then + FinishTimer() + TimerExpired() + ticked = ticked - 1 + end +end + +FinishTimer = function() + for i = 0, 9, 1 do + local c = TimerColor + if i % 2 == 0 then + c = HSLColor.White + end + + Trigger.AfterDelay(DateTime.Seconds(i), function() UserInterface.SetMissionText("Our french allies have arrived!", c) end) + end + Trigger.AfterDelay(DateTime.Seconds(10), function() UserInterface.SetMissionText("") end) +end + +SendSovietParadrops = function(table) + local units = powerproxy.SendParatroopers(table[2].CenterPosition, false, table[1]) + + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, function(a) + if a.IsInWorld then + a.Hunt() + end + end) + end) +end + +SendSovietNavalReinforcements = function() + if SpawnNavalUnits then + local entry = NavalEntryPoint.Location + local units = Reinforcements.ReinforceWithTransport(soviets, "lst", NavalTransportPassengers, { entry, Utils.Random(NavalReinforcementsWaypoints).Location }, { entry })[2] + Utils.Do(units, function(unit) + Trigger.OnIdle(unit, unit.Hunt) + end) + + local delay = Utils.RandomInteger(AttackAtFrameNaval, AttackAtFrameNaval + DateTime.Minutes(2)) + + Trigger.AfterDelay(delay, SendSovietNavalReinforcements) + end +end + +SpawnSovietInfantry = function() + local units = { } + for i = 0, SovietInfantryGroupSize - 1, 1 do + local type = Utils.Random(SovietInfantry) + units[i] = type + end + + soviets.Build(units, function(soldiers) + Trigger.AfterDelay(25, function() IdleTrigger(soldiers) end) + end) +end + +SpawnSovietUnits = function() + local units = { } + for i = 0, SovietAttackGroupSize - 1, 1 do + local type = Utils.Random(SovietVehicles) + units[i] = type + end + + local route = Utils.RandomInteger(1, #SovietEntryPoints + 1) + local attackers = Reinforcements.Reinforce(soviets, units, { SovietEntryPoints[route].Location, SovietRallyPoints[route].Location }) + Trigger.AfterDelay(25, function() + IdleTrigger(attackers, SovietGateRallyPoints[route].Location) + end) +end + +SendInfantryWave = function() + if SpawningInfantry then + SpawnSovietInfantry() + + if DateTime.GameTime < IncrementTurningPoint then + AttackAtFrameIncrementInf = AttackAtFrameIncrementInf + Utils.RandomInteger(DateTime.Seconds(2), DateTime.Seconds(3)) + elseif not (AttackAtFrameIncrementInf <= DateTime.Seconds(4)) then + AttackAtFrameIncrementInf = AttackAtFrameIncrementInf - Utils.RandomInteger(DateTime.Seconds(2), DateTime.Seconds(3)) + end + + Trigger.AfterDelay(AttackAtFrameInf + AttackAtFrameIncrementInf, SendInfantryWave) + end +end + +SendVehicleWave = function() + if SpawningSovietUnits then + SpawnSovietUnits() + + if DateTime.GameTime < IncrementTurningPoint then + AttackAtFrameIncrement = AttackAtFrameIncrement + Utils.RandomInteger(DateTime.Seconds(4), DateTime.Seconds(6)) + elseif not (AttackAtFrameIncrement <= DateTime.Seconds(4)) then + AttackAtFrameIncrement = AttackAtFrameIncrement - Utils.RandomInteger(DateTime.Seconds(4), DateTime.Seconds(6)) + end + + Trigger.AfterDelay(AttackAtFrame + AttackAtFrameIncrement, SendVehicleWave) + end +end + +TimerExpired = function() + SpawningSovietUnits = false + SpawningInfantry = false + SpawnNavalUnits = false + + Beacon.New(allies, SovietEntryPoint7.CenterPosition - WVec.New(3 * 1024, 0, 0)) + Media.PlaySpeechNotification(allies, "AlliedReinforcementsArrived") + Reinforcements.Reinforce(allies, FrenchReinforcements, { SovietEntryPoint7.Location, Alliesbase.Location }) + + if DestroyObj then + KillObj = allies.AddPrimaryObjective("Take control of French reinforcements and\nkill all remaining Soviet forces.") + else + DestroyObj = allies.AddPrimaryObjective("Take control of French reinforcements and\ndismantle the nearby Soviet base.") + end + + allies.MarkCompletedObjective(SurviveObj) + if not allies.IsObjectiveCompleted(KillSams) then + allies.MarkFailedObjective(KillSams) + end +end + +DropAlliedArtillery = function(facing, dropzone) + local proxy = Actor.Create("powerproxy.allied", true, { Owner = allies }) + proxy.SendParatroopers(dropzone, false, facing) + proxy.Destroy() +end + +SendLongBowReinforcements = function() + Media.PlaySpeechNotification(allies, "AlliedReinforcementsArrived") + Reinforcements.Reinforce(allies, LongBowReinforcements, AlliedAirReinforcementsWaypoints[1]) + Reinforcements.Reinforce(allies, LongBowReinforcements, AlliedAirReinforcementsWaypoints[2]) + + if ParadropArtillery then + local facing = Utils.RandomInteger(Facing.NorthWest, Facing.SouthWest) + DropAlliedArtillery(facing, Alliesbase.CenterPosition) + end +end + +InitObjectives = function() + Trigger.OnObjectiveAdded(allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + SurviveObj = allies.AddPrimaryObjective("Enforce your position and hold-out the onslaught\nuntil reinforcements arrive.") + KillSams = allies.AddSecondaryObjective("Destroy the two SAM sites before reinforcements\narrive.") + Media.DisplayMessage("The Soviets are blocking our GPS. We need to investigate their new technology.") + CaptureAirfields = allies.AddSecondaryObjective("Capture and hold the Soviet airbase\nin the northeast.") + SovietObj = soviets.AddPrimaryObjective("Eliminate all Allied forces.") + + Trigger.OnObjectiveCompleted(allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(allies, function() + Media.PlaySpeechNotification(allies, "MissionFailed") + end) + Trigger.OnPlayerWon(allies, function() + Media.PlaySpeechNotification(allies, "MissionAccomplished") + Media.DisplayMessage("The French forces have survived and dismantled the Soviet presence in the area!") + end) +end + +InitMission = function() + Camera.Position = Alliesbase.CenterPosition + camera1 = Actor.Create("camera.sam", true, { Owner = allies, Location = Sam1.Location }) + camera2 = Actor.Create("camera.sam", true, { Owner = allies, Location = Sam2.Location }) + Trigger.OnKilled(Sam1, function() + if camera1.IsInWorld then camera1.Destroy() end + end) + Trigger.OnKilled(Sam2, function() + if camera2.IsInWorld then camera2.Destroy() end + end) + Trigger.OnAllKilledOrCaptured({ Sam1, Sam2 }, function() + if not allies.IsObjectiveFailed(KillSams) then + allies.MarkCompletedObjective(KillSams) + SendLongBowReinforcements() + end + end) + + local count = 0 + Utils.Do(Airfields, function(field) + Trigger.OnCapture(field, function() + count = count + 1 + if count == #Airfields then + allies.MarkCompletedObjective(CaptureAirfields) + local atek = Actor.Create("atek.mission", true, { Owner = allies, Location = HiddenATEK.Location }) + Trigger.AfterDelay(DateTime.Seconds(5), atek.Destroy) + end + end) + Trigger.OnKilled(field, function() + allies.MarkFailedObjective(CaptureAirfields) + end) + end) + + Trigger.OnAllKilledOrCaptured(SovietBuildings, function() + if DestroyObj then + if not soviets.HasNoRequiredUnits() then + KillObj = allies.AddPrimaryObjective("Kill all remaining Soviet forces.") + end + allies.MarkCompletedObjective(DestroyObj) + else + DestroyObj = allies.AddPrimaryObjective("Dismantle the nearby Soviet base.") + allies.MarkCompletedObjective(DestroyObj) + end + end) + + Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(allies, "MissionTimerInitialised") end) + TimerColor = allies.Color +end + +SetupSoviets = function() + Barrack1.IsPrimaryBuilding = true + Barrack1.RallyPoint = SovietInfantryRally1.Location + Trigger.OnKilledOrCaptured(Barrack1, function() + SpawningInfantry = false + end) + + Trigger.AfterDelay(0, function() + local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == soviets and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(buildings, function(actor) + Trigger.OnDamaged(actor, function(building) + if building.Owner == soviets and building.Health < building.MaxHealth * DamageModifier then + building.StartBuildingRepairs() + end + end) + end) + end) + + Reinforcements.Reinforce(soviets, Squad1, { AlliesBaseGate1.Location, Alliesbase1.Location }) + Reinforcements.Reinforce(soviets, Squad2, { AlliesBaseGate2.Location, Alliesbase2.Location }) + + powerproxy = Actor.Create("powerproxy.paratroopers", false, { Owner = soviets }) + Trigger.AfterDelay(ParadropTicks, function() + SendSovietParadrops(ParadropWaypoints[1]) + SendSovietParadrops(ParadropWaypoints[2]) + end) + Trigger.AfterDelay(ParadropTicks * 2, function() + SendSovietParadrops(ParadropWaypoints[3]) + SendSovietParadrops(ParadropWaypoints[4]) + end) + + Trigger.AfterDelay(AttackAtFrame, SendVehicleWave) + Trigger.AfterDelay(AttackAtFrameInf, SendInfantryWave) + + if MoreParas then + local delay = Utils.RandomInteger(TimerTicks/3, TimerTicks*2/3) + Trigger.AfterDelay(delay, function() + SendSovietParadrops(ParadropWaypoints[Utils.RandomInteger(1,3)]) + SendSovietParadrops(ParadropWaypoints[Utils.RandomInteger(3,5)]) + end) + end + if SpawnNavalUnits then + Trigger.AfterDelay(AttackAtFrameNaval, SendSovietNavalReinforcements) + end +end + +WorldLoaded = function() + + allies = Player.GetPlayer("Allies") + soviets = Player.GetPlayer("Soviets") + + InitObjectives() + InitMission() + SetupSoviets() +end diff --git a/mods/ura/maps/survival02/map.bin b/mods/ura/maps/survival02/map.bin new file mode 100644 index 0000000..5396f2c Binary files /dev/null and b/mods/ura/maps/survival02/map.bin differ diff --git a/mods/ura/maps/survival02/map.png b/mods/ura/maps/survival02/map.png new file mode 100644 index 0000000..29bfd56 Binary files /dev/null and b/mods/ura/maps/survival02/map.png differ diff --git a/mods/ura/maps/survival02/map.yaml b/mods/ura/maps/survival02/map.yaml new file mode 100644 index 0000000..1939e32 --- /dev/null +++ b/mods/ura/maps/survival02/map.yaml @@ -0,0 +1,1011 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Survival 02 + +Author: Nuke'm Bro. + +Tileset: SNOW + +MapSize: 80,80 + +Bounds: 2,2,76,76 + +Visibility: MissionSelector + +Categories: Mission + +LockPreview: True + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Allies: + Name: Allies + Playable: True + AllowBots: False + Required: True + LockFaction: True + Faction: allies + LockColor: True + Color: 0CF7B2 + LockSpawn: True + LockTeam: True + Enemies: Soviets + PlayerReference@Soviets: + Name: Soviets + Faction: soviet + Color: FF0101 + Enemies: Allies + +Actors: + Actor0: tc05 + Location: 37,56 + Owner: Neutral + Actor1: tc02 + Location: 33,56 + Owner: Neutral + Actor2: t16 + Location: 37,59 + Owner: Neutral + Actor3: t10 + Location: 26,56 + Owner: Neutral + Actor4: tc04 + Location: 33,72 + Owner: Neutral + Actor5: tc01 + Location: 32,76 + Owner: Neutral + Actor98: fenc + Location: 56,68 + Owner: Soviets + Actor7: t05 + Location: 40,74 + Owner: Neutral + Actor8: tc04 + Location: 67,70 + Owner: Neutral + Actor9: tc02 + Location: 68,75 + Owner: Neutral + Actor6: fenc + Location: 55,68 + Owner: Soviets + Actor11: tc05 + Location: 73,63 + Owner: Neutral + Actor12: tc02 + Location: 70,67 + Owner: Neutral + Actor13: t07 + Location: 29,71 + Owner: Neutral + Actor14: tc01 + Location: 24,72 + Owner: Neutral + Actor15: t01 + Location: 29,66 + Owner: Neutral + Actor16: t05 + Location: 34,62 + Owner: Neutral + Actor17: tc01 + Location: 52,52 + Owner: Neutral + Actor18: tc02 + Location: 47,54 + Owner: Neutral + Actor19: tc02 + Location: 26,51 + Owner: Neutral + Actor20: t11 + Location: 42,54 + Owner: Neutral + Actor21: tc05 + Location: 75,16 + Owner: Neutral + Actor22: tc02 + Location: 70,16 + Owner: Neutral + Actor23: tc04 + Location: 69,13 + Owner: Neutral + Actor24: t02 + Location: 73,16 + Owner: Neutral + Actor25: t11 + Location: 76,12 + Owner: Neutral + Actor26: tc02 + Location: 55,2 + Owner: Neutral + Actor27: powr + Location: 73,3 + Owner: Soviets + Actor31: tc01 + Location: 47,25 + Owner: Neutral + Actor30: tc05 + Location: 28,25 + Owner: Neutral + Actor28: tc05 + Location: 58,2 + Owner: Neutral + Actor29: t16 + Location: 56,4 + Owner: Neutral + Actor32: tc04 + Location: 57,30 + Owner: Neutral + Actor33: t02 + Location: 56,28 + Owner: Neutral + Actor34: t06 + Location: 19,45 + Owner: Neutral + Actor35: t01 + Location: 20,49 + Owner: Neutral + Actor37: tc05 + Location: 22,47 + Owner: Neutral + Actor36: tc01 + Location: 22,45 + Owner: Neutral + Actor38: tc04 + Location: 53,14 + Owner: Neutral + Actor39: tc05 + Location: 54,16 + Owner: Neutral + Actor40: tc01 + Location: 56,14 + Owner: Neutral + Actor41: tc02 + Location: 52,17 + Owner: Neutral + Actor45: brik + Location: 5,17 + Owner: Soviets + Actor42: brik + Location: 4,17 + Owner: Soviets + Actor43: brik + Location: 4,18 + Owner: Soviets + Actor46: brik + Location: 6,18 + Owner: Soviets + Actor47: brik + Location: 7,18 + Owner: Soviets + Actor48: brik + Location: 8,18 + Owner: Soviets + Actor49: brik + Location: 9,18 + Owner: Soviets + Actor50: brik + Location: 10,18 + Owner: Soviets + Actor44: brik + Location: 5,18 + Owner: Soviets + Actor51: brik + Location: 11,18 + Owner: Soviets + Actor52: brik + Location: 12,18 + Owner: Soviets + Actor53: brik + Location: 13,17 + Owner: Soviets + Actor56: brik + Location: 13,18 + Owner: Soviets + Actor57: brik + Location: 14,18 + Owner: Soviets + Actor54: brik + Location: 14,17 + Owner: Soviets + Actor69: apwr + Location: 75,7 + Owner: Soviets + Actor73: tsla + Location: 16,13 + Owner: Soviets + Actor67: barb + Location: 19,11 + Owner: Soviets + Actor86: fenc + Location: 65,68 + Owner: Soviets + Actor60: brik + Location: 22,10 + Owner: Soviets + Actor55: brik + Location: 21,10 + Owner: Soviets + Actor58: brik + Location: 21,11 + Owner: Soviets + Actor71: powr + Location: 5,13 + Owner: Soviets + Actor91: fenc + Location: 68,66 + Owner: Soviets + Actor81: tc03 + Location: 6,20 + Owner: Neutral + Actor80: tc05 + Location: 10,19 + Owner: Neutral + Actor78: brl3 + Location: 64,69 + Owner: Soviets + Actor82: tc04 + Location: 2,19 + Owner: Neutral + Actor85: fenc + Location: 64,68 + Owner: Soviets + Actor61: ftur + Location: 15,16 + Owner: Soviets + Actor65: ftur + Location: 20,12 + Owner: Soviets + Actor84: fenc + Location: 63,68 + Owner: Soviets + Actor62: barb + Location: 14,16 + Owner: Soviets + Actor124: fenc + Location: 46,45 + Owner: Allies + Actor63: barb + Location: 14,15 + Owner: Soviets + Actor59: brik + Location: 22,11 + Owner: Soviets + Actor104: barb + Location: 19,12 + Owner: Soviets + Actor66: barb + Location: 20,11 + Owner: Soviets + Actor90: fenc + Location: 67,66 + Owner: Soviets + Actor99: fenc + Location: 55,70 + Owner: Soviets + Actor101: fenc + Location: 68,65 + Owner: Soviets + Actor89: fenc + Location: 67,67 + Owner: Soviets + Actor88: fenc + Location: 67,68 + Owner: Soviets + Actor87: fenc + Location: 66,68 + Owner: Soviets + Actor96: e1 + Location: 13,13 + Owner: Soviets + Facing: 160 + Actor92: fenc + Location: 55,69 + Owner: Soviets + Actor103: e4 + Location: 8,12 + Owner: Soviets + Facing: 160 + Actor102: 3tnk + Location: 14,11 + Owner: Soviets + Facing: 160 + Actor105: tc04 + Location: 23,29 + Owner: Neutral + Actor94: fenc + Location: 55,72 + Owner: Soviets + Actor108: t06 + Location: 24,32 + Owner: Neutral + Actor107: tc01 + Location: 27,30 + Owner: Neutral + Actor76: fenc + Location: 62,69 + Owner: Soviets + Actor75: fenc + Location: 62,68 + Owner: Soviets + Actor95: fenc + Location: 56,69 + Owner: Soviets + Actor109: t01 + Location: 26,31 + Owner: Neutral + Actor110: tc05 + Location: 51,29 + Owner: Neutral + Actor111: tc04 + Location: 45,29 + Owner: Neutral + Actor112: tc05 + Location: 62,45 + Owner: Neutral + Actor113: t13 + Location: 71,27 + Owner: Neutral + Actor114: tc03 + Location: 74,21 + Owner: Neutral + Actor115: tc02 + Location: 38,2 + Owner: Neutral + Actor116: tc05 + Location: 40,8 + Owner: Neutral + Actor117: tc05 + Location: 4,41 + Owner: Neutral + Actor118: tc04 + Location: 2,43 + Owner: Neutral + Actor119: tc02 + Location: 5,44 + Owner: Neutral + Actor120: t07 + Location: 4,46 + Owner: Neutral + Actor125: fenc + Location: 46,44 + Owner: Allies + Actor123: fenc + Location: 46,46 + Owner: Allies + Actor97: powr + Location: 32,43 + Owner: Allies + Health: 20 + Actor72: dome + Location: 44,44 + Owner: Allies + Health: 30 + Actor127: fact + Location: 38,38 + Owner: Allies + Health: 40 + Actor128: powr + Location: 35,45 + Owner: Allies + Health: 40 + Actor129: powr + Location: 30,34 + Owner: Allies + Health: 30 + Actor130: weap + Location: 33,35 + Owner: Allies + Health: 30 + Actor131: tc01 + Location: 30,45 + Owner: Neutral + Actor132: tc04 + Location: 32,45 + Owner: Neutral + Actor133: tc02 + Location: 34,47 + Owner: Neutral + Actor134: agun + Location: 35,43 + Owner: Allies + Health: 40 + Actor135: gun + Location: 27,35 + Owner: Allies + Health: 40 + Actor136: gun + Location: 28,41 + Owner: Allies + Actor149: cycl + Location: 48,39 + Owner: Allies + Actor139: cycl + Location: 48,38 + Owner: Allies + Actor138: cycl + Location: 48,37 + Owner: Allies + Actor140: pbox + Location: 28,38 + Owner: Allies + Health: 50 + Actor141: agun + Location: 32,32 + Owner: Allies + Health: 40 + Actor143: fenc + Location: 31,30 + Owner: Allies + Actor142: fenc + Location: 32,30 + Owner: Allies + Actor106: fenc + Location: 33,30 + Owner: Allies + Actor144: fenc + Location: 34,31 + Owner: Allies + Actor68: fenc + Location: 34,30 + Owner: Allies + Actor147: tent + Location: 43,34 + Owner: Allies + Health: 30 + Actor148: fix + Location: 44,39 + Owner: Allies + Health: 20 + Actor137: cycl + Location: 29,39 + Owner: Allies + Actor122: cycl + Location: 29,38 + Owner: Allies + Actor121: cycl + Location: 29,37 + Owner: Allies + Actor152: gun + Location: 49,38 + Owner: Allies + Health: 30 + Actor157: fenc + Location: 46,32 + Owner: Allies + Actor160: fenc + Location: 47,32 + Owner: Allies + Actor161: fenc + Location: 48,32 + Owner: Allies + Actor162: fenc + Location: 48,33 + Owner: Allies + Actor163: fenc + Location: 48,34 + Owner: Allies + Actor158: gun + Location: 39,32 + Owner: Allies + Health: 30 + Actor159: powr + Location: 46,33 + Owner: Allies + Health: 30 + Actor145: fenc + Location: 40,32 + Owner: Allies + Actor146: fenc + Location: 40,33 + Owner: Allies + Actor153: fenc + Location: 39,33 + Owner: Allies + Actor154: fenc + Location: 38,33 + Owner: Allies + Actor155: fenc + Location: 38,32 + Owner: Allies + Actor156: fenc + Location: 45,32 + Owner: Allies + Actor166: agun + Location: 46,38 + Owner: Allies + Health: 50 + Actor167: e1 + Location: 35,33 + Owner: Allies + Facing: 64 + Actor168: e1 + Location: 43,32 + Owner: Allies + Actor169: e3 + Location: 42,42 + Owner: Allies + Actor170: e1 + Location: 33,40 + Owner: Allies + Actor171: jeep + Location: 38,35 + Owner: Allies + Actor172: 1tnk + Location: 30,41 + Owner: Allies + Actor173: 1tnk + Location: 47,41 + Owner: Allies + Actor174: 2tnk + Location: 37,46 + Owner: Allies + Facing: 160 + Actor64: barb + Location: 15,15 + Owner: Soviets + Actor177: fenc + Location: 55,71 + Owner: Soviets + Actor100: e2 + Location: 16,10 + Owner: Soviets + Facing: 160 + Actor180: fenc + Location: 53,72 + Owner: Soviets + Actor179: fenc + Location: 54,72 + Owner: Soviets + Actor181: fenc + Location: 53,73 + Owner: Soviets + Actor183: fenc + Location: 54,73 + Owner: Soviets + Actor176: t02 + Location: 43,16 + Owner: Neutral + Actor126: tc04 + Location: 29,15 + Owner: Neutral + Actor182: apwr + Location: 22,3 + Owner: Soviets + Actor77: v2rl + Location: 40,23 + Owner: Soviets + Actor223: e2 + Location: 37,43 + Owner: Soviets + Facing: 192 + Actor220: e1 + Location: 32,38 + Owner: Soviets + Facing: 192 + Actor222: e2 + Location: 40,35 + Owner: Soviets + Facing: 192 + Actor221: e1 + Location: 42,40 + Owner: Soviets + Facing: 192 + Actor70: mine + Location: 38,50 + Owner: Neutral + Actor175: e1 + Location: 63,72 + Owner: Soviets + Facing: 32 + Actor184: e2 + Location: 61,74 + Owner: Soviets + Actor224: brl3 + Location: 59,75 + Owner: Soviets + Actor225: barl + Location: 58,75 + Owner: Soviets + Actor226: barl + Location: 61,75 + Owner: Soviets + Actor227: barl + Location: 62,70 + Owner: Soviets + Actor229: barl + Location: 63,71 + Owner: Soviets + Actor230: fenc + Location: 67,65 + Owner: Soviets + Actor231: brl3 + Location: 62,74 + Owner: Soviets + Actor232: barl + Location: 62,75 + Owner: Soviets + Actor196: tsla + Location: 60,9 + Owner: Soviets + Actor235: barl + Location: 64,70 + Owner: Soviets + Actor236: fenc + Location: 61,2 + Owner: Soviets + Actor237: fenc + Location: 62,2 + Owner: Soviets + Actor238: fenc + Location: 63,2 + Owner: Soviets + Actor241: silo + Location: 64,5 + Owner: Soviets + Actor240: fenc + Location: 64,2 + Owner: Soviets + Actor239: silo + Location: 64,4 + Owner: Soviets + Actor242: powr + Location: 8,14 + Owner: Soviets + Actor243: fenc + Location: 64,3 + Owner: Soviets + Actor10: tc04 + Location: 75,73 + Owner: Neutral + Actor178: t16 + Location: 77,69 + Owner: Neutral + Actor192: tc02 + Location: 22,4 + Owner: Neutral + Actor193: tc01 + Location: 27,6 + Owner: Neutral + Actor194: powr + Location: 74,10 + Owner: Soviets + Actor195: barr + Location: 72,6 + Owner: Soviets + Actor93: tc03 + Location: 75,68 + Owner: Neutral + Actor248: mine + Location: 59,60 + Owner: Neutral + Actor249: tc02 + Location: 26,47 + Owner: Neutral + Actor250: t16 + Location: 24,45 + Owner: Neutral + Actor251: t06 + Location: 22,43 + Owner: Neutral + Actor252: t01 + Location: 24,43 + Owner: Neutral + Actor253: kenn + Location: 12,6 + Owner: Soviets + Actor254: fenc + Location: 10,5 + Owner: Soviets + Actor255: fenc + Location: 11,5 + Owner: Soviets + Actor256: fenc + Location: 12,5 + Owner: Soviets + Actor257: dog + Location: 11,14 + Owner: Soviets + Actor258: dog + Location: 18,10 + Owner: Soviets + Actor259: fenc + Location: 10,6 + Owner: Soviets + Actor260: dog + Location: 11,7 + Owner: Soviets + Actor191: tc04 + Location: 25,1 + Owner: Neutral + Actor79: tc05 + Location: 23,6 + Owner: Neutral + Actor190: apwr + Location: 25,5 + Owner: Soviets + Actor83: barl + Location: 63,69 + Owner: Soviets + Actor185: brl3 + Location: 56,71 + Owner: Soviets + Actor186: barl + Location: 58,70 + Owner: Soviets + Actor187: barl + Location: 58,72 + Owner: Soviets + Actor188: barl + Location: 57,71 + Owner: Soviets + Actor189: barl + Location: 59,71 + Owner: Soviets + Actor197: barb + Location: 59,9 + Owner: Soviets + Actor198: barb + Location: 59,10 + Owner: Soviets + Actor199: barb + Location: 60,10 + Owner: Soviets + Actor200: barb + Location: 61,10 + Owner: Soviets + Actor201: barb + Location: 61,9 + Owner: Soviets + Actor202: ftur + Location: 56,8 + Owner: Soviets + Actor203: ftur + Location: 63,12 + Owner: Soviets + Actor209: fenc + Location: 74,7 + Owner: Soviets + Actor208: fenc + Location: 74,6 + Owner: Soviets + Actor207: fenc + Location: 74,5 + Owner: Soviets + Actor206: fenc + Location: 73,5 + Owner: Soviets + Actor205: fenc + Location: 72,5 + Owner: Soviets + Actor204: fenc + Location: 71,5 + Owner: Soviets + Actor210: fenc + Location: 74,8 + Owner: Soviets + Actor211: 3tnk + Location: 58,6 + Owner: Soviets + Facing: 160 + Actor212: 3tnk + Location: 65,10 + Owner: Soviets + Facing: 96 + Actor214: e1 + Location: 73,9 + Owner: Soviets + Facing: 96 + Actor215: e3 + Location: 76,4 + Owner: Soviets + Facing: 32 + Actor216: e4 + Location: 66,3 + Owner: Soviets + Facing: 96 + Actor234: minv + Location: 16,17 + Owner: Soviets + Actor268: minv + Location: 16,19 + Owner: Soviets + Actor218: minv + Location: 62,13 + Owner: Soviets + Actor219: minv + Location: 57,9 + Owner: Soviets + Actor228: mine + Location: 37,14 + Owner: Neutral + Actor246: minv + Location: 56,11 + Owner: Soviets + Actor247: minv + Location: 58,11 + Owner: Soviets + Actor261: minv + Location: 58,13 + Owner: Soviets + Actor262: minv + Location: 60,12 + Owner: Soviets + Actor263: minv + Location: 60,14 + Owner: Soviets + Actor245: minv + Location: 20,13 + Owner: Soviets + Actor266: minv + Location: 19,16 + Owner: Soviets + Actor264: minv + Location: 20,15 + Owner: Soviets + Actor265: minv + Location: 18,17 + Owner: Soviets + Actor267: minv + Location: 22,13 + Owner: Soviets + Actor269: minv + Location: 19,14 + Owner: Soviets + Actor270: minv + Location: 17,16 + Owner: Soviets + Actor164: fenc + Location: 46,47 + Owner: Allies + Actor165: fenc + Location: 45,47 + Owner: Allies + Actor213: fenc + Location: 44,47 + Owner: Allies + Actor233: proc + Location: 61,3 + Owner: Soviets + FreeActor: False + Actor74: proc + Location: 13,5 + Owner: Soviets + FreeActor: False + Harvester1: harv + Location: 61,6 + Owner: Soviets + Facing: 128 + Harvester2: harv + Location: 15,5 + Owner: Soviets + Facing: 150 + HarvGuard1: apc + Location: 68,7 + Owner: Soviets + Facing: 100 + HarvGuard2: 3tnk + Location: 69,8 + Owner: Soviets + Facing: 127 + HarvGuard3: 3tnk + Location: 67,8 + Owner: Soviets + Facing: 96 + drum1: brl3 + Location: 63,70 + Owner: Soviets + drum2: brl3 + Location: 60,75 + Owner: Soviets + drum3: brl3 + Location: 58,71 + Owner: Soviets + boom1: apwr + Location: 56,73 + Owner: Soviets + boom2: barr + Location: 65,69 + Owner: Soviets + boom3: ftur + Location: 59,70 + Owner: Soviets + boom4: 3tnk + Location: 61,70 + Owner: Soviets + Facing: 32 + boom5: 3tnk + Location: 59,74 + Owner: Soviets + Facing: 224 + Factory: weap + Location: 7,6 + Owner: Soviets + Barrack1: barr + Location: 18,7 + Owner: Soviets + SovietEntry1: waypoint + Location: 77,45 + Owner: Neutral + SovietEntry2: waypoint + Location: 2,54 + Owner: Neutral + SovietEntry3: waypoint + Location: 71,2 + Owner: Neutral + SovietRally: waypoint + Location: 11,10 + Owner: Neutral + SovietRally1: waypoint + Location: 61,72 + Owner: Neutral + SovietRally2: waypoint + Location: 55,61 + Owner: Neutral + SovietRally3: waypoint + Location: 22,18 + Owner: Neutral + SovietRally4: waypoint + Location: 40,18 + Owner: Neutral + SovietRally5: waypoint + Location: 14,36 + Owner: Neutral + SovietRally6: waypoint + Location: 65,39 + Owner: Neutral + SovietRally7: waypoint + Location: 15,41 + Owner: Neutral + SovietRally8: waypoint + Location: 59,19 + Owner: Neutral + SovietParaDrop1: waypoint + Location: 48,41 + Owner: Neutral + SovietParaDrop2: waypoint + Location: 26,38 + Owner: Neutral + SovietParaDrop3: waypoint + Location: 39,34 + Owner: Neutral + SovietParaDropEntry: waypoint + Location: 2,2 + Owner: Neutral + FranceEntry: waypoint + Location: 66,77 + Owner: Neutral + FranceRally: waypoint + Location: 59,67 + Owner: Neutral + BrokenBridge1: waypoint + Location: 7,67 + Owner: Neutral + ReinforcementsEntry1: waypoint + Location: 2,71 + Owner: Neutral + ReinforcementsRally1: waypoint + Location: 10,62 + Owner: Neutral + BrokenBridge2: waypoint + Location: 49,74 + Owner: Neutral + ReinforcementsEntry2: waypoint + Location: 44,77 + Owner: Neutral + ReinforcementsRally2: waypoint + Location: 49,70 + Owner: Neutral + AlliesBase: waypoint + Location: 39,37 + Owner: Neutral + +Rules: ra|rules/campaign-rules.yaml, ra|rules/campaign-tooltips.yaml, ra|rules/campaign-palettes.yaml, rules.yaml + +Weapons: weapons.yaml diff --git a/mods/ura/maps/survival02/rules.yaml b/mods/ura/maps/survival02/rules.yaml new file mode 100644 index 0000000..848d339 --- /dev/null +++ b/mods/ura/maps/survival02/rules.yaml @@ -0,0 +1,123 @@ +Player: + PlayerResources: + DefaultCash: 5000 + +World: + LuaScript: + Scripts: survival02.lua + MissionData: + Briefing: INCOMING REPORT:\n\nCommander! The Soviets have rendered us useless...\nReports indicate Soviet reinforcements are coming to finish us off... The situation looks bleak...\n + +^Palettes: + IndexedPlayerPalette: + PlayerIndex: + Soviets: 229, 230, 231, 232, 233, 234, 235, 8, 236, 237, 238, 239, 221, 222, 223, 223 + Allies: 224, 224, 225, 225, 226, 184, 185, 186, 187, 188, 188, 189, 190, 190, 191, 191 + +SovietSquad: + Inherits: powerproxy.paratroopers + ParatroopersPower: + DropItems: E1,E1,E2,E4,E4 + DisplayBeacon: false + +SovietPlatoonUnits: + Inherits: powerproxy.paratroopers + ParatroopersPower: + DropItems: E1,E1,E2,E4,E4,E1,E1,E2,E4,E4 + DisplayBeacon: false + +MINV: + Mine: + AvoidFriendly: yes + +CAMERA: + RevealsShroud: + Range: 7c0 + +ARTY: + Valued: + Cost: 1000 + +GUN: + Valued: + Cost: 1000 + +E7: + Buildable: + Prerequisites: ~disabled + +SHOK: + Buildable: + Prerequisites: ~disabled + +HELI: + Buildable: + Prerequisites: ~disabled + +MSLO: + Buildable: + Prerequisites: ~disabled + +GAP: + Buildable: + Prerequisites: ~disabled + +SYRD: + Buildable: + Prerequisites: ~disabled + +PDOX: + Buildable: + Prerequisites: ~disabled + +AGUN: + Buildable: + Prerequisites: ~disabled + +ATEK: + Buildable: + Prerequisites: ~disabled + +4TNK: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +TTNK: + Buildable: + Prerequisites: ~disabled + +CTNK: + Buildable: + Prerequisites: ~disabled + +BRIK: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +MGG: + Buildable: + Prerequisites: ~disabled + +STNK: + Buildable: + Prerequisites: ~disabled + +QTNK: + Buildable: + Prerequisites: ~disabled + +DTRK: + Buildable: + Prerequisites: ~disabled diff --git a/mods/ura/maps/survival02/survival02.lua b/mods/ura/maps/survival02/survival02.lua new file mode 100644 index 0000000..dca1c9e --- /dev/null +++ b/mods/ura/maps/survival02/survival02.lua @@ -0,0 +1,408 @@ +--[[ + Copyright 2007-2017 The OpenRA Developers (see AUTHORS) + This file is part of OpenRA, which is free software. It is made + available to you 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. For more + information, see COPYING. +]] +FrenchSquad = { "2tnk", "2tnk", "mcv" } + +TimerTicks = DateTime.Minutes(10) +AttackTicks = DateTime.Seconds(52) +AttackAtFrame = DateTime.Seconds(18) +AttackAtFrameIncrement = DateTime.Seconds(18) +Producing = true +SpawningInfantry = true +ProduceAtFrame = DateTime.Seconds(12) +ProduceAtFrameIncrement = DateTime.Seconds(12) +SovietGroupSize = 4 +SovietAttackGroupSize = 7 + +InfantryGuards = { } +HarvGuards = { HarvGuard1, HarvGuard2, HarvGuard3 } +SovietPlatoonUnits = { "e1", "e1", "e2", "e4", "e4", "e1", "e1", "e2", "e4", "e4" } +SovietTanks = { "3tnk", "3tnk", "3tnk" } +SovietVehicles = { "3tnk", "3tnk", "v2rl" } +SovietInfantry = { "e1", "e4", "e2" } +SovietEntryPoints = { SovietEntry1, SovietEntry2, SovietEntry3 } +SovietRallyPoints = { SovietRally2, SovietRally4, SovietRally5, SovietRally6 } +NewSovietEntryPoints = { SovietParaDropEntry, SovietEntry3 } +NewSovietRallyPoints = { SovietRally3, SovietRally4, SovietRally8 } + +ParaWaves = +{ + { delay = AttackTicks, type = "SovietSquad", target = SovietRally5 }, + { delay = 0, type = "SovietSquad", target = SovietRally6 }, + { delay = AttackTicks * 2, type = "SovietSquad", target = SovietParaDrop3 }, + { delay = 0, type = "SovietPlatoonUnits", target = SovietRally5 }, + { delay = 0, type = "SovietPlatoonUnits", target = SovietRally6 }, + { delay = 0, type = "SovietSquad", target = SovietRally2 }, + { delay = AttackTicks * 2, type = "SovietSquad", target = SovietParaDrop2 }, + { delay = AttackTicks * 2, type = "SovietSquad", target = SovietParaDrop1 }, + { delay = AttackTicks * 3, type = "SovietSquad", target = SovietParaDrop1 } +} + +IdleHunt = function(unit) + Trigger.OnIdle(unit, function(a) + if a.IsInWorld then + a.Hunt() + end + end) +end + +GuardHarvester = function(unit, harvester) + if not unit.IsDead then + unit.Stop() + + local start = unit.Location + if not harvester.IsDead then + unit.AttackMove(harvester.Location) + else + unit.Hunt() + end + + Trigger.OnIdle(unit, function() + if unit.Location == start then + Trigger.ClearAll(unit) + else + unit.AttackMove(start) + end + end) + + Trigger.OnCapture(unit, function() + Trigger.ClearAll(unit) + end) + end +end + +ticked = TimerTicks +Tick = function() + if soviets.HasNoRequiredUnits() then + if DestroyObj then + allies.MarkCompletedObjective(DestroyObj) + else + DestroyObj = allies.AddPrimaryObjective("Destroy all Soviet forces in the area.") + allies.MarkCompletedObjective(DestroyObj) + end + end + + if allies.HasNoRequiredUnits() then + soviets.MarkCompletedObjective(SovietObj) + end + + if soviets.Resources > soviets.ResourceCapacity / 2 then + soviets.Resources = soviets.ResourceCapacity / 2 + end + + if DateTime.GameTime == ProduceAtFrame then + if SpawningInfantry then + ProduceAtFrame = ProduceAtFrame + ProduceAtFrameIncrement + ProduceAtFrameIncrement = ProduceAtFrameIncrement * 2 - 5 + SpawnSovietInfantry() + end + end + + if DateTime.GameTime == AttackAtFrame then + AttackAtFrame = AttackAtFrame + AttackAtFrameIncrement + AttackAtFrameIncrement = AttackAtFrameIncrement * 2 - 5 + if Producing then + SpawnSovietVehicle(SovietEntryPoints, SovietRallyPoints) + else + SpawnSovietVehicle(NewSovietEntryPoints, NewSovietRallyPoints) + end + end + + if DateTime.Minutes(5) == ticked then + Media.PlaySpeechNotification(allies, "WarningFiveMinutesRemaining") + InitCountDown() + end + + if ticked > 0 then + UserInterface.SetMissionText("Soviet reinforcements arrive in " .. Utils.FormatTime(ticked), TimerColor) + ticked = ticked - 1 + elseif ticked == 0 then + FinishTimer() + ticked = ticked - 1 + end +end + +SendSovietParadrops = function(table) + local paraproxy = Actor.Create(table.type, false, { Owner = soviets }) + units = paraproxy.SendParatroopers(table.target.CenterPosition) + Utils.Do(units, function(unit) IdleHunt(unit) end) + paraproxy.Destroy() +end + +SpawnSovietInfantry = function() + soviets.Build({ Utils.Random(SovietInfantry) }, function(units) + IdleHunt(units[1]) + end) +end + +SpawnSovietVehicle = function(spawnpoints, rallypoints) + local route = Utils.RandomInteger(1, #spawnpoints + 1) + local rally = Utils.RandomInteger(1, #rallypoints + 1) + local unit = Reinforcements.Reinforce(soviets, { Utils.Random(SovietVehicles) }, { spawnpoints[route].Location })[1] + unit.AttackMove(rallypoints[rally].Location) + IdleHunt(unit) + + Trigger.OnCapture(unit, function() + Trigger.ClearAll(unit) + end) +end + +SpawnAndAttack = function(types, entry) + local units = Reinforcements.Reinforce(soviets, types, { entry }) + Utils.Do(units, function(unit) + IdleHunt(unit) + + Trigger.OnCapture(unit, function() + Trigger.ClearAll(unit) + end) + end) + return units +end + +SendFrenchReinforcements = function() + local camera = Actor.Create("camera", true, { Owner = allies, Location = SovietRally1.Location }) + Beacon.New(allies, FranceEntry.CenterPosition - WVec.New(0, 3 * 1024, 0)) + Media.PlaySpeechNotification(allies, "AlliedReinforcementsArrived") + Reinforcements.Reinforce(allies, FrenchSquad, { FranceEntry.Location, FranceRally.Location }) + Trigger.AfterDelay(DateTime.Seconds(3), function() camera.Destroy() end) +end + +FrenchReinforcements = function() + Camera.Position = SovietRally1.CenterPosition + + if drum1.IsDead or drum2.IsDead or drum3.IsDead then + SendFrenchReinforcements() + return + end + + powerproxy = Actor.Create("powerproxy.parabombs", false, { Owner = allies }) + powerproxy.SendAirstrike(drum1.CenterPosition, false, Facing.NorthEast + 4) + powerproxy.SendAirstrike(drum2.CenterPosition, false, Facing.NorthEast) + powerproxy.SendAirstrike(drum3.CenterPosition, false, Facing.NorthEast - 4) + powerproxy.Destroy() + + Trigger.AfterDelay(DateTime.Seconds(3), function() + SendFrenchReinforcements() + end) +end + +FinalAttack = function() + local units1 = SpawnAndAttack(SovietTanks, SovietEntry1.Location) + local units2 = SpawnAndAttack(SovietTanks, SovietEntry1.Location) + local units3 = SpawnAndAttack(SovietTanks, SovietEntry2.Location) + local units4 = SpawnAndAttack(SovietPlatoonUnits, SovietEntry1.Location) + local units5 = SpawnAndAttack(SovietPlatoonUnits, SovietEntry2.Location) + + local units = { } + local insert = function(table) + local count = #units + Utils.Do(table, function(unit) + units[count] = unit + count = count + 1 + end) + end + + insert(units1) + insert(units2) + insert(units3) + insert(units4) + insert(units5) + + Trigger.OnAllKilledOrCaptured(units, function() + if not DestroyObj then + Media.DisplayMessage("Excellent work Commander! We have reinforced our position enough to initiate a counter-attack.", "Incoming Report") + DestroyObj = allies.AddPrimaryObjective("Destroy the remaining Soviet forces in the area.") + end + allies.MarkCompletedObjective(SurviveObj) + end) +end + +FinishTimer = function() + for i = 0, 9, 1 do + local c = TimerColor + if i % 2 == 0 then + c = HSLColor.White + end + + Trigger.AfterDelay(DateTime.Seconds(i), function() UserInterface.SetMissionText("Soviet reinforcements have arrived!", c) end) + end + Trigger.AfterDelay(DateTime.Seconds(10), function() UserInterface.SetMissionText("") end) +end + +wave = 1 +SendParadrops = function() + SendSovietParadrops(ParaWaves[wave]) + + wave = wave + 1 + if wave > #ParaWaves then + Trigger.AfterDelay(AttackTicks, FrenchReinforcements) + else + Trigger.AfterDelay(ParaWaves[wave].delay, SendParadrops) + end +end + +SetupBridges = function() + local count = 0 + local counter = function() + count = count + 1 + if count == 2 then + allies.MarkCompletedObjective(RepairBridges) + end + end + + Media.DisplayMessage("Commander! The Soviets destroyed the bridges to disable our reinforcements. Repair them for additional reinforcements.", "Incoming Report") + RepairBridges = allies.AddSecondaryObjective("Repair the two southern bridges.") + + local bridgeA = Map.ActorsInCircle(BrokenBridge1.CenterPosition, WDist.FromCells(1), function(self) return self.Type == "bridge1" end) + local bridgeB = Map.ActorsInCircle(BrokenBridge2.CenterPosition, WDist.FromCells(1), function(self) return self.Type == "bridge1" end) + + Utils.Do(bridgeA, function(bridge) + Trigger.OnDamaged(bridge, function() + Utils.Do(bridgeA, function(self) Trigger.ClearAll(self) end) + Media.PlaySpeechNotification(allies, "AlliedReinforcementsArrived") + Reinforcements.Reinforce(allies, { "1tnk", "2tnk", "2tnk" }, { ReinforcementsEntry1.Location, ReinforcementsRally1.Location }) + counter() + end) + end) + Utils.Do(bridgeB, function(bridge) + Trigger.OnDamaged(bridge, function() + Utils.Do(bridgeB, function(self) Trigger.ClearAll(self) end) + Media.PlaySpeechNotification(allies, "AlliedReinforcementsArrived") + Reinforcements.Reinforce(allies, { "jeep", "1tnk", "1tnk" }, { ReinforcementsEntry2.Location, ReinforcementsRally2.Location }) + counter() + end) + end) +end + +InitCountDown = function() + Trigger.AfterDelay(DateTime.Minutes(1), function() Media.PlaySpeechNotification(allies, "WarningFourMinutesRemaining") end) + Trigger.AfterDelay(DateTime.Minutes(2), function() Media.PlaySpeechNotification(allies, "WarningThreeMinutesRemaining") end) + Trigger.AfterDelay(DateTime.Minutes(3), function() Media.PlaySpeechNotification(allies, "WarningTwoMinutesRemaining") end) + Trigger.AfterDelay(DateTime.Minutes(4), function() Media.PlaySpeechNotification(allies, "WarningOneMinuteRemaining") end) +end + +InitObjectives = function() + Trigger.OnObjectiveAdded(allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "New " .. string.lower(p.GetObjectiveType(id)) .. " objective") + end) + + SurviveObj = allies.AddPrimaryObjective("Enforce your position and hold-out the onslaught.") + SovietObj = soviets.AddPrimaryObjective("Eliminate all Allied forces.") + + Trigger.AfterDelay(DateTime.Seconds(15), function() + SetupBridges() + end) + + Trigger.OnObjectiveCompleted(allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed") + end) + Trigger.OnObjectiveFailed(allies, function(p, id) + Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed") + end) + + Trigger.OnPlayerLost(allies, function() + Media.PlaySpeechNotification(allies, "Lose") + end) + Trigger.OnPlayerWon(allies, function() + Media.PlaySpeechNotification(allies, "Win") + Media.DisplayMessage("We have destroyed the remaining Soviet presence!", "Incoming Report") + end) +end + +InitMission = function() + Camera.Position = AlliesBase.CenterPosition + TimerColor = HSLColor.Red + + Trigger.AfterDelay(DateTime.Seconds(1), function() Media.PlaySpeechNotification(allies, "MissionTimerInitialised") end) + + Trigger.AfterDelay(TimerTicks, function() + Media.DisplayMessage("The Soviet reinforcements are approaching!", "Incoming Report") + Media.PlaySpeechNotification(allies, "SovietReinforcementsArrived") + SpawnSovietVehicle(NewSovietEntryPoints, NewSovietRallyPoints) + FinalAttack() + Producing = false + end) + + Trigger.AfterDelay(AttackTicks, SendParadrops) + + Trigger.OnKilled(drum1, function() --Kill the remaining stuff from FrenchReinforcements + if not boom2.IsDead then boom2.Kill() end + if not boom4.IsDead then boom4.Kill() end + if not drum2.IsDead then drum2.Kill() end + if not drum3.IsDead then drum3.Kill() end + end) + Trigger.OnKilled(drum2, function() + if not boom1.IsDead then boom1.Kill() end + if not boom5.IsDead then boom5.Kill() end + Trigger.AfterDelay(DateTime.Seconds(1), function() if not drum1.IsDead then drum1.Kill() end end) + end) + Trigger.OnKilled(drum3, function() + if not boom1.IsDead then boom1.Kill() end + if not boom3.IsDead then boom3.Kill() end + Trigger.AfterDelay(DateTime.Seconds(1), function() if not drum1.IsDead then drum1.Kill() end end) + end) +end + +SetupSoviets = function() + Barrack1.IsPrimaryBuilding = true + Barrack1.RallyPoint = SovietRally.Location + Trigger.OnKilledOrCaptured(Barrack1, function() + SpawningInfantry = false + end) + + Harvester1.FindResources() + Trigger.OnDamaged(Harvester1, function() + Utils.Do(HarvGuards, function(unit) + GuardHarvester(unit, Harvester1) + end) + end) + Trigger.OnCapture(Harvester1, function() + Trigger.ClearAll(Harvester1) + end) + + Harvester2.FindResources() + Trigger.OnDamaged(Harvester2, function() + Utils.Do(InfantryGuards, function(unit) GuardHarvester(unit, Harvester2) end) + + local toBuild = { } + for i = 1, 6, 1 do + toBuild[i] = Utils.Random(SovietInfantry) + end + + soviets.Build(toBuild, function(units) + Utils.Do(units, function(unit) + InfantryGuards[#InfantryGuards + 1] = unit + GuardHarvester(unit, Harvester2) + end) + end) + end) + Trigger.OnCapture(Harvester2, function() + Trigger.ClearAll(Harvester2) + end) + + Trigger.AfterDelay(0, function() + local buildings = Utils.Where(Map.ActorsInWorld, function(self) return self.Owner == soviets and self.HasProperty("StartBuildingRepairs") end) + Utils.Do(buildings, function(actor) + Trigger.OnDamaged(actor, function(building) + if building.Owner == soviets and building.Health < building.MaxHealth * 3/4 then + building.StartBuildingRepairs() + end + end) + end) + end) +end + +WorldLoaded = function() + + allies = Player.GetPlayer("Allies") + soviets = Player.GetPlayer("Soviets") + + InitObjectives() + InitMission() + SetupSoviets() +end diff --git a/mods/ura/maps/survival02/weapons.yaml b/mods/ura/maps/survival02/weapons.yaml new file mode 100644 index 0000000..316699a --- /dev/null +++ b/mods/ura/maps/survival02/weapons.yaml @@ -0,0 +1,23 @@ +ParaBomb: + ReloadDelay: 5 + Range: 7c0 + Report: chute1.aud + Projectile: GravityBomb + Image: BOMBLET + -OpenSequence: + Warhead@1Dam: SpreadDamage + Spread: 150 + Damage: 3500 + Versus: + None: 125 + Wood: 100 + Light: 60 + Heavy: 50 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, FireDeath + Warhead@3Eff: CreateEffect + Explosions: napalm + ImpactSounds: firebl3.aud + Warhead@4EffWater: CreateEffect + Explosions: napalm + ImpactSounds: firebl3.aud diff --git a/mods/ura/maps/synergy.oramap b/mods/ura/maps/synergy.oramap new file mode 100644 index 0000000..995ee0d Binary files /dev/null and b/mods/ura/maps/synergy.oramap differ diff --git a/mods/ura/maps/tabula-rasa.oramap b/mods/ura/maps/tabula-rasa.oramap new file mode 100644 index 0000000..c8c064d Binary files /dev/null and b/mods/ura/maps/tabula-rasa.oramap differ diff --git a/mods/ura/maps/tainted-peak.oramap b/mods/ura/maps/tainted-peak.oramap new file mode 100644 index 0000000..1da58b2 Binary files /dev/null and b/mods/ura/maps/tainted-peak.oramap differ diff --git a/mods/ura/maps/tandem.oramap b/mods/ura/maps/tandem.oramap new file mode 100644 index 0000000..9ecb8df Binary files /dev/null and b/mods/ura/maps/tandem.oramap differ diff --git a/mods/ura/maps/temperal.oramap b/mods/ura/maps/temperal.oramap new file mode 100644 index 0000000..ed9ed00 Binary files /dev/null and b/mods/ura/maps/temperal.oramap differ diff --git a/mods/ura/maps/tournament-island.oramap b/mods/ura/maps/tournament-island.oramap new file mode 100644 index 0000000..fa685fc Binary files /dev/null and b/mods/ura/maps/tournament-island.oramap differ diff --git a/mods/ura/maps/training-camp/map.bin b/mods/ura/maps/training-camp/map.bin new file mode 100644 index 0000000..3a8b32b Binary files /dev/null and b/mods/ura/maps/training-camp/map.bin differ diff --git a/mods/ura/maps/training-camp/map.png b/mods/ura/maps/training-camp/map.png new file mode 100644 index 0000000..11ab315 Binary files /dev/null and b/mods/ura/maps/training-camp/map.png differ diff --git a/mods/ura/maps/training-camp/map.yaml b/mods/ura/maps/training-camp/map.yaml new file mode 100644 index 0000000..56056c2 --- /dev/null +++ b/mods/ura/maps/training-camp/map.yaml @@ -0,0 +1,781 @@ +MapFormat: 11 + +RequiresMod: ra + +Title: Training camp + +Author: Holloweye + +Tileset: TEMPERAT + +MapSize: 64,64 + +Bounds: 16,16,32,32 + +Visibility: Lobby + +Categories: Minigame + +Players: + PlayerReference@Neutral: + Name: Neutral + OwnsWorld: True + NonCombatant: True + Faction: allies + PlayerReference@Multi0: + Name: Multi0 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi1: + Name: Multi1 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi2: + Name: Multi2 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi3: + Name: Multi3 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi4: + Name: Multi4 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi5: + Name: Multi5 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi6: + Name: Multi6 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + PlayerReference@Multi7: + Name: Multi7 + Playable: True + AllowBots: False + LockFaction: True + Faction: soviet + +Actors: + Actor93: barr + Location: 17,21 + Owner: Multi0 + Actor94: barr + Location: 17,33 + Owner: Multi1 + Actor95: barr + Location: 21,44 + Owner: Multi2 + Actor96: barr + Location: 35,45 + Owner: Multi3 + Actor97: barr + Location: 45,41 + Owner: Multi4 + Actor98: barr + Location: 46,27 + Owner: Multi5 + Actor99: barr + Location: 42,16 + Owner: Multi6 + Actor100: barr + Location: 29,16 + Owner: Multi7 + Actor0: oilb + Location: 18,18 + Owner: Multi0 + Actor1: oilb + Location: 18,44 + Owner: Multi2 + Actor2: oilb + Location: 45,45 + Owner: Multi4 + Actor3: oilb + Location: 45,17 + Owner: Multi6 + Actor4: oilb + Location: 32,18 + Owner: Multi7 + Actor5: oilb + Location: 18,30 + Owner: Multi1 + Actor6: oilb + Location: 32,45 + Owner: Multi3 + Actor7: oilb + Location: 45,30 + Owner: Multi5 + Actor8: t10 + Location: 25,15 + Owner: Neutral + Actor9: t10 + Location: 15,25 + Owner: Neutral + Actor10: t10 + Location: 16,38 + Owner: Neutral + Actor11: t10 + Location: 26,46 + Owner: Neutral + Actor12: t10 + Location: 39,46 + Owner: Neutral + Actor13: t10 + Location: 46,36 + Owner: Neutral + Actor14: t10 + Location: 47,22 + Owner: Neutral + Actor15: t10 + Location: 39,15 + Owner: Neutral + Actor16: tc04 + Location: 16,25 + Owner: Neutral + Actor17: tc04 + Location: 25,16 + Owner: Neutral + Actor18: tc04 + Location: 38,16 + Owner: Neutral + Actor19: tc04 + Location: 45,22 + Owner: Neutral + Actor20: tc05 + Location: 43,36 + Owner: Neutral + Actor21: tc05 + Location: 38,44 + Owner: Neutral + Actor22: tc05 + Location: 25,44 + Owner: Neutral + Actor23: tc05 + Location: 17,37 + Owner: Neutral + Actor24: tc03 + Location: 20,36 + Owner: Neutral + Actor25: tc03 + Location: 27,42 + Owner: Neutral + Actor26: tc03 + Location: 18,26 + Owner: Neutral + Actor27: tc03 + Location: 25,19 + Owner: Neutral + Actor28: tc03 + Location: 37,19 + Owner: Neutral + Actor29: tc03 + Location: 43,23 + Owner: Neutral + Actor30: t17 + Location: 22,35 + Owner: Neutral + Actor31: t02 + Location: 23,34 + Owner: Neutral + Actor32: t02 + Location: 26,20 + Owner: Neutral + Actor33: t02 + Location: 36,20 + Owner: Neutral + Actor34: t02 + Location: 42,24 + Owner: Neutral + Actor35: t02 + Location: 42,35 + Owner: Neutral + Actor36: t02 + Location: 38,42 + Owner: Neutral + Actor37: t02 + Location: 29,40 + Owner: Neutral + Actor38: tc05 + Location: 25,21 + Owner: Neutral + Actor39: tc05 + Location: 20,25 + Owner: Neutral + Actor40: tc05 + Location: 24,33 + Owner: Neutral + Actor41: tc05 + Location: 28,38 + Owner: Neutral + Actor42: tc05 + Location: 37,40 + Owner: Neutral + Actor43: tc05 + Location: 41,33 + Owner: Neutral + Actor44: tc05 + Location: 40,25 + Owner: Neutral + Actor45: tc05 + Location: 34,21 + Owner: Neutral + Actor46: t01 + Location: 27,15 + Owner: Neutral + Actor47: t01 + Location: 37,17 + Owner: Neutral + Actor48: t01 + Location: 38,15 + Owner: Neutral + Actor49: t01 + Location: 24,15 + Owner: Neutral + Actor50: t01 + Location: 16,27 + Owner: Neutral + Actor51: t01 + Location: 20,26 + Owner: Neutral + Actor52: t01 + Location: 16,37 + Owner: Neutral + Actor53: t08 + Location: 16,39 + Owner: Neutral + Actor54: t08 + Location: 16,40 + Owner: Neutral + Actor55: t08 + Location: 24,35 + Owner: Neutral + Actor56: t12 + Location: 23,35 + Owner: Neutral + Actor57: t12 + Location: 21,37 + Owner: Neutral + Actor58: t12 + Location: 28,40 + Owner: Neutral + Actor59: t15 + Location: 25,46 + Owner: Neutral + Actor60: t15 + Location: 28,42 + Owner: Neutral + Actor61: t05 + Location: 26,43 + Owner: Neutral + Actor62: t05 + Location: 38,45 + Owner: Neutral + Actor63: t08 + Location: 39,43 + Owner: Neutral + Actor64: tc01 + Location: 37,43 + Owner: Neutral + Actor65: t11 + Location: 38,38 + Owner: Neutral + Actor66: t02 + Location: 37,38 + Owner: Neutral + Actor67: t02 + Location: 41,32 + Owner: Neutral + Actor68: t02 + Location: 43,24 + Owner: Neutral + Actor69: t02 + Location: 44,35 + Owner: Neutral + Actor70: t02 + Location: 44,24 + Owner: Neutral + Actor71: t02 + Location: 47,21 + Owner: Neutral + Actor72: t02 + Location: 36,18 + Owner: Neutral + Actor73: t02 + Location: 36,19 + Owner: Neutral + Actor74: t12 + Location: 37,20 + Owner: Neutral + Actor75: t12 + Location: 39,17 + Owner: Neutral + Actor76: t12 + Location: 26,17 + Owner: Neutral + Actor77: t01 + Location: 25,18 + Owner: Neutral + Actor78: t07 + Location: 25,20 + Owner: Neutral + Actor79: t01 + Location: 27,18 + Owner: Neutral + Actor80: brik + Location: 31,28 + Owner: Neutral + Actor81: brik + Location: 30,28 + Owner: Neutral + Actor82: brik + Location: 30,29 + Owner: Neutral + Actor83: brik + Location: 30,32 + Owner: Neutral + Actor84: brik + Location: 30,33 + Owner: Neutral + Actor85: brik + Location: 31,33 + Owner: Neutral + Actor86: brik + Location: 35,28 + Owner: Neutral + Actor87: brik + Location: 36,28 + Owner: Neutral + Actor88: brik + Location: 36,29 + Owner: Neutral + Actor89: brik + Location: 36,32 + Owner: Neutral + Actor90: brik + Location: 36,33 + Owner: Neutral + Actor91: brik + Location: 35,33 + Owner: Neutral + Actor92: weap + Location: 32,30 + Owner: Neutral + Actor101: fenc + Location: 16,24 + Owner: Neutral + Actor102: fenc + Location: 16,23 + Owner: Neutral + Actor103: fenc + Location: 16,22 + Owner: Neutral + Actor104: fenc + Location: 16,21 + Owner: Neutral + Actor105: fenc + Location: 16,20 + Owner: Neutral + Actor106: fenc + Location: 16,19 + Owner: Neutral + Actor107: fenc + Location: 16,18 + Owner: Neutral + Actor108: fenc + Location: 16,17 + Owner: Neutral + Actor109: fenc + Location: 16,16 + Owner: Neutral + Actor110: fenc + Location: 17,16 + Owner: Neutral + Actor111: fenc + Location: 18,16 + Owner: Neutral + Actor112: fenc + Location: 19,16 + Owner: Neutral + Actor113: fenc + Location: 20,16 + Owner: Neutral + Actor114: fenc + Location: 21,16 + Owner: Neutral + Actor115: fenc + Location: 22,16 + Owner: Neutral + Actor116: fenc + Location: 23,16 + Owner: Neutral + Actor117: fenc + Location: 28,16 + Owner: Neutral + Actor118: fenc + Location: 31,16 + Owner: Neutral + Actor119: fenc + Location: 32,16 + Owner: Neutral + Actor120: fenc + Location: 33,16 + Owner: Neutral + Actor122: fenc + Location: 35,16 + Owner: Neutral + Actor121: fenc + Location: 34,16 + Owner: Neutral + Actor123: fenc + Location: 36,16 + Owner: Neutral + Actor124: fenc + Location: 37,16 + Owner: Neutral + Actor125: fenc + Location: 41,16 + Owner: Neutral + Actor126: fenc + Location: 44,16 + Owner: Neutral + Actor127: fenc + Location: 45,16 + Owner: Neutral + Actor128: fenc + Location: 46,16 + Owner: Neutral + Actor129: fenc + Location: 47,16 + Owner: Neutral + Actor130: fenc + Location: 47,17 + Owner: Neutral + Actor131: fenc + Location: 47,18 + Owner: Neutral + Actor132: fenc + Location: 47,19 + Owner: Neutral + Actor133: fenc + Location: 47,20 + Owner: Neutral + Actor134: fenc + Location: 47,24 + Owner: Neutral + Actor135: fenc + Location: 47,25 + Owner: Neutral + Actor136: fenc + Location: 47,26 + Owner: Neutral + Actor137: fenc + Location: 47,29 + Owner: Neutral + Actor138: fenc + Location: 47,30 + Owner: Neutral + Actor139: fenc + Location: 47,31 + Owner: Neutral + Actor140: fenc + Location: 47,32 + Owner: Neutral + Actor141: fenc + Location: 47,33 + Owner: Neutral + Actor142: fenc + Location: 47,34 + Owner: Neutral + Actor143: fenc + Location: 47,35 + Owner: Neutral + Actor144: fenc + Location: 47,36 + Owner: Neutral + Actor145: fenc + Location: 47,38 + Owner: Neutral + Actor146: fenc + Location: 47,39 + Owner: Neutral + Actor147: fenc + Location: 47,40 + Owner: Neutral + Actor148: fenc + Location: 47,41 + Owner: Neutral + Actor149: fenc + Location: 47,42 + Owner: Neutral + Actor150: fenc + Location: 47,43 + Owner: Neutral + Actor151: fenc + Location: 47,44 + Owner: Neutral + Actor152: fenc + Location: 47,45 + Owner: Neutral + Actor153: fenc + Location: 47,46 + Owner: Neutral + Actor154: fenc + Location: 47,47 + Owner: Neutral + Actor155: fenc + Location: 46,47 + Owner: Neutral + Actor156: fenc + Location: 45,47 + Owner: Neutral + Actor157: fenc + Location: 44,47 + Owner: Neutral + Actor158: fenc + Location: 43,47 + Owner: Neutral + Actor159: fenc + Location: 42,47 + Owner: Neutral + Actor160: fenc + Location: 41,47 + Owner: Neutral + Actor161: fenc + Location: 38,47 + Owner: Neutral + Actor162: fenc + Location: 37,47 + Owner: Neutral + Actor163: fenc + Location: 36,47 + Owner: Neutral + Actor164: fenc + Location: 33,47 + Owner: Neutral + Actor165: fenc + Location: 32,47 + Owner: Neutral + Actor166: fenc + Location: 31,47 + Owner: Neutral + Actor167: fenc + Location: 30,47 + Owner: Neutral + Actor168: fenc + Location: 29,47 + Owner: Neutral + Actor169: fenc + Location: 28,47 + Owner: Neutral + Actor170: fenc + Location: 24,47 + Owner: Neutral + Actor171: fenc + Location: 23,47 + Owner: Neutral + Actor172: fenc + Location: 22,47 + Owner: Neutral + Actor173: fenc + Location: 21,47 + Owner: Neutral + Actor174: fenc + Location: 20,47 + Owner: Neutral + Actor175: fenc + Location: 19,47 + Owner: Neutral + Actor176: fenc + Location: 18,47 + Owner: Neutral + Actor177: fenc + Location: 17,47 + Owner: Neutral + Actor178: fenc + Location: 16,47 + Owner: Neutral + Actor179: fenc + Location: 16,46 + Owner: Neutral + Actor180: fenc + Location: 16,45 + Owner: Neutral + Actor181: fenc + Location: 16,44 + Owner: Neutral + Actor182: fenc + Location: 16,43 + Owner: Neutral + Actor183: fenc + Location: 16,42 + Owner: Neutral + Actor184: fenc + Location: 16,41 + Owner: Neutral + Actor185: fenc + Location: 16,29 + Owner: Neutral + Actor186: fenc + Location: 16,30 + Owner: Neutral + Actor187: fenc + Location: 16,31 + Owner: Neutral + Actor188: fenc + Location: 16,32 + Owner: Neutral + Actor189: fenc + Location: 16,33 + Owner: Neutral + Actor190: fenc + Location: 16,34 + Owner: Neutral + Actor191: fenc + Location: 16,35 + Owner: Neutral + Actor192: fenc + Location: 16,36 + Owner: Neutral + Actor193: mpspawn + Location: 31,29 + Owner: Neutral + Actor194: mpspawn + Location: 31,30 + Owner: Neutral + Actor195: mpspawn + Location: 31,31 + Owner: Neutral + Actor196: mpspawn + Location: 31,32 + Owner: Neutral + Actor197: mpspawn + Location: 36,30 + Owner: Neutral + Actor198: mpspawn + Location: 36,31 + Owner: Neutral + Actor199: mpspawn + Location: 34,33 + Owner: Neutral + Actor200: mpspawn + Location: 33,33 + Owner: Neutral + Actor201: ftur + Location: 19,21 + Owner: Multi0 + Actor202: ftur + Location: 21,19 + Owner: Multi0 + Actor203: ftur + Location: 20,30 + Owner: Multi1 + Actor204: ftur + Location: 20,32 + Owner: Multi1 + Actor205: ftur + Location: 21,41 + Owner: Multi2 + Actor206: ftur + Location: 22,42 + Owner: Multi2 + Actor207: ftur + Location: 33,43 + Owner: Multi3 + Actor208: ftur + Location: 34,43 + Owner: Multi3 + Actor209: ftur + Location: 43,41 + Owner: Multi4 + Actor210: ftur + Location: 44,41 + Owner: Multi4 + Actor211: ftur + Location: 44,29 + Owner: Multi5 + Actor212: ftur + Location: 44,31 + Owner: Multi5 + Actor213: ftur + Location: 41,19 + Owner: Multi6 + Actor214: ftur + Location: 43,20 + Owner: Multi6 + Actor215: ftur + Location: 31,20 + Owner: Multi7 + Actor216: ftur + Location: 30,20 + Owner: Multi7 + Actor217: t08 + Location: 19,25 + Owner: Neutral + Actor218: t01 + Location: 18,24 + Owner: Neutral + Actor219: t17 + Location: 17,24 + Owner: Neutral + Actor220: t08 + Location: 20,38 + Owner: Neutral + Actor221: t08 + Location: 22,37 + Owner: Neutral + Actor222: t08 + Location: 28,45 + Owner: Neutral + Actor223: t08 + Location: 28,46 + Owner: Neutral + Actor224: t01 + Location: 40,42 + Owner: Neutral + Actor225: t08 + Location: 41,35 + Owner: Neutral + Actor226: t08 + Location: 46,35 + Owner: Neutral + Actor227: t08 + Location: 24,17 + Owner: Neutral + Actor228: t08 + Location: 24,18 + Owner: Neutral + Actor229: t08 + Location: 37,22 + Owner: Neutral + Actor230: t08 + Location: 42,23 + Owner: Neutral + Actor231: t08 + Location: 46,21 + Owner: Neutral + Actor232: t08 + Location: 44,22 + Owner: Neutral + Actor233: brl3 + Location: 31,34 + Owner: Neutral + Actor234: barl + Location: 37,33 + Owner: Neutral + +Rules: rules.yaml diff --git a/mods/ura/maps/training-camp/rules.yaml b/mods/ura/maps/training-camp/rules.yaml new file mode 100644 index 0000000..2b1c22a --- /dev/null +++ b/mods/ura/maps/training-camp/rules.yaml @@ -0,0 +1,310 @@ +World: + -CrateSpawner: + -SpawnMPUnits: + -MPStartLocations: + MapBuildRadius: + AllyBuildRadiusCheckboxLocked: True + AllyBuildRadiusCheckboxEnabled: False + BuildRadiusCheckboxLocked: True + BuildRadiusCheckboxEnabled: True + MapOptions: + TechLevelDropdownLocked: True + TechLevel: unrestricted + +Player: + ClassicProductionQueue@Infantry: + BuildDurationModifier: 250 + ClassicProductionQueue@Vehicle: + BuildDurationModifier: 250 + Shroud: + FogCheckboxLocked: True + FogCheckboxEnabled: True + ExploredMapCheckboxLocked: True + ExploredMapCheckboxEnabled: False + PlayerResources: + DefaultCashLocked: True + DefaultCash: 100 + +OILB: + Health: + HP: 6000 + +BARR: + Buildable: + Prerequisites: ~disabled + Health: + HP: 5000 + Production: + Produces: Building, Infantry, Soldier, Dog + BaseProvider: + Range: 16c0 + Power: + Amount: 0 + +WEAP: + Buildable: + Prerequisites: ~disabled + Health: + HP: 10000 + Valued: + Cost: 2000 + Power: + Amount: 0 + +FTUR: + Power: + Amount: 0 + +SPEN: + Buildable: + Prerequisites: ~disabled + +DOME: + Buildable: + Prerequisites: ~disabled + +PROC: + Buildable: + Prerequisites: ~disabled + +SILO: + Buildable: + Prerequisites: ~disabled + +APWR: + Buildable: + Prerequisites: ~disabled + +STEK: + Buildable: + Prerequisites: ~disabled + +FIX: + Buildable: + Prerequisites: ~disabled + +POWR: + Buildable: + Prerequisites: ~disabled + +MIG: + Buildable: + Prerequisites: afld + Valued: + Cost: 2000 + +YAK: + Buildable: + Prerequisites: afld + Valued: + Cost: 150 + +TRAN: + Buildable: + Prerequisites: hpad + Valued: + Cost: 150 + +HIND: + Buildable: + Prerequisites: hpad + Valued: + Cost: 200 + +HELI: + Buildable: + Prerequisites: hpad + Valued: + Cost: 200 + +HPAD: + Buildable: + Prerequisites: barr + Valued: + Cost: 200 + Power: + Amount: 0 + +FENC: + Buildable: + Queue: Building + Prerequisites: barr + Valued: + Cost: 10 + +AFLD: + Buildable: + Prerequisites: barr + Valued: + Cost: 200 + Power: + Amount: 0 + +DOG: + Buildable: + Prerequisites: barr + Valued: + Cost: 20 + +E1: + Buildable: + Prerequisites: barr + Valued: + Cost: 20 + +E2: + Buildable: + Prerequisites: barr + Valued: + Cost: 32 + +E3: + Buildable: + Prerequisites: barr + Valued: + Cost: 60 + +E4: + Buildable: + Prerequisites: barr + Valued: + Cost: 60 + +E6: + Buildable: + Prerequisites: barr + Valued: + Cost: 100 + +SPY: + Buildable: + Prerequisites: barr + Valued: + Cost: 100 + +E7: + Buildable: + Prerequisites: barr + Valued: + Cost: 400 + +MEDI: + Buildable: + Prerequisites: barr + Valued: + Cost: 60 + +SHOK: + Buildable: + Prerequisites: barr + Valued: + Cost: 200 + +SNIPER: + Buildable: + Prerequisites: barr + Valued: + Cost: 200 + +HIJACKER: + Buildable: + Prerequisites: ~disabled + +V2RL: + Buildable: + Prerequisites: weap + Valued: + Cost: 1250 + +1TNK: + Buildable: + Prerequisites: weap + Valued: + Cost: 125 + +2TNK: + Buildable: + Prerequisites: weap + Valued: + Cost: 175 + +3TNK: + Buildable: + Prerequisites: weap + Valued: + Cost: 250 + +4TNK: + Buildable: + Prerequisites: weap + Valued: + Cost: 500 + +ARTY: + Buildable: + Prerequisites: weap + Valued: + Cost: 1000 + +HARV: + Buildable: + Prerequisites: ~disabled + +MCV: + Buildable: + Prerequisites: ~disabled + +MNLY: + Buildable: + Prerequisites: ~disabled + +TRUK: + Buildable: + Prerequisites: ~disabled + +STNK: + Buildable: + Prerequisites: ~disabled + +MRJ: + Buildable: + Prerequisites: ~disabled + +MGG: + Buildable: + Prerequisites: ~disabled + +CTNK: + Buildable: + Prerequisites: ~disabled + +JEEP: + Buildable: + Prerequisites: weap + Valued: + Cost: 50 + +APC: + Buildable: + Prerequisites: weap + Valued: + Cost: 250 + +TTNK: + Buildable: + Prerequisites: weap + Valued: + Cost: 200 + +FTRK: + Buildable: + Prerequisites: weap + Valued: + Cost: 150 + +DTRK: + Buildable: + BuildPaletteOrder: 10 + Prerequisites: weap + Valued: + Cost: 150 diff --git a/mods/ura/maps/unconventional-warfare.oramap b/mods/ura/maps/unconventional-warfare.oramap new file mode 100644 index 0000000..09e703b Binary files /dev/null and b/mods/ura/maps/unconventional-warfare.oramap differ diff --git a/mods/ura/maps/union-sacree.oramap b/mods/ura/maps/union-sacree.oramap new file mode 100644 index 0000000..6bfb512 Binary files /dev/null and b/mods/ura/maps/union-sacree.oramap differ diff --git a/mods/ura/maps/vegetation.oramap b/mods/ura/maps/vegetation.oramap new file mode 100644 index 0000000..1f374b2 Binary files /dev/null and b/mods/ura/maps/vegetation.oramap differ diff --git a/mods/ura/maps/vihaan-lunta.oramap b/mods/ura/maps/vihaan-lunta.oramap new file mode 100644 index 0000000..09109e5 Binary files /dev/null and b/mods/ura/maps/vihaan-lunta.oramap differ diff --git a/mods/ura/maps/volcano.oramap b/mods/ura/maps/volcano.oramap new file mode 100644 index 0000000..1bd8a8f Binary files /dev/null and b/mods/ura/maps/volcano.oramap differ diff --git a/mods/ura/maps/warwind.oramap b/mods/ura/maps/warwind.oramap new file mode 100644 index 0000000..0d8944c Binary files /dev/null and b/mods/ura/maps/warwind.oramap differ diff --git a/mods/ura/maps/winter-storm.oramap b/mods/ura/maps/winter-storm.oramap new file mode 100644 index 0000000..fb66416 Binary files /dev/null and b/mods/ura/maps/winter-storm.oramap differ diff --git a/mods/ura/maps/x-lake.oramap b/mods/ura/maps/x-lake.oramap new file mode 100644 index 0000000..da9c7a1 Binary files /dev/null and b/mods/ura/maps/x-lake.oramap differ diff --git a/mods/ura/maps/ysmir.oramap b/mods/ura/maps/ysmir.oramap new file mode 100644 index 0000000..238ca5e Binary files /dev/null and b/mods/ura/maps/ysmir.oramap differ diff --git a/mods/ura/metrics.yaml b/mods/ura/metrics.yaml new file mode 100644 index 0000000..b9a7f49 --- /dev/null +++ b/mods/ura/metrics.yaml @@ -0,0 +1,14 @@ +# General dumping-ground for UI element sizes, etc. + +Metrics: + ColorPickerActorType: ^fact.colorpicker + ColorPickerRemapIndices: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 + FactionSuffix-allies: allies + FactionSuffix-england: allies + FactionSuffix-france: allies + FactionSuffix-germany: allies + FactionSuffix-russia: soviet + FactionSuffix-soviet: soviet + FactionSuffix-ukraine: soviet + IncompatibleProtectedGameColor: B22222 + IncompatibleVersionColor: D3D3D3 diff --git a/mods/ura/missions.yaml b/mods/ura/missions.yaml new file mode 100644 index 0000000..4d4ae2d --- /dev/null +++ b/mods/ura/missions.yaml @@ -0,0 +1,20 @@ +Allied Campaign: + ./mods/ra/maps/allies-01 + ./mods/ra/maps/allies-02 + ./mods/ra/maps/allies-03a + ./mods/ra/maps/allies-03b + ./mods/ra/maps/allies-04 + ./mods/ra/maps/allies-05a + ./mods/ra/maps/allies-06a + ./mods/ra/maps/allies-06b +Soviet Campaign: + ./mods/ra/maps/soviet-01 + ./mods/ra/maps/soviet-02a + ./mods/ra/maps/soviet-02b + ./mods/ra/maps/soviet-03 + ./mods/ra/maps/soviet-04a + ./mods/ra/maps/soviet-04b + ./mods/ra/maps/soviet-05 + ./mods/ra/maps/soviet-06a + ./mods/ra/maps/soviet-06b + ./mods/ra/maps/soviet-07 diff --git a/mods/ura/mod.yaml b/mods/ura/mod.yaml new file mode 100644 index 0000000..5501f93 --- /dev/null +++ b/mods/ura/mod.yaml @@ -0,0 +1,282 @@ +Metadata: + Title: Red Alert: Unplugged + Version: Master version + +PackageFormats: Mix + +Packages: + ~^Content/ra/v2/ + ~^Content/ra/v2/expand + ~^Content/ra/v2/cnc + ~^Content/ra/v2/movies + . + $ura: ura + ./mods/common: common + ~main.mix + ~conquer.mix + ~lores.mix: lores + ~hires.mix + ~local.mix + ~sounds.mix + ~speech.mix + ~allies.mix + ~russian.mix + ~temperat.mix + ~snow.mix + ~interior.mix + ~scores.mix + ~expand2.mix + ~hires1.mix + ~desert.mix + ura|bits + ura|bits/desert + ura|uibits + +MapFolders: + ura|maps: System + ~^maps/ra/release-20180307: User + +Rules: + ura|rules/misc.yaml + ura|rules/ai.yaml + ura|rules/player.yaml + ura|rules/palettes.yaml + ura|rules/world.yaml + ura|rules/defaults.yaml + ura|rules/vehicles.yaml + ura|rules/husks.yaml + ura|rules/structures.yaml + ura|rules/infantry.yaml + ura|rules/civilian.yaml + ura|rules/decoration.yaml + ura|rules/aircraft.yaml + ura|rules/ships.yaml + ura|rules/fakes.yaml + +Sequences: + ura|sequences/ships.yaml + ura|sequences/vehicles.yaml + ura|sequences/structures.yaml + ura|sequences/infantry.yaml + ura|sequences/aircraft.yaml + ura|sequences/misc.yaml + ura|sequences/decorations.yaml + +TileSets: + ura|tilesets/snow.yaml + ura|tilesets/interior.yaml + ura|tilesets/temperat.yaml + ura|tilesets/desert.yaml + +Cursors: + ura|cursors.yaml + +Chrome: + ura|chrome.yaml + +Assemblies: + common|OpenRA.Mods.Common.dll + common|OpenRA.Mods.Cnc.dll + +ChromeLayout: + common|chrome/ingame.yaml + common|chrome/ingame-chat.yaml + common|chrome/ingame-fmvplayer.yaml + common|chrome/ingame-info.yaml + common|chrome/ingame-infoscripterror.yaml + common|chrome/ingame-infobriefing.yaml + common|chrome/ingame-infoobjectives.yaml + common|chrome/ingame-infostats.yaml + common|chrome/ingame-menu.yaml + ura|chrome/ingame-observer.yaml + common|chrome/ingame-observerstats.yaml + ura|chrome/ingame-player.yaml + common|chrome/ingame-perf.yaml + common|chrome/ingame-debug.yaml + common|chrome/ingame-infochat.yaml + common|chrome/mainmenu.yaml + common|chrome/settings.yaml + common|chrome/credits.yaml + common|chrome/lobby.yaml + common|chrome/lobby-mappreview.yaml + common|chrome/lobby-players.yaml + common|chrome/lobby-options.yaml + common|chrome/lobby-music.yaml + common|chrome/lobby-servers.yaml + common|chrome/lobby-kickdialogs.yaml + common|chrome/color-picker.yaml + common|chrome/map-chooser.yaml + common|chrome/multiplayer-browser.yaml + common|chrome/multiplayer-browserpanels.yaml + common|chrome/multiplayer-createserver.yaml + common|chrome/multiplayer-directconnect.yaml + common|chrome/connection.yaml + common|chrome/replaybrowser.yaml + common|chrome/dropdowns.yaml + common|chrome/musicplayer.yaml + common|chrome/tooltips.yaml + common|chrome/assetbrowser.yaml + common|chrome/missionbrowser.yaml + common|chrome/confirmation-dialogs.yaml + common|chrome/editor.yaml + +Weapons: + ura|weapons/explosions.yaml + ura|weapons/ballistics.yaml + ura|weapons/missiles.yaml + ura|weapons/other.yaml + ura|weapons/smallcaliber.yaml + ura|weapons/superweapons.yaml + +Voices: + ura|audio/voices.yaml + +Notifications: + ura|audio/notifications.yaml + +Music: + ura|audio/music.yaml + +Translations: + ura|languages/english.yaml + +Hotkeys: + common|hotkeys/game.yaml + common|hotkeys/observer.yaml + common|hotkeys/production-common.yaml + common|hotkeys/supportpowers.yaml + common|hotkeys/viewport.yaml + ura|hotkeys.yaml + +LoadScreen: LogoStripeLoadScreen + Image: ura|uibits/loadscreen.png + Text: Filling Crates..., Charging Capacitors..., Reticulating Splines..., Planting Trees..., Building Bridges..., Aging Empires..., Compiling EVA..., Constructing Pylons..., Activating Skynet..., Splitting Atoms... + +ServerTraits: + LobbyCommands + PlayerPinger + MasterServerPinger + LobbySettingsNotification + +ChromeMetrics: + common|metrics.yaml + ura|metrics.yaml + +Fonts: + Regular: + Font: common|FreeSans.ttf + Size:14 + Bold: + Font: common|FreeSansBold.ttf + Size:14 + Title: + Font: ura|ZoodRangmah.ttf + Size:48 + MediumBold: + Font: common|FreeSansBold.ttf + Size:18 + BigBold: + Font: common|FreeSansBold.ttf + Size:24 + Small: + Font: common|FreeSans.ttf + Size:12 + Tiny: + Font: common|FreeSans.ttf + Size:10 + TinyBold: + Font: common|FreeSansBold.ttf + Size:10 + +Missions: + ura|missions.yaml + +MapGrid: + TileSize: 24,24 + Type: Rectangular + +SupportsMapsFrom: ra + +SoundFormats: Aud, Wav + +SpriteFormats: ShpD2, ShpTD, TmpRA, TmpTD, ShpTS + +SpriteSequenceFormat: TilesetSpecificSpriteSequence + TilesetExtensions: + TEMPERAT: .tem + SNOW: .sno + INTERIOR: .int + DESERT: .des + +ModelSequenceFormat: PlaceholderModelSequence + +GameSpeeds: + slower: + Name: Slower + Timestep: 50 + OrderLatency: 3 + default: + Name: Normal + Timestep: 40 + OrderLatency: 3 + fast: + Name: Fast + Timestep: 35 + OrderLatency: 4 + faster: + Name: Faster + Timestep: 30 + OrderLatency: 4 + fastest: + Name: Fastest + Timestep: 20 + OrderLatency: 6 + +ColorValidator: + +ModContent: + InstallPromptMessage: Red Alert requires artwork and audio from the original game.\n\nQuick Install will automatically download this content (without music\nor videos) from a mirror of the 2008 Red Alert freeware release.\n\nAdvanced Install includes options for downloading the music and for\ncopying the videos and other content from an original game disc. + QuickDownload: quickinstall + HeaderMessage: Game content may be extracted from the original game discs or an\nexisting digital install. OpenRA can also download the base game\nfiles from an online mirror of the 2008 freeware release of RA. + Packages: + base: Base Game Files + TestFiles: ^Content/ra/v2/allies.mix, ^Content/ra/v2/conquer.mix, ^Content/ra/v2/interior.mix, ^Content/ra/v2/hires.mix, ^Content/ra/v2/lores.mix, ^Content/ra/v2/local.mix, ^Content/ra/v2/speech.mix, ^Content/ra/v2/russian.mix, ^Content/ra/v2/snow.mix, ^Content/ra/v2/sounds.mix, ^Content/ra/v2/temperat.mix + Sources: allied, allied-linux, soviet, soviet-linux, tfd, ra-origin + Required: true + Download: basefiles + aftermathbase: Aftermath Expansion Files + TestFiles: ^Content/ra/v2/expand/expand2.mix, ^Content/ra/v2/expand/hires1.mix, ^Content/ra/v2/expand/lores1.mix, ^Content/ra/v2/expand/chrotnk1.aud, ^Content/ra/v2/expand/fixit1.aud, ^Content/ra/v2/expand/jburn1.aud, ^Content/ra/v2/expand/jchrge1.aud, ^Content/ra/v2/expand/jcrisp1.aud, ^Content/ra/v2/expand/jdance1.aud, ^Content/ra/v2/expand/jjuice1.aud, ^Content/ra/v2/expand/jjump1.aud, ^Content/ra/v2/expand/jlight1.aud, ^Content/ra/v2/expand/jpower1.aud, ^Content/ra/v2/expand/jshock1.aud, ^Content/ra/v2/expand/jyes1.aud, ^Content/ra/v2/expand/madchrg2.aud, ^Content/ra/v2/expand/madexplo.aud, ^Content/ra/v2/expand/mboss1.aud, ^Content/ra/v2/expand/mhear1.aud, ^Content/ra/v2/expand/mhotdig1.aud, ^Content/ra/v2/expand/mhowdy1.aud, ^Content/ra/v2/expand/mhuh1.aud, ^Content/ra/v2/expand/mlaff1.aud, ^Content/ra/v2/expand/mrise1.aud, ^Content/ra/v2/expand/mwrench1.aud, ^Content/ra/v2/expand/myeehaw1.aud, ^Content/ra/v2/expand/myes1.aud + Sources: aftermath, aftermath-linux, tfd, ra-origin + Required: true + Download: aftermath + cncdesert: C&C Desert Tileset + TestFiles: ^Content/ra/v2/cnc/desert.mix + Sources: tfd, cnc-origin, cnc95, cnc95-linux + Required: true + Download: cncdesert + music: Base Game Music + TestFiles: ^Content/ra/v2/scores.mix + Sources: allied, allied-linux, soviet, soviet-linux, tfd, ra-origin + Download: music + movies-allied: Allied Campaign Briefings + TestFiles: ^Content/ra/v2/movies/aagun.vqa, ^Content/ra/v2/movies/aftrmath.vqa, ^Content/ra/v2/movies/ally1.vqa, ^Content/ra/v2/movies/ally10.vqa, ^Content/ra/v2/movies/ally10b.vqa, ^Content/ra/v2/movies/ally11.vqa, ^Content/ra/v2/movies/ally12.vqa, ^Content/ra/v2/movies/ally14.vqa, ^Content/ra/v2/movies/ally2.vqa, ^Content/ra/v2/movies/ally4.vqa, ^Content/ra/v2/movies/ally5.vqa, ^Content/ra/v2/movies/ally6.vqa, ^Content/ra/v2/movies/ally8.vqa, ^Content/ra/v2/movies/ally9.vqa, ^Content/ra/v2/movies/allyend.vqa, ^Content/ra/v2/movies/allymorf.vqa, ^Content/ra/v2/movies/apcescpe.vqa, ^Content/ra/v2/movies/assess.vqa, ^Content/ra/v2/movies/battle.vqa, ^Content/ra/v2/movies/binoc.vqa, ^Content/ra/v2/movies/bmap.vqa, ^Content/ra/v2/movies/brdgtilt.vqa, ^Content/ra/v2/movies/crontest.vqa, ^Content/ra/v2/movies/cronfail.vqa, ^Content/ra/v2/movies/destroyr.vqa, ^Content/ra/v2/movies/dud.vqa, ^Content/ra/v2/movies/elevator.vqa, ^Content/ra/v2/movies/flare.vqa, ^Content/ra/v2/movies/frozen.vqa, ^Content/ra/v2/movies/grvestne.vqa, ^Content/ra/v2/movies/landing.vqa, ^Content/ra/v2/movies/masasslt.vqa, ^Content/ra/v2/movies/mcv.vqa, ^Content/ra/v2/movies/mcv_land.vqa, ^Content/ra/v2/movies/montpass.vqa, ^Content/ra/v2/movies/oildrum.vqa, ^Content/ra/v2/movies/overrun.vqa, ^Content/ra/v2/movies/prolog.vqa, ^Content/ra/v2/movies/redintro.vqa, ^Content/ra/v2/movies/shipsink.vqa, ^Content/ra/v2/movies/shorbom1.vqa, ^Content/ra/v2/movies/shorbom2.vqa, ^Content/ra/v2/movies/shorbomb.vqa, ^Content/ra/v2/movies/snowbomb.vqa, ^Content/ra/v2/movies/soviet1.vqa, ^Content/ra/v2/movies/sovtstar.vqa, ^Content/ra/v2/movies/spy.vqa, ^Content/ra/v2/movies/tanya1.vqa, ^Content/ra/v2/movies/tanya2.vqa, ^Content/ra/v2/movies/toofar.vqa, ^Content/ra/v2/movies/trinity.vqa + Sources: allied, allied-linux, tfd, ra-origin + movies-soviet: Soviet Campaign Briefings + TestFiles: ^Content/ra/v2/movies/aagun.vqa, ^Content/ra/v2/movies/cronfail.vqa, ^Content/ra/v2/movies/airfield.vqa, ^Content/ra/v2/movies/ally1.vqa, ^Content/ra/v2/movies/allymorf.vqa, ^Content/ra/v2/movies/averted.vqa, ^Content/ra/v2/movies/beachead.vqa, ^Content/ra/v2/movies/bmap.vqa, ^Content/ra/v2/movies/bombrun.vqa, ^Content/ra/v2/movies/countdwn.vqa, ^Content/ra/v2/movies/double.vqa, ^Content/ra/v2/movies/dpthchrg.vqa, ^Content/ra/v2/movies/execute.vqa, ^Content/ra/v2/movies/flare.vqa, ^Content/ra/v2/movies/landing.vqa, ^Content/ra/v2/movies/mcvbrdge.vqa, ^Content/ra/v2/movies/mig.vqa, ^Content/ra/v2/movies/movingin.vqa, ^Content/ra/v2/movies/mtnkfact.vqa, ^Content/ra/v2/movies/nukestok.vqa, ^Content/ra/v2/movies/onthprwl.vqa, ^Content/ra/v2/movies/periscop.vqa, ^Content/ra/v2/movies/prolog.vqa, ^Content/ra/v2/movies/radrraid.vqa, ^Content/ra/v2/movies/redintro.vqa, ^Content/ra/v2/movies/search.vqa, ^Content/ra/v2/movies/sfrozen.vqa, ^Content/ra/v2/movies/sitduck.vqa, ^Content/ra/v2/movies/slntsrvc.vqa, ^Content/ra/v2/movies/snowbomb.vqa, ^Content/ra/v2/movies/snstrafe.vqa, ^Content/ra/v2/movies/sovbatl.vqa, ^Content/ra/v2/movies/sovcemet.vqa, ^Content/ra/v2/movies/sovfinal.vqa, ^Content/ra/v2/movies/soviet1.vqa, ^Content/ra/v2/movies/soviet10.vqa, ^Content/ra/v2/movies/soviet11.vqa, ^Content/ra/v2/movies/soviet12.vqa, ^Content/ra/v2/movies/soviet13.vqa, ^Content/ra/v2/movies/soviet14.vqa, ^Content/ra/v2/movies/soviet2.vqa, ^Content/ra/v2/movies/soviet3.vqa, ^Content/ra/v2/movies/soviet4.vqa, ^Content/ra/v2/movies/soviet5.vqa, ^Content/ra/v2/movies/soviet6.vqa, ^Content/ra/v2/movies/soviet7.vqa, ^Content/ra/v2/movies/soviet8.vqa, ^Content/ra/v2/movies/soviet9.vqa, ^Content/ra/v2/movies/sovmcv.vqa, ^Content/ra/v2/movies/sovtstar.vqa, ^Content/ra/v2/movies/spotter.vqa, ^Content/ra/v2/movies/strafe.vqa, ^Content/ra/v2/movies/take_off.vqa, ^Content/ra/v2/movies/tesla.vqa, ^Content/ra/v2/movies/v2rocket.vqa + Sources: soviet, soviet-linux, tfd, ra-origin + music-counterstrike: Counterstrike Music + TestFiles: ^Content/ra/v2/expand/araziod.aud, ^Content/ra/v2/expand/backstab.aud, ^Content/ra/v2/expand/chaos2.aud, ^Content/ra/v2/expand/shut_it.aud, ^Content/ra/v2/expand/2nd_hand.aud, ^Content/ra/v2/expand/twinmix1.aud, ^Content/ra/v2/expand/under3.aud, ^Content/ra/v2/expand/vr2.aud, + Sources: counterstrike, counterstrike-linux, ra-origin + music-aftermath: Aftermath Music + TestFiles: ^Content/ra/v2/expand/await.aud, ^Content/ra/v2/expand/bog.aud, ^Content/ra/v2/expand/float_v2.aud, ^Content/ra/v2/expand/gloom.aud, ^Content/ra/v2/expand/grndwire.aud, ^Content/ra/v2/expand/rpt.aud, ^Content/ra/v2/expand/search.aud, ^Content/ra/v2/expand/traction.aud, ^Content/ra/v2/expand/wastelnd.aud + Sources: aftermath, aftermath-linux, ra-origin + Downloads: + ura|installer/downloads.yaml + Sources: + ura|installer/aftermath.yaml + ura|installer/allies95.yaml + ura|installer/cnc95.yaml + ura|installer/counterstrike.yaml + ura|installer/firstdecade.yaml + ura|installer/origin.yaml + ura|installer/soviet95.yaml diff --git a/mods/ura/rules/ai.yaml b/mods/ura/rules/ai.yaml new file mode 100644 index 0000000..d936aa3 --- /dev/null +++ b/mods/ura/rules/ai.yaml @@ -0,0 +1,492 @@ +Player: + HackyAI@RushAI: + Name: Rush AI + Type: rush + MinimumExcessPower: 40 + BuildingCommonNames: + ConstructionYard: fact + Refinery: proc + Power: powr,apwr + Barracks: barr,tent + VehiclesFactory: weap + Production: barr,tent,weap + Silo: silo + UnitsCommonNames: + Mcv: mcv + NavalUnits: ss,msub,dd,ca,lst,pt + BuildingLimits: + proc: 4 + barr: 1 + tent: 1 + kenn: 1 + dome: 1 + weap: 1 + atek: 1 + stek: 1 + fix: 1 + BuildingFractions: + proc: 30% + powr: 15% + apwr: 20% + barr: 1% + kenn: 0.5% + tent: 1% + weap: 1% + pbox: 7% + gun: 7% + tsla: 5% + gap: 2% + ftur: 10% + agun: 5% + sam: 5% + atek: 1% + stek: 1% + fix: 0.1% + dome: 10% + UnitsToBuild: + e1: 65% + e2: 25% + e3: 40% + e4: 15% + dog: 15% + shok: 15% + harv: 10% + apc: 30% + jeep: 40% + arty: 15% + v2rl: 40% + ftrk: 50% + 1tnk: 70% + 2tnk: 25% + 3tnk: 50% + 4tnk: 10% + ttnk: 10% + stnk: 5% + UnitLimits: + dog: 4 + harv: 8 + SquadSize: 20 + SupportPowerDecision@spyplane: + OrderName: SovietSpyPlane + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + SupportPowerDecision@paratroopers: + OrderName: SovietParatroopers + MinimumAttractiveness: 5 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 8c0 + Consideration@2: + Against: Enemy + Types: Water + Attractiveness: -5 + TargetMetric: None + CheckRadius: 8c0 + SupportPowerDecision@parabombs: + OrderName: UkraineParabombs + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + SupportPowerDecision@nukepower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 + HackyAI@NormalAI: + Name: Normal AI + Type: normal + MinimumExcessPower: 60 + BuildingCommonNames: + ConstructionYard: fact + Refinery: proc + Power: powr,apwr + Barracks: barr,tent + VehiclesFactory: weap + Production: barr,tent,weap,afld,hpad + NavalProduction: spen,syrd + Silo: silo + UnitsCommonNames: + Mcv: mcv + NavalUnits: ss,msub,dd,ca,lst,pt + BuildingLimits: + proc: 4 + barr: 1 + tent: 1 + dome: 1 + weap: 1 + spen: 1 + syrd: 1 + hpad: 4 + afld: 4 + atek: 1 + stek: 1 + fix: 1 + BuildingFractions: + proc: 10% + powr: 1% + apwr: 30% + tent: 1% + barr: 1% + kenn: 0.5% + dome: 1% + weap: 6% + hpad: 4% + spen: 1% + syrd: 1% + afld: 4% + pbox: 7% + gun: 7% + ftur: 10% + tsla: 5% + gap: 2% + fix: 1% + agun: 5% + sam: 1% + atek: 1% + stek: 1% + mslo: 1% + UnitsToBuild: + e1: 65% + e2: 25% + e3: 40% + e4: 15% + dog: 15% + shok: 15% + harv: 10% + apc: 30% + jeep: 40% + arty: 15% + v2rl: 40% + ftrk: 50% + 1tnk: 70% + 2tnk: 25% + 3tnk: 50% + 4tnk: 15% + ttnk: 15% + stnk: 10% + heli: 30% + hind: 30% + mig: 30% + yak: 30% + ss: 10% + msub: 10% + dd: 10% + ca: 10% + pt: 10% + UnitLimits: + dog: 4 + harv: 8 + SquadSize: 40 + SupportPowerDecision@spyplane: + OrderName: SovietSpyPlane + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + SupportPowerDecision@paratroopers: + OrderName: SovietParatroopers + MinimumAttractiveness: 5 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 8c0 + Consideration@2: + Against: Enemy + Types: Water + Attractiveness: -5 + TargetMetric: None + CheckRadius: 8c0 + SupportPowerDecision@parabombs: + OrderName: UkraineParabombs + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + SupportPowerDecision@nukepower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 + HackyAI@TurtleAI: + Name: Turtle AI + Type: turtle + MinimumExcessPower: 100 + BuildingCommonNames: + ConstructionYard: fact + Refinery: proc + Power: powr,apwr + Barracks: barr,tent + VehiclesFactory: weap + Production: barr,tent,weap,afld,hpad + NavalProduction: spen,syrd + Silo: silo + UnitsCommonNames: + Mcv: mcv + NavalUnits: ss,msub,dd,ca,lst,pt + BuildingLimits: + proc: 4 + barr: 1 + tent: 1 + kenn: 1 + dome: 1 + weap: 1 + spen: 1 + syrd: 1 + hpad: 4 + afld: 4 + atek: 1 + stek: 1 + fix: 1 + BuildingFractions: + proc: 30% + powr: 1% + apwr: 20% + tent: 1% + barr: 1% + kenn: 0.5% + weap: 3% + hpad: 2% + spen: 1% + syrd: 1% + pbox: 10% + gun: 10% + ftur: 10% + tsla: 7% + gap: 3% + fix: 0.1% + dome: 10% + agun: 5% + sam: 5% + atek: 1% + stek: 1% + mslo: 1% + UnitsToBuild: + e1: 65% + e2: 25% + e3: 40% + e4: 15% + dog: 15% + shok: 15% + harv: 10% + apc: 30% + jeep: 40% + arty: 15% + v2rl: 40% + ftrk: 50% + 1tnk: 70% + 2tnk: 25% + 3tnk: 50% + 4tnk: 20% + ttnk: 20% + stnk: 15% + heli: 30% + hind: 30% + mig: 30% + yak: 30% + ss: 10% + msub: 10% + dd: 10% + ca: 10% + pt: 10% + UnitLimits: + dog: 4 + harv: 8 + SquadSize: 10 + SupportPowerDecision@spyplane: + OrderName: SovietSpyPlane + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + SupportPowerDecision@paratroopers: + OrderName: SovietParatroopers + MinimumAttractiveness: 5 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 8c0 + Consideration@2: + Against: Enemy + Types: Water + Attractiveness: -5 + TargetMetric: None + CheckRadius: 8c0 + SupportPowerDecision@parabombs: + OrderName: UkraineParabombs + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + SupportPowerDecision@nukepower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 + HackyAI@NavalAI: + Name: Naval AI + Type: naval + BuildingCommonNames: + ConstructionYard: fact + Refinery: proc + Power: powr,apwr + Barracks: barr,tent + VehiclesFactory: weap + Production: barr,tent,weap,afld,hpad + NavalProduction: spen,syrd + Silo: silo + UnitsCommonNames: + Mcv: mcv + NavalUnits: ss,msub,dd,ca,lst,pt + BuildingLimits: + proc: 4 + dome: 1 + barr: 1 + tent: 1 + spen: 1 + syrd: 1 + hpad: 8 + afld: 8 + weap: 1 + atek: 1 + stek: 1 + fix: 1 + BuildingFractions: + proc: 29% + powr: 1% + apwr: 24% + dome: 1% + weap: 1% + hpad: 20% + afld: 20% + atek: 1% + stek: 1% + spen: 1% + syrd: 1% + fix: 0.1% + pbox: 12% + gun: 12% + ftur: 12% + tsla: 12% + agun: 5% + sam: 5% + mslo: 1% + UnitsToBuild: + harv: 1% + heli: 30% + hind: 30% + mig: 30% + yak: 30% + ss: 10% + msub: 30% + dd: 30% + ca: 20% + pt: 10% + UnitLimits: + harv: 8 + SquadSize: 1 + SupportPowerDecision@spyplane: + OrderName: SovietSpyPlane + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + SupportPowerDecision@paratroopers: + OrderName: SovietParatroopers + MinimumAttractiveness: 5 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 8c0 + Consideration@2: + Against: Enemy + Types: Water + Attractiveness: -5 + TargetMetric: None + CheckRadius: 8c0 + SupportPowerDecision@parabombs: + OrderName: UkraineParabombs + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + SupportPowerDecision@nukepower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 diff --git a/mods/ura/rules/aircraft.yaml b/mods/ura/rules/aircraft.yaml new file mode 100644 index 0000000..d40e55c --- /dev/null +++ b/mods/ura/rules/aircraft.yaml @@ -0,0 +1,444 @@ +BADR: + Inherits: ^NeutralPlane + ParaDrop: + DropRange: 5c0 + Health: + HP: 300 + Armor: + Type: Light + Aircraft: + CruiseAltitude: 2560 + TurnSpeed: 5 + Speed: 164 + Repulsable: False + MaximumPitch: 56 + Cargo: + MaxWeight: 10 + -Selectable: + SelectionDecorations: + RenderSelectionBars: False + -Voiced: + Tooltip: + Name: Badger + Contrail@1: + Offset: -432,560,0 + Contrail@2: + Offset: -432,-560,0 + SpawnActorOnDeath: + Actor: BADR.Husk + SmokeTrailWhenDamaged@0: + Offset: -432,560,0 + Interval: 2 + SmokeTrailWhenDamaged@1: + Offset: -432,-560,0 + Interval: 2 + -EjectOnDeath: + RejectsOrders: + GivesExperience: + Experience: 1000 + Interactable: + +BADR.Bomber: + Inherits: ^NeutralPlane + AttackBomber: + Armament: + Weapon: ParaBomb + Health: + HP: 300 + Armor: + Type: Light + Aircraft: + CruiseAltitude: 2560 + TurnSpeed: 5 + Speed: 149 + Repulsable: False + MaximumPitch: 56 + AmmoPool: + Ammo: 7 + -Selectable: + SelectionDecorations: + RenderSelectionBars: False + -Voiced: + Tooltip: + Name: Badger + Contrail@1: + Offset: -432,560,0 + Contrail@2: + Offset: -432,-560,0 + SpawnActorOnDeath: + Actor: BADR.Husk + SmokeTrailWhenDamaged@0: + Offset: -432,560,0 + Interval: 2 + SmokeTrailWhenDamaged@1: + Offset: -432,-560,0 + Interval: 2 + -EjectOnDeath: + RejectsOrders: + RenderSprites: + Image: badr + GivesExperience: + Experience: 1000 + Interactable: + +MIG: + Inherits: ^Plane + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Aircraft + BuildAtProductionType: Plane + BuildPaletteOrder: 50 + Prerequisites: ~afld, stek, ~techlevel.high + BuildDuration: 1750 + Description: Fast Ground-Attack Plane.\n Strong vs Buildings, Vehicles\n Weak vs Infantry, Aircraft + Valued: + Cost: 2000 + Tooltip: + Name: MiG + Health: + HP: 80 + Armor: + Type: Light + RevealsShroud: + Range: 15c0 + Type: GroundPosition + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 13c0 + Type: GroundPosition + Armament: + Weapon: Maverick + LocalOffset: 0,-640,0, 0,640,0 + LocalYaw: -40, 24 + PauseOnCondition: !ammo + AttackPlane: + FacingTolerance: 20 + Aircraft: + RearmBuildings: afld, afld.ukraine + CruiseAltitude: 2560 + InitialFacing: 192 + TurnSpeed: 4 + Speed: 223 + RepulsionSpeed: 40 + MaximumPitch: 56 + AutoTarget: + InitialStance: HoldFire + InitialStanceAI: HoldFire + AmmoPool: + Ammo: 4 + ReloadDelay: 128 + AmmoCondition: ammo + ReturnOnIdle: + Selectable: + Bounds: 36,28,0,2 + DecorationBounds: 40,29,0,1 + SelectionDecorations: + Contrail@1: + Offset: -598,-683,0 + Contrail@2: + Offset: -598,683,0 + SpawnActorOnDeath: + Actor: MIG.Husk + SmokeTrailWhenDamaged: + Offset: -853,0,171 + Interval: 2 + ProducibleWithLevel: + Prerequisites: aircraft.upgraded + +YAK: + Inherits: ^Plane + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Aircraft + BuildAtProductionType: Plane + BuildPaletteOrder: 30 + Prerequisites: ~afld, ~techlevel.medium + Description: Attack Plane armed with\ndual machine guns.\n Strong vs Infantry, Light armor\n Weak vs Tanks, Aircraft + Valued: + Cost: 1350 + Tooltip: + Name: Yak + Health: + HP: 60 + Armor: + Type: Light + RevealsShroud: + Range: 13c0 + Type: GroundPosition + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 11c0 + Type: GroundPosition + Armament@PRIMARY: + Weapon: ChainGun.Yak + LocalOffset: 256,-213,0 + MuzzleSequence: muzzle + PauseOnCondition: !ammo + Armament@SECONDARY: + Name: secondary + Weapon: ChainGun.Yak + LocalOffset: 256,213,0 + MuzzleSequence: muzzle + PauseOnCondition: !ammo + AttackPlane: + FacingTolerance: 20 + Aircraft: + RearmBuildings: afld, afld.ukraine + CruiseAltitude: 2560 + InitialFacing: 192 + TurnSpeed: 4 + Speed: 178 + RepulsionSpeed: 40 + MaximumPitch: 56 + AutoTarget: + InitialStance: HoldFire + InitialStanceAI: HoldFire + AmmoPool: + Ammo: 18 + PipCount: 6 + ReloadDelay: 11 + AmmoCondition: ammo + ReturnOnIdle: + SelectionDecorations: + WithMuzzleOverlay: + Contrail: + Offset: -853,0,0 + SpawnActorOnDeath: + Actor: YAK.Husk + SmokeTrailWhenDamaged: + Offset: -853,0,0 + Interval: 2 + ProducibleWithLevel: + Prerequisites: aircraft.upgraded + Selectable: + DecorationBounds: 30,28,0,2 + +TRAN: + Inherits: ^Helicopter + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Aircraft + BuildAtProductionType: Helicopter + BuildPaletteOrder: 50 + Prerequisites: ~hpad, ~techlevel.medium + Description: Fast Infantry Transport Helicopter.\n Unarmed + Valued: + Cost: 900 + Tooltip: + Name: Chinook + Health: + HP: 160 + Armor: + Type: Light + Armament@PRIMARY: + Weapon: Hover + AttackHeli: + FacingTolerance: 20 + AutoTarget: + InitialStance: HoldFire + InitialStanceAI: HoldFire + AmmoPool: + Ammo: 0 + RevealsShroud: + Range: 10c0 + Type: GroundPosition + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 8c0 + Type: GroundPosition + Aircraft: + InitialFacing: 224 + TurnSpeed: 5 + Speed: 128 + LandableTerrainTypes: Clear,Rough,Road,Ore,Beach,Gems + AltitudeVelocity: 0c58 + WithIdleOverlay@ROTOR1AIR: + Offset: 597,0,213 + Sequence: rotor + RequiresCondition: airborne + WithIdleOverlay@ROTOR1GROUND: + Offset: 597,0,213 + Sequence: slow-rotor + RequiresCondition: !airborne + WithIdleOverlay@ROTOR2AIR: + Offset: -597,0,341 + Sequence: rotor2 + RequiresCondition: airborne + WithIdleOverlay@ROTOR2GROUND: + Offset: -597,0,341 + Sequence: slow-rotor2 + RequiresCondition: !airborne + Cargo: + Types: Infantry + MaxWeight: 8 + PipCount: 8 + SpawnActorOnDeath: + Actor: TRAN.Husk + SelectionDecorations: + Selectable: + DecorationBounds: 40,36 + +HELI: + Inherits: ^Helicopter + Inherits@AUTOTARGET: ^AutoTargetAll + Buildable: + Queue: Aircraft + BuildAtProductionType: Helicopter + BuildPaletteOrder: 40 + Prerequisites: ~hpad, atek, ~techlevel.high + BuildDuration: 1750 + Description: Helicopter gunship armed\nwith multi-purpose missiles.\n Strong vs Buildings, Vehicles, Aircraft\n Weak vs Infantry + Valued: + Cost: 2000 + Tooltip: + Name: Longbow + Health: + HP: 120 + Armor: + Type: Light + RevealsShroud: + Range: 14c0 + Type: GroundPosition + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 12c0 + Type: GroundPosition + Armament@PRIMARY: + Weapon: HellfireAA + LocalOffset: 0,-213,-85, 0,213,-85 + PauseOnCondition: !ammo + Armament@SECONDARY: + Weapon: HellfireAG + LocalOffset: 0,213,-85, 0,-213,-85 + PauseOnCondition: !ammo + AttackHeli: + FacingTolerance: 20 + Aircraft: + RearmBuildings: hpad + LandWhenIdle: false + InitialFacing: 224 + TurnSpeed: 4 + Speed: 149 + AutoTarget: + InitialStance: HoldFire + InitialStanceAI: HoldFire + WithIdleOverlay@ROTORAIR: + Offset: 0,0,85 + Sequence: rotor + RequiresCondition: airborne + WithIdleOverlay@ROTORGROUND: + Offset: 0,0,85 + Sequence: slow-rotor + RequiresCondition: !airborne + AmmoPool: + Ammo: 8 + AmmoCondition: ammo + SelectionDecorations: + SpawnActorOnDeath: + Actor: HELI.Husk + SmokeTrailWhenDamaged: + Offset: -427,0,0 + ProducibleWithLevel: + Prerequisites: aircraft.upgraded + Selectable: + DecorationBounds: 36,28 + +HIND: + Inherits: ^Helicopter + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Aircraft + BuildAtProductionType: Helicopter + BuildPaletteOrder: 20 + Prerequisites: ~hpad, ~techlevel.medium + Description: Helicopter gunship armed\nwith dual chainguns.\n Strong vs Infantry, Light armor\n Weak vs Tanks, Aircraft + Valued: + Cost: 1350 + Tooltip: + Name: Hind + Health: + HP: 100 + Armor: + Type: Light + RevealsShroud: + Range: 12c0 + Type: GroundPosition + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 10c0 + Type: GroundPosition + Armament@PRIMARY: + Weapon: ChainGun + LocalOffset: 85,-213,-85, 85,213,-85 + MuzzleSequence: muzzle + PauseOnCondition: !ammo + Armament@SECONDARY: + Name: secondary + Weapon: ChainGun + LocalOffset: 85,213,-85, 85,-213,-85 + MuzzleSequence: muzzle + PauseOnCondition: !ammo + AttackHeli: + FacingTolerance: 20 + Aircraft: + RearmBuildings: hpad + LandWhenIdle: false + InitialFacing: 224 + TurnSpeed: 4 + Speed: 112 + AutoTarget: + InitialStance: HoldFire + InitialStanceAI: HoldFire + WithIdleOverlay@ROTORAIR: + Sequence: rotor + RequiresCondition: airborne + WithIdleOverlay@ROTORGROUND: + Sequence: slow-rotor + RequiresCondition: !airborne + AmmoPool: + Ammo: 24 + PipCount: 6 + ReloadDelay: 8 + AmmoCondition: ammo + SelectionDecorations: + WithMuzzleOverlay: + SpawnActorOnDeath: + Actor: HIND.Husk + SmokeTrailWhenDamaged: + Offset: -427,0,0 + ProducibleWithLevel: + Prerequisites: aircraft.upgraded + Selectable: + DecorationBounds: 38,32 + +U2: + Inherits: ^NeutralPlane + Health: + HP: 2000 + Tooltip: + Name: Spy Plane + Armor: + Type: Heavy + Aircraft: + CruiseAltitude: 2560 + TurnSpeed: 7 + Speed: 373 + Repulsable: False + MaximumPitch: 56 + AttackBomber: + -Selectable: + SelectionDecorations: + RenderSelectionBars: False + -Voiced: + -Targetable@AIRBORNE: + Contrail@1: + Offset: -725,683,0 + Contrail@2: + Offset: -725,-683,0 + SpawnActorOnDeath: + Actor: U2.Husk + SmokeTrailWhenDamaged: + Offset: -1c43,0,0 + Interval: 2 + RejectsOrders: + Interactable: diff --git a/mods/ura/rules/campaign-palettes.yaml b/mods/ura/rules/campaign-palettes.yaml new file mode 100644 index 0000000..c215288 --- /dev/null +++ b/mods/ura/rules/campaign-palettes.yaml @@ -0,0 +1,24 @@ +^Palettes: + -PlayerColorPalette: + -PaletteFromPlayerPaletteWithAlpha@cloak: + IndexedPlayerPalette: + BasePalette: player + BaseName: player + RemapIndex: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 + PlayerIndex: + USSR: 229, 230, 231, 232, 233, 234, 235, 8, 236, 237, 238, 239, 221, 222, 223, 223 + Ukraine: 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223 + Greece: 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175 + England: 208, 208, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 154, 155, 143 + Germany: 128, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 121, 122, 122, 123, 123 + France: 224, 224, 225, 225, 226, 184, 185, 186, 187, 188, 188, 189, 190, 190, 191, 191 + Spain: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 + Turkey: 200, 200, 201, 202, 203, 203, 204, 205, 206, 206, 207, 221, 222, 222, 223, 223 + Neutral: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143 + Creeps: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143 + GoodGuy: 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175 + BadGuy: 229, 230, 231, 232, 233, 234, 235, 8, 236, 237, 238, 239, 221, 222, 223, 223 + PaletteFromPlayerPaletteWithAlpha@Cloak: + BaseName: cloak + BasePalette: player + Alpha: 0.55 diff --git a/mods/ura/rules/campaign-rules.yaml b/mods/ura/rules/campaign-rules.yaml new file mode 100644 index 0000000..fb00990 --- /dev/null +++ b/mods/ura/rules/campaign-rules.yaml @@ -0,0 +1,46 @@ +Player: + -ConquestVictoryConditions: + MissionObjectives: + EarlyGameOver: true + Shroud: + FogCheckboxLocked: True + FogCheckboxEnabled: True + ExploredMapCheckboxLocked: True + ExploredMapCheckboxEnabled: False + PlayerResources: + DefaultCashLocked: True + DefaultCash: 0 + +World: + CrateSpawner: + CheckboxEnabled: False + CheckboxLocked: True + -SpawnMPUnits: + -MPStartLocations: + ObjectivesPanel: + PanelName: MISSION_OBJECTIVES + MapBuildRadius: + AllyBuildRadiusCheckboxLocked: True + AllyBuildRadiusCheckboxEnabled: False + BuildRadiusCheckboxLocked: True + BuildRadiusCheckboxEnabled: True + MapOptions: + TechLevelDropdownLocked: True + ShortGameCheckboxLocked: True + ShortGameCheckboxEnabled: False + +E7: + -Crushable: + +E7.noautotarget: + Inherits: E7 + -AutoTarget: + -AutoTargetPriority@DEFAULT: + -AutoTargetPriority@ATTACKANYTHING: + AttackMove: + -AssaultMoveScanCondition: + RenderSprites: + Image: E7 + +^Vehicle: + Demolishable: diff --git a/mods/ura/rules/campaign-tooltips.yaml b/mods/ura/rules/campaign-tooltips.yaml new file mode 100644 index 0000000..614f785 --- /dev/null +++ b/mods/ura/rules/campaign-tooltips.yaml @@ -0,0 +1,75 @@ +^Vehicle: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + +^Infantry: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + +^Ship: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + +^NeutralPlane: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + +^Helicopter: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + +^Building: + Tooltip: + GenericVisibility: Enemy + ShowOwnerRow: false + +^CivBuilding: + Tooltip: + ShowOwnerRow: false + +^CivField: + Tooltip: + ShowOwnerRow: false + +^TechBuilding: + Tooltip: + ShowOwnerRow: false + +^Wall: + Tooltip: + ShowOwnerRow: false + +^Husk: + Tooltip: + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + ShowOwnerRow: false + +^PlaneHusk: + Tooltip: + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + ShowOwnerRow: false + +^HelicopterHusk: + Tooltip: + GenericVisibility: Enemy, Ally, Neutral + GenericStancePrefix: false + ShowOwnerRow: false + +^Crate: + Tooltip: + ShowOwnerRow: false + +FLARE: + Tooltip: + ShowOwnerRow: false + +SPY: + DisguiseTooltip: + ShowOwnerRow: false diff --git a/mods/ura/rules/civilian.yaml b/mods/ura/rules/civilian.yaml new file mode 100644 index 0000000..49998fd --- /dev/null +++ b/mods/ura/rules/civilian.yaml @@ -0,0 +1,799 @@ +C1: + Inherits@1: ^CivInfantry + Inherits@2: ^ArmedCivilian + +C2: + Inherits: ^CivInfantry + Voiced: + VoiceSet: CivilianFemaleVoice + +C3: + Inherits: ^CivInfantry + +C4: + Inherits: ^CivInfantry + RenderSprites: + Image: C2 + Voiced: + VoiceSet: CivilianFemaleVoice + +C5: + Inherits: ^CivInfantry + RenderSprites: + Image: C1 + +C6: + Inherits: ^CivInfantry + RenderSprites: + Image: C2 + Voiced: + VoiceSet: CivilianFemaleVoice + +C7: + Inherits@1: ^CivInfantry + Inherits@2: ^ArmedCivilian + RenderSprites: + Image: C1 + +C8: + Inherits: ^CivInfantry + RenderSprites: + Image: C2 + Voiced: + VoiceSet: CivilianFemaleVoice + +C9: + Inherits: ^CivInfantry + RenderSprites: + Image: C1 + +C10: + Inherits: ^CivInfantry + RenderSprites: + Image: C2 + Voiced: + VoiceSet: CivilianFemaleVoice + +TECN: + Inherits@1: ^CivInfantry + Inherits@2: ^ArmedCivilian + Tooltip: + Name: Technician + RenderSprites: + Image: C1 + +FCOM: + Inherits: ^TechBuilding + Inherits@shape: ^2x2Shape + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, NoAutoTarget + Building: + Footprint: xx xx == + Dimensions: 2,3 + LocalCenterOffset: 0,-512,0 + Health: + HP: 800 + Armor: + Type: Wood + Tooltip: + Name: Forward Command + RevealsShroud: + Range: 5c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + WithBuildingBib: + ExternalCapturable: + CaptureCompleteTime: 30 + ExternalCapturableBar: + GivesBuildableArea: + AreaTypes: building + BaseProvider: + Range: 8c0 + EngineerRepairable: + Power: + Amount: 0 + ProvidesPrerequisite@buildingname: + GpsDot: + String: Forward + +HOSP: + Inherits: ^TechBuilding + Inherits@shape: ^2x2Shape + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, NoAutoTarget + Selectable: + Priority: 0 + Building: + Footprint: xx xx + Dimensions: 2,2 + Health: + HP: 800 + ExternalCapturable: + ExternalCapturableBar: + EngineerRepairable: + Tooltip: + Name: Hospital + RevealsShroud: + Range: 4c0 + WithBuildingBib: + HasMinibib: Yes + WithDeathAnimation: + DeathSequence: dead + UseDeathTypeSuffix: false + ProvidesPrerequisite@buildingname: + GpsDot: + String: Hospital + +V01: + Inherits: ^CivBuilding + Building: + Footprint: xx xx + Dimensions: 2,2 + Tooltip: + Name: Church + RevealsShroud: + Range: 10c0 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: -490,-384,0, 0,0,0, 0,470,0 + Type: Rectangle + TopLeft: -768, -597 + BottomRight: 896, 683 + +V02: + Inherits: ^CivBuilding + Building: + Footprint: xx xx + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: -490,-512,0, 0,0,0, 0,512,0 + Type: Rectangle + TopLeft: -1024, -512 + BottomRight: 1024, 597 + +V03: + Inherits: ^CivBuilding + Building: + Footprint: xx xx + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: -490,-512,0, 0,0,0, 421,512,0, -210,512,0 + Type: Rectangle + TopLeft: -1024, -597 + BottomRight: 1024, 597 + +V04: + Inherits: ^CivBuilding + Building: + Footprint: xx xx + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, -421,-256,0, -421,256,0 + Type: Rectangle + TopLeft: -683, -432 + BottomRight: 683, 683 + +V05: + Inherits: ^CivBuilding + Inherits@shape: ^2x1Shape + Building: + Footprint: xx + Dimensions: 2,1 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V06: + Inherits: ^CivBuilding + Inherits@shape: ^2x1Shape + Building: + Footprint: xx + Dimensions: 2,1 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V07: + Inherits: ^CivBuilding + Inherits@shape: ^2x1Shape + Building: + Footprint: xx + Dimensions: 2,1 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V08: + Inherits: ^CivBuilding + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V09: + Inherits: ^CivBuilding + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V10: + Inherits: ^CivBuilding + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V11: + Inherits: ^CivBuilding + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V12: + Inherits: ^CivBuilding + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V13: + Inherits: ^CivBuilding + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V14: + Inherits: ^CivField + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V15: + Inherits: ^CivField + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V16: + Inherits: ^CivField + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V17: + Inherits: ^CivField + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V18: + Inherits: ^CivField + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +V19: + Inherits: ^CivBuilding + EditorTilesetFilter: + ExcludeTilesets: DESERT + Tooltip: + Name: Oil Pump + -SpawnActorOnDeath@1: + -SpawnActorOnDeath@2: + -SpawnActorOnDeath@3: + SpawnActorOnDeath: + Actor: V19.Husk + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, NoAutoTarget + +V19.Husk: + Inherits: ^CivBuilding + EditorTilesetFilter: + ExcludeTilesets: DESERT + Tooltip: + Name: Husk (Oil Pump) + RenderSprites: + WithSpriteBody: + WithIdleOverlay: + StartSequence: fire-start + Sequence: fire-loop + -Selectable: + SelectionDecorations: + RenderSelectionBars: False + -Targetable: + -Demolishable: + -HitShape: + -Health: + -Explodes: + -Explodes@CIVPANIC: + Interactable: + +BARL: + Inherits: ^TechBuilding + -Selectable: + SelectionDecorations: + RenderSelectionBars: False + Health: + HP: 10 + Explodes: + Weapon: BarrelExplode + Tooltip: + Name: Explosive Barrel + ShowOwnerRow: False + Armor: + Type: None + Targetable: + TargetTypes: Ground, DemoTruck, Barrel, NoAutoTarget + -ShakeOnDeath: + -SoundOnDamageTransition: + -Demolishable: + EditorTilesetFilter: + Categories: Decoration + Interactable: + Bounds: 24,24 + +BRL3: + Inherits: ^TechBuilding + -Selectable: + SelectionDecorations: + RenderSelectionBars: False + Health: + HP: 10 + Explodes: + Weapon: BarrelExplode + Tooltip: + Name: Explosive Barrel + ShowOwnerRow: False + Armor: + Type: None + Targetable: + TargetTypes: Ground, DemoTruck, Barrel, NoAutoTarget + -ShakeOnDeath: + -SoundOnDamageTransition: + -Demolishable: + EditorTilesetFilter: + Categories: Decoration + Interactable: + Bounds: 24,24 + +AMMOBOX1: + Inherits: ^AmmoBox + +AMMOBOX2: + Inherits: ^AmmoBox + +AMMOBOX3: + Inherits: ^AmmoBox + +MISS: + Inherits: ^TechBuilding + Inherits@shape: ^3x2Shape + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, NoAutoTarget + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 840,0,0, 840,-1024,0, 420,768,0, -840,0,0, -840,-1024,0, -840,1024,0 + Selectable: + Priority: 0 + Building: + Footprint: xxx xxx === + Dimensions: 3,3 + LocalCenterOffset: 0,-512,0 + Health: + HP: 600 + RevealsShroud: + Range: 10c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 6c0 + Armor: + Type: Wood + Tooltip: + Name: Communications Center + WithBuildingBib: + ExternalCapturable: + ExternalCapturableBar: + EngineerRepairable: + WithDeathAnimation: + DeathSequence: dead + UseDeathTypeSuffix: false + ProvidesPrerequisite@buildingname: + GpsDot: + String: Communications + +BIO: + Inherits: ^TechBuilding + Inherits@shape: ^2x2Shape + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, NoAutoTarget + Building: + Footprint: xx xx + Dimensions: 2,2 + RevealsShroud: + Range: 3c0 + ExternalCapturable: + ExternalCapturableBar: + EngineerRepairable: + Tooltip: + Name: Biological Lab + WithDeathAnimation: + DeathSequence: dead + UseDeathTypeSuffix: false + ProvidesPrerequisite@buildingname: + GpsDot: + String: Biohazard + +OILB: + Inherits: ^TechBuilding + Inherits@shape: ^2x2Shape + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, NoAutoTarget + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 630,-300,0, 420,512,0, -420,-512,0, -630,300,0 + Selectable: + Priority: 0 + Building: + Footprint: xx xx + Dimensions: 2,2 + Health: + HP: 800 + RevealsShroud: + Range: 4c0 + ExternalCapturable: + ExternalCapturableBar: + EngineerRepairable: + CashTrickler: + Interval: 375 + Amount: 100 + Tooltip: + Name: Oil Derrick + Explodes: + Weapon: BarrelExplode + GpsDot: + String: Oil + GivesCashOnCapture: + Amount: 100 + +BR1: + Inherits: ^Bridge + Bridge: + Template: 235 + DamagedTemplate: 236 + DestroyedTemplate: 237 + SouthOffset: 0,2 + FreeActor: + Actor: bridgehut + SpawnOffset: 2,0 + +BR2: + Inherits: ^Bridge + Bridge: + Template: 238 + DamagedTemplate: 239 + DestroyedTemplate: 240 + NorthOffset: 3,0 + FreeActor: + Actor: bridgehut + SpawnOffset: 1,1 + +BR3: + Inherits: ^Bridge + Bridge: + Long: yes + ShorePieces: br1,br2 + Template: 241 + DamagedTemplate: 242 + DestroyedTemplate: 243 + DestroyedPlusNorthTemplate: 245 + DestroyedPlusSouthTemplate: 244 + DestroyedPlusBothTemplate: 246 + NorthOffset: 2,0 + SouthOffset: 0,1 + +BRIDGE1: + Inherits: ^Bridge + Bridge: + Template: 131 + DamagedTemplate: 378 + DestroyedTemplate: 132 + Building: + Footprint: _____ _____ _____ + Dimensions: 5,3 + FreeActor@north: + Actor: bridgehut + SpawnOffset: 2,-1 + FreeActor@south: + Actor: bridgehut + SpawnOffset: 0,1 + Interactable: + Bounds: 120,72 + +BRIDGE2: + Inherits: ^Bridge + Bridge: + Template: 133 + DamagedTemplate: 379 + DestroyedTemplate: 134 + Building: + Footprint: _____ _____ + Dimensions: 5,2 + FreeActor@north: + Actor: bridgehut + SpawnOffset: 0,-1 + FreeActor@south: + Actor: bridgehut + SpawnOffset: 2,1 + Interactable: + Bounds: 120,48 + +SBRIDGE1: + Inherits: ^Bridge + Bridge: + Template: 520 + DamagedTemplate: 521 + DestroyedTemplate: 522 + Building: + Footprint: ___ ___ + Dimensions: 3,2 + FreeActor@north: + Actor: bridgehut.small + SpawnOffset: 1,0 + FreeActor@south: + Actor: bridgehut.small + SpawnOffset: 1,1 + Interactable: + Bounds: 72,48 + +SBRIDGE2: + Inherits: ^Bridge + Bridge: + Template: 531 + DamagedTemplate: 532 + DestroyedTemplate: 533 + Building: + Footprint: __ __ __ + Dimensions: 2,3 + FreeActor@west: + Actor: bridgehut.small + SpawnOffset: 0,1 + FreeActor@east: + Actor: bridgehut.small + SpawnOffset: 1,1 + Interactable: + Bounds: 48,72 + +SBRIDGE3: + Inherits: ^Bridge + Bridge: + Template: 523 + DamagedTemplate: 524 + DestroyedTemplate: 525 + FreeActor@north: + Actor: bridgehut + SpawnOffset: 2,-1 + FreeActor@south: + Actor: bridgehut + SpawnOffset: 0,1 + +SBRIDGE4: + Inherits: ^Bridge + Bridge: + Template: 527 + DamagedTemplate: 528 + DestroyedTemplate: 529 + FreeActor@north: + Actor: bridgehut + SpawnOffset: 0,-1 + FreeActor@south: + Actor: bridgehut + SpawnOffset: 2,1 + +BRIDGEHUT: + AlwaysVisible: + Building: + Footprint: __ __ + Dimensions: 2,2 + Selectable: + Bounds: 48,48 + Priority: 2 + LegacyBridgeHut: + Targetable: + TargetTypes: BridgeHut, C4 + +BRIDGEHUT.small: + AlwaysVisible: + Building: + Footprint: _ + Dimensions: 1,1 + Selectable: + Bounds: 24,24 + Priority: 2 + LegacyBridgeHut: + Targetable: + TargetTypes: BridgeHut, C4 + +V20: + Inherits: ^DesertCivBuilding + Building: + Footprint: xx xx + Dimensions: 2,2 + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: -840,-512,0, 0,0,0, -840,512,0 + Type: Rectangle + TopLeft: -1024, -512 + BottomRight: 1024, 896 + +V21: + Inherits: ^DesertCivBuilding + Building: + Footprint: xx xx + Dimensions: 2,2 + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 840,-512,0, 420,0,0, 840,512,0 + Type: Rectangle + TopLeft: -1024, -1024 + BottomRight: 1024, 0 + HitShape@WELL: + TargetableOffsets: -770,512,0 + Type: Rectangle + TopLeft: 0, 0 + BottomRight: 1024, 598 + +V22: + Inherits: ^DesertCivBuilding + Inherits@shape: ^2x1Shape + Building: + Footprint: xx + Dimensions: 2,1 + +V23: + Inherits: ^DesertCivBuilding + +V24: + Inherits: ^DesertCivBuilding + Building: + Footprint: xx xx + Dimensions: 2,2 + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: -630,-512,0, 0,0,0, -630,256,0, 420,-512,0 + Type: Rectangle + TopLeft: -1024, -683 + BottomRight: 640, 853 + +V25: + Inherits: ^DesertCivBuilding + Building: + Footprint: xx xx + Dimensions: 2,2 + Tooltip: + Name: Church + RevealsShroud: + Range: 10c0 + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,-128,0, 420,512,0 + Type: Rectangle + TopLeft: -683, -683 + BottomRight: 1024, 512 + +V26: + Inherits: ^DesertCivBuilding + Inherits@shape: ^2x1Shape + Building: + Footprint: xx + Dimensions: 2,1 + +V27: + Inherits: ^DesertCivBuilding + +V28: + Inherits: ^DesertCivBuilding + +V29: + Inherits: ^DesertCivBuilding + +V30: + Inherits: ^DesertCivBuilding + Inherits@shape: ^2x1Shape + Building: + Footprint: xx + Dimensions: 2,1 + +V31: + Inherits: ^DesertCivBuilding + Inherits@shape: ^2x1Shape + Building: + Footprint: xx + Dimensions: 2,1 + +V32: + Inherits: ^DesertCivBuilding + Inherits@shape: ^2x1Shape + Building: + Footprint: xx + Dimensions: 2,1 + +V33: + Inherits: ^DesertCivBuilding + Inherits@shape: ^2x1Shape + Building: + Footprint: xx + Dimensions: 2,1 + +V34: + Inherits: ^DesertCivBuilding + +V35: + Inherits: ^DesertCivBuilding + +V36: + Inherits: ^DesertCivBuilding + +V37: + Inherits: ^DesertCivBuilding + Building: + Footprint: __xx_ ___xx + Dimensions: 5,2 + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 0,1024,0 + Type: Rectangle + TopLeft: -512, -597 + BottomRight: 1536, 597 + +RICE: + Inherits: ^CivField + EditorTilesetFilter: + RequireTilesets: TEMPERAT + +RUSHOUSE: + Inherits: ^CivBuilding + EditorTilesetFilter: + RequireTilesets: TEMPERAT + Building: + Footprint: x x + Dimensions: 1,2 + HitShape: + UseTargetableCellsOffsets: false + +ASIANHUT: + Inherits: ^CivBuilding + EditorTilesetFilter: + RequireTilesets: TEMPERAT + +SNOWHUT: + Inherits: ^CivBuilding + EditorTilesetFilter: + RequireTilesets: SNOW + Building: + Footprint: x x + Dimensions: 1,2 + RenderSprites: + Scale: 0.7 + HitShape: + UseTargetableCellsOffsets: false + +LHUS: + Inherits: ^CivBuilding + EditorTilesetFilter: + RequireTilesets: TEMPERAT + Selectable: + Bounds: 24,48,0,-16 + Tooltip: + Name: Lighthouse + Building: + Footprint: x + Dimensions: 1,1 + +WINDMILL: + Inherits: ^CivBuilding + EditorTilesetFilter: + RequireTilesets: TEMPERAT + Selectable: + Bounds: 24,24,0,-14 + DecorationBounds: 36,36,0,-14 + SelectionDecorations: + Tooltip: + Name: Windmill + Building: + Footprint: x + Dimensions: 1,1 diff --git a/mods/ura/rules/decoration.yaml b/mods/ura/rules/decoration.yaml new file mode 100644 index 0000000..86fa7fd --- /dev/null +++ b/mods/ura/rules/decoration.yaml @@ -0,0 +1,415 @@ +T01: + Inherits: ^Tree + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T01.Husk + +T02: + Inherits: ^Tree + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T02.Husk + +T03: + Inherits: ^Tree + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T03.Husk + +T04: + Inherits: ^Tree + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: TEMPERAT, SNOW, INTERIOR + SpawnActorOnDeath: + Actor: T04.Husk + +T05: + Inherits: ^Tree + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T05.Husk + +T06: + Inherits: ^Tree + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T06.Husk + +T07: + Inherits: ^Tree + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T07.Husk + +T08: + Inherits: ^Tree + Building: + Footprint: x_ + Dimensions: 2,1 + SpawnActorOnDeath: + Actor: T08.Husk + +T09: + Inherits: ^Tree + EditorTilesetFilter: + ExcludeTilesets: TEMPERAT, SNOW, INTERIOR + SpawnActorOnDeath: + Actor: T09.Husk + +T10: + Inherits: ^Tree + Building: + Footprint: __ xx + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T10.Husk + +T11: + Inherits: ^Tree + Building: + Footprint: __ xx + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T11.Husk + +T12: + Inherits: ^Tree + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T12.Husk + +T13: + Inherits: ^Tree + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T13.Husk + +T14: + Inherits: ^Tree + Building: + Footprint: ___ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T14.Husk + +T15: + Inherits: ^Tree + Building: + Footprint: ___ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T15.Husk + +T16: + Inherits: ^Tree + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T16.Husk + +T17: + Inherits: ^Tree + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: T17.Husk + +TC01: + Inherits: ^Tree + Building: + Footprint: ___ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: INTERIOR + SpawnActorOnDeath: + Actor: TC01.Husk + +TC02: + Inherits: ^Tree + Building: + Footprint: _x_ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: TC02.Husk + +TC03: + Inherits: ^Tree + Building: + Footprint: xx_ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: TC03.Husk + +TC04: + Inherits: ^Tree + Building: + Footprint: ____ xxx_ x___ + Dimensions: 4,3 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: TC04.Husk + +TC05: + Inherits: ^Tree + Building: + Footprint: __x_ xxx_ _xx_ + Dimensions: 4,3 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + SpawnActorOnDeath: + Actor: TC05.Husk + +BOXES01: + Inherits: ^Tree + Tooltip: + Name: Boxes + EditorTilesetFilter: + ExcludeTilesets: DESERT + Categories: Decoration + +BOXES02: + Inherits: ^Tree + Tooltip: + Name: Boxes + EditorTilesetFilter: + ExcludeTilesets: DESERT + Categories: Decoration + +BOXES03: + Inherits: ^Tree + Tooltip: + Name: Boxes + EditorTilesetFilter: + ExcludeTilesets: DESERT + Categories: Decoration + +BOXES04: + Inherits: ^Tree + Tooltip: + Name: Boxes + EditorTilesetFilter: + ExcludeTilesets: DESERT + Categories: Decoration + +BOXES05: + Inherits: ^Tree + Tooltip: + Name: Boxes + EditorTilesetFilter: + ExcludeTilesets: DESERT + Categories: Decoration + +BOXES06: + Inherits: ^Tree + Tooltip: + Name: Boxes + EditorTilesetFilter: + ExcludeTilesets: DESERT + Categories: Decoration + +BOXES07: + Inherits: ^Tree + Tooltip: + Name: Boxes + EditorTilesetFilter: + ExcludeTilesets: DESERT + Categories: Decoration + +BOXES08: + Inherits: ^Tree + Tooltip: + Name: Boxes + EditorTilesetFilter: + ExcludeTilesets: DESERT + Categories: Decoration + +BOXES09: + Inherits: ^Tree + Tooltip: + Name: Boxes + EditorTilesetFilter: + ExcludeTilesets: DESERT + Categories: Decoration + +ICE01: + Inherits: ^Tree + Building: + Footprint: xx xx + Dimensions: 2,2 + Tooltip: + Name: Ice Floe + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + Categories: Decoration + +ICE02: + Inherits: ^Tree + Building: + Footprint: x x + Dimensions: 1,2 + Tooltip: + Name: Ice Floe + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + Categories: Decoration + +ICE03: + Inherits: ^Tree + Building: + Footprint: xx + Dimensions: 2,1 + Tooltip: + Name: Ice Floe + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + Categories: Decoration + +ICE04: + Inherits: ^Tree + Tooltip: + Name: Ice Floe + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + Categories: Decoration + +ICE05: + Inherits: ^Tree + Tooltip: + Name: Ice Floe + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + Categories: Decoration + +ROCK1: + Inherits: ^Rock + Building: + Footprint: ___ xx_ + Dimensions: 3,2 + +ROCK2: + Inherits: ^Rock + Building: + Footprint: xx_ + Dimensions: 3,1 + +ROCK3: + Inherits: ^Rock + Building: + Footprint: ___ xx_ + Dimensions: 3,2 + +ROCK4: + Inherits: ^Rock + Building: + Footprint: x_ + Dimensions: 2,1 + +ROCK5: + Inherits: ^Rock + Building: + Footprint: x_ + Dimensions: 2,1 + +ROCK6: + Inherits: ^Rock + Building: + Footprint: ___ xxx + Dimensions: 3,2 + +ROCK7: + Inherits: ^Rock + Building: + Footprint: xxxx_ + Dimensions: 5,1 + +UTILPOL1: + Inherits: ^Tree + Tooltip: + Name: Utility Pole + EditorTilesetFilter: + ExcludeTilesets: DESERT + Categories: Decoration + +UTILPOL2: + Inherits: ^Tree + Tooltip: + Name: Utility Pole + EditorTilesetFilter: + ExcludeTilesets: DESERT + Categories: Decoration + +TANKTRAP1: + Inherits: ^Rock + Building: + Footprint: x + Dimensions: 1,1 + Tooltip: + Name: Tank Trap + EditorTilesetFilter: + ExcludeTilesets: DESERT + RequireTilesets: TEMPERAT, SNOW, INTERIOR + +TANKTRAP2: + Inherits: ^Rock + Building: + Footprint: x + Dimensions: 1,1 + Tooltip: + Name: Tank Trap + EditorTilesetFilter: + ExcludeTilesets: DESERT + RequireTilesets: TEMPERAT, SNOW, INTERIOR diff --git a/mods/ura/rules/defaults.yaml b/mods/ura/rules/defaults.yaml new file mode 100644 index 0000000..6e7b20a --- /dev/null +++ b/mods/ura/rules/defaults.yaml @@ -0,0 +1,1127 @@ +^ExistsInWorld: + AppearsOnRadar: + CombatDebugOverlay: + GivesExperience: + PlayerExperienceModifier: 1 + ScriptTriggers: + ConditionManager: + RenderDebugState: + +^SpriteActor: + BodyOrientation: + QuantizeFacingsFromSequence: + RenderSprites: + +^1x1Shape: + HitShape: + UseTargetableCellsOffsets: true + Type: Rectangle + TopLeft: -512, -512 + BottomRight: 512, 512 + +^2x1Shape: + HitShape: + UseTargetableCellsOffsets: true + Type: Rectangle + TopLeft: -1024, -512 + BottomRight: 1024, 512 + +^2x2Shape: + HitShape: + UseTargetableCellsOffsets: true + Type: Rectangle + TopLeft: -1024, -1024 + BottomRight: 1024, 1024 + +^3x2Shape: + HitShape: + UseTargetableCellsOffsets: true + Type: Rectangle + TopLeft: -1536, -1024 + BottomRight: 1536, 1024 + +^GainsExperience: + GainsExperience: + Conditions: + 200: rank-veteran + 400: rank-veteran + 800: rank-veteran + 1600: rank-veteran + GrantCondition@RANK-ELITE: + RequiresCondition: rank-veteran >= 4 + Condition: rank-elite + DamageMultiplier@RANK-1: + RequiresCondition: rank-veteran == 1 + Modifier: 95 + DamageMultiplier@RANK-2: + RequiresCondition: rank-veteran == 2 + Modifier: 90 + DamageMultiplier@RANK-3: + RequiresCondition: rank-veteran == 3 + Modifier: 85 + DamageMultiplier@RANK-ELITE: + RequiresCondition: rank-elite + Modifier: 75 + FirepowerMultiplier@RANK-1: + RequiresCondition: rank-veteran == 1 + Modifier: 105 + FirepowerMultiplier@RANK-2: + RequiresCondition: rank-veteran == 2 + Modifier: 110 + FirepowerMultiplier@RANK-3: + RequiresCondition: rank-veteran == 3 + Modifier: 120 + FirepowerMultiplier@RANK-ELITE: + RequiresCondition: rank-elite + Modifier: 130 + SpeedMultiplier@RANK-1: + RequiresCondition: rank-veteran == 1 + Modifier: 105 + SpeedMultiplier@RANK-2: + RequiresCondition: rank-veteran == 2 + Modifier: 110 + SpeedMultiplier@RANK-3: + RequiresCondition: rank-veteran == 3 + Modifier: 120 + SpeedMultiplier@RANK-ELITE: + RequiresCondition: rank-elite + Modifier: 140 + ReloadDelayMultiplier@RANK-1: + RequiresCondition: rank-veteran == 1 + Modifier: 95 + ReloadDelayMultiplier@RANK-2: + RequiresCondition: rank-veteran == 2 + Modifier: 90 + ReloadDelayMultiplier@RANK-3: + RequiresCondition: rank-veteran == 3 + Modifier: 85 + ReloadDelayMultiplier@RANK-ELITE: + RequiresCondition: rank-elite + Modifier: 75 + InaccuracyMultiplier@RANK-1: + RequiresCondition: rank-veteran == 1 + Modifier: 90 + InaccuracyMultiplier@RANK-2: + RequiresCondition: rank-veteran == 2 + Modifier: 80 + InaccuracyMultiplier@RANK-3: + RequiresCondition: rank-veteran == 3 + Modifier: 70 + InaccuracyMultiplier@RANK-ELITE: + RequiresCondition: rank-elite + Modifier: 50 + SelfHealing@ELITE: + Step: 2 + Delay: 100 + HealIfBelow: 100 + DamageCooldown: 125 + RequiresCondition: rank-elite + WithDecoration@RANK-1: + Image: rank + Sequence: rank-veteran-1 + Palette: effect + ReferencePoint: Bottom, Right + RequiresCondition: rank-veteran == 1 + ZOffset: 256 + WithDecoration@RANK-2: + Image: rank + Sequence: rank-veteran-2 + Palette: effect + ReferencePoint: Bottom, Right + RequiresCondition: rank-veteran == 2 + ZOffset: 256 + WithDecoration@RANK-3: + Image: rank + Sequence: rank-veteran-3 + Palette: effect + ReferencePoint: Bottom, Right + RequiresCondition: rank-veteran == 3 + ZOffset: 256 + WithDecoration@RANK-ELITE: + Image: rank + Sequence: rank-elite + Palette: effect + ReferencePoint: Bottom, Right + RequiresCondition: rank-elite + ZOffset: 256 + +^IronCurtainable: + WithColoredOverlay@IRONCURTAIN: + RequiresCondition: invulnerability + DamageMultiplier@IRONCURTAIN: + RequiresCondition: invulnerability + Modifier: 0 + TimedConditionBar: + Condition: invulnerability + ExternalCondition@INVULNERABILITY: + Condition: invulnerability + +^AutoTargetGround: + AutoTarget: + AutoTargetPriority@DEFAULT: + ValidTargets: Infantry, Vehicle, Water, Underwater, Structure, Defense + InvalidTargets: NoAutoTarget + +^AutoTargetGroundAssaultMove: + AutoTarget: + AttackAnythingCondition: stance-attackanything + AutoTargetPriority@DEFAULT: + RequiresCondition: !stance-attackanything && !assault-move + ValidTargets: Infantry, Vehicle, Water, Underwater, Defense + InvalidTargets: NoAutoTarget, WaterStructure + AutoTargetPriority@ATTACKANYTHING: + RequiresCondition: stance-attackanything || assault-move + ValidTargets: Infantry, Vehicle, Water, Underwater, Structure, Defense + AttackMove: + AssaultMoveScanCondition: assault-move + +^AutoTargetAir: + AutoTarget: + AutoTargetPriority@DEFAULT: + ValidTargets: Air + InvalidTargets: NoAutoTarget + +^AutoTargetAll: + AutoTarget: + AutoTargetPriority@DEFAULT: + ValidTargets: Infantry, Vehicle, Water, Underwater, Air, Structure, Defense + InvalidTargets: NoAutoTarget + +^AutoTargetAllAssaultMove: + AutoTarget: + AttackAnythingCondition: stance-attackanything + AutoTargetPriority@DEFAULT: + RequiresCondition: !stance-attackanything && !assault-move + ValidTargets: Infantry, Vehicle, Water, Underwater, Air, Defense + InvalidTargets: NoAutoTarget, WaterStructure + AutoTargetPriority@ATTACKANYTHING: + RequiresCondition: stance-attackanything || assault-move + ValidTargets: Infantry, Vehicle, Water, Underwater, Air, Structure, Defense + InvalidTargets: NoAutoTarget + AttackMove: + AssaultMoveScanCondition: assault-move + +^GlobalBounty: + GrantConditionOnPrerequisite@GLOBALBOUNTY: + Condition: global-bounty + Prerequisites: global-bounty + GivesBounty: + RequiresCondition: global-bounty + +^Vehicle: + Inherits@1: ^ExistsInWorld + Inherits@2: ^IronCurtainable + Inherits@3: ^SpriteActor + Inherits@bounty: ^GlobalBounty + Huntable: + DrawLineToTarget: + UpdatesPlayerStatistics: + Mobile: + Crushes: mine, crate + TerrainSpeeds: + Clear: 80 + Rough: 40 + Road: 100 + Bridge: 100 + Ore: 70 + Gems: 70 + Beach: 40 + TurnSpeed: 5 + SelectionDecorations: + WithSpriteControlGroupDecoration: + Selectable: + Bounds: 24, 24 + Targetable: + TargetTypes: Ground, Repair, Vehicle + RequiresCondition: !parachute + Repairable: + Chronoshiftable: + Passenger: + CargoType: Vehicle + Weight: 3 + AttackMove: + HiddenUnderFog: + ActorLostNotification: + ProximityCaptor: + Types: Vehicle + GpsDot: + String: Vehicle + WithDamageOverlay: + Guard: + Guardable: + Tooltip: + GenericName: Vehicle + Capturable: + Types: vehicle + CaptureThreshold: 100 + CancelActivity: True + CaptureNotification: + Notification: UnitStolen + MustBeDestroyed: + Voiced: + VoiceSet: VehicleVoice + Parachutable: + FallRate: 26 + KilledOnImpassableTerrain: true + GroundCorpseSequence: + GroundCorpsePalette: + WaterCorpseSequence: + WaterCorpsePalette: + ParachutingCondition: parachute + Explodes: + Weapon: UnitExplodeSmall + EmptyWeapon: UnitExplodeSmall + WithFacingSpriteBody: + WithParachute: + ShadowImage: parach-shadow + ShadowSequence: idle + Image: parach + Sequence: idle + OpeningSequence: open + Offset: 0,0,200 + RequiresCondition: parachute + BodyOrientation: + UseClassicFacingFudge: True + HitShape: + EditorTilesetFilter: + Categories: Vehicle + +^TrackedVehicle: + Inherits: ^Vehicle + Mobile: + Crushes: wall, mine, crate + TerrainSpeeds: + Clear: 80 + Rough: 70 + Road: 100 + Bridge: 100 + Ore: 70 + Gems: 70 + Beach: 70 + +^Infantry: + Inherits@1: ^ExistsInWorld + Inherits@2: ^GainsExperience + Inherits@3: ^SpriteActor + Inherits@bounty: ^GlobalBounty + Huntable: + DrawLineToTarget: + Health: + HP: 25 + Armor: + Type: None + RevealsShroud: + Range: 5c0 + Mobile: + Speed: 56 + Crushes: mine, crate + SharesCell: true + TerrainSpeeds: + Clear: 90 + Rough: 80 + Road: 100 + Bridge: 100 + Ore: 80 + Gems: 80 + Beach: 80 + SelectionDecorations: + WithSpriteControlGroupDecoration: + Selectable: + Bounds: 18,20,0,-6 + DecorationBounds: 12,18,0,-8 + Targetable: + TargetTypes: Ground, Infantry, Disguise + RequiresCondition: !parachute + QuantizeFacingsFromSequence: + Sequence: stand + WithInfantryBody: + WithDeathAnimation: + DeathTypes: + DefaultDeath: 1 + BulletDeath: 2 + SmallExplosionDeath: 3 + ExplosionDeath: 4 + FireDeath: 5 + ElectricityDeath: 6 + CrushedSequence: die-crushed + AttackMove: + Passenger: + CargoType: Infantry + HiddenUnderFog: + ActorLostNotification: + GpsDot: + String: Infantry + Crushable: + CrushSound: squishy2.aud + Guard: + Guardable: + Tooltip: + GenericName: Soldier + SelfHealing@HOSPITAL: + Step: 5 + Delay: 100 + HealIfBelow: 100 + DamageCooldown: 125 + RequiresCondition: hospitalheal + GrantConditionOnPrerequisite: + Condition: hospitalheal + Prerequisites: hosp + DeathSounds@NORMAL: + DeathTypes: DefaultDeath, BulletDeath, SmallExplosionDeath, ExplosionDeath + DeathSounds@BURNED: + Voice: Burned + DeathTypes: FireDeath + DeathSounds@ZAPPED: + Voice: Zapped + DeathTypes: ElectricityDeath + Parachutable: + FallRate: 26 + KilledOnImpassableTerrain: true + GroundImpactSound: squishy2.aud + WaterImpactSound: splash9.aud + WaterCorpseSequence: small_splash + ParachutingCondition: parachute + Cloneable: + Types: Infantry + Voiced: + VoiceSet: GenericVoice + WithParachute: + ShadowImage: parach-shadow + ShadowSequence: idle + Image: parach + Sequence: idle + OpeningSequence: open + Offset: 0,0,427 + RequiresCondition: parachute + HitShape: + Type: Circle + Radius: 128 + EditorTilesetFilter: + Categories: Infantry + +^Soldier: + Inherits: ^Infantry + UpdatesPlayerStatistics: + MustBeDestroyed: + ProximityCaptor: + Types: Infantry + TakeCover: + DamageModifiers: + Prone50Percent: 50 + DamageTriggers: TriggerProne + WithInfantryBody: + IdleSequences: idle1,idle2 + StandSequences: stand,stand2 + DetectCloaked: + CloakTypes: Hijacker + +^CivInfantry: + Inherits: ^Infantry + Selectable: + Class: CivInfantry + Valued: + Cost: 10 + Tooltip: + Name: Civilian + GenericVisibility: None + RevealsShroud: + Range: 3c0 + ProximityCaptor: + Types: CivilianInfantry + ScaredyCat: + Voiced: + VoiceSet: CivilianMaleVoice + Wanders: + MinMoveDelay: 150 + MaxMoveDelay: 750 + EditorTilesetFilter: + Categories: Civilian infantry + +^ArmedCivilian: + Inherits@AUTOTARGET: ^AutoTargetGroundAssaultMove + Armament: + Weapon: Pistol + AttackFrontal: + WithInfantryBody: + DefaultAttackSequence: shoot + +^Ship: + Inherits@1: ^ExistsInWorld + Inherits@2: ^GainsExperience + Inherits@3: ^IronCurtainable + Inherits@4: ^SpriteActor + Inherits@bounty: ^GlobalBounty + Huntable: + DrawLineToTarget: + UpdatesPlayerStatistics: + Mobile: + Crushes: crate + TerrainSpeeds: + Water: 100 + SelectionDecorations: + WithSpriteControlGroupDecoration: + Selectable: + Bounds: 24,24 + Targetable: + TargetTypes: Ground, Water, Ship, Repair + HiddenUnderFog: + AttackMove: + ActorLostNotification: + Notification: NavalUnitLost + ProximityCaptor: + Types: Ship + Chronoshiftable: + RepairableNear: + GpsDot: + String: Ship + WithDamageOverlay: + Explodes: + Weapon: UnitExplodeShip + EmptyWeapon: UnitExplodeShip + Guard: + Guardable: + Tooltip: + GenericName: Ship + MustBeDestroyed: + EditorTilesetFilter: + ExcludeTilesets: INTERIOR + Categories: Naval + Voiced: + VoiceSet: VehicleVoice + WithFacingSpriteBody: + HitShape: + +^NeutralPlane: + Inherits@1: ^ExistsInWorld + Inherits@3: ^IronCurtainable + Inherits@4: ^SpriteActor + Inherits@bounty: ^GlobalBounty + Huntable: + DrawLineToTarget: + UpdatesPlayerStatistics: + AppearsOnRadar: + UseLocation: true + SelectionDecorations: + WithSpriteControlGroupDecoration: + Selectable: + Bounds: 24,24 + Aircraft: + RepairBuildings: fix + AirborneCondition: airborne + Targetable@GROUND: + TargetTypes: Ground, Repair, Vehicle + RequiresCondition: !airborne + Targetable@AIRBORNE: + TargetTypes: Air + RequiresCondition: airborne + HiddenUnderFog: + Type: GroundPosition + AttackMove: + Guard: + Guardable: + ActorLostNotification: + Notification: AirUnitLost + ProximityCaptor: + Types: Plane + EjectOnDeath: + PilotActor: E1 + SuccessRate: 50 + EjectOnGround: false + EjectInAir: true + AllowUnsuitableCell: true + GpsDot: + String: Plane + Tooltip: + GenericName: Plane + WithShadow: + Offset: 43, 128, 0 + ZOffset: -129 + WithFacingSpriteBody: + MustBeDestroyed: + Voiced: + VoiceSet: GenericVoice + HitShape: + EditorTilesetFilter: + Categories: Aircraft + SpawnActorOnDeath: + RequiresCondition: airborne + OwnerType: InternalName + EffectiveOwnerFromOwner: true + Explodes: + Weapon: UnitExplode + RequiresCondition: !airborne + +^Plane: + Inherits: ^NeutralPlane + Inherits@2: ^GainsExperience + +^Helicopter: + Inherits: ^Plane + Tooltip: + GenericName: Helicopter + Aircraft: + CanHover: True + CruisingCondition: cruising + WaitDistanceFromResupplyBase: 4c0 + TakeOffOnResupply: true + VTOL: true + GpsDot: + String: Helicopter + Hovers@CRUISING: + RequiresCondition: cruising + BodyOrientation: + UseClassicFacingFudge: True + +^BasicBuilding: + Inherits@1: ^ExistsInWorld + Inherits@2: ^IronCurtainable + Inherits@3: ^SpriteActor + Inherits@shape: ^1x1Shape + Inherits@bounty: ^GlobalBounty + SelectionDecorations: + WithSpriteControlGroupDecoration: + Selectable: + Priority: 3 + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure + Building: + Dimensions: 1,1 + Footprint: x + TerrainTypes: Clear,Road + RequiresBaseProvider: True + RequiresBuildableArea: + AreaTypes: building + SoundOnDamageTransition: + DamagedSounds: kaboom1.aud + DestroyedSounds: kaboom22.aud + WithSpriteBody: + Explodes: + Type: Footprint + Weapon: BuildingExplode + EmptyWeapon: BuildingExplode + CaptureNotification: + ShakeOnDeath: + ProximityCaptor: + Types: Building + Guardable: + Range: 3c0 + FrozenUnderFog: + FrozenUnderFogUpdatedByGps: + Tooltip: + GenericName: Structure + Demolishable: + EditorTilesetFilter: + Categories: Building + CommandBarBlacklist: + +^Building: + Inherits: ^BasicBuilding + Huntable: + UpdatesPlayerStatistics: + GivesBuildableArea: + AreaTypes: building + RepairableBuilding: + RepairStep: 700 + PlayerExperience: 25 + EngineerRepairable: + AcceptsDeliveredCash: + WithMakeAnimation: + ExternalCapturable: + ExternalCapturableBar: + EmitInfantryOnSell: + ActorTypes: e1,e1,e1,tecn,tecn + MustBeDestroyed: + RequiredForShortGame: true + GpsDot: + String: Structure + Sellable: + SellSounds: cashturn.aud + +^ScienceBuilding: + Inherits: ^Building + EmitInfantryOnSell: + ActorTypes: e1,e1,e1,e1,tecn,tecn,tecn,tecn,tecn,tecn,tecn,tecn,tecn,tecn,e6,e6,e6,e6,e6,chan,chan,chan,chan + +^Defense: + Inherits: ^Building + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, Defense + MustBeDestroyed: + RequiredForShortGame: false + -GivesBuildableArea: + -AcceptsDeliveredCash: + DrawLineToTarget: + RenderRangeCircle: + Explodes: + Weapon: SmallBuildingExplode + EmptyWeapon: SmallBuildingExplode + EditorTilesetFilter: + Categories: Defense + -CommandBarBlacklist: + +^Wall: + Inherits@1: ^ExistsInWorld + Inherits@2: ^SpriteActor + Inherits@shape: ^1x1Shape + Interactable: + Building: + Dimensions: 1,1 + Footprint: x + BuildSounds: placbldg.aud + TerrainTypes: Clear,Road + RequiresBuildableArea: + AreaTypes: building + Adjacent: 7 + SoundOnDamageTransition: + DamagedSounds: sandbag2.aud + DestroyedSounds: sandbag2.aud + Crushable: + CrushClasses: wall + LineBuild: + Range: 8 + NodeTypes: wall + LineBuildNode: + Types: wall + Targetable: + TargetTypes: Ground, DetonateAttack, Wall, NoAutoTarget + -GivesExperience: + RenderSprites: + Palette: effect + WithWallSpriteBody: + Sellable: + SellSounds: cashturn.aud + Guardable: + FrozenUnderFog: + FrozenUnderFogUpdatedByGps: + Health: + HP: 100 + EditorTilesetFilter: + Categories: Wall + +^Gate: + Inherits: ^BasicBuilding + Valued: + Cost: 250 + Health: + HP: 350 + Armor: + Type: Heavy + LineBuildNode: + Types: concrete, gate + -WithSpriteBody: + WithGateSpriteBody: + Tooltip: + Name: Gate + Building: + BuildSounds: place2.aud + TerrainTypes: Clear, Road + RequiresBuildableArea: + AreaTypes: building + Adjacent: 4 + EditorTilesetFilter: + Categories: Wall + Gate: + OpeningSound: cashturn.aud + ClosingSound: cashturn.aud + BlocksProjectilesHeight: 0 + +^TechBuilding: + Inherits: ^BasicBuilding + Huntable: + Health: + HP: 400 + Armor: + Type: Wood + Tooltip: + Name: Civilian Building + GenericVisibility: None + FrozenUnderFog: + EditorTilesetFilter: + Categories: Tech building + +^FakeBuilding: + Inherits: ^Building + -GivesBuildableArea: + Health: + HP: 100 + Explodes: + Weapon: Demolish + DamageThreshold: 75 + RevealsShroud: + Range: 4c0 + WithDecoration@fake: + RequiresSelection: true + Image: pips + Sequence: tag-fake + ReferencePoint: Top + ZOffset: 256 + -EmitInfantryOnSell: + -MustBeDestroyed: + EditorTilesetFilter: + Categories: Fake + +^InfiltratableFake: + Targetable: + TargetTypes: Ground, Structure, C4, DetonateAttack, SpyInfiltrate + InfiltrateForDecoration: + Types: SpyInfiltrate + RequiresSelection: true + Image: pips + Sequence: tag-fake + ReferencePoint: Top + ZOffset: 256 + +^AmmoBox: + Inherits: ^TechBuilding + -Selectable: + SelectionDecorations: + RenderSelectionBars: False + Health: + HP: 10 + Explodes: + Weapon: UnitExplode + Tooltip: + Name: Ammo Box + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, NoAutoTarget + Armor: + Type: Light + EditorTilesetFilter: + Categories: Decoration + Interactable: + Bounds: 24,24 + +^CivBuilding: + Inherits: ^TechBuilding + RenderSprites: + Palette: terrain + EditorTilesetFilter: + ExcludeTilesets: INTERIOR + Categories: Civilian building + SpawnActorOnDeath@1: + Actor: c1 + Probability: 40 + SpawnActorOnDeath@2: + Actor: c4 + Probability: 20 + SpawnActorOnDeath@3: + Actor: c3 + Probability: 15 + Explodes: + Weapon: SmallBuildingExplode + Explodes@CIVPANIC: + Weapon: CivPanicExplosion + +^CivField: + Inherits: ^CivBuilding + -HitShape: + -Health: + -Explodes: + -Explodes@CIVPANIC: + -Selectable: + -SelectionDecorations: + Tooltip: + Name: Field + -Targetable: + -Demolishable: + EditorTilesetFilter: + ExcludeTilesets: INTERIOR + Interactable: + +^Tree: + Inherits@1: ^SpriteActor + Inherits@shape: ^1x1Shape + Interactable: + Tooltip: + Name: Tree + ShowOwnerRow: false + RenderSprites: + Palette: terrain + WithSpriteBody: + Building: + Footprint: x + Dimensions: 1,1 + AppearsOnRadar: + RadarColorFromTerrain: + Terrain: Tree + Health: + HP: 500 + Armor: + Type: Wood + Targetable: + TargetTypes: Trees + WithDamageOverlay@SmallBurn: + DamageType: Incendiary + Image: burn-s + MinimumDamageState: Light + MaximumDamageState: Medium + WithDamageOverlay@MediumBurn: + DamageType: Incendiary + Image: burn-m + MinimumDamageState: Medium + MaximumDamageState: Heavy + WithDamageOverlay@LargeBurn: + DamageType: Incendiary + Image: burn-l + MinimumDamageState: Heavy + MaximumDamageState: Dead + HiddenUnderShroud: + ScriptTriggers: + EditorTilesetFilter: + ExcludeTilesets: INTERIOR + Categories: Tree + +^TreeHusk: + Inherits@1: ^SpriteActor + Interactable: + RenderSprites: + Palette: terrain + AppearsOnRadar: + RadarColorFromTerrain: + Terrain: Tree + Building: + Footprint: x + Dimensions: 1,1 + WithSpriteBody: + Tooltip: + Name: Tree (Burnt) + ShowOwnerRow: false + FrozenUnderFog: + ScriptTriggers: + EditorTilesetFilter: + Categories: Tree + +^BasicHusk: + Inherits@1: ^SpriteActor + Interactable: + Health: + HP: 280 + Armor: + Type: Heavy + HiddenUnderFog: + Type: CenterPosition + ScriptTriggers: + WithFacingSpriteBody: + HitShape: + EditorTilesetFilter: + Categories: Husk + +^Husk: + Inherits: ^BasicHusk + Husk: + AllowedTerrain: Clear, Rough, Road, Ore, Gems, Beach + Burns: + Damage: 2 + Capturable: + Types: husk + CaptureThreshold: 100 + ValidStances: Enemy, Neutral, Ally + TransformOnCapture: + ForceHealthPercentage: 25 + WithColoredOverlay@IDISABLE: + Palette: disabled + Targetable: + TargetTypes: Ground, Husk, NoAutoTarget + RequiresForceFire: true + Chronoshiftable: + Tooltip: + GenericName: Destroyed Vehicle + BodyOrientation: + UseClassicFacingFudge: True + +^PlaneHusk: + Inherits: ^BasicHusk + WithShadow: + Offset: 43, 128, 0 + ZOffset: -129 + Tooltip: + GenericName: Destroyed Plane + Aircraft: + FallsToEarth: + Spins: False + Moves: True + Velocity: 86 + Explosion: UnitExplodePlane + EditorTilesetFilter: + Categories: Husk + RevealOnDeath: + Duration: 80 + Radius: 4c0 + +^HelicopterHusk: + Inherits: ^BasicHusk + WithShadow: + Offset: 43, 128, 0 + ZOffset: -129 + Tooltip: + GenericName: Destroyed Helicopter + Aircraft: + CanHover: True + VTOL: true + FallsToEarth: + Explosion: UnitExplodeHeli + BodyOrientation: + UseClassicFacingFudge: True + RevealOnDeath: + Duration: 80 + Radius: 4c0 + +^Bridge: + Inherits@shape: ^1x1Shape + AlwaysVisible: + Tooltip: + Name: Bridge + ShowOwnerRow: false + Targetable: + TargetTypes: Ground, Water, Bridge + RequiresForceFire: true + Building: + Footprint: ____ ____ + Dimensions: 4,2 + Health: + HP: 1000 + Armor: + Type: Concrete + ScriptTriggers: + BodyOrientation: + QuantizedFacings: 1 + Interactable: + Bounds: 96,48 + +^Rock: + Inherits@1: ^SpriteActor + Interactable: + Tooltip: + Name: Rock + ShowOwnerRow: false + RenderSprites: + Palette: terrain + WithSpriteBody: + Building: + Footprint: __ x_ + Dimensions: 2,2 + AppearsOnRadar: + RadarColorFromTerrain: + Terrain: Tree + HiddenUnderShroud: + ScriptTriggers: + EditorTilesetFilter: + RequireTilesets: DESERT + Categories: Decoration + +^DesertCivBuilding: + Inherits: ^CivBuilding + RenderSprites: + Palette: terrain + EditorTilesetFilter: + RequireTilesets: DESERT + +^Crate: + Inherits@1: ^SpriteActor + Interactable: + HiddenUnderFog: + Tooltip: + Name: Crate + GenericName: Crate + ShowOwnerRow: false + Crate: + Lifetime: 180 + TerrainTypes: Clear, Rough, Road, Ore, Beach + RenderSprites: + Palette: effect + Image: scrate + WithCrateBody: + XmasImages: xcratea, xcrateb, xcratec, xcrated + LandSequence: land + WaterSequence: water + Parachutable: + FallRate: 26 + KilledOnImpassableTerrain: false + ParachutingCondition: parachute + Passenger: + WithParachute: + Image: parach + Sequence: idle + OpeningSequence: open + ShadowImage: parach-shadow + ShadowSequence: idle + RequiresCondition: parachute + ConditionManager: + EditorTilesetFilter: + Categories: System + +^Mine: + Inherits: ^SpriteActor + Interactable: + WithSpriteBody: + HiddenUnderFog: + Mine: + CrushClasses: mine + DetonateClasses: mine + AvoidFriendly: false + BlockFriendly: false + Health: + HP: 100 + NotifyAppliedDamage: false + Armor: + Type: Light + Cloak: + CloakSound: + UncloakSound: + Palette: + CloakTypes: Mine + InitialDelay: 0 + Tooltip: + Name: Mine + Targetable: + TargetTypes: Ground, Defense + Immobile: + OccupiesSpace: true + HitShape: + EditorTilesetFilter: + Categories: System + +^DisableOnLowPower: + WithColoredOverlay@IDISABLE: + RequiresCondition: disabled + Palette: disabled + GrantConditionOnPowerState@LOWPOWER: + Condition: lowpower + ValidPowerStates: Low, Critical + GrantCondition@IDISABLE: + RequiresCondition: lowpower + Condition: disabled + +^DisableOnLowPowerOrPowerDown: + Inherits: ^DisableOnLowPower + GrantCondition@IDISABLE: + RequiresCondition: lowpower || powerdown + Condition: disabled + ToggleConditionOnOrder: + DisabledSound: EnablePower + EnabledSound: DisablePower + Condition: powerdown + OrderName: PowerDown + WithDecoration@POWERDOWN: + Image: poweroff + Sequence: offline + Palette: chrome + RequiresCondition: powerdown + ReferencePoint: Center + PowerMultiplier@POWERDOWN: + RequiresCondition: powerdown + Modifier: 0 + +^DisabledByPowerOutage: + WithColoredOverlay@IDISABLE: + RequiresCondition: disabled + Palette: disabled + GrantCondition@IDISABLE: + RequiresCondition: power-outage + Condition: disabled + AffectedByPowerOutage: + Condition: power-outage + InfiltrateForPowerOutage: + Types: SpyInfiltrate + Power: + RequiresCondition: !disabled diff --git a/mods/ura/rules/disable-player-experience.yaml b/mods/ura/rules/disable-player-experience.yaml new file mode 100644 index 0000000..c4b16ce --- /dev/null +++ b/mods/ura/rules/disable-player-experience.yaml @@ -0,0 +1,43 @@ +^ExistsInWorld: + GivesExperience: + PlayerExperienceModifier: 0 + +^Building: + RepairableBuilding: + PlayerExperience: 0 + +E6: + Captures: + PlayerExperience: 0 + +SPY: + Infiltrates: + PlayerExperience: 0 + +MECH: + Captures: + PlayerExperience: 0 + +THF: + Infiltrates: + PlayerExperience: 0 + +HIJACKER: + Captures: + PlayerExperience: 0 + +SPEN: + RepairsUnits: + PlayerExperience: 0 + +SYRD: + RepairsUnits: + PlayerExperience: 0 + +FIX: + RepairsUnits: + PlayerExperience: 0 + +TRUK: + DeliversCash: + PlayerExperience: 0 diff --git a/mods/ura/rules/fakes.yaml b/mods/ura/rules/fakes.yaml new file mode 100644 index 0000000..79ef389 --- /dev/null +++ b/mods/ura/rules/fakes.yaml @@ -0,0 +1,406 @@ +FPWR: + Inherits: ^FakeBuilding + Inherits@infiltrate: ^InfiltratableFake + Inherits@shape: ^2x2Shape + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 640,-384,0, 640,512,0, -710,-512,0, -710,512,0 + Buildable: + BuildPaletteOrder: 870 + Queue: Defense + Prerequisites: ~structures.france, ~techlevel.infonly + Description: Looks like a Power Plant. + Icon: fake-icon + Tooltip: + Name: Fake Power Plant + GenericName: Power Plant + GenericVisibility: Enemy + GenericStancePrefix: False + Building: + Footprint: xx xx == + Dimensions: 2,3 + LocalCenterOffset: 0,-512,0 + Health: + HP: 400 + Armor: + Type: Wood + WithBuildingBib: + RenderSprites: + Image: POWR + Valued: + Cost: 30 + +TENF: + Inherits: ^FakeBuilding + Inherits@infiltrate: ^InfiltratableFake + Inherits@shape: ^2x2Shape + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 630,-512,0, 355,512,0, -281,-512,0, -630,512,0 + Buildable: + BuildPaletteOrder: 871 + Queue: Defense + Prerequisites: ~structures.france, ~techlevel.infonly + Description: Looks like a Tent. + Icon: fake-icon + Tooltip: + Name: Fake Allied Barracks + GenericName: Allied Barracks + GenericVisibility: Enemy + GenericStancePrefix: False + Building: + Footprint: xx xx == + Dimensions: 2,3 + LocalCenterOffset: 0,-512,0 + Health: + HP: 600 + Armor: + Type: Wood + WithBuildingBib: + RenderSprites: + Image: TENT + Valued: + Cost: 40 + +SYRF: + Inherits: ^FakeBuilding + Inherits@infiltrate: ^InfiltratableFake + Buildable: + BuildPaletteOrder: 890 + Queue: Defense + Prerequisites: ~structures.france, ~techlevel.medium + Description: Looks like a Naval Yard. + Icon: fake-icon + Tooltip: + Name: Fake Naval Yard + GenericName: Naval Yard + GenericVisibility: Enemy + GenericStancePrefix: False + Targetable: + TargetTypes: Ground, Water, Structure, SpyInfiltrate + Building: + Footprint: XXX xxx XXX + Dimensions: 3,3 + TerrainTypes: Water + RequiresBuildableArea: + Adjacent: 8 + RenderSprites: + Image: SYRD + Valued: + Cost: 100 + Health: + HP: 1000 + Armor: + Type: Light + EditorTilesetFilter: + ExcludeTilesets: INTERIOR + HitShape: + TargetableOffsets: 768,0,0, 768,-1024,0, 768,1024,0 + Type: Rectangle + TopLeft: -1536, -1152 + BottomRight: 1536, 598 + HitShape@BOTTOM: + TargetableOffsets: -768,0,0 + Type: Rectangle + TopLeft: -512, 598 + BottomRight: 512, 1110 + +SPEF: + Inherits: ^FakeBuilding + Inherits@infiltrate: ^InfiltratableFake + Targetable: + TargetTypes: Ground, Water, Structure, SpyInfiltrate + Buildable: + BuildPaletteOrder: 890 + Queue: Defense + Prerequisites: ~disabled + Description: Looks like a Sub Pen. + Icon: fake-icon + Tooltip: + Name: Fake Sub Pen + GenericName: Sub Pen + GenericVisibility: Enemy + GenericStancePrefix: False + Building: + Footprint: XXX xxx XXX + Dimensions: 3,3 + TerrainTypes: Water + RequiresBuildableArea: + Adjacent: 8 + RenderSprites: + Image: SPEN + Valued: + Cost: 100 + Health: + HP: 1000 + Armor: + Type: Light + EditorTilesetFilter: + ExcludeTilesets: INTERIOR + HitShape: + Type: Rectangle + TopLeft: -1536, -598 + BottomRight: 1536, 598 + HitShape@TOPANDBOTTOM: + TargetableOffsets: 811,0,0, -811,0,0 + Type: Rectangle + TopLeft: -555, -1110 + BottomRight: 555, 1110 + +WEAF: + Inherits: ^FakeBuilding + Inherits@infiltrate: ^InfiltratableFake + Inherits@shape: ^3x2Shape + Buildable: + BuildPaletteOrder: 920 + Prerequisites: ~structures.france, ~techlevel.medium + Queue: Defense + Description: Looks like a War Factory. + Icon: fake-icon + Tooltip: + Name: Fake War Factory + GenericName: War Factory + GenericVisibility: Enemy + GenericStancePrefix: False + Building: + Footprint: xxx xxx === + Dimensions: 3,3 + LocalCenterOffset: 0,-512,0 + WithBuildingBib: + RenderSprites: + Image: WEAP + WithProductionDoorOverlay: + Sequence: build-top + Valued: + Cost: 200 + Health: + HP: 1500 + Armor: + Type: Wood + +DOMF: + Inherits: ^FakeBuilding + Inherits@IDISABLE: ^DisableOnLowPower + Inherits@infiltrate: ^InfiltratableFake + Inherits@shape: ^2x2Shape + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 630,-384,0, 630,384,0, -700,-512,0, -700,512,0 + Tooltip: + Name: Fake Radar Dome + GenericName: Radar Dome + GenericVisibility: Enemy + GenericStancePrefix: False + Buildable: + BuildPaletteOrder: 930 + Queue: Defense + Prerequisites: ~structures.france, ~techlevel.medium + Description: Looks like a Radar Dome. + Icon: fake-icon + Building: + Footprint: xx xx == + Dimensions: 2,3 + LocalCenterOffset: 0,-512,0 + WithBuildingBib: + RenderSprites: + Image: DOME + Valued: + Cost: 180 + Health: + HP: 1000 + Armor: + Type: Wood + +FIXF: + Inherits: ^FakeBuilding + Buildable: + BuildPaletteOrder: 940 + Queue: Defense + Prerequisites: ~structures.france, ~techlevel.medium + Description: Looks like a Service Depot. + Icon: fake-icon + Tooltip: + Name: Fake Service Depot + GenericName: Service Depot + GenericVisibility: Enemy + GenericStancePrefix: False + Building: + Footprint: _X_ xxx _X_ + Dimensions: 3,3 + Health: + HP: 800 + Armor: + Type: Wood + WithBuildingBib: + HasMinibib: Yes + RenderSprites: + Image: FIX + Valued: + Cost: 120 + HitShape: + Type: Rectangle + TopLeft: -1536, -683 + BottomRight: 1536, 853 + HitShape@TOPANDBOTTOM: + TargetableOffsets: 840,0,0, -1060,0,0 + Type: Rectangle + TopLeft: -640, -768 + BottomRight: 640, 1024 + +FAPW: + Inherits: ^FakeBuilding + Inherits@infiltrate: ^InfiltratableFake + Inherits@shape: ^3x2Shape + HitShape: + TargetableOffsets: -355,-1024,0 + Buildable: + BuildPaletteOrder: 950 + Queue: Defense + Prerequisites: ~structures.france, ~techlevel.medium + Description: Looks like an Advanced Power Plant. + Icon: fake-icon + Tooltip: + Name: Fake Advanced Power Plant + GenericName: Advanced Power Plant + GenericVisibility: Enemy + GenericStancePrefix: False + Building: + Footprint: xxx Xxx === + Dimensions: 3,3 + LocalCenterOffset: 0,-512,0 + Health: + HP: 700 + Armor: + Type: Wood + WithBuildingBib: + RenderSprites: + Image: APWR + Selectable: + Bounds: 72,48 + DecorationBounds: 72,68,0,-10 + SelectionDecorations: + Valued: + Cost: 60 + +ATEF: + Inherits: ^FakeBuilding + Inherits@IDISABLE: ^DisableOnLowPower + Inherits@shape: ^2x2Shape + Tooltip: + Name: Fake Allied Tech Center + GenericName: Allied Tech Center + GenericVisibility: Enemy + GenericStancePrefix: False + Buildable: + BuildPaletteOrder: 970 + Queue: Defense + Prerequisites: ~structures.france, ~techlevel.high + Description: Looks like an Allied Tech Center. + Icon: fake-icon + Building: + Footprint: xx xx == + Dimensions: 2,3 + LocalCenterOffset: 0,-512,0 + WithBuildingBib: + RenderSprites: + Image: ATEK + Valued: + Cost: 150 + Health: + HP: 400 + Armor: + Type: Wood + +PDOF: + Inherits: ^FakeBuilding + Inherits@IDISABLE: ^DisableOnLowPower + Inherits@shape: ^2x2Shape + Tooltip: + Name: Fake Chronosphere + GenericName: Chronosphere + GenericVisibility: Enemy + GenericStancePrefix: False + Buildable: + BuildPaletteOrder: 980 + Queue: Defense + Prerequisites: ~structures.france, ~techlevel.unrestricted + BuildLimit: 1 + Description: Looks like a Chronosphere.\nMaximum 1 can be built. + Icon: fake-icon + Building: + Footprint: xx xx + Dimensions: 2,2 + RenderSprites: + Image: PDOX + WithBuildingBib: + HasMinibib: Yes + Valued: + Cost: 150 + Health: + HP: 1000 + Armor: + Type: Wood + Explodes: + DamageThreshold: 50 + +MSLF: + Inherits: ^FakeBuilding + Inherits@IDISABLE: ^DisableOnLowPower + Inherits@shape: ^2x1Shape + Tooltip: + Name: Fake Missile Silo + GenericName: Missile Silo + GenericVisibility: Enemy + GenericStancePrefix: False + Buildable: + BuildPaletteOrder: 990 + Queue: Defense + Prerequisites: ~structures.france, ~techlevel.unrestricted + BuildLimit: 1 + Description: Looks like a Missile Silo.\nMaximum 1 can be built. + Icon: fake-icon + Building: + Footprint: xx + Dimensions: 2,1 + RenderSprites: + Image: MSLO + Valued: + Cost: 250 + Health: + HP: 1000 + Armor: + Type: Wood + Explodes: + DamageThreshold: 50 + +FACF: + Inherits: ^FakeBuilding + Buildable: + BuildPaletteOrder: 1000 + Queue: Defense + Prerequisites: ~structures.france, ~techlevel.medium + Description: Looks like a Construction Yard. + Icon: fake-icon + Tooltip: + Name: Fake Construction Yard + GenericName: Construction Yard + GenericVisibility: Enemy + GenericStancePrefix: False + Building: + Footprint: xxX xxx XxX === + Dimensions: 3,4 + LocalCenterOffset: 0,-512,0 + WithBuildingBib: + RenderSprites: + Image: FACT + Valued: + Cost: 250 + Health: + HP: 1500 + Armor: + Type: Wood + HitShape: + TargetableOffsets: 1273,939,0, -980,-640,0, -980,640,0 + Type: Rectangle + TopLeft: -1536, -1536 + BottomRight: 1536, 1536 diff --git a/mods/ura/rules/husks.yaml b/mods/ura/rules/husks.yaml new file mode 100644 index 0000000..a51aef7 --- /dev/null +++ b/mods/ura/rules/husks.yaml @@ -0,0 +1,442 @@ +1TNK.Husk: + Inherits: ^Husk + Tooltip: + Name: Husk (Light Tank) + ThrowsParticle@turret: + Anim: turret + TransformOnCapture: + IntoActor: 1tnk + RenderSprites: + Image: 1tnk.destroyed + +2TNK.Husk: + Inherits: ^Husk + Tooltip: + Name: Husk (Medium Tank) + ThrowsParticle@turret: + Anim: turret + TransformOnCapture: + IntoActor: 2tnk + RenderSprites: + Image: 2tnk.destroyed + +2TNK.GER.Husk: + Inherits: ^Husk + Tooltip: + Name: Husk (German Medium Tank) + ThrowsParticle@turret: + Anim: turret + TransformOnCapture: + IntoActor: 2tnk.ger + RenderSprites: + Image: 2tnk.destroyed + +3TNK.Husk: + Inherits: ^Husk + Tooltip: + Name: Husk (Heavy Tank) + ThrowsParticle@turret: + Anim: turret + TransformOnCapture: + IntoActor: 3tnk + RenderSprites: + Image: 3tnk.destroyed + +4TNK.Husk: + Inherits: ^Husk + Tooltip: + Name: Husk (Mammoth Tank) + ThrowsParticle@turret: + Anim: turret + TransformOnCapture: + IntoActor: 4tnk + RenderSprites: + Image: 4tnk.destroyed + +4TNK.KV-8.Husk: + Inherits: ^Husk + Tooltip: + Name: Husk (Mammoth KV-8) + ThrowsParticle@turret: + Anim: turret + TransformOnCapture: + IntoActor: 4tnk.kv-8 + RenderSprites: + Image: 4tnk.destroyed + +HARV.FullHusk: + Inherits: ^Husk + Tooltip: + Name: Husk (Ore Truck) + TransformOnCapture: + IntoActor: harv + RenderSprites: + Image: hhusk + +HARV.EmptyHusk: + Inherits: ^Husk + Tooltip: + Name: Husk (Ore Truck) + TransformOnCapture: + IntoActor: harv + RenderSprites: + Image: hhusk2 + +MCV.Husk: + Inherits: ^Husk + Tooltip: + Name: Husk (Mobile Construction Vehicle) + TransformOnCapture: + IntoActor: mcv + RenderSprites: + Image: mcvhusk + +MGG.Husk: + Inherits: ^Husk + Tooltip: + Name: Husk (Mobile Gap Generator) + ThrowsParticle@spinner: + Anim: spinner-idle + Offset: -299,0,171 + TransformOnCapture: + IntoActor: mgg + RenderSprites: + Image: mgg.destroyed + +TRAN.Husk: + Inherits: ^HelicopterHusk + Tooltip: + Name: Chinook + Aircraft: + TurnSpeed: 4 + Speed: 149 + WithIdleOverlay@PRIMARY: + Offset: -597,0,341 + Sequence: rotor + WithIdleOverlay@SECONDARY: + Offset: 597,0,213 + Sequence: rotor2 + RevealsShroud: + Range: 8c0 + Type: GroundPosition + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 6c0 + Type: GroundPosition + RenderSprites: + Image: tran + +TRAN.Husk1: + Inherits: ^Husk + Tooltip: + Name: Husk (Chinook) + RenderSprites: + Image: tran1husk + +TRAN.Husk2: + Inherits: ^Husk + Tooltip: + Name: Husk (Chinook) + RenderSprites: + Image: tran2husk + +BADR.Husk: + Inherits: ^PlaneHusk + Tooltip: + Name: Badger + Aircraft: + TurnSpeed: 5 + Speed: 149 + SmokeTrailWhenDamaged@0: + Offset: -432,560,0 + Interval: 2 + MinDamage: Undamaged + SmokeTrailWhenDamaged@1: + Offset: -432,-560,0 + Interval: 2 + MinDamage: Undamaged + RenderSprites: + Image: badr + -RevealOnDeath: + +MIG.Husk: + Inherits: ^PlaneHusk + Tooltip: + Name: MiG Attack Plane + Contrail@1: + Offset: -598,-683,0 + Contrail@2: + Offset: -598,683,0 + Aircraft: + TurnSpeed: 5 + Speed: 186 + SmokeTrailWhenDamaged: + Offset: -853,0,171 + Interval: 2 + MinDamage: Undamaged + RevealsShroud: + Range: 13c0 + Type: GroundPosition + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 11c0 + Type: GroundPosition + RenderSprites: + Image: mig + +YAK.Husk: + Inherits: ^PlaneHusk + Tooltip: + Name: Yak Attack Plane + Contrail: + Offset: -853,0,0 + Aircraft: + TurnSpeed: 5 + Speed: 149 + SmokeTrailWhenDamaged: + Offset: -853,0,0 + Interval: 2 + MinDamage: Undamaged + RevealsShroud: + Range: 11c0 + Type: GroundPosition + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 9c0 + Type: GroundPosition + RenderSprites: + Image: yak + +HELI.Husk: + Inherits: ^HelicopterHusk + Tooltip: + Name: Longbow + Aircraft: + TurnSpeed: 4 + Speed: 149 + WithIdleOverlay: + Offset: 0,0,85 + Sequence: rotor + SmokeTrailWhenDamaged: + Offset: -427,0,0 + MinDamage: Undamaged + RevealsShroud: + Range: 12c0 + Type: GroundPosition + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 10c0 + Type: GroundPosition + RenderSprites: + Image: heli + +HIND.Husk: + Inherits: ^HelicopterHusk + Tooltip: + Name: Hind + Aircraft: + TurnSpeed: 4 + Speed: 112 + WithIdleOverlay: + Sequence: rotor + SmokeTrailWhenDamaged: + Offset: -427,0,0 + MinDamage: Undamaged + RevealsShroud: + Range: 10c0 + Type: GroundPosition + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 8c0 + Type: GroundPosition + RenderSprites: + Image: hind + +U2.Husk: + Inherits: ^PlaneHusk + Tooltip: + Name: Husk (Spy Plane) + Aircraft: + TurnSpeed: 7 + Speed: 373 + Contrail@1: + Offset: -725,683,0 + Contrail@2: + Offset: -725,-683,0 + SmokeTrailWhenDamaged: + Offset: -1c43,0,0 + Interval: 2 + MinDamage: Undamaged + RenderSprites: + Image: u2 + +T01.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T02.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T03.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T04.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: TEMPERAT, SNOW, INTERIOR + +T05.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T06.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T07.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T08.Husk: + Inherits: ^TreeHusk + Building: + Footprint: x_ + Dimensions: 2,1 + +T09.Husk: + Inherits: ^TreeHusk + EditorTilesetFilter: + ExcludeTilesets: TEMPERAT, SNOW, INTERIOR + +T10.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ xx + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T11.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ xx + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T12.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T13.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T14.Husk: + Inherits: ^TreeHusk + Building: + Footprint: ___ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T15.Husk: + Inherits: ^TreeHusk + Building: + Footprint: ___ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T16.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +T17.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __ x_ + Dimensions: 2,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +TC01.Husk: + Inherits: ^TreeHusk + Building: + Footprint: ___ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: INTERIOR + +TC02.Husk: + Inherits: ^TreeHusk + Building: + Footprint: _x_ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +TC03.Husk: + Inherits: ^TreeHusk + Building: + Footprint: xx_ xx_ + Dimensions: 3,2 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +TC04.Husk: + Inherits: ^TreeHusk + Building: + Footprint: ____ xxx_ x___ + Dimensions: 4,3 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR + +TC05.Husk: + Inherits: ^TreeHusk + Building: + Footprint: __x_ xxx_ _xx_ + Dimensions: 4,3 + EditorTilesetFilter: + ExcludeTilesets: DESERT, INTERIOR diff --git a/mods/ura/rules/infantry.yaml b/mods/ura/rules/infantry.yaml new file mode 100644 index 0000000..c5b83ec --- /dev/null +++ b/mods/ura/rules/infantry.yaml @@ -0,0 +1,727 @@ +DOG: + Inherits: ^Soldier + Buildable: + Queue: Infantry + BuildAtProductionType: Dog + BuildPaletteOrder: 50 + Prerequisites: ~kenn, ~techlevel.infonly + Description: Anti-infantry unit.\nCan detect cloaked units and spies.\n Strong vs Infantry\n Weak vs Vehicles, Aircraft + Valued: + Cost: 200 + Tooltip: + Name: Attack Dog + GenericName: Dog + Selectable: + Bounds: 12,17,-1,-4 + DecorationBounds: 12,17,-1,-4 + SelectionDecorations: + Health: + HP: 30 + Mobile: + Speed: 99 + Voice: Move + Guard: + Voice: Move + Passenger: + Voice: Move + RevealsShroud: + Range: 7c256 + Armament: + Weapon: DogJaw + AttackLeap: + Voice: Attack + AttackMove: + Voice: Move + AutoTarget: + InitialStance: AttackAnything + AutoTargetPriority@DEFAULT: + ValidTargets: Infantry + Targetable: + TargetTypes: Ground, Infantry + WithInfantryBody: + DefaultAttackSequence: shoot + StandSequences: stand + IgnoresDisguise: + DetectCloaked: + CloakTypes: Cloak, Hijacker + Voiced: + VoiceSet: DogVoice + -TakeCover: + +E1: + Inherits: ^Soldier + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 10 + Prerequisites: ~barracks, ~techlevel.infonly + Description: General-purpose infantry.\n Strong vs Infantry\n Weak vs Vehicles, Aircraft + Selectable: + Class: E1 + Valued: + Cost: 100 + Tooltip: + Name: Rifle Infantry + Health: + HP: 50 + Armament@PRIMARY: + Weapon: M1Carbine + Armament@GARRISONED: + Name: garrisoned + Weapon: Vulcan + MuzzleSequence: garrison-muzzle + AttackFrontal: + WithInfantryBody: + DefaultAttackSequence: shoot + ProducibleWithLevel: + Prerequisites: barracks.upgraded + +E1R1: + Inherits: E1 + RenderSprites: + Image: E1 + ProducibleWithLevel: + Prerequisites: techlevel.infonly + InitialLevels: 1 + -Buildable: + +E2: + Inherits: ^Soldier + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 40 + Prerequisites: ~barr, ~techlevel.infonly + Description: Infantry armed with grenades.\n Strong vs Buildings, Infantry\n Weak vs Vehicles, Aircraft + Valued: + Cost: 160 + Tooltip: + Name: Grenadier + Health: + HP: 50 + Mobile: + Speed: 71 + Armament@PRIMARY: + Weapon: Grenade + LocalOffset: 0,0,555 + FireDelay: 15 + Armament@GARRISONED: + Name: garrisoned + Weapon: Grenade + FireDelay: 15 + TakeCover: + ProneOffset: 256,64,-331 + AttackFrontal: + WithInfantryBody: + DefaultAttackSequence: throw + Explodes: + Weapon: UnitExplodeSmall + Chance: 50 + ProducibleWithLevel: + Prerequisites: barracks.upgraded + +E3: + Inherits: ^Soldier + Inherits@AUTOTARGET: ^AutoTargetAll + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 30 + Prerequisites: ~barracks, ~techlevel.infonly + Description: Anti-tank/Anti-aircraft infantry.\n Strong vs Vehicles, Aircraft\n Weak vs Infantry + Selectable: + Class: E3 + Valued: + Cost: 300 + Tooltip: + Name: Rocket Soldier + Health: + HP: 45 + Armament@PRIMARY: + Weapon: RedEye + LocalOffset: 0,0,555 + Armament@SECONDARY: + Name: secondary + Weapon: Dragon + LocalOffset: 0,0,555 + Armament@GARRISONED: + Name: garrisoned + Weapon: Dragon + TakeCover: + ProneOffset: 384,0,-395 + AttackFrontal: + WithInfantryBody: + DefaultAttackSequence: shoot + ProducibleWithLevel: + Prerequisites: barracks.upgraded + AutoTarget: + ScanRadius: 5 + +E3R1: + Inherits: E3 + RenderSprites: + Image: E3 + ProducibleWithLevel: + Prerequisites: techlevel.infonly + InitialLevels: 1 + -Buildable: + +E4: + Inherits: ^Soldier + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 70 + Prerequisites: ~barr, ftur, ~techlevel.low + Description: Advanced anti-structure unit.\n Strong vs Infantry, Buildings\n Weak vs Vehicles, Aircraft + Valued: + Cost: 300 + Tooltip: + Name: Flamethrower + Health: + HP: 40 + Armament@PRIMARY: + Weapon: Flamer + LocalOffset: 700,0,500 + FireDelay: 8 + Armament@GARRISONED: + Name: garrisoned + Weapon: Flamer + TakeCover: + ProneOffset: 160,0,-288 + AttackFrontal: + Explodes: + Weapon: VisualExplode + EmptyWeapon: VisualExplode + Chance: 50 + WithInfantryBody: + DefaultAttackSequence: shoot + ProducibleWithLevel: + Prerequisites: barracks.upgraded + +E6: + Inherits: ^Soldier + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 60 + Prerequisites: ~barracks, ~techlevel.infonly + Description: Infiltrates and captures\nenemy structures.\n Unarmed + Valued: + Cost: 500 + Tooltip: + Name: Engineer + Passenger: + PipType: Yellow + EngineerRepair: + RepairsBridges: + ExternalCaptures: + CaptureTypes: building + PlayerExperience: 25 + Voiced: + VoiceSet: EngineerVoice + Selectable: + Priority: 5 + +SPY: + Inherits: ^Soldier + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 90 + Prerequisites: ~!infantry.england, dome, ~tent, ~techlevel.medium + Description: Infiltrates enemy structures for intel or\nsabotage. Exact effect depends on the\nbuilding infiltrated.\nLoses disguise when attacking.\nCan detect cloaked units and spies.\n Strong vs Infantry\n Weak vs Vehicles, Aircraft\n Special Ability: Disguised + Valued: + Cost: 400 + -Tooltip: + DisguiseTooltip: + Name: Spy + GenericName: Soldier + -Guard: + Mobile: + Voice: Move + RevealsShroud: + Range: 6c0 + Passenger: + PipType: Yellow + Voice: Move + Disguise: + DisguisedCondition: disguise + Infiltrates: + Types: SpyInfiltrate + PlayerExperience: 50 + AutoTarget: + InitialStance: HoldFire + InitialStanceAI: HoldFire + ScanRadius: 5 + -WithInfantryBody: + WithDisguisingInfantryBody: + DefaultAttackSequence: shoot + IdleSequences: idle1,idle2 + StandSequences: stand,stand2 + WithDecoration@disguise: + Image: pips + Sequence: pip-disguise + Palette: effect + ReferencePoint: Top, Right + ZOffset: 256 + RequiresCondition: disguise + IgnoresDisguise: + DetectCloaked: + CloakTypes: Cloak, Hijacker + Armament: + Weapon: SilencedPPK + AttackFrontal: + AttackMove: + Voice: Move + Voiced: + VoiceSet: SpyVoice + +SPY.England: + Inherits: SPY + Buildable: + Prerequisites: ~infantry.england, dome, ~tent, ~techlevel.medium + Valued: + Cost: 400 + Health: + HP: 50 + ProducibleWithLevel: + Prerequisites: techlevel.infonly + InitialLevels: 1 + DisguiseTooltip: + Name: British Spy + RenderSprites: + Image: spy + +#Tanya Swim properties and sequences by SirCake +E7: + Inherits: ^Soldier + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 120 + Prerequisites: ~tent, atek, ~techlevel.high + BuildLimit: 1 + Description: Elite commando infantry. Armed with\ndual pistols and C4.\nCan detect cloaked units.\nMaximum 1 can be trained.\n Strong vs Infantry, Buildings\n Weak vs Vehicles, Aircraft\n Special Ability: Destroy Building with C4 + Valued: + Cost: 1200 + Tooltip: + Name: Tanya + Health: + HP: 100 + Mobile: + Speed: 71 + Voice: Move + TerrainSpeeds: + Water: 63 + GrantConditionOnTerrain: + TerrainTypes: Water + Condition: swimming + Targetable: + RequiresCondition: !parachute && !swimming + Targetable@SEA: + TargetTypes: Ground, Water, Infantry + RequiresCondition: !parachute && swimming + Guard: + Voice: Move + RevealsShroud: + Range: 7c256 + Demolition: + DetonationDelay: 45 + Voice: Demolish + Passenger: + PipType: Red + Voice: Move + Armament@PRIMARY: + Weapon: Colt45 + Armament@SECONDARY: + Weapon: Colt45 + Armament@GARRISONED: + Name: garrisoned + Weapon: Colt45 + MuzzleSequence: garrison-muzzle + AttackFrontal: + WithInfantryBody: + RequiresCondition: !swimming + DefaultAttackSequence: shoot + StandSequences: stand + WithInfantryBody@SEA: + RequiresCondition: swimming + MoveSequence: swim + DefaultAttackSequence: swim_shoot + IdleSequences: swim_idle + StandSequences: swim_stand + WithDeathAnimation: + RequiresCondition: !swimming + AnnounceOnBuild: + AnnounceOnKill: + DetectCloaked: + CloakTypes: Cloak, Hijacker + Voiced: + VoiceSet: TanyaVoice + ProducibleWithLevel: + Prerequisites: barracks.upgraded + +MEDI: + Inherits: ^Soldier + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 40 + Prerequisites: ~tent, ~techlevel.infonly + Description: Heals nearby infantry.\n Unarmed + Valued: + Cost: 200 + Tooltip: + Name: Medic + Health: + HP: 60 + RevealsShroud: + Range: 4c0 + Passenger: + PipType: Yellow + Armament: + Weapon: Heal + Cursor: heal + OutsideRangeCursor: heal + TargetStances: Ally + ForceTargetStances: None + AttackFrontal: + WithInfantryBody: + StandSequences: stand + DefaultAttackSequence: heal + Voiced: + VoiceSet: MedicVoice + AutoTarget: + AutoTargetPriority@DEFAULT: + ValidTargets: Infantry + +MECH: + Inherits: ^Soldier + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 100 + Prerequisites: ~tent, fix, ~techlevel.medium + Description: Repairs nearby vehicles and restores\nhusks to working condition by capturing them.\n Unarmed + Valued: + Cost: 500 + Tooltip: + Name: Mechanic + Health: + HP: 80 + Mobile: + Voice: Move + RevealsShroud: + Range: 4c0 + Passenger: + PipType: Yellow + Voice: Move + Armament: + Weapon: Repair + Cursor: repair + OutsideRangeCursor: repair + TargetStances: Ally + ForceTargetStances: None + AttackFrontal: + Voice: Move + Captures: + CaptureTypes: husk + PlayerExperience: 25 + WithInfantryBody: + DefaultAttackSequence: repair + StandSequences: stand + Voiced: + VoiceSet: MechanicVoice + AutoTarget: + AutoTargetPriority@DEFAULT: + ValidTargets: Vehicle + +EINSTEIN: + Inherits: ^CivInfantry + -Wanders: + Tooltip: + Name: Prof. Einstein + Mobile: + Speed: 71 + Voiced: + VoiceSet: EinsteinVoice + +DELPHI: + Inherits: ^CivInfantry + -Wanders: + Tooltip: + Name: Agent Delphi + Mobile: + Speed: 71 + +CHAN: + Inherits: ^CivInfantry + Valued: + Cost: 500 + Selectable: + Class: CHAN + Tooltip: + Name: Scientist + +GNRL: + Inherits@1: ^CivInfantry + Inherits@2: ^ArmedCivilian + -Wanders: + Tooltip: + Name: General + Selectable: + Class: GNRL + Mobile: + Voice: Move + AttackFrontal: + Voice: Attack + AttackMove: + Voice: Move + Passenger: + Voice: Move + Guard: + Voice: Move + Voiced: + VoiceSet: StavrosVoice + -ScaredyCat: + TakeCover: + DamageModifiers: + Prone50Percent: 50 + DamageTriggers: TriggerProne + WithInfantryBody: + IdleSequences: idle1 + +THF: + Inherits: ^Soldier + Valued: + Cost: 400 + Tooltip: + Name: Thief + RevealsShroud: + Range: 5c0 + Passenger: + PipType: Yellow + Infiltrates: + InfiltrateTypes: Cash + PlayerExperience: 50 + Voiced: + VoiceSet: ThiefVoice + WithInfantryBody: + -IdleSequences: + StandSequences: stand + Buildable: + Description: Steals enemy credits.\n Unarmed + +HIJACKER: + Inherits: ^Soldier + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 110 + Prerequisites: ~barr, fix, ~techlevel.medium + Description: Hijacks enemy vehicles.\n Unarmed + Valued: + Cost: 500 + Tooltip: + Name: Hijacker + Health: + HP: 50 + RevealsShroud: + Range: 6c0 + Passenger: + PipType: Yellow + Captures: + CaptureTypes: vehicle + PlayerExperience: 50 + Voiced: + VoiceSet: ThiefVoice + -TakeCover: + WithInfantryBody: + -IdleSequences: + StandSequences: stand + Crushable: + WarnProbability: 95 + Cloak: + InitialDelay: 250 + CloakDelay: 120 + UncloakOn: Attack, Unload, Infiltrate, Demolish, Move + CloakTypes: Cloak, Hijacker + IsPlayerPalette: true + RequiresCondition: !cloak-force-disabled + GrantConditionOnDamageState@UNCLOAK: + Condition: cloak-force-disabled + ValidDamageStates: Critical + Mobile: + Speed: 85 + +SHOK: + Inherits: ^Soldier + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 130 + Prerequisites: ~barr, stek, tsla, ~infantry.russia, ~techlevel.high + Description: Elite infantry with portable Tesla coils.\n Strong vs Infantry, Vehicles\n Weak vs Aircraft + Valued: + Cost: 300 + Tooltip: + Name: Shock Trooper + Health: + HP: 50 + Mobile: + Voice: Move + RevealsShroud: + Range: 6c0 + Armament@PRIMARY: + Weapon: PortaTesla + LocalOffset: 427,0,341 + Armament@GARRISONED: + Name: garrisoned + Weapon: PortaTesla + TakeCover: + ProneOffset: 227,0,-245 + AttackFrontal: + Voice: Attack + AttackMove: + Voice: Move + Passenger: + Voice: Move + Guard: + Voice: Move + WithInfantryBody: + DefaultAttackSequence: shoot + Voiced: + VoiceSet: ShokVoice + ProducibleWithLevel: + Prerequisites: barracks.upgraded + +SNIPER: + Inherits: ^Soldier + Valued: + Cost: 700 + Tooltip: + Name: Sniper + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 80 + Prerequisites: ~disabled + Description: Elite sniper infantry unit.\nCan detect cloaked units.\n Strong vs Infantry\n Weak vs Vehicles, Aircraft + Health: + HP: 80 + Mobile: + Speed: 63 + Passenger: + PipType: Red + RevealsShroud: + Range: 8c0 + AutoTarget: + InitialStance: HoldFire + InitialStanceAI: ReturnFire + AutoTargetPriority@DEFAULT: + ValidTargets: Infantry + Armament@PRIMARY: + Weapon: Sniper + Armament@GARRISONED: + Name: garrisoned + Weapon: Sniper + MuzzleSequence: garrison-muzzle + AttackFrontal: + WithInfantryBody: + DefaultAttackSequence: shoot + Cloak: + InitialDelay: 250 + CloakDelay: 150 + CloakSound: + UncloakSound: + UncloakOn: Attack, Unload, Infiltrate, Demolish, Move + IsPlayerPalette: true + RequiresCondition: !cloak-force-disabled + GrantConditionOnDamageState@UNCLOAK: + Condition: cloak-force-disabled + ValidDamageStates: Critical + DetectCloaked: + CloakTypes: Cloak, Hijacker + Range: 6c0 + -MustBeDestroyed: + ProducibleWithLevel: + Prerequisites: techlevel.infonly + InitialLevels: 1 + +Zombie: + Inherits: ^Soldier + Inherits@AUTOTARGET: ^AutoTargetGround + Valued: + Cost: 100 + Tooltip: + Name: Zombie + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 200 + Prerequisites: ~barracks, ~bio + Description: Slow undead. Attacks in close combat. + Health: + HP: 250 + Mobile: + Speed: 42 + AutoTarget: + ScanRadius: 5 + AttackFrontal: + WithInfantryBody: + DefaultAttackSequence: bite + IdleSequences: idle1 + Armament: + Weapon: claw + Voiced: + VoiceSet: AntVoice + -TakeCover: + +Ant: + Inherits: ^Infantry + Inherits@AUTOTARGET: ^AutoTargetGround + Valued: + Cost: 300 + Tooltip: + Name: Giant Ant + GenericName: Ant + Buildable: + Queue: Infantry + BuildAtProductionType: Soldier + BuildPaletteOrder: 1954 + Prerequisites: ~barracks, ~bio + Description: Irradiated insect that grew oversize. + Selectable: + Bounds: 24,24,0,-5 + DecorationBounds: 30,30,0,-2 + SelectionDecorations: + Health: + HP: 750 + Mobile: + Speed: 99 + TurnSpeed: 12 + SharesCell: no + -Crushable: + AutoTarget: + ScanRadius: 5 + AttackFrontal: + WithInfantryBody: + DefaultAttackSequence: bite + Armament: + Weapon: mandible + Targetable: + TargetTypes: Ground, Infantry, Ant + WithDeathAnimation: + UseDeathTypeSuffix: false + Voiced: + VoiceSet: AntVoice + HitShape: + Type: Circle + Radius: 469 diff --git a/mods/ura/rules/misc.yaml b/mods/ura/rules/misc.yaml new file mode 100644 index 0000000..e4b2804 --- /dev/null +++ b/mods/ura/rules/misc.yaml @@ -0,0 +1,414 @@ +MINV: + Inherits: ^Mine + RenderSprites: + Image: minv + FactionImages: + soviet: minp + russia: minp + ukraine: minp + Explodes: + Weapon: ATMine + +# Only kept for backwards-compatibility with existing and imported maps, use MINV instead +MINP: + Inherits: MINV + Explodes: + Weapon: APMine + +CRATE: + Inherits: ^Crate + GiveCashCrateAction: + Amount: 1000 + SelectionShares: 50 + UseCashTick: true + LevelUpCrateAction: + SelectionShares: 40 + ExplodeCrateAction@fire: + Weapon: CrateNapalm + SelectionShares: 5 + ExplodeCrateAction@boom: + Weapon: CrateExplosion + SelectionShares: 5 + HideMapCrateAction: + SelectionShares: 5 + Effect: hide-map + HealUnitsCrateAction: + Notification: heal2.aud + SelectionShares: 2 + Effect: heal + RevealMapCrateAction: + SelectionShares: 1 + Effect: reveal-map + DuplicateUnitCrateAction: + SelectionShares: 10 + MaxAmount: 5 + MinAmount: 1 + MaxDuplicateValue: 1500 + GiveMcvCrateAction: + SelectionShares: 0 + NoBaseSelectionShares: 100 + Units: mcv + GiveUnitCrateAction@jeep: + SelectionShares: 6 + Units: jeep + ValidFactions: allies, england, france, germany + Prerequisites: techlevel.low + GiveUnitCrateAction@1tnk: + SelectionShares: 6 + Units: 1tnk + ValidFactions: allies, england, france, germany + Prerequisites: techlevel.low + GiveUnitCrateAction@apc: + SelectionShares: 6 + Units: apc + ValidFactions: soviet, russia, ukraine + Prerequisites: techlevel.low + GiveUnitCrateAction@ftrk: + SelectionShares: 6 + Units: ftrk + ValidFactions: soviet, russia, ukraine + Prerequisites: techlevel.low + GiveUnitCrateAction@arty: + SelectionShares: 5 + Units: arty + ValidFactions: allies, england, france, germany + Prerequisites: techlevel.medium, dome + GiveUnitCrateAction@v2rl: + SelectionShares: 5 + Units: v2rl + ValidFactions: soviet, russia, ukraine + Prerequisites: techlevel.medium, dome + GiveUnitCrateAction@2tnk: + SelectionShares: 4 + Units: 2tnk + ValidFactions: allies, england, france, germany + Prerequisites: techlevel.medium, fix + GiveUnitCrateAction@3tnk: + SelectionShares: 4 + Units: 3tnk + ValidFactions: soviet, russia, ukraine + Prerequisites: techlevel.medium, fix + GiveUnitCrateAction@squadlight: + SelectionShares: 10 + Units: e1,e1,e1,e3,e3 + ValidFactions: allies, england, france, germany, soviet, russia, ukraine + GiveUnitCrateAction@squadheavyallies: + SelectionShares: 7 + Units: e1,e1,e1,e1,e3,e3,e3,e6,medi + ValidFactions: allies, england, france, germany + TimeDelay: 4500 + GiveUnitCrateAction@squadheavysoviet: + SelectionShares: 7 + Units: e1,e1,e4,e4,e3,e3,e3,e6 + ValidFactions: soviet, russia, ukraine + TimeDelay: 4500 + GrantExternalConditionCrateAction@invuln: + SelectionShares: 5 + Effect: invuln + Notification: ironcur9.aud + Condition: invulnerability + Duration: 600 + +MONEYCRATE: + Inherits: ^Crate + Tooltip: + Name: Money Crate + GiveCashCrateAction: + Amount: 500 + SelectionShares: 1 + UseCashTick: true + RenderSprites: + Image: wcrate + +HEALCRATE: + Inherits: ^Crate + Tooltip: + Name: Heal Crate + HealUnitsCrateAction: + Notification: heal2.aud + SelectionShares: 1 + Effect: heal + +WCRATE: + Inherits: ^Crate + Tooltip: + Name: Wooden Crate + RenderSprites: + Image: wcrate + +SCRATE: + Inherits: ^Crate + Tooltip: + Name: Steel Crate + +CAMERA: + Interactable: + EditorOnlyTooltip: + Name: (reveals area to owner) + AlwaysVisible: + Immobile: + OccupiesSpace: false + RevealsShroud: + Range: 10c0 + Type: CenterPosition + BodyOrientation: + QuantizedFacings: 1 + WithSpriteBody: + RenderSpritesEditorOnly: + Image: camera + EditorTilesetFilter: + Categories: System + +camera.paradrop: + Inherits: CAMERA + EditorOnlyTooltip: + Name: (support power proxy camera) + RevealsShroud: + Range: 6c0 + +camera.spyplane: + Inherits: CAMERA + EditorOnlyTooltip: + Name: (support power proxy camera) + DetectCloaked: + Range: 12c0 + CloakTypes: Cloak, Hijacker + +SONAR: + Inherits: camera.spyplane + EditorOnlyTooltip: + Name: (support power proxy camera) + -RevealsShroud: + DetectCloaked: + CloakTypes: Underwater + +FLARE: + Immobile: + OccupiesSpace: false + RevealsShroud: + Range: 3c0 + Type: CenterPosition + RenderSprites: + Image: smokland + WithSpriteBody: + StartSequence: open + BodyOrientation: + QuantizedFacings: 1 + HiddenUnderFog: + Type: CenterPosition + Interactable: + Tooltip: + Name: Flare + ShowOwnerRow: false + EditorTilesetFilter: + Categories: Decoration + +MINE: + Inherits@1: ^SpriteActor + Interactable: + HiddenUnderShroud: + Tooltip: + Name: Ore Mine + RenderSprites: + Palette: terrain + WithSpriteBody: + Building: + Footprint: x + Dimensions: 1,1 + AppearsOnRadar: + RadarColorFromTerrain: + Terrain: Ore + SeedsResource: + EditorTilesetFilter: + Categories: Resource spawn + +GMINE: + Inherits@1: ^SpriteActor + Interactable: + HiddenUnderShroud: + Tooltip: + Name: Gem Mine + RenderSprites: + Palette: player + WithSpriteBody: + Building: + Footprint: x + Dimensions: 1,1 + AppearsOnRadar: + RadarColorFromTerrain: + Terrain: Gems + SeedsResource: + ResourceType: Gems + EditorTilesetFilter: + Categories: Resource spawn + +RAILMINE: + Inherits@1: ^SpriteActor + Interactable: + HiddenUnderShroud: + Tooltip: + Name: Abandoned Mine + RenderSprites: + Palette: player + WithSpriteBody: + Building: + Footprint: xx + Dimensions: 2,1 + EditorTilesetFilter: + ExcludeTilesets: INTERIOR + Categories: Civilian building + +QUEE: + Inherits@1: ^SpriteActor + Inherits@shape: ^2x1Shape + Interactable: + HiddenUnderShroud: + Tooltip: + Name: Queen Ant + Building: + Footprint: xx + Dimensions: 2,1 + WithSpriteBody: + AppearsOnRadar: + EditorTilesetFilter: + RequireTilesets: INTERIOR + Categories: Critter + +LAR1: + Inherits@1: ^SpriteActor + Inherits@shape: ^1x1Shape + Interactable: + HiddenUnderShroud: + Tooltip: + Name: Ant Larva + Building: + Footprint: x + Dimensions: 1,1 + RenderSprites: + Palette: terrain + WithSpriteBody: + AppearsOnRadar: + EditorTilesetFilter: + RequireTilesets: INTERIOR + Categories: Critter + +LAR2: + Inherits@1: LAR1 + Tooltip: + Name: Ant Larvae + +powerproxy.parabombs: + AlwaysVisible: + AirstrikePower: + Icon: parabombs + Description: Parabombs (Single Use) + LongDesc: A Badger drops a load of parachuted bombs on your target. + OneShot: true + AllowMultiple: true + UnitType: badr.bomber + SelectTargetSpeechNotification: SelectTarget + QuantizedFacings: 8 + DisplayBeacon: True + BeaconPoster: pbmbicon + CameraActor: camera + CameraRemoveDelay: 150 + ArrowSequence: arrow + ClockSequence: clock + CircleSequence: circles + +powerproxy.sonarpulse: + AlwaysVisible: + SpawnActorPower: + Icon: sonar + Description: Sonar Pulse + LongDesc: Reveals all submarines in the vicinity for a \nshort time. + ChargeInterval: 750 + EndChargeSpeechNotification: SonarPulseReady + SelectTargetSpeechNotification: SelectTarget + Actor: sonar + LifeTime: 250 + DeploySound: sonpulse.aud + EffectImage: moveflsh + EffectPalette: moveflash + +powerproxy.paratroopers: + AlwaysVisible: + ParatroopersPower: + Icon: paratroopers + Description: Paratroopers + LongDesc: A Badger drops a squad of infantry\nanywhere on the map. + DropItems: E1,E1,E1,E3,E3 + SelectTargetSpeechNotification: SelectTarget + AllowImpassableCells: false + QuantizedFacings: 8 + CameraActor: camera.paradrop + DisplayBeacon: true + BeaconPoster: pinficon + ArrowSequence: arrow + ClockSequence: clock + CircleSequence: circles + +barracks.upgraded: + AlwaysVisible: + ProvidesPrerequisite: + +vehicles.upgraded: + AlwaysVisible: + ProvidesPrerequisite: + +aircraft.upgraded: + AlwaysVisible: + ProvidesPrerequisite: + +mpspawn: + Interactable: + EditorOnlyTooltip: + Name: (multiplayer player starting point) + AlwaysVisible: + Immobile: + OccupiesSpace: false + WithSpriteBody: + RenderSpritesEditorOnly: + BodyOrientation: + QuantizedFacings: 1 + EditorTilesetFilter: + Categories: System + +waypoint: + Interactable: + EditorOnlyTooltip: + Name: (waypoint for scripted behavior) + AlwaysVisible: + Immobile: + OccupiesSpace: false + WithSpriteBody: + RenderSpritesEditorOnly: + BodyOrientation: + QuantizedFacings: 1 + EditorTilesetFilter: + Categories: System + +^fact.colorpicker: + Inherits: FACT + RenderSprites: + Image: fact + Palette: colorpicker + +CTFLAG: + Inherits: ^TechBuilding + Building: + Footprint: x + Dimensions: 1,1 + Tooltip: + Name: Flag + WithBuildingBib: + HasMinibib: Yes + -HitShape: + -Health: + -Explodes: + -Selectable: + -SelectionDecorations: + -Targetable: + EditorTilesetFilter: + Categories: Decoration + Interactable: diff --git a/mods/ura/rules/palettes.yaml b/mods/ura/rules/palettes.yaml new file mode 100644 index 0000000..336aa3b --- /dev/null +++ b/mods/ura/rules/palettes.yaml @@ -0,0 +1,93 @@ +^Palettes: + PaletteFromFile@player: + Name: player + Filename: temperat.pal + ShadowIndex: 4 + PaletteFromCurrentTileset: + Name: terrain + ShadowIndex: 3,4 + PaletteFromFile@chrome: + Name: chrome + Filename: temperat.pal + ShadowIndex: 3 + AllowModifiers: false + PaletteFromFile@effect: + Name: effect + Filename: temperat.pal + ShadowIndex: 4 + PaletteFromFile@colorpicker: + Name: colorpicker + Filename: temperat.pal + ShadowIndex: 4 + AllowModifiers: false + PaletteFromRGBA@shadow: + Name: shadow + R: 0 + G: 0 + B: 0 + A: 140 + PaletteFromRGBA@submerged: + Name: submerged + R: 0 + G: 0 + B: 0 + A: 140 + PaletteFromRGBA@highlight: + Name: highlight + R: 255 + G: 255 + B: 255 + A: 128 + PaletteFromRGBA@moveflash: + Name: moveflash + R: 255 + G: 255 + B: 255 + A: 64 + PaletteFromRGBA@invuln: + Name: invuln + R: 128 + G: 0 + B: 0 + A: 128 + PaletteFromRGBA@invuln2: + Name: invuln2 + R: 0 + G: 0 + B: 128 + A: 128 + PaletteFromRGBA@disabled: + Name: disabled + R: 0 + G: 0 + B: 0 + A: 180 + ShroudPalette@shroud: + Name: shroud + Type: Shroud + ShroudPalette@fog: + Name: fog + Fog: true + PlayerColorPalette: + BasePalette: player + RemapIndex: 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 + PaletteFromPlayerPaletteWithAlpha@cloak: + BaseName: cloak + BasePalette: player + Alpha: 0.55 + PlayerHighlightPalette: + MenuPaletteEffect: + RotationPaletteEffect@defaultwater: + Palettes: terrain + ExcludeTilesets: DESERT + RotationPaletteEffect@actorswater: + Palettes: player, effect + RotationPaletteEffect@desertwater: + Palettes: terrain + Tilesets: DESERT + RotationBase: 32 + LightPaletteRotator: + ExcludePalettes: terrain, effect + ChronoshiftPaletteEffect: + FlashPaletteEffect@NUKE: + Type: Nuke diff --git a/mods/ura/rules/player.yaml b/mods/ura/rules/player.yaml new file mode 100644 index 0000000..799e1ce --- /dev/null +++ b/mods/ura/rules/player.yaml @@ -0,0 +1,94 @@ +Player: + AlwaysVisible: + TechTree: + ClassicProductionQueue@Building: + Type: Building + LowPowerSlowdown: 3 + QueuedAudio: Building + ReadyAudio: ConstructionComplete + SpeedUp: True + ClassicProductionQueue@Defense: + Type: Defense + LowPowerSlowdown: 3 + QueuedAudio: Building + ReadyAudio: ConstructionComplete + SpeedUp: True + ClassicProductionQueue@Vehicle: + Type: Vehicle + LowPowerSlowdown: 3 + QueuedAudio: Building + SpeedUp: True + BuildTimeSpeedReduction: 100, 75, 60, 50 + ClassicProductionQueue@Infantry: + Type: Infantry + LowPowerSlowdown: 3 + SpeedUp: True + ClassicProductionQueue@Ship: + Type: Ship + LowPowerSlowdown: 3 + QueuedAudio: Building + SpeedUp: True + ClassicProductionQueue@Aircraft: + Type: Aircraft + LowPowerSlowdown: 3 + QueuedAudio: Building + SpeedUp: True + PlaceBuilding: + SupportPowerManager: + ScriptTriggers: + MissionObjectives: + ConquestVictoryConditions: + PowerManager: + AllyRepair: + PlayerResources: + InsufficientFundsNotification: InsufficientFunds + DeveloperMode: + CheckboxDisplayOrder: 8 + GpsWatcher: + Shroud: + FogCheckboxDisplayOrder: 3 + LobbyPrerequisiteCheckbox@GLOBALBOUNTY: + ID: bounty + Label: Kill Bounties + Description: Players receive cash bonuses when killing enemy units + Enabled: True + DisplayOrder: 6 + Prerequisites: global-bounty + LobbyPrerequisiteCheckbox@GLOBALFACTUNDEPLOY: + ID: factundeploy + Label: Redeployable MCVs + Description: Allow undeploying Construction Yard. + Enabled: True + DisplayOrder: 7 + Prerequisites: global-factundeploy + FrozenActorLayer: + BaseAttackNotifier: + PlayerStatistics: + PlaceBeacon: + ProvidesTechPrerequisite@infonly: + Name: Infantry Only + Prerequisites: techlevel.infonly + Id: infantryonly + ProvidesTechPrerequisite@low: + Name: Low + Prerequisites: techlevel.infonly, techlevel.low + Id: low + ProvidesTechPrerequisite@medium: + Name: Medium + Prerequisites: techlevel.infonly, techlevel.low, techlevel.medium + Id: medium + ProvidesTechPrerequisite@high: + Name: No Superweapons + Prerequisites: techlevel.infonly, techlevel.low, techlevel.medium, techlevel.high + Id: nosuperweapons + ProvidesTechPrerequisite@unrestricted: + Name: Unrestricted + Prerequisites: techlevel.infonly, techlevel.low, techlevel.medium, techlevel.high, techlevel.unrestricted + Id: unrestricted + GrantConditionOnPrerequisiteManager: + EnemyWatcher: + VeteranProductionIconOverlay: + Image: iconchevrons + Sequence: veteran + ResourceStorageWarning: + PlayerExperience: diff --git a/mods/ura/rules/ships.yaml b/mods/ura/rules/ships.yaml new file mode 100644 index 0000000..e057199 --- /dev/null +++ b/mods/ura/rules/ships.yaml @@ -0,0 +1,330 @@ +SS: + Inherits: ^Ship + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Ship + BuildAtProductionType: Submarine + BuildPaletteOrder: 30 + Prerequisites: ~spen, ~techlevel.low + Description: Submerged anti-ship unit\narmed with torpedoes.\nCan detect other submarines.\n Strong vs Naval units\n Weak vs Ground units, Aircraft\n Special Ability: Submerge + Valued: + Cost: 950 + Tooltip: + Name: Submarine + Health: + HP: 250 + Armor: + Type: Light + Mobile: + TurnSpeed: 4 + Speed: 71 + RevealsShroud: + Range: 10c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + Targetable: + TargetTypes: Ground, Water, Ship, Submarine, Repair + RequiresCondition: !underwater + Targetable@UNDERWATER: + TargetTypes: Underwater, Submarine, Repair + RequiresCondition: underwater + Cloak: + CloakTypes: Underwater + InitialDelay: 0 + CloakDelay: 50 + CloakSound: subshow1.aud + UncloakSound: subshow1.aud + CloakedCondition: underwater + Palette: submerged + RequiresCondition: !cloak-force-disabled + GrantConditionOnDamageState@UNCLOAK: + Condition: cloak-force-disabled + ValidDamageStates: Critical + Armament: + Weapon: TorpTube + LocalOffset: 0,-171,0, 0,171,0 + FireDelay: 2 + AttackFrontal: + SelectionDecorations: + AutoTarget: + InitialStance: HoldFire + InitialStanceAI: ReturnFire + AutoTargetPriority@DEFAULT: + ValidTargets: Water, Underwater + AutoTargetPriority@ATTACKANYTHING: + ValidTargets: Water, Underwater + DetectCloaked: + CloakTypes: Underwater + Range: 4c0 + RenderDetectionCircle: + Explodes: + Weapon: UnitExplodeSubmarine + EmptyWeapon: UnitExplodeSubmarine + -MustBeDestroyed: + Selectable: + DecorationBounds: 38,38 + +MSUB: + Inherits: ^Ship + Inherits@AUTOTARGET: ^AutoTargetAll + Buildable: + Queue: Ship + BuildAtProductionType: Submarine + BuildPaletteOrder: 60 + Prerequisites: ~spen, stek, ~techlevel.high + BuildDuration: 1750 + Description: Submerged anti-ground siege unit\nwith anti-air capabilities.\nCan detect other submarines.\n Strong vs Buildings, Ground units, Aircraft\n Weak vs Naval units\n Special Ability: Submerge + Valued: + Cost: 2000 + Tooltip: + Name: Missile Submarine + Health: + HP: 400 + Armor: + Type: Light + Mobile: + TurnSpeed: 3 + Speed: 42 + RevealsShroud: + Range: 10c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + Targetable: + TargetTypes: Ground, Water, Ship, Submarine, Repair + RequiresCondition: !underwater + Targetable@UNDERWATER: + TargetTypes: Underwater, Submarine, Repair + RequiresCondition: underwater + Cloak: + CloakTypes: Underwater + InitialDelay: 0 + CloakDelay: 100 + CloakSound: subshow1.aud + UncloakSound: subshow1.aud + CloakedCondition: underwater + Palette: submerged + RequiresCondition: !cloak-force-disabled + GrantConditionOnDamageState@UNCLOAK: + Condition: cloak-force-disabled + ValidDamageStates: Critical + Armament@PRIMARY: + Weapon: SubMissile + LocalOffset: 0,-171,0, 0,171,0 + FireDelay: 2 + Armament@SECONDARY: + Weapon: SubMissileAA + LocalOffset: 0,-171,0, 0,171,0 + FireDelay: 2 + AttackFrontal: + SelectionDecorations: + AutoTarget: + InitialStance: HoldFire + InitialStanceAI: ReturnFire + DetectCloaked: + CloakTypes: Underwater + Range: 4c0 + RenderDetectionCircle: + Explodes: + Weapon: UnitExplodeSubmarine + EmptyWeapon: UnitExplodeSubmarine + -MustBeDestroyed: + Selectable: + DecorationBounds: 44,44 + +DD: + Inherits: ^Ship + Inherits@AUTOTARGET: ^AutoTargetAll + Buildable: + Queue: Ship + BuildAtProductionType: Boat + BuildPaletteOrder: 40 + Prerequisites: ~syrd, dome, ~techlevel.medium + Description: Fast multi-role ship.\nCan detect submarines.\n Strong vs Naval units, Vehicles, Aircraft\n Weak vs Infantry + Valued: + Cost: 1000 + Tooltip: + Name: Destroyer + Health: + HP: 400 + Armor: + Type: Heavy + Mobile: + TurnSpeed: 7 + Speed: 85 + RevealsShroud: + Range: 10c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + Turreted: + TurnSpeed: 7 + Offset: 341,0,128 + Armament@PRIMARY: + Weapon: Stinger + LocalOffset: 0,-100,0, 0,100,0 + LocalYaw: 64, -64 + Armament@SECONDARY: + Weapon: DepthCharge + LocalOffset: 0,-100,0, 0,100,0 + LocalYaw: 80, -80 + Armament@TERTIARY: + Weapon: StingerAA + LocalOffset: 0,-100,0, 0,100,0 + LocalYaw: 64, -64 + AttackTurreted: + SelectionDecorations: + WithSpriteTurret: + DetectCloaked: + CloakTypes: Underwater + Range: 4c0 + RenderDetectionCircle: + Selectable: + DecorationBounds: 38,38 + +CA: + Inherits: ^Ship + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Ship + BuildAtProductionType: Boat + BuildPaletteOrder: 50 + Prerequisites: ~syrd, atek, ~techlevel.high + BuildDuration: 2000 + Description: Very slow long-range ship.\n Strong vs Buildings, Ground units\n Weak vs Naval units, Aircraft + Valued: + Cost: 2400 + Tooltip: + Name: Cruiser + Health: + HP: 800 + Armor: + Type: Heavy + Mobile: + TurnSpeed: 3 + Speed: 42 + RevealsShroud: + Range: 9c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + Turreted@PRIMARY: + Turret: primary + Offset: -864,0,128 + TurnSpeed: 3 + Turreted@SECONDARY: + Turret: secondary + Offset: 768,0,128 + TurnSpeed: 3 + Armament@PRIMARY: + Turret: primary + Weapon: 8Inch + LocalOffset: 480,-100,40, 480,100,40 + Recoil: 171 + RecoilRecovery: 34 + MuzzleSequence: muzzle + Armament@SECONDARY: + Name: secondary + Turret: secondary + Weapon: 8Inch + LocalOffset: 480,-100,40, 480,100,40 + Recoil: 171 + RecoilRecovery: 34 + MuzzleSequence: muzzle + AttackTurreted: + Turrets: primary, secondary + WithMuzzleOverlay: + SelectionDecorations: + WithSpriteTurret@PRIMARY: + Turret: primary + WithSpriteTurret@SECONDARY: + Turret: secondary + Selectable: + DecorationBounds: 44,44 + +LST: + Inherits: ^Ship + Buildable: + Queue: Ship + BuildPaletteOrder: 10 + Prerequisites: ~techlevel.low + Description: General-purpose naval transport.\nCan carry infantry and tanks.\n Unarmed + Valued: + Cost: 700 + Tooltip: + Name: Transport + Health: + HP: 350 + Armor: + Type: Heavy + Mobile: + TurnSpeed: 10 + Speed: 113 + TerrainSpeeds: + Beach: 70 + RequiresCondition: !notmobile + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + SelectionDecorations: + WithLandingCraftAnimation: + OpenTerrainTypes: Clear, Rough, Road, Ore, Gems, Beach + Cargo: + Types: Infantry, Vehicle + MaxWeight: 15 + PipCount: 5 + PassengerFacing: 0 + LoadingCondition: notmobile + -Chronoshiftable: + Selectable: + DecorationBounds: 36,36 + +PT: + Inherits: ^Ship + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Ship + BuildAtProductionType: Boat + BuildPaletteOrder: 20 + Prerequisites: ~syrd, ~techlevel.low + Description: Light scout & support ship.\nCan detect submarines.\n Strong vs Naval units\n Weak vs Ground units, Aircraft + Valued: + Cost: 500 + Tooltip: + Name: Gunboat + Health: + HP: 200 + Armor: + Type: Heavy + Mobile: + TurnSpeed: 7 + Speed: 128 + RevealsShroud: + Range: 8c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + Turreted: + TurnSpeed: 7 + Offset: 512,0,0 + Armament@PRIMARY: + Weapon: 2Inch + LocalOffset: 208,0,48 + MuzzleSequence: muzzle + Armament@SECONDARY: + Name: secondary + Weapon: DepthCharge + MuzzleSequence: muzzle + AttackTurreted: + WithMuzzleOverlay: + SelectionDecorations: + WithSpriteTurret: + DetectCloaked: + CloakTypes: Underwater + Range: 4c0 + RenderDetectionCircle: + Selectable: + DecorationBounds: 36,36 diff --git a/mods/ura/rules/structures.yaml b/mods/ura/rules/structures.yaml new file mode 100644 index 0000000..b5a9120 --- /dev/null +++ b/mods/ura/rules/structures.yaml @@ -0,0 +1,2036 @@ +MSLO: + Inherits: ^ScienceBuilding + Inherits@IDISABLE: ^DisableOnLowPowerOrPowerDown + Inherits@shape: ^2x1Shape + Valued: + Cost: 2500 + Tooltip: + Name: Missile Silo + Buildable: + Queue: Defense + BuildPaletteOrder: 140 + Prerequisites: techcenter, ~techlevel.unrestricted + BuildLimit: 1 + Description: Provides an atomic bomb.\nRequires power to operate.\nMaximum 1 can be built.\n Special Ability: Atom Bomb + Building: + Footprint: xx + Dimensions: 2,1 + Health: + HP: 1000 + Armor: + Type: Wood + RevealsShroud: + Range: 7c256 + RequiresCondition: !disabled + RevealGeneratedShroud: False + RevealsShroud@Offline: + Range: 5c0 + RequiresCondition: disabled + RevealsShroud@GAPGEN: + Range: 5c0 + RequiresCondition: !disabled + NukePower: + PauseOnCondition: disabled + Cursor: nuke + Icon: abomb + ChargeInterval: 13500 + Description: Atom Bomb + LongDesc: Launches a devastating atomic bomb\nat a target location. + BeginChargeSpeechNotification: AbombPrepping + EndChargeSpeechNotification: AbombReady + SelectTargetSpeechNotification: SelectTarget + InsufficientPowerSpeechNotification: InsufficientPower + IncomingSpeechNotification: AbombLaunchDetected + MissileWeapon: atomic + MissileDelay: 5 + SpawnOffset: 1c0,427,0 + DisplayTimerStances: Ally, Neutral, Enemy + DisplayBeacon: True + DisplayRadarPing: True + BeaconPoster: atomicon + FlashType: Nuke + CameraRange: 10c0 + ArrowSequence: arrow + ClockSequence: clock + CircleSequence: circles + SupportPowerChargeBar: + Power: + Amount: -150 + MustBeDestroyed: + RequiredForShortGame: false + WithNukeLaunchAnimation: + +GAP: + Inherits: ^ScienceBuilding + Inherits@IDISABLE: ^DisableOnLowPowerOrPowerDown + Valued: + Cost: 900 + Tooltip: + Name: Gap Generator + Buildable: + Queue: Defense + BuildPaletteOrder: 110 + Prerequisites: dome, ~structures.allies, ~techlevel.medium + Description: Obscures the enemy's view with shroud.\nRequires power to operate. + Selectable: + Bounds: 24,24 + DecorationBounds: 24,48,0,-12 + SelectionDecorations: + WithSpriteBody: + PauseOnCondition: disabled + Health: + HP: 500 + Armor: + Type: Heavy + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + HasMinibib: Yes + CreatesShroud: + Range: 7c256 + RequiresCondition: !disabled + RenderShroudCircle: + Power: + Amount: -60 + MustBeDestroyed: + RequiredForShortGame: false + -AcceptsDeliveredCash: + Explodes: + Weapon: SmallBuildingExplode + EmptyWeapon: SmallBuildingExplode + HitShape: + Type: Rectangle + TopLeft: -512, -512 + BottomRight: 512, 512 + +SPEN: + Inherits: ^Building + InfiltrateForSupportPower: + Proxy: powerproxy.sonarpulse + Types: SpyInfiltrate + Valued: + Cost: 800 + Tooltip: + Name: Sub Pen + Buildable: + Queue: Building + BuildPaletteOrder: 50 + Prerequisites: anypower, ~structures.soviet, ~techlevel.low + Description: Produces and repairs\nsubmarines and transports. + Targetable: + TargetTypes: Ground, Water, Structure, WaterStructure, C4, DetonateAttack, SpyInfiltrate + Building: + Footprint: XXX xxx XXX + Dimensions: 3,3 + TerrainTypes: Water + RequiresBuildableArea: + AreaTypes: building + Adjacent: 8 + -GivesBuildableArea: + Health: + HP: 1000 + Armor: + Type: Wood + RevealsShroud: + Range: 6c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + DetectCloaked: + CloakTypes: Underwater + Range: 8c0 + Exit@1: + SpawnOffset: 0,-213,0 + Facing: 96 + ExitCell: -1,2 + ProductionTypes: Submarine + Exit@2: + SpawnOffset: 0,-213,0 + Facing: 160 + ExitCell: 3,2 + ProductionTypes: Submarine + Exit@3: + SpawnOffset: 0,0,0 + Facing: 32 + ExitCell: 0,0 + ProductionTypes: Submarine + Exit@4: + SpawnOffset: 0,0,0 + Facing: 224 + ExitCell: 2,0 + ProductionTypes: Submarine + Exit@b1: + SpawnOffset: -1024,1024,0 + Facing: 160 + ExitCell: 0,2 + ProductionTypes: Ship + Exit@b2: + SpawnOffset: 1024,1024,0 + Facing: 224 + ExitCell: 2,2 + ProductionTypes: Ship + Exit@b3: + SpawnOffset: -1024,-1024,0 + Facing: 96 + ExitCell: 0,0 + ProductionTypes: Ship + Exit@b4: + SpawnOffset: 1024,-1024,0 + Facing: 32 + ExitCell: 2,0 + ProductionTypes: Ship + Production: + Produces: Ship, Submarine + PrimaryBuilding: + PrimaryCondition: primary + -EmitInfantryOnSell: + RepairsUnits: + HpPerStep: 1000 + FinishRepairingNotification: UnitRepaired + PlayerExperience: 15 + RallyPoint: + ProductionBar: + Power: + Amount: -30 + ProvidesPrerequisite@soviet: + Factions: soviet, russia, ukraine + Prerequisite: ships.soviet + ProvidesPrerequisite@sovietvanilla: + Factions: soviet + Prerequisite: ships.sovietvanilla + ProvidesPrerequisite@russia: + Factions: russia + Prerequisite: ships.russia + ProvidesPrerequisite@ukraine: + Factions: ukraine + Prerequisite: ships.ukraine + ProvidesPrerequisite@sovietstructure: + RequiresPrerequisites: structures.soviet + Prerequisite: ships.soviet + ProvidesPrerequisite@sovietvanillastructure: + RequiresPrerequisites: structures.sovietvanilla + Prerequisite: ships.sovietvanilla + ProvidesPrerequisite@russianstructure: + RequiresPrerequisites: structures.russia + Prerequisite: ships.russia + ProvidesPrerequisite@ukrainianstructure: + RequiresPrerequisites: structures.ukraine + Prerequisite: ships.ukraine + ProvidesPrerequisite@buildingname: + EditorTilesetFilter: + ExcludeTilesets: INTERIOR + WithDecoration@primary: + RequiresSelection: true + Image: pips + Sequence: tag-primary + ReferencePoint: Top + ZOffset: 256 + RequiresCondition: primary + HitShape: + Type: Rectangle + TopLeft: -1536, -598 + BottomRight: 1536, 598 + HitShape@TOPANDBOTTOM: + TargetableOffsets: 811,0,0, -811,0,0 + Type: Rectangle + TopLeft: -555, -1110 + BottomRight: 555, 1110 + +SYRD: + Inherits: ^Building + InfiltrateForSupportPower: + Proxy: powerproxy.sonarpulse + Types: SpyInfiltrate + Buildable: + Queue: Building + BuildPaletteOrder: 40 + Prerequisites: anypower, ~structures.allies, ~techlevel.low + Description: Produces and repairs\nships and transports. + Valued: + Cost: 1000 + Tooltip: + Name: Naval Yard + Targetable: + TargetTypes: Ground, Water, Structure, WaterStructure, C4, DetonateAttack, SpyInfiltrate + Building: + Footprint: XXX xxx XXX + Dimensions: 3,3 + TerrainTypes: Water + RequiresBuildableArea: + Adjacent: 8 + -GivesBuildableArea: + Health: + HP: 1000 + Armor: + Type: Wood + RevealsShroud: + Range: 6c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + DetectCloaked: + CloakTypes: Underwater + Range: 8c0 + Exit@1: + SpawnOffset: -1024,1024,0 + Facing: 160 + ExitCell: 0,2 + ProductionTypes: Ship, Boat + Exit@2: + SpawnOffset: 1024,1024,0 + Facing: 224 + ExitCell: 2,2 + ProductionTypes: Ship, Boat + Exit@3: + SpawnOffset: -1024,-1024,0 + Facing: 96 + ExitCell: 0,0 + ProductionTypes: Ship, Boat + Exit@4: + SpawnOffset: 1024,-1024,0 + Facing: 32 + ExitCell: 2,0 + ProductionTypes: Ship, Boat + Production: + Produces: Ship, Boat + PrimaryBuilding: + PrimaryCondition: primary + -EmitInfantryOnSell: + RepairsUnits: + HpPerStep: 1000 + FinishRepairingNotification: UnitRepaired + PlayerExperience: 15 + RallyPoint: + ProductionBar: + Power: + Amount: -30 + ProvidesPrerequisite@allies: + Factions: allies, england, france, germany + Prerequisite: ships.allies + ProvidesPrerequisite@alliesvanilla: + Factions: allies + Prerequisite: ships.alliesvanilla + ProvidesPrerequisite@england: + Factions: england + Prerequisite: ships.england + ProvidesPrerequisite@france: + Factions: france + Prerequisite: ships.france + ProvidesPrerequisite@germany: + Factions: germany + Prerequisite: ships.germany + ProvidesPrerequisite@alliedstructure: + RequiresPrerequisites: structures.allies + Prerequisite: ships.allies + ProvidesPrerequisite@alliedvanillastructure: + RequiresPrerequisites: structures.alliesvanilla + Prerequisite: ships.alliesvanilla + ProvidesPrerequisite@englishstructure: + RequiresPrerequisites: structures.england + Prerequisite: ships.england + ProvidesPrerequisite@frenchstructure: + RequiresPrerequisites: structures.france + Prerequisite: ships.france + ProvidesPrerequisite@germanstructure: + RequiresPrerequisites: structures.germany + Prerequisite: ships.germany + ProvidesPrerequisite@buildingname: + EditorTilesetFilter: + ExcludeTilesets: INTERIOR + WithDecoration@primary: + RequiresSelection: true + Image: pips + Sequence: tag-primary + ReferencePoint: Top + ZOffset: 256 + RequiresCondition: primary + HitShape: + TargetableOffsets: 768,0,0, 768,-1024,0, 768,1024,0 + Type: Rectangle + TopLeft: -1536, -1152 + BottomRight: 1536, 598 + HitShape@BOTTOM: + TargetableOffsets: -768,0,0 + Type: Rectangle + TopLeft: -512, 598 + BottomRight: 512, 1110 + +IRON: + Inherits: ^ScienceBuilding + Inherits@IDISABLE: ^DisableOnLowPowerOrPowerDown + Inherits@shape: ^2x1Shape + Buildable: + Queue: Defense + BuildPaletteOrder: 130 + Prerequisites: stek, ~structures.soviet, ~techlevel.unrestricted + BuildLimit: 1 + Description: Makes a group of units invulnerable\nfor a short time.\nRequires power to operate.\nMaximum 1 can be built.\n Special Ability: Invulnerability + Valued: + Cost: 1500 + Tooltip: + Name: Iron Curtain + Building: + Footprint: xx + Dimensions: 2,1 + Selectable: + Bounds: 48,28,0,2 + DecorationBounds: 50,50,0,-12 + SelectionDecorations: + Health: + HP: 1000 + Armor: + Type: Wood + RevealsShroud: + Range: 7c256 + RequiresCondition: !disabled + RevealGeneratedShroud: False + RevealsShroud@Offline: + Range: 5c0 + RequiresCondition: disabled + RevealsShroud@GAPGEN: + Range: 5c0 + RequiresCondition: !disabled + WithBuildingBib: + HasMinibib: Yes + GrantExternalConditionPower@IRONCURTAIN: + PauseOnCondition: disabled + Icon: invuln + ChargeInterval: 3000 + Description: Invulnerability + LongDesc: Makes a group of units invulnerable\nfor 20 seconds. + Duration: 500 + SelectTargetSpeechNotification: SelectTarget + InsufficientPowerSpeechNotification: InsufficientPower + BeginChargeSpeechNotification: IronCurtainCharging + EndChargeSpeechNotification: IronCurtainReady + DisplayRadarPing: True + Condition: invulnerability + OnFireSound: ironcur9.aud + SupportPowerChargeBar: + Power: + Amount: -200 + MustBeDestroyed: + RequiredForShortGame: false + +PDOX: + Inherits: ^ScienceBuilding + Inherits@IDISABLE: ^DisableOnLowPowerOrPowerDown + Inherits@shape: ^2x2Shape + Buildable: + Queue: Defense + BuildPaletteOrder: 120 + Prerequisites: atek, ~structures.allies, ~techlevel.unrestricted + BuildLimit: 1 + Description: Teleports a group of units across the\nmap for a short time.\nRequires power to operate.\nMaximum 1 can be built.\n Special Ability: Chronoshift + Valued: + Cost: 1500 + Tooltip: + Name: Chronosphere + Building: + Footprint: xx xx + Dimensions: 2,2 + Health: + HP: 1000 + Armor: + Type: Wood + RevealsShroud: + Range: 7c256 + RequiresCondition: !disabled + RevealGeneratedShroud: False + RevealsShroud@Offline: + Range: 5c0 + RequiresCondition: disabled + RevealsShroud@GAPGEN: + Range: 5c0 + RequiresCondition: !disabled + WithBuildingBib: + HasMinibib: Yes + EmitInfantryOnSell: + ActorTypes: e1,e1,e1,e1,e1,e1,e1,e1,e1,tecn,tecn,tecn,tecn,tecn,einstein + ProvidesPrerequisite@germany: + Factions: germany + Prerequisite: pdox.germany + ProvidesPrerequisite@germanstructure: + RequiresPrerequisites: structures.germany + Prerequisite: pdox.germany + ChronoshiftPower@chronoshift: + OrderName: Chronoshift + PauseOnCondition: disabled + Prerequisites: !pdox.germany + Icon: chrono + ChargeInterval: 3000 + Description: Chronoshift + LongDesc: Teleports a group of units across\nthe map for 20 seconds. + SelectTargetSpeechNotification: SelectTarget + InsufficientPowerSpeechNotification: InsufficientPower + BeginChargeSpeechNotification: ChronosphereCharging + EndChargeSpeechNotification: ChronosphereReady + Duration: 500 + KillCargo: yes + DisplayRadarPing: True + ChronoshiftPower@advancedchronoshift: + OrderName: AdvancedChronoshift + PauseOnCondition: disabled + Prerequisites: pdox.germany + Icon: chrono + ChargeInterval: 3000 + Description: Advanced Chronoshift + LongDesc: Teleports a large group of units across\nthe map for 20 seconds. + SelectTargetSpeechNotification: SelectTarget + InsufficientPowerSpeechNotification: InsufficientPower + BeginChargeSpeechNotification: ChronosphereCharging + EndChargeSpeechNotification: ChronosphereReady + Duration: 500 + KillCargo: yes + DisplayRadarPing: True + Range: 2 + SupportPowerChargeBar: + Power: + Amount: -200 + MustBeDestroyed: + RequiredForShortGame: false + ProvidesPrerequisite@buildingname: + +TSLA: + Inherits: ^Defense + Inherits@IDISABLE: ^DisableOnLowPowerOrPowerDown + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Defense + BuildPaletteOrder: 80 + Prerequisites: weap, ~structures.soviet, ~techlevel.medium + Description: Advanced base defense.\nRequires power to operate.\nCan detect cloaked units.\n Strong vs Vehicles, Infantry\n Weak vs Aircraft + Valued: + Cost: 1200 + Tooltip: + Name: Tesla Coil + Selectable: + Bounds: 24,24 + DecorationBounds: 24,40,0,-8 + SelectionDecorations: + Health: + HP: 400 + Armor: + Type: Heavy + RevealsShroud: + Range: 9c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + HasMinibib: Yes + WithTeslaChargeAnimation: + Armament: + Weapon: TeslaZap + LocalOffset: 0,0,896 + AttackTesla: + PauseOnCondition: disabled + ChargeAudio: tslachg2.aud + MaxCharges: 3 + ReloadDelay: 120 + Power: + Amount: -100 + DetectCloaked: + Range: 6c0 + RequiresCondition: !disabled + ProvidesPrerequisite@buildingname: + +AGUN: + Inherits: ^Defense + Inherits@IDISABLE: ^DisableOnLowPowerOrPowerDown + Inherits@AUTOTARGET: ^AutoTargetAir + Buildable: + Queue: Defense + BuildPaletteOrder: 90 + Prerequisites: dome, ~structures.allies, ~techlevel.medium + Description: Anti-Air base defense.\nRequires power to operate.\n Strong vs Aircraft\n Weak vs Ground units + Valued: + Cost: 800 + Tooltip: + Name: AA Gun + Selectable: + Bounds: 24,24 + DecorationBounds: 24,32,0,-4 + SelectionDecorations: + Health: + HP: 400 + Armor: + Type: Heavy + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + HasMinibib: Yes + Turreted: + TurnSpeed: 15 + InitialFacing: 224 + -WithSpriteBody: + WithEmbeddedTurretSpriteBody: + Armament: + Weapon: ZSU-23 + LocalOffset: 520,100,450, 520,-150,450 + MuzzleSequence: muzzle + AttackTurreted: + PauseOnCondition: disabled + WithMuzzleOverlay: + RenderRangeCircle: + RangeCircleType: aa + Power: + Amount: -50 + BodyOrientation: + UseClassicFacingFudge: True + +DOME: + Inherits: ^Building + Inherits@IDISABLE: ^DisableOnLowPowerOrPowerDown + Inherits@shape: ^2x2Shape + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 630,-384,0, 630,384,0, -700,-512,0, -700,512,0 + Buildable: + Queue: Building + BuildPaletteOrder: 90 + Prerequisites: proc, ~techlevel.medium + Description: Provides an overview\nof the battlefield.\nCan detect cloaked units.\nRequires power to operate. + Valued: + Cost: 1600 + Tooltip: + Name: Radar Dome + Building: + Footprint: xx xx == + Dimensions: 2,3 + LocalCenterOffset: 0,-512,0 + Targetable: + TargetTypes: Ground, Structure, C4, DetonateAttack, SpyInfiltrate + Health: + HP: 1000 + Armor: + Type: Wood + RevealsShroud: + Range: 10c0 + RequiresCondition: !disabled + RevealGeneratedShroud: False + RevealsShroud@Offline: + Range: 5c0 + RequiresCondition: disabled + RevealsShroud@GAPGEN: + Range: 5c0 + RequiresCondition: !disabled + WithBuildingBib: + ProvidesRadar: + RequiresCondition: !jammed && !disabled + InfiltrateForExploration: + Types: SpyInfiltrate + DetectCloaked: + Range: 6c0 + RequiresCondition: !disabled + RenderDetectionCircle: + Power: + Amount: -40 + ProvidesPrerequisite@buildingname: + ExternalCondition@JAMMED: + Condition: jammed + #ParatroopersPower@paratroopers: + # OrderName: AlliedParatroopers + # Prerequisites: dome, ~structures.allies + # Icon: sniperdrop + # ChargeTime: 240 + # Description: Sniper Drop + # LongDesc: A Badger drops a 2-man sniper team\nanywhere on the map. + # DropItems: SNIPER, SNIPER + # ReinforcementsArrivedSpeechNotification: ReinforcementsArrived + # SelectTargetSpeechNotification: SelectTarget + # AllowImpassableCells: false + # QuantizedFacings: 8 + # CameraActor: camera.paradrop + # DisplayBeacon: true + # BeaconPoster: pinficon + # ArrowSequence: arrow + # ClockSequence: clock + # CircleSequence: circles + +PBOX: + Inherits: ^Defense + Inherits@AUTOTARGET: ^AutoTargetAll + Tooltip: + Name: Pillbox + Building: + Buildable: + Queue: Defense + BuildPaletteOrder: 40 + Prerequisites: tent, ~structures.allies, ~techlevel.low + Description: Static defense with a fireport for\na garrisoned soldier.\nCan detect cloaked units.\n Strong vs Infantry, Light armor\n Weak vs Tanks, Aircraft + Valued: + Cost: 600 + CustomSellValue: + Value: 400 + Health: + HP: 350 + Armor: + Type: Heavy + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + HasMinibib: Yes + Turreted: + TurnSpeed: 255 + -QuantizeFacingsFromSequence: + BodyOrientation: + QuantizedFacings: 8 + Cargo: + Types: Infantry + MaxWeight: 1 + PipCount: 1 + InitialUnits: e1 + -EmitInfantryOnSell: + AttackGarrisoned: + Armaments: garrisoned + PortOffsets: 384,0,128, 224,-341,128, -224,-341,128, -384,0,128, -224,341,128, 224,341,128 + PortYaws: 0, 176, 341, 512, 682, 853 + PortCones: 88, 88, 88, 88, 88, 88 + RenderRangeCircle: + FallbackRange: 6c0 + Power: + Amount: -15 + DetectCloaked: + Range: 4c0 + +HBOX: + Inherits: ^Defense + Inherits@AUTOTARGET: ^AutoTargetAll + Tooltip: + Name: Camo Pillbox + Building: + Buildable: + Queue: Defense + BuildPaletteOrder: 50 + Prerequisites: tent, ~structures.allies, ~techlevel.medium + Description: Camouflaged static defense with a fireport\nfor a garrisoned soldier.\nCan detect cloaked units.\n Strong vs Infantry, Light armor\n Weak vs Tanks, Aircraft + Valued: + Cost: 800 + CustomSellValue: + Value: 600 + Health: + HP: 400 + Armor: + Type: Heavy + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + Cloak: + InitialDelay: 125 + CloakDelay: 60 + IsPlayerPalette: true + RequiresCondition: !cloak-force-disabled + GrantConditionOnDamageState@UNCLOAK: + Condition: cloak-force-disabled + ValidDamageStates: Critical + Turreted: + TurnSpeed: 255 + -QuantizeFacingsFromSequence: + BodyOrientation: + QuantizedFacings: 8 + Cargo: + Types: Infantry + MaxWeight: 1 + PipCount: 1 + InitialUnits: e1 + -EmitInfantryOnSell: + DetectCloaked: + Range: 6c0 + RenderRangeCircle: + FallbackRange: 6c0 + AttackGarrisoned: + Armaments: garrisoned + PortOffsets: 384,0,128, 224,-341,128, -224,-341,128, -384,0,128, -224,341,128, 224,341,128 + PortYaws: 0, 176, 341, 512, 682, 853 + PortCones: 88, 88, 88, 88, 88, 88 + Power: + Amount: -15 + -MustBeDestroyed: + +GUN: + Inherits: ^Defense + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Defense + BuildPaletteOrder: 70 + Prerequisites: tent, ~structures.allies, ~techlevel.medium + Description: Anti-Armor base defense.\nCan detect cloaked units.\n Strong vs Vehicles\n Weak vs Infantry, Aircraft + Valued: + Cost: 800 + Tooltip: + Name: Turret + Building: + Health: + HP: 400 + Armor: + Type: Heavy + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + HasMinibib: Yes + Turreted: + TurnSpeed: 12 + InitialFacing: 56 + -WithSpriteBody: + WithEmbeddedTurretSpriteBody: + Armament: + Weapon: TurretGun + LocalOffset: 512,0,112 + MuzzleSequence: muzzle + AttackTurreted: + WithMuzzleOverlay: + Power: + Amount: -40 + DetectCloaked: + Range: 6c0 + BodyOrientation: + UseClassicFacingFudge: True + +FTUR: + Inherits: ^Defense + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Defense + BuildPaletteOrder: 60 + Prerequisites: barr, ~structures.soviet, ~techlevel.low + Description: Anti-Infantry base defense.\nCan detect cloaked units.\n Strong vs Infantry, Light armor\n Weak vs Tanks, Aircraft + Valued: + Cost: 600 + Tooltip: + Name: Flame Tower + Building: + Health: + HP: 350 + Armor: + Type: Heavy + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + HasMinibib: Yes + Turreted: + TurnSpeed: 255 + Offset: 0,0,112 + Armament: + Weapon: FireballLauncher + LocalOffset: 512,0,0 + AttackTurreted: + -QuantizeFacingsFromSequence: + BodyOrientation: + QuantizedFacings: 8 + Power: + Amount: -20 + DetectCloaked: + Range: 4c0 + ProvidesPrerequisite@buildingname: + Explodes: + Weapon: BuildingExplode + EmptyWeapon: BuildingExplode + +SAM: + Inherits: ^Defense + Inherits@IDISABLE: ^DisableOnLowPowerOrPowerDown + Inherits@AUTOTARGET: ^AutoTargetAir + Inherits@shape: ^2x1Shape + HitShape: + Type: Rectangle + TopLeft: -768,-512 + BottomRight: 768,512 + Buildable: + Queue: Defense + BuildPaletteOrder: 100 + Prerequisites: dome, ~structures.soviet, ~techlevel.medium + Description: Anti-Air base defense.\nRequires power to operate.\n Strong vs Aircraft\n Weak vs Ground units + Valued: + Cost: 700 + Tooltip: + Name: SAM Site + Building: + Footprint: xx + Dimensions: 2,1 + Health: + HP: 400 + Armor: + Type: Heavy + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + HasMinibib: Yes + Turreted: + TurnSpeed: 30 + InitialFacing: 0 + -WithSpriteBody: + WithEmbeddedTurretSpriteBody: + Armament: + Weapon: Nike + LocalOffset: 0,0,320 + MuzzleSequence: muzzle + AttackTurreted: + PauseOnCondition: disabled + WithMuzzleOverlay: + RenderRangeCircle: + RangeCircleType: aa + Power: + Amount: -40 + BodyOrientation: + UseClassicFacingFudge: True + +ATEK: + Inherits: ^ScienceBuilding + Inherits@IDISABLE: ^DisableOnLowPower + Inherits@shape: ^2x2Shape + Buildable: + Queue: Building + BuildPaletteOrder: 140 + Prerequisites: weap, dome, ~structures.allies, ~techlevel.high + Description: Provides Allied advanced technologies.\n Special Ability: GPS Satellite + Valued: + Cost: 1500 + Tooltip: + Name: Allied Tech Center + ProvidesPrerequisite: + Prerequisite: techcenter + Building: + Footprint: xx xx == + Dimensions: 2,3 + LocalCenterOffset: 0,-512,0 + Health: + HP: 600 + Armor: + Type: Wood + RevealsShroud: + Range: 10c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + GpsPower: + PauseOnCondition: disabled + Icon: gps + OneShot: yes + ChargeInterval: 12000 + Description: GPS Satellite + LongDesc: Reveals map terrain and provides tactical\ninformation. Requires power and active radar. + RevealDelay: 375 + LaunchSpeechNotification: SatelliteLaunched + DisplayTimerStances: Ally, Neutral, Enemy + SupportPowerChargeBar: + Power: + Amount: -200 + ProvidesPrerequisite@buildingname: + +WEAP: + Inherits: ^Building + Inherits@shape: ^3x2Shape + Buildable: + Queue: Building + BuildPaletteOrder: 80 + Prerequisites: proc, ~techlevel.low + Description: Produces vehicles. + Valued: + Cost: 2000 + Tooltip: + Name: War Factory + Building: + Footprint: xxx xxx === + Dimensions: 3,3 + LocalCenterOffset: 0,-512,0 + Health: + HP: 1500 + Armor: + Type: Wood + RevealsShroud: + Range: 6c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + WithProductionDoorOverlay: + Sequence: build-top + RallyPoint: + Exit@1: + SpawnOffset: 213,-128,0 + ExitCell: 1,2 + Production: + Produces: Vehicle + ProvidesPrerequisite@allies: + Factions: allies, england, france, germany + Prerequisite: vehicles.allies + ProvidesPrerequisite@alliesvanilla: + Factions: allies + Prerequisite: vehicles.alliesvanilla + ProvidesPrerequisite@england: + Factions: england + Prerequisite: vehicles.england + ProvidesPrerequisite@france: + Factions: france + Prerequisite: vehicles.france + ProvidesPrerequisite@germany: + Factions: germany + Prerequisite: vehicles.germany + ProvidesPrerequisite@soviet: + Factions: soviet, russia, ukraine + Prerequisite: vehicles.soviet + ProvidesPrerequisite@sovietvanilla: + Factions: soviet + Prerequisite: vehicles.sovietvanilla + ProvidesPrerequisite@russia: + Factions: russia + Prerequisite: vehicles.russia + ProvidesPrerequisite@ukraine: + Factions: ukraine + Prerequisite: vehicles.ukraine + ProvidesPrerequisite@alliedstructure: + RequiresPrerequisites: structures.allies + Prerequisite: vehicles.allies + ProvidesPrerequisite@alliedvanillastructure: + RequiresPrerequisites: structures.alliesvanilla + Prerequisite: vehicles.alliesvanilla + ProvidesPrerequisite@englishstructure: + RequiresPrerequisites: structures.england + Prerequisite: vehicles.england + ProvidesPrerequisite@frenchstructure: + RequiresPrerequisites: structures.france + Prerequisite: vehicles.france + ProvidesPrerequisite@germanstructure: + RequiresPrerequisites: structures.germany + Prerequisite: vehicles.germany + ProvidesPrerequisite@sovietstructure: + RequiresPrerequisites: structures.soviet + Prerequisite: vehicles.soviet + ProvidesPrerequisite@sovietvanillastructure: + RequiresPrerequisites: structures.sovietvanilla + Prerequisite: vehicles.sovietvanilla + ProvidesPrerequisite@russianstructure: + RequiresPrerequisites: structures.russia + Prerequisite: vehicles.russia + ProvidesPrerequisite@ukrainianstructure: + RequiresPrerequisites: structures.ukraine + Prerequisite: vehicles.ukraine + PrimaryBuilding: + PrimaryCondition: primary + ProductionBar: + Power: + Amount: -30 + ProvidesPrerequisite@buildingname: + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate + InfiltrateForSupportPower: + Proxy: vehicles.upgraded + Types: SpyInfiltrate + WithDecoration@primary: + RequiresSelection: true + Image: pips + Sequence: tag-primary + ReferencePoint: Top + ZOffset: 256 + RequiresCondition: primary + +FACT: + Inherits: ^Building + Building: + Footprint: xxX xxx XxX === + Dimensions: 3,4 + LocalCenterOffset: 0,-512,0 + Buildable: + Queue: Building + BuildPaletteOrder: 1000 + Prerequisites: ~disabled + Description: Produces structures. + ProvidesPrerequisite@allies: + Factions: allies, england, france, germany + Prerequisite: structures.allies + ProvidesPrerequisite@alliesvanilla: + Factions: allies + Prerequisite: structures.alliesvanilla + ProvidesPrerequisite@england: + Factions: england + Prerequisite: structures.england + ProvidesPrerequisite@france: + Factions: france + Prerequisite: structures.france + ProvidesPrerequisite@germany: + Factions: germany + Prerequisite: structures.germany + ProvidesPrerequisite@soviet: + Factions: soviet, russia, ukraine + Prerequisite: structures.soviet + ProvidesPrerequisite@sovietvanilla: + Factions: soviet + Prerequisite: structures.sovietvanilla + ProvidesPrerequisite@russia: + Factions: russia + Prerequisite: structures.russia + ProvidesPrerequisite@ukraine: + Factions: ukraine + Prerequisite: structures.ukraine + Health: + HP: 1500 + Armor: + Type: Wood + RevealsShroud: + Range: 6c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + Production: + Produces: Building,Defense + Valued: + Cost: 2500 + Tooltip: + Name: Construction Yard + CustomSellValue: + Value: 2500 + EmitInfantryOnSell: + ActorTypes: e1,e1,e1,tecn,tecn,e6 + BaseBuilding: + Transforms: + IntoActor: mcv + Offset: 1,1 + Facing: 96 + RequiresCondition: factundeploy + GrantConditionOnPrerequisite@GLOBALFACTUNDEPLOY: + Condition: factundeploy + Prerequisites: global-factundeploy + ProductionBar@Building: + ProductionType: Building + ProductionBar@Defense: + ProductionType: Defense + Color: 8A8A8A + BaseProvider: + Range: 16c0 + WithBuildingPlacedAnimation: + Power: + Amount: 0 + WithDeathAnimation: + DeathSequence: dead + UseDeathTypeSuffix: false + ProvidesPrerequisite@buildingname: + HitShape: + TargetableOffsets: 1273,939,0, -980,-640,0, -980,640,0 + Type: Rectangle + TopLeft: -1536, -1536 + BottomRight: 1536, 1536 + +PROC: + Inherits: ^Building + Buildable: + Queue: Building + BuildPaletteOrder: 60 + Prerequisites: anypower, ~techlevel.infonly + Description: Refines Ore and Gems\ninto credits. + Valued: + Cost: 1400 + Tooltip: + Name: Ore Refinery + Building: + Footprint: _X_ xxx X== === + Dimensions: 3,4 + LocalCenterOffset: 0,-512,0 + Selectable: + Bounds: 72,50,0,12 + DecorationBounds: 72,70,0,-2 + SelectionDecorations: + Targetable: + TargetTypes: Ground, Structure, C4, DetonateAttack, SpyInfiltrate + Health: + HP: 900 + Armor: + Type: Wood + RevealsShroud: + Range: 6c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + Refinery: + DockAngle: 64 + DockOffset: 1,2 + StoresResources: + PipCount: 17 + Capacity: 2000 + DrawLineToTarget: + CustomSellValue: + Value: 600 + FreeActor: + Actor: HARV + SpawnOffset: 1,2 + Facing: 64 + InfiltrateForCash: + Percentage: 50 + Types: SpyInfiltrate + Notification: CreditsStolen + WithIdleOverlay@TOP: + Sequence: idle-top + Power: + Amount: -30 + WithDeathAnimation: + DeathSequence: dead + UseDeathTypeSuffix: false + ProvidesPrerequisite@buildingname: + HitShape: + Type: Rectangle + TopLeft: -1536, -512 + BottomRight: 1536, 598 + HitShape@TOP: + TargetableOffsets: 1680,0,0 + Type: Rectangle + TopLeft: -512, -1536 + BottomRight: 512, -512 + HitShape@BOTTOMLEFT: + TargetableOffsets: -1260,-1024,0 + Type: Rectangle + TopLeft: -1536, 598 + BottomRight: -512, 1280 + +SILO: + Inherits: ^Building + Buildable: + Queue: Defense + BuildPaletteOrder: 35 + Prerequisites: proc, ~techlevel.infonly + Description: Stores excess refined\nOre and Gems. + Valued: + Cost: 150 + Tooltip: + Name: Silo + -GivesBuildableArea: + Health: + HP: 300 + Armor: + Type: Wood + RevealsShroud: + Range: 5c0 + WithBuildingBib: + HasMinibib: Yes + WithSiloAnimation: + StoresResources: + PipCount: 5 + Capacity: 3000 + -EmitInfantryOnSell: + Power: + Amount: -10 + Explodes: + Weapon: SmallBuildingExplode + EmptyWeapon: SmallBuildingExplode + +HPAD: + Inherits: ^Building + Inherits@shape: ^2x2Shape + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 768,-512,0, 768,512,0, -281,-512,0, -630,512,0 + Buildable: + Queue: Building + BuildPaletteOrder: 120 + Prerequisites: dome, ~structures.allies, ~techlevel.medium + Description: Produces and reloads\nhelicopters. + Valued: + Cost: 500 + Tooltip: + Name: Helipad + Building: + Footprint: xx xx + Dimensions: 2,2 + LocalCenterOffset: 0,0,0 + Health: + HP: 800 + Armor: + Type: Wood + RevealsShroud: + Range: 5c0 + WithBuildingBib: + Exit@1: + SpawnOffset: 0,-256,0 + ExitCell: 0,0 + MoveIntoWorld: false + Facing: 224 + RallyPoint: + Production: + Produces: Aircraft, Helicopter + Reservable: + ProductionBar: + PrimaryBuilding: + PrimaryCondition: primary + Power: + Amount: -10 + ProvidesPrerequisite@allies: + Factions: allies, england, france, germany + Prerequisite: aircraft.allies + ProvidesPrerequisite@alliesvanilla: + Factions: allies + Prerequisite: aircraft.alliesvanilla + ProvidesPrerequisite@england: + Factions: england + Prerequisite: aircraft.england + ProvidesPrerequisite@france: + Factions: france + Prerequisite: aircraft.france + ProvidesPrerequisite@germany: + Factions: germany + Prerequisite: aircraft.germany + ProvidesPrerequisite@alliedstructure: + RequiresPrerequisites: structures.allies + Prerequisite: aircraft.allies + ProvidesPrerequisite@alliedvanillastructure: + RequiresPrerequisites: structures.alliesvanilla + Prerequisite: aircraft.alliesvanilla + ProvidesPrerequisite@englishstructure: + RequiresPrerequisites: structures.england + Prerequisite: aircraft.england + ProvidesPrerequisite@frenchstructure: + RequiresPrerequisites: structures.france + Prerequisite: aircraft.france + ProvidesPrerequisite@germanstructure: + RequiresPrerequisites: structures.germany + Prerequisite: aircraft.germany + ProvidesPrerequisite@buildingname: + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate + InfiltrateForSupportPower: + Proxy: aircraft.upgraded + Types: SpyInfiltrate + WithDecoration@primary: + RequiresSelection: true + Image: pips + Sequence: tag-primary + ReferencePoint: Top + ZOffset: 256 + RequiresCondition: primary + WithRearmAnimation: + +AFLD: + Inherits: ^Building + Inherits@shape: ^3x2Shape + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 420,0,0, 420,-1024,0, 420,1024,0, -777,0,0, -777,-1024,0, -777,1024,0 + Buildable: + Queue: Building + BuildPaletteOrder: 130 + Prerequisites: dome, ~structures.soviet, ~techlevel.medium, ~!structures.ukraine + Description: Produces and reloads aircraft.\n Special Ability: Spy Plane\n Special Ability: Paratroopers + Valued: + Cost: 500 + Tooltip: + Name: Airfield + Selectable: + Class: afld + Building: + Footprint: xxx xxx + Dimensions: 3,2 + Health: + HP: 1000 + Armor: + Type: Wood + RevealsShroud: + Range: 7c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + Exit@1: + ExitCell: 1,1 + Facing: 192 + MoveIntoWorld: false + RallyPoint: + Production: + Produces: Aircraft, Plane + Reservable: + ProvidesPrerequisite@soviet: + Factions: soviet, russia, ukraine + Prerequisite: aircraft.soviet + ProvidesPrerequisite@sovietvanilla: + Factions: soviet + Prerequisite: aircraft.sovietvanilla + ProvidesPrerequisite@russia: + Factions: russia + Prerequisite: aircraft.russia + ProvidesPrerequisite@ukraine: + Factions: ukraine + Prerequisite: aircraft.ukraine + ProvidesPrerequisite@sovietstructure: + RequiresPrerequisites: structures.soviet + Prerequisite: aircraft.soviet + ProvidesPrerequisite@sovietvanillastructure: + RequiresPrerequisites: structures.sovietvanilla + Prerequisite: aircraft.sovietvanilla + ProvidesPrerequisite@russianstructure: + RequiresPrerequisites: structures.russia + Prerequisite: aircraft.russia + ProvidesPrerequisite@ukrainianstructure: + RequiresPrerequisites: structures.ukraine + Prerequisite: aircraft.ukraine + AirstrikePower@spyplane: + OrderName: SovietSpyPlane + Prerequisites: aircraft.soviet + Icon: spyplane + ChargeInterval: 3750 + Description: Spy Plane + LongDesc: Reveals an area of the map\nand cloaked enemy units. + SelectTargetSpeechNotification: SelectTarget + EndChargeSpeechNotification: SpyPlaneReady + CameraActor: camera.spyplane + CameraRemoveDelay: 150 + UnitType: u2 + QuantizedFacings: 8 + DisplayBeacon: true + BeaconPoster: camicon + ArrowSequence: arrow + ClockSequence: clock + CircleSequence: circles + ParatroopersPower@paratroopers: + OrderName: SovietParatroopers + Prerequisites: aircraft.soviet + Icon: paratroopers + ChargeInterval: 7500 + Description: Paratroopers + LongDesc: A Badger drops a squad of infantry\nanywhere on the map. + DropItems: E1R1,E1R1,E1R1,E3R1,E3R1 + ReinforcementsArrivedSpeechNotification: ReinforcementsArrived + SelectTargetSpeechNotification: SelectTarget + AllowImpassableCells: false + QuantizedFacings: 8 + CameraActor: camera.paradrop + DisplayBeacon: true + BeaconPoster: pinficon + ArrowSequence: arrow + ClockSequence: clock + CircleSequence: circles + AirstrikePower@parabombs: + OrderName: UkraineParabombs + Prerequisites: aircraft.ukraine + Icon: parabombs + ChargeInterval: 7500 + Description: Parabombs + LongDesc: A squad of Badgers drop parachuted\nbombs on your target. + SelectTargetSpeechNotification: SelectTarget + CameraActor: camera + CameraRemoveDelay: 150 + UnitType: badr.bomber + QuantizedFacings: 8 + DisplayBeacon: true + BeaconPoster: pbmbicon + SquadSize: 3 + SquadOffset: 1792,1792,0 + ArrowSequence: arrow + ClockSequence: clock + CircleSequence: circles + ProductionBar: + SupportPowerChargeBar: + PrimaryBuilding: + PrimaryCondition: primary + Power: + Amount: -20 + ProvidesPrerequisite@buildingname: + Prerequisite: afld + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate + InfiltrateForSupportPower: + Proxy: aircraft.upgraded + Types: SpyInfiltrate + WithDecoration@primary: + RequiresSelection: true + Image: pips + Sequence: tag-primary + ReferencePoint: Top + ZOffset: 256 + RequiresCondition: primary + WithRearmAnimation: + +AFLD.Ukraine: + Inherits: AFLD + Buildable: + Prerequisites: dome, ~techlevel.medium, ~structures.ukraine + Description: Produces and reloads aircraft.\n Special Ability: Spy Plane\n Special Ability: Paratroopers\n Special Ability: Parabombs + RenderSprites: + Image: afld + +POWR: + Inherits: ^Building + Inherits@POWER_OUTAGE: ^DisabledByPowerOutage + Inherits@shape: ^2x2Shape + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 640,-384,0, 640,512,0, -710,-512,0, -710,512,0 + Buildable: + Queue: Building + BuildPaletteOrder: 10 + Prerequisites: ~techlevel.infonly + Description: Provides power for other structures. + Valued: + Cost: 300 + Tooltip: + Name: Power Plant + ProvidesPrerequisite: + Prerequisite: anypower + Building: + Footprint: xx xx == + Dimensions: 2,3 + LocalCenterOffset: 0,-512,0 + Health: + HP: 400 + Armor: + Type: Wood + RevealsShroud: + Range: 5c0 + WithBuildingBib: + Power: + Amount: 100 + Targetable: + TargetTypes: Ground, Structure, C4, DetonateAttack, SpyInfiltrate + ScalePowerWithHealth: + WithDeathAnimation: + DeathSequence: dead + UseDeathTypeSuffix: false + +APWR: + Inherits: ^Building + Inherits@POWER_OUTAGE: ^DisabledByPowerOutage + Inherits@shape: ^3x2Shape + HitShape: + TargetableOffsets: -355,-1024,0 + Buildable: + Queue: Building + BuildPaletteOrder: 110 + Prerequisites: dome, ~techlevel.medium + Description: Provides double the power of\na standard Power Plant. + Valued: + Cost: 500 + Tooltip: + Name: Advanced Power Plant + ProvidesPrerequisite: + Prerequisite: anypower + Building: + Footprint: xxx Xxx === + Dimensions: 3,3 + LocalCenterOffset: 0,-512,0 + Selectable: + Bounds: 72,48 + DecorationBounds: 72,68,0,-10 + SelectionDecorations: + Health: + HP: 700 + Armor: + Type: Wood + RevealsShroud: + Range: 5c0 + WithBuildingBib: + Power: + Amount: 200 + Targetable: + TargetTypes: Ground, Structure, C4, DetonateAttack, SpyInfiltrate + ScalePowerWithHealth: + WithDeathAnimation: + DeathSequence: dead + UseDeathTypeSuffix: false + +STEK: + Inherits: ^ScienceBuilding + Inherits@shape: ^3x2Shape + HitShape: + TargetableOffsets: 420,-768,0, 420,768,0, -770,-768,0, -770,768,0 + Buildable: + Queue: Building + BuildPaletteOrder: 150 + Prerequisites: weap, dome, ~structures.soviet, ~techlevel.high + Description: Provides Soviet advanced technologies. + Valued: + Cost: 1500 + Tooltip: + Name: Soviet Tech Center + ProvidesPrerequisite: + Prerequisite: techcenter + Building: + Footprint: XxX XxX === + Dimensions: 3,3 + LocalCenterOffset: 0,-512,0 + Health: + HP: 800 + Armor: + Type: Wood + RevealsShroud: + Range: 7c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + Power: + Amount: -100 + ProvidesPrerequisite@buildingname: + +BARR: + Inherits: ^Building + Inherits@shape: ^2x2Shape + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 490,-470,0, 355,512,0, -355,-512,0, -630,512,0 + Buildable: + Queue: Building + BuildPaletteOrder: 30 + Prerequisites: anypower, ~structures.soviet, ~techlevel.infonly + Description: Trains infantry. + Valued: + Cost: 500 + Tooltip: + Name: Soviet Barracks + Building: + Footprint: xx xx == + Dimensions: 2,3 + LocalCenterOffset: 0,-512,0 + Health: + HP: 600 + Armor: + Type: Wood + RevealsShroud: + Range: 5c0 + WithBuildingBib: + RallyPoint: + Exit@1: + SpawnOffset: -170,810,0 + ExitCell: 1,2 + ProductionTypes: Soldier, Infantry + Exit@2: + SpawnOffset: -725,640,0 + ExitCell: 0,2 + ProductionTypes: Soldier, Infantry + Production: + Produces: Infantry, Soldier + PrimaryBuilding: + PrimaryCondition: primary + ProductionBar: + ProvidesPrerequisite: + Prerequisite: barracks + ProvidesPrerequisite@soviet: + Factions: soviet, russia, ukraine + Prerequisite: infantry.soviet + ProvidesPrerequisite@sovietvanilla: + Factions: soviet + Prerequisite: infantry.sovietvanilla + ProvidesPrerequisite@russia: + Factions: russia + Prerequisite: infantry.russia + ProvidesPrerequisite@ukraine: + Factions: ukraine + Prerequisite: infantry.ukraine + ProvidesPrerequisite@sovietstructure: + RequiresPrerequisites: structures.soviet + Prerequisite: infantry.soviet + ProvidesPrerequisite@sovietvanillastructure: + RequiresPrerequisites: structures.sovietvanilla + Prerequisite: infantry.sovietvanilla + ProvidesPrerequisite@russianstructure: + RequiresPrerequisites: structures.russia + Prerequisite: infantry.russia + ProvidesPrerequisite@ukrainianstructure: + RequiresPrerequisites: structures.ukraine + Prerequisite: infantry.ukraine + Power: + Amount: -20 + ProvidesPrerequisite@buildingname: + InfiltrateForSupportPower: + Proxy: barracks.upgraded + Types: SpyInfiltrate + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate + WithDecoration@primary: + RequiresSelection: true + Image: pips + Sequence: tag-primary + ReferencePoint: Top + ZOffset: 256 + RequiresCondition: primary + +KENN: + Inherits: ^Building + Buildable: + Queue: Building + BuildPaletteOrder: 175 + Prerequisites: anypower, ~structures.soviet, ~techlevel.infonly + Description: Trains Attack Dogs. + Valued: + Cost: 100 + Tooltip: + Name: Kennel + -GivesBuildableArea: + Health: + HP: 300 + Armor: + Type: Wood + RevealsShroud: + Range: 4c0 + WithBuildingBib: + HasMinibib: True + RallyPoint: + Offset: 0,2 + Exit@1: + SpawnOffset: -280,400,0 + ExitCell: 0,1 + ProductionTypes: Dog, Infantry + Exit@2: + SpawnOffset: -280,400,0 + ExitCell: -1,0 + ProductionTypes: Dog, Infantry + Production: + Produces: Infantry, Dog + PrimaryBuilding: + PrimaryCondition: primary + ProductionBar: + -EmitInfantryOnSell: + Power: + Amount: 0 + ProvidesPrerequisite@buildingname: + WithDecoration@primary: + RequiresSelection: true + Image: pips + Sequence: tag-primary + ReferencePoint: Top + ZOffset: 256 + RequiresCondition: primary + +TENT: + Inherits: ^Building + Inherits@shape: ^2x2Shape + HitShape: + UseTargetableCellsOffsets: false + TargetableOffsets: 0,0,0, 630,-512,0, 355,512,0, -281,-512,0, -630,512,0 + Buildable: + Queue: Building + BuildPaletteOrder: 20 + Prerequisites: anypower, ~structures.allies, ~techlevel.infonly + Description: Trains infantry. + Valued: + Cost: 500 + Tooltip: + Name: Allied Barracks + Building: + Footprint: xx xx == + Dimensions: 2,3 + LocalCenterOffset: 0,-512,0 + Health: + HP: 600 + Armor: + Type: Wood + RevealsShroud: + Range: 5c0 + WithBuildingBib: + RallyPoint: + Exit@1: + SpawnOffset: -42,810,0 + ExitCell: 1,2 + ProductionTypes: Soldier, Infantry + Exit@2: + SpawnOffset: -725,640,0 + ExitCell: 0,2 + ProductionTypes: Soldier, Infantry + Production: + Produces: Infantry, Soldier + PrimaryBuilding: + PrimaryCondition: primary + ProductionBar: + ProvidesPrerequisite@barracks: + Prerequisite: barracks + ProvidesPrerequisite@allies: + Factions: allies, england, france, germany + Prerequisite: infantry.allies + ProvidesPrerequisite@alliesvanilla: + Factions: allies + Prerequisite: infantry.alliesvanilla + ProvidesPrerequisite@england: + Factions: england + Prerequisite: infantry.england + ProvidesPrerequisite@france: + Factions: france + Prerequisite: infantry.france + ProvidesPrerequisite@germany: + Factions: germany + Prerequisite: infantry.germany + ProvidesPrerequisite@alliedstructure: + RequiresPrerequisites: structures.allies + Prerequisite: infantry.allies + ProvidesPrerequisite@alliedvanillastructure: + RequiresPrerequisites: structures.alliesvanilla + Prerequisite: infantry.alliesvanilla + ProvidesPrerequisite@englishstructure: + RequiresPrerequisites: structures.england + Prerequisite: infantry.england + ProvidesPrerequisite@frenchstructure: + RequiresPrerequisites: structures.france + Prerequisite: infantry.france + ProvidesPrerequisite@germanstructure: + RequiresPrerequisites: structures.germany + Prerequisite: infantry.germany + Power: + Amount: -20 + ProvidesPrerequisite@buildingname: + InfiltrateForSupportPower: + Proxy: barracks.upgraded + Types: SpyInfiltrate + Targetable: + TargetTypes: Ground, C4, DetonateAttack, Structure, SpyInfiltrate + WithDecoration@primary: + RequiresSelection: true + Image: pips + Sequence: tag-primary + ReferencePoint: Top + ZOffset: 256 + RequiresCondition: primary + +FIX: + Inherits: ^Building + Buildable: + Queue: Building + BuildPaletteOrder: 100 + Prerequisites: weap, ~techlevel.medium + Description: Repairs vehicles for credits. + Valued: + Cost: 1200 + Tooltip: + Name: Service Depot + Building: + Footprint: _=_ xxx _=_ + Dimensions: 3,3 + Selectable: + Bounds: 68,34,0,3 + DecorationBounds: 72,48 + SelectionDecorations: + Health: + HP: 800 + Armor: + Type: Wood + RevealsShroud: + Range: 6c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 5c0 + WithBuildingBib: + HasMinibib: Yes + Reservable: + RallyPoint: + RepairsUnits: + HpPerStep: 1000 + Interval: 7 + FinishRepairingNotification: UnitRepaired + PlayerExperience: 15 + WithRepairAnimation: + WithRearmAnimation: + Power: + Amount: -30 + ProvidesPrerequisite@buildingname: + HitShape: + Type: Rectangle + TopLeft: -1536, -683 + BottomRight: 1536, 853 + HitShape@TOPANDBOTTOM: + TargetableOffsets: 840,0,0, -1060,0,0 + Type: Rectangle + TopLeft: -640, -768 + BottomRight: 640, 1024 + +SBAG: + Inherits: ^Wall + Buildable: + Queue: Defense + BuildPaletteOrder: 10 + Prerequisites: fact, ~structures.allies, ~techlevel.low + Description: Stops infantry and light vehicles.\nCan be crushed by tanks. + Valued: + Cost: 50 + CustomSellValue: + Value: 0 + Tooltip: + Name: Sandbag Wall + Health: + HP: 150 + Armor: + Type: Wood + LineBuild: + Range: 8 + NodeTypes: sandbag + LineBuildNode: + Types: sandbag + WithWallSpriteBody: + Type: sandbag + +FENC: + Inherits: ^Wall + Buildable: + Queue: Defense + BuildPaletteOrder: 20 + Prerequisites: fact, ~structures.soviet, ~techlevel.low + Description: Stops infantry and light vehicles.\nCan be crushed by tanks. + Valued: + Cost: 50 + CustomSellValue: + Value: 0 + Tooltip: + Name: Wire Fence + Health: + HP: 150 + Armor: + Type: Wood + LineBuild: + Range: 8 + NodeTypes: fence + LineBuildNode: + Types: fence + WithWallSpriteBody: + Type: fence + +BRIK: + Inherits: ^Wall + Buildable: + Queue: Defense + BuildPaletteOrder: 30 + Prerequisites: fact, ~techlevel.medium + Description: Stop units and blocks enemy fire. + Valued: + Cost: 200 + CustomSellValue: + Value: 0 + Tooltip: + Name: Concrete Wall + SoundOnDamageTransition: + DamagedSounds: crmble2.aud + DestroyedSounds: kaboom30.aud + Health: + HP: 400 + Armor: + Type: Concrete + Crushable: + CrushClasses: heavywall + BlocksProjectiles: + LineBuild: + Range: 8 + NodeTypes: concrete + LineBuildNode: + Types: concrete + WithWallSpriteBody: + Type: concrete + +VGATE: + Inherits: ^Gate + HitShape: + UseTargetableCellsOffsets: true + Type: Rectangle + TopLeft: -512, -1536 + BottomRight: 512, 1536 + Building: + Footprint: x x x + Dimensions: 1,3 + WithGateSpriteBody: + WallConnections: 0,-1, 0,3 + LineBuildNode: + Connections: 0,-1, 0,1 + Tooltip: + Name: Vertical Gate + +HGATE: + Inherits: ^Gate + HitShape: + UseTargetableCellsOffsets: true + Type: Rectangle + TopLeft: -1536, -512 + BottomRight: 1536, 512 + Building: + Footprint: xxx + Dimensions: 3,1 + WithGateSpriteBody: + WallConnections: -1,0, 3,0 + LineBuildNode: + Connections: -1,0, 1,0 + Tooltip: + Name: Horizontal Gate + RenderSprites: + Image: agate + FactionImages: + allies: agate + england: agate + france: agate + germany: agate + soviet: sgate + russia: sgate + ukraine: sgate + +CYCL: + Inherits: ^Wall + Tooltip: + Name: Chain-Link Barrier + Armor: + Type: Wood + LineBuild: + NodeTypes: chain + LineBuildNode: + Types: chain + WithWallSpriteBody: + Type: chain + +BARB: + Inherits: ^Wall + Tooltip: + Name: Barbed-Wire Fence + Armor: + Type: Wood + LineBuild: + NodeTypes: barbwire + LineBuildNode: + Types: barbwire + WithWallSpriteBody: + Type: barbwire + +WOOD: + Inherits: ^Wall + Tooltip: + Name: Wooden Fence + Armor: + Type: Wood + LineBuild: + NodeTypes: woodfence + LineBuildNode: + Types: woodfence + WithWallSpriteBody: + Type: woodfence + +BARRACKS: + AlwaysVisible: + Interactable: + Tooltip: + Name: Infantry Production + Buildable: + Description: Infantry Production + +TECHCENTER: + AlwaysVisible: + Interactable: + Tooltip: + Name: Tech Center + Buildable: + Description: Tech Center + +ANYPOWER: + AlwaysVisible: + Interactable: + Tooltip: + Name: Power Plant + Buildable: + Description: Power Plant diff --git a/mods/ura/rules/vehicles.yaml b/mods/ura/rules/vehicles.yaml new file mode 100644 index 0000000..fd351b5 --- /dev/null +++ b/mods/ura/rules/vehicles.yaml @@ -0,0 +1,1101 @@ +V2RL: + Inherits: ^Vehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Vehicle + BuildPaletteOrder: 90 + Prerequisites: dome, ~vehicles.soviet, ~techlevel.medium + Description: Long-range rocket artillery.\n Strong vs Infantry, Buildings\n Weak vs Vehicles, Aircraft + Valued: + Cost: 900 + Tooltip: + Name: V2 Rocket Launcher + Health: + HP: 200 + Armor: + Type: Light + Mobile: + Speed: 85 + RevealsShroud: + Range: 5c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + Armament: + Weapon: SCUD + PauseOnCondition: !ammo + AmmoPool: + Ammo: 1 + PipCount: 0 + AmmoCondition: ammo + ReloadAmmoPool: + Delay: 240 + Count: 1 + AttackFrontal: + WithFacingSpriteBody: + RequiresCondition: ammo + WithFacingSpriteBody@EMPTY: + RequiresCondition: !ammo + Sequence: empty-idle + SelectionDecorations: + Explodes: + Weapon: V2Explode + ProducibleWithLevel: + Prerequisites: vehicles.upgraded + Selectable: + DecorationBounds: 28,28 + +1TNK: + Inherits: ^TrackedVehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Vehicle + BuildPaletteOrder: 20 + Prerequisites: ~vehicles.allies, ~techlevel.low + Description: Fast tank, good for scouting.\n Strong vs Light armor\n Weak vs Infantry, Tanks, Aircraft + Valued: + Cost: 700 + Tooltip: + Name: Light Tank + GenericName: Tank + Health: + HP: 240 + Armor: + Type: Heavy + Mobile: + Speed: 128 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 6c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + RevealOnDeath: + Duration: 80 + Radius: 2c512 + Turreted: + TurnSpeed: 7 + Armament: + Weapon: 25mm + Recoil: 85 + RecoilRecovery: 25 + LocalOffset: 768,0,90 + MuzzleSequence: muzzle + DetectCloaked: + Range: 1c512 + AttackTurreted: + WithMuzzleOverlay: + WithSpriteTurret: + SpawnActorOnDeath: + Actor: 1TNK.Husk + OwnerType: InternalName + EffectiveOwnerFromOwner: true + ProducibleWithLevel: + Prerequisites: vehicles.upgraded + +2TNK: + Inherits: ^TrackedVehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Vehicle + BuildPaletteOrder: 70 + Prerequisites: fix, ~vehicles.allies, ~techlevel.medium + Description: Allied Main Battle Tank.\n Strong vs Vehicles\n Weak vs Infantry, Aircraft + Valued: + Cost: 850 + Tooltip: + Name: Medium Tank + GenericName: Tank + Health: + HP: 450 + Armor: + Type: Heavy + Mobile: + Speed: 85 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + RevealOnDeath: + Duration: 80 + Radius: 2c512 + Turreted: + TurnSpeed: 5 + Armament: + Weapon: 90mm + Recoil: 128 + RecoilRecovery: 38 + LocalOffset: 720,0,80 + MuzzleSequence: muzzle + DetectCloaked: + Range: 1c512 + AttackTurreted: + WithMuzzleOverlay: + WithSpriteTurret: + SpawnActorOnDeath: + Actor: 2TNK.Husk + OwnerType: InternalName + EffectiveOwnerFromOwner: true + SelectionDecorations: + ProducibleWithLevel: + Prerequisites: vehicles.upgraded + Selectable: + DecorationBounds: 28,28 + +#2TNK.GER: +# Inherits: 2TNK +# Buildable: +# Prerequisites: fix, ~vehicles.germany, ~techlevel.medium +# Valued: +# Cost: 1050 +# Health: +# HP: 500 +# Tooltip: +# Name: German Medium Tank +# Description: German Main Battle Tank.\n Strong vs Vehicles\n Weak vs Infantry, Aircraft +# Turreted: +# TurnSpeed: 4 +# Armament: +# Weapon: 90mm.Germany +# RenderSprites: +# Image: 2tnkger +# SpawnActorOnDeath: +# Actor: 2TNK.GER.Husk + +3TNK: + Inherits: ^TrackedVehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Vehicle + BuildPaletteOrder: 70 + Prerequisites: fix, ~vehicles.soviet, ~techlevel.medium + Description: Soviet Main Battle Tank, with dual cannons\n Strong vs Vehicles\n Weak vs Infantry, Aircraft + Valued: + Cost: 1150 + Tooltip: + Name: Heavy Tank + GenericName: Tank + Health: + HP: 600 + Armor: + Type: Heavy + Mobile: + Speed: 71 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + RevealOnDeath: + Duration: 80 + Radius: 2c512 + Turreted: + TurnSpeed: 5 + Armament: + Weapon: 105mm + Recoil: 128 + RecoilRecovery: 38 + LocalOffset: 768,85,90, 768,-85,90 + MuzzleSequence: muzzle + DetectCloaked: + Range: 1c512 + AttackTurreted: + WithMuzzleOverlay: + WithSpriteTurret: + SpawnActorOnDeath: + Actor: 3TNK.Husk + OwnerType: InternalName + EffectiveOwnerFromOwner: true + SelectionDecorations: + ProducibleWithLevel: + Prerequisites: vehicles.upgraded + Selectable: + DecorationBounds: 28,28 + +4TNK: + Inherits: ^TrackedVehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetAll + Buildable: + Queue: Vehicle + BuildPaletteOrder: 160 + Prerequisites: fix, stek, ~vehicles.soviet, ~techlevel.high + BuildDuration: 2500 + BuildDurationModifier: 40 + Description: Big and slow tank, with anti-air capability.\nCan crush concrete walls.\nCan detect cloaked units.\n Strong vs Vehicles, Infantry, Aircraft\n Weak vs Nothing + Valued: + Cost: 2000 + Tooltip: + Name: Mammoth Tank + GenericName: Tank + Health: + HP: 900 + Armor: + Type: Heavy + Mobile: + Speed: 50 + Crushes: wall, mine, crate, infantry, heavywall + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + RevealOnDeath: + Duration: 80 + Radius: 2c512 + Turreted: + TurnSpeed: 2 + Armament@PRIMARY: + Weapon: 120mm + LocalOffset: 900,180,340, 900,-180,340 + Recoil: 171 + RecoilRecovery: 30 + MuzzleSequence: muzzle + Armament@SECONDARY: + Name: secondary + Weapon: MammothTusk + LocalOffset: -85,384,340, -85,-384,340 + LocalYaw: -100,100 + Recoil: 43 + MuzzleSequence: muzzle + DetectCloaked: + Range: 1c512 + AttackTurreted: + WithMuzzleOverlay: + WithSpriteTurret: + SpawnActorOnDeath: + Actor: 4TNK.Husk + OwnerType: InternalName + EffectiveOwnerFromOwner: true + SelfHealing: + Step: 100 + Delay: 3 + HealIfBelow: 50 + DamageCooldown: 150 + SelectionDecorations: + ProducibleWithLevel: + Prerequisites: vehicles.upgraded + DetectCloaked: + Range: 6c0 + Selectable: + DecorationBounds: 44,38,0,-4 + +#Modified version of the Mammoth KV-8 by FiveAces +4TNK.KV-8: + Inherits: 4TNK + Buildable: + BuildPaletteOrder: 200 + Prerequisites: fix, stek, ~vehicles.ukraine, ~techlevel.high + Tooltip: + Name: Mammoth KV-8 + Description: Heavy flamethrower tank, with anti-air capability.\n Strong vs Buildings, Infantry, Aircraft\n Weak vs Tanks + Health: + HP: 800 + Mobile: + Speed: 63 + Armament@PRIMARY: + Weapon: KVFlame + LocalOffset: 900,180,340, 900,-180,340 + Recoil: 171 + RecoilRecovery: 30 + MuzzleSequence: muzzle + Armament@SECONDARY: + Name: secondary + Weapon: MammothTuskAT + LocalOffset: -85,384,340, -85,-384,340 + LocalYaw: -100,100 + Recoil: 43 + MuzzleSequence: muzzle + SpawnActorOnDeath: + Actor: 4TNK.KV-8.Husk + RenderSprites: + Image: 4tnk.kv-8 + +ARTY: + Inherits: ^TrackedVehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Vehicle + BuildPaletteOrder: 80 + Prerequisites: dome, ~vehicles.allies, ~techlevel.medium + Description: Long-range artillery.\n Strong vs Infantry, Buildings\n Weak vs Vehicles, Aircraft + Valued: + Cost: 800 + Tooltip: + Name: Artillery + Health: + HP: 100 + Armor: + Type: Light + Mobile: + TurnSpeed: 2 + Speed: 85 + RevealsShroud: + Range: 5c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + Armament: + Weapon: 155mm + LocalOffset: 624,0,208 + MuzzleSequence: muzzle + AttackFrontal: + WithMuzzleOverlay: + Explodes: + Weapon: ArtilleryExplode + EmptyWeapon: UnitExplodeSmall + LoadedChance: 75 + ProducibleWithLevel: + Prerequisites: vehicles.upgraded + +HARV: + Inherits: ^Vehicle + Buildable: + Queue: Vehicle + BuildPaletteOrder: 10 + Prerequisites: proc, ~techlevel.infonly + Description: Collects Ore and Gems for processing.\n Unarmed + Valued: + Cost: 1100 + Tooltip: + Name: Ore Truck + GenericName: Harvester + Selectable: + Priority: 7 + DecorationBounds: 42,42 + SelectionDecorations: + Harvester: + Capacity: 20 + Resources: Ore,Gems + BaleUnloadDelay: 1 + SearchFromProcRadius: 30 + SearchFromOrderRadius: 11 + Health: + HP: 600 + Armor: + Type: Heavy + Mobile: + Speed: 85 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 6c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + RevealOnDeath: + Duration: 80 + Radius: 2c512 + WithHarvestAnimation: + PrefixByFullness: empty-, half-, full- + WithDockingAnimation: + GpsDot: + String: Harvester + SpawnActorOnDeath: + Actor: HARV.EmptyHusk + OwnerType: InternalName + EffectiveOwnerFromOwner: true + HarvesterHuskModifier: + FullActor: HARV.FullHusk + FullnessThreshold: 50 + SelfHealing: + Step: 100 + Delay: 25 + HealIfBelow: 50 + DamageCooldown: 500 + Explodes: + Weapon: OreExplosion + +MCV: + Inherits: ^Vehicle + Buildable: + Queue: Vehicle + BuildPaletteOrder: 90 + Prerequisites: fix, ~techlevel.medium + BuildDuration: 2500 + BuildDurationModifier: 40 + Description: Deploys into another Construction Yard.\n Unarmed + Valued: + Cost: 2000 + Tooltip: + Name: Mobile Construction Vehicle + Selectable: + Priority: 4 + DecorationBounds: 42,42 + SelectionDecorations: + Health: + HP: 600 + Armor: + Type: Light + Mobile: + Speed: 71 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 6c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + RevealOnDeath: + Duration: 80 + Radius: 2c512 + Transforms: + IntoActor: fact + Offset: -1,-1 + Facing: 96 + TransformSounds: placbldg.aud, build5.aud + NoTransformNotification: BuildingCannotPlaceAudio + MustBeDestroyed: + RequiredForShortGame: true + BaseBuilding: + SpawnActorOnDeath: + Actor: MCV.Husk + OwnerType: InternalName + EffectiveOwnerFromOwner: true + +#Jeep IFV traits using custom yaml code by Grayon Dilach +JEEP: + Inherits: ^Vehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Vehicle + BuildPaletteOrder: 30 + Prerequisites: ~vehicles.allies, ~techlevel.low + Description: Fast scout & anti-infantry vehicle.\nCan carry one infantry.\n Strong vs Infantry\n Weak vs Vehicles, Aircraft + Valued: + Cost: 500 + Tooltip: + Name: Ranger + Health: + HP: 160 + Armor: + Type: Light + Mobile: + TurnSpeed: 10 + Speed: 170 + RequiresCondition: !notmobile + RevealsShroud: + Range: 9c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + Turreted: + TurnSpeed: 10 + Offset: 0,0,128 + Armament: + Weapon: M60mg + MuzzleSequence: muzzle + LocalOffset: 128,0,43 + AttackTurreted: + WithMuzzleOverlay: + WithSpriteTurret: + Cargo: + Types: Infantry + MaxWeight: 1 + PipCount: 1 + LoadingCondition: notmobile + ProducibleWithLevel: + Prerequisites: vehicles.upgraded + Cargo: + LoadedCondition: loaded + PassengerConditions: + e1: ifv-rifle + e1r1: ifv-rifle + e2: ifv-grenadier + e3: ifv-rocket + e3r1: ifv-rocket + e4: ifv-flame + e6: ifv-engineer + spy: ifv-spy + spy.england: ifv-spy + e7: ifv-tanya + medi: ifv-medic + mech: ifv-mechanic + hijacker: ifv-hijacker + thf: ifv-hijacker + shok: ifv-tesla + sniper: ifv-sniper + dog: ifv-dog + tecn: ifv-technician + GrantCondition@civfallback: + RequiresCondition: loaded && !ifv-rifle && !ifv-grenadier && !ifv-rocket && !ifv-flame && !ifv-engineer && !ifv-spy && !ifv-tanya && !ifv-medic && !ifv-mechanic && !ifv-hijacker && !ifv-tesla && !ifv-sniper && !ifv-dog && !ifv-technician + Condition: ifv-civilian + Tooltip: + Name: Ranger + RequiresCondition: !loaded + RenderDetectionCircle: + Armament: + RequiresCondition: !loaded || ifv-rifle || ifv-civilian || ifv-spy || ifv-hijacker || ifv-dog || ifv-engineer + FirepowerMultiplier@generic-ifv-bonus: + Modifier: 125 + RequiresCondition: ifv-rifle + FirepowerMultiplier@generic-ifv-bonus2: + Modifier: 150 + RequiresCondition: ifv-medic || ifv-mechanic || ifv-technician + FirepowerMultiplier@generic-ifv-bonus3: + Modifier: 60 + RequiresCondition: ifv-rocket + FirepowerMultiplier@generic-ifv-bonus4: + Modifier: 75 + RequiresCondition: ifv-flame + Tooltip@default: + Name: Ranger + RequiresCondition: ifv-engineer || ifv-hijacker + Tooltip@rifleman: + Name: Assault Ranger + RequiresCondition: ifv-rifle + Armament@rocketAG: + Weapon: Dragon + LocalOffset: 128,0,43 + RequiresCondition: ifv-rocket + Tooltip@rocket: + Name: Rocket Ranger + RequiresCondition: ifv-rocket + Armament@medic: + Weapon: Heal + Cursor: heal + OutsideRangeCursor: heal + TargetStances: Ally + ForceTargetStances: None + RequiresCondition: ifv-medic + Tooltip@medic: + Name: Medic Ranger + RequiresCondition: ifv-medic + Armament@mechanic: + Weapon: Repair + Cursor: repair + OutsideRangeCursor: repair + TargetStances: Ally + ForceTargetStances: None + RequiresCondition: ifv-mechanic + SelfHealing@mechanic: + Step: 10 + Delay: 50 + HealIfBelow: 100 + DamageCooldown: 150 + RequiresCondition: ifv-mechanic + Tooltip@mechanic: + Name: Mechanic Ranger + RequiresCondition: ifv-mechanic + DetectCloaked@spyorhijackerordog: + CloakTypes: Cloak, Hijacker + RequiresCondition: ifv-spy || ifv-dog + Tooltip@dogorspy: + Name: Detection Ranger + RequiresCondition: ifv-spy || ifv-dog + Armament@technician: + Weapon: Pistol + LocalOffset: 128,0,43 + MuzzleSequence: muzzle + RequiresCondition: ifv-technician + Tooltip@technician: + Name: Light Ranger + RequiresCondition: ifv-technician + Armament@sniper: + Weapon: SniperIFV + LocalOffset: 128,0,43 + RequiresCondition: ifv-sniper || ifv-tanya + MuzzleSequence: muzzle + Tooltip@sniper: + Name: Sniper Ranger + RequiresCondition: ifv-sniper + Tooltip@tanya: + Name: Sniper Ranger + RequiresCondition: ifv-tanya + + Armament@grenadier: + Weapon: Grenade + LocalOffset: 128,0,43 + RequiresCondition: ifv-grenadier + Tooltip@grenadier: + Name: Grenade Ranger + RequiresCondition: ifv-grenadier + Armament@flamer: + Weapon: Flamer + LocalOffset: 128,0,43 + RequiresCondition: ifv-flame + Tooltip@flamer: + Name: Flamer Ranger + RequiresCondition: ifv-flame + Armament@shock: + Weapon: TTankZap + LocalOffset: 128,0,43 + RequiresCondition: ifv-tesla + Tooltip@shock: + Name: Shock Ranger + RequiresCondition: ifv-tesla + GrantCondition@customautotarget: + RequiresCondition: ifv-medic || ifv-mechanic || ifv-sniper || ifv-tanya + Condition: customautotarget + AutoTargetPriority@DEFAULT: + RequiresCondition: !stance-attackanything && !assault-move && !customautotarget + AutoTargetPriority@ATTACKANYTHING: + RequiresCondition: stance-attackanything || assault-move && !customautotarget + AutoTargetPriority@INCLUDEAIR: + ValidTargets: Air + InvalidTargets: NoAutoTarget + RequiresCondition: ifv-rocket || ifv-tanya + AutoTargetPriority@MEDICORSNIPERORTANYA: + ValidTargets: Infantry + InvalidTargets: NoAutoTarget + RequiresCondition: ifv-medic || ifv-sniper || ifv-tanya + AutoTargetPriority@MECHANIC: + ValidTargets: Vehicle, Tank + InvalidTargets: NoAutoTarget + RequiresCondition: ifv-mechanic + +APC: + Inherits: ^TrackedVehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Vehicle + BuildPaletteOrder: 40 + Prerequisites: ~vehicles.soviet, ~techlevel.low + Description: Tough infantry transport.\n Strong vs Infantry, Light armor\n Weak vs Tanks, Aircraft + Valued: + Cost: 850 + Tooltip: + Name: Armored Personnel Carrier + Health: + HP: 300 + Armor: + Type: Heavy + Mobile: + Speed: 142 + Crushes: wall, mine, crate, infantry + RequiresCondition: !notmobile + RevealsShroud: + Range: 6c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + Armament: + Weapon: M60mg + LocalOffset: 85,0,171 + MuzzleSequence: muzzle + DetectCloaked: + Range: 1c512 + AttackFrontal: + WithMuzzleOverlay: + Cargo: + Types: Infantry + MaxWeight: 5 + PipCount: 5 + LoadingCondition: notmobile + ProducibleWithLevel: + Prerequisites: vehicles.upgraded + +MNLY: + Inherits: ^TrackedVehicle + Buildable: + Queue: Vehicle + BuildPaletteOrder: 100 + Prerequisites: fix, ~techlevel.medium + Description: Lays mines to destroy\nunwary enemy units.\nCan detect mines.\n Unarmed + Valued: + Cost: 800 + Tooltip: + Name: Minelayer + Health: + HP: 150 + Armor: + Type: Heavy + Mobile: + Speed: 128 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 6c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + Minelayer: + Mine: MINV + MineImmune: + AmmoPool: + Ammo: 5 + RearmSound: minelay1.aud + DetectCloaked: + Range: 5c0 + CloakTypes: Mine + RenderDetectionCircle: + Explodes: + Weapon: ATMine + RenderSprites: + Image: MNLY + +TRUK: + Inherits: ^Vehicle + Buildable: + Queue: Vehicle + BuildPaletteOrder: 50 + Prerequisites: ~techlevel.low + Description: Transports cash to other players.\n Unarmed + Valued: + Cost: 500 + Tooltip: + Name: Supply Truck + Selectable: + Priority: 6 + Health: + HP: 110 + Armor: + Type: Light + Mobile: + Speed: 128 + RevealsShroud: + Range: 5c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + DeliversCash: + Payload: 500 + PlayerExperience: 50 + SpawnActorOnDeath: + Actor: moneycrate + +MGG: + Inherits: ^Vehicle + Buildable: + Queue: Vehicle + BuildPaletteOrder: 150 + Prerequisites: dome, ~vehicles.france, ~techlevel.medium + BuildDuration: 1370 + BuildDurationModifier: 40 + Description: Regenerates the shroud nearby, \nobscuring the area.\n Unarmed + Valued: + Cost: 1100 + Tooltip: + Name: Mobile Gap Generator + Health: + HP: 220 + Armor: + Type: Heavy + Mobile: + Speed: 99 + WithIdleOverlay@SPINNER: + Offset: -299,0,171 + Sequence: spinner + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + CreatesShroud: + Range: 7c256 + RenderShroudCircle: + SpawnActorOnDeath: + Actor: MGG.Husk + OwnerType: InternalName + EffectiveOwnerFromOwner: true + +MRJ: + Inherits: ^Vehicle + Valued: + Cost: 1100 + Tooltip: + Name: Mobile Radar Jammer + Buildable: + Queue: Vehicle + BuildPaletteOrder: 140 + Prerequisites: atek, ~vehicles.allies, ~techlevel.high + BuildDuration: 1370 + BuildDurationModifier: 40 + Description: Jams nearby enemy radar domes\nand deflects incoming missiles.\nCan detect cloaked units.\n Unarmed + Health: + HP: 220 + Armor: + Type: Heavy + Mobile: + Speed: 99 + RevealsShroud: + Range: 9c256 + WithIdleOverlay@SPINNER: + Sequence: spinner + Offset: -256,0,256 + ProximityExternalCondition@JAMMER: + Range: 18c0 + ValidStances: Enemy, Neutral + Condition: jammed + WithRangeCircle@JAMMER: + Type: jammer + Range: 18c0 + Color: 0000FF80 + JamsMissiles: + Range: 6c0 + DeflectionStances: Neutral, Enemy + RenderJammerCircle: + DetectCloaked: + Range: 6c0 + +TTNK: + Inherits: ^TrackedVehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Vehicle + BuildPaletteOrder: 200 + Prerequisites: tsla, stek, ~vehicles.russia, ~techlevel.high + BuildDuration: 1166 + Description: Tank with mounted Tesla coil.\n Strong vs Infantry, Vehicles, Buildings\n Weak vs Aircraft + Valued: + Cost: 1350 + Tooltip: + Name: Tesla Tank + GenericName: Tank + Health: + HP: 450 + Armor: + Type: Light + Mobile: + Speed: 113 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 8c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + Armament: + Weapon: TTankZap + LocalOffset: 0,0,213 + DetectCloaked: + Range: 1c512 + AttackTurreted: + Turreted: + WithIdleOverlay@SPINNER: + Sequence: spinner + SelectionDecorations: + ProducibleWithLevel: + Prerequisites: vehicles.upgraded + Selectable: + DecorationBounds: 30,30 + +FTRK: + Inherits: ^Vehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetAll + Buildable: + Queue: Vehicle + BuildPaletteOrder: 20 + Prerequisites: ~vehicles.soviet, ~techlevel.low + Description: Mobile unit with mounted Flak cannon.\n Strong vs Infantry, Light armor, Aircraft\n Weak vs Tanks + Valued: + Cost: 600 + Tooltip: + Name: Mobile Flak + Health: + HP: 150 + Armor: + Type: Light + Mobile: + TurnSpeed: 10 + Speed: 128 + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + Turreted: + TurnSpeed: 10 + Offset: -298,0,298 + Armament@AA: + Weapon: FLAK-23-AA + Recoil: 85 + LocalOffset: 512,0,192 + MuzzleSequence: muzzle + Armament@AG: + Weapon: FLAK-23-AG + Recoil: 85 + LocalOffset: 512,0,192 + MuzzleSequence: muzzle + DetectCloaked: + Range: 1c512 + AttackTurreted: + WithMuzzleOverlay: + WithSpriteTurret: + SelectionDecorations: + ProducibleWithLevel: + Prerequisites: vehicles.upgraded + Selectable: + DecorationBounds: 28,28 + +DTRK: + Inherits: ^Vehicle + Buildable: + Queue: Vehicle + BuildPaletteOrder: 200 + Prerequisites: stek, ~vehicles.ukraine, ~techlevel.high + Description: Truck with actively armed nuclear\nexplosives. Has very weak armor. + Valued: + Cost: 2500 + Tooltip: + Name: Demolition Truck + Health: + HP: 50 + Armor: + Type: Light + Mobile: + Speed: 85 + RevealsShroud: + Range: 5c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + Explodes: + Weapon: MiniNuke + EmptyWeapon: MiniNuke + AttackSuicides: + -DamageMultiplier@IRONCURTAIN: + KillsSelf: + RequiresCondition: invulnerability + Chronoshiftable: + ExplodeInstead: yes + +CTNK: + Inherits: ^Vehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Vehicle + BuildPaletteOrder: 200 + Prerequisites: atek, ~vehicles.germany, ~techlevel.high + BuildDuration: 1166 + Description: Armed with anti-ground missiles.\nTeleports to areas within range.\n Strong vs Vehicles, Buildings\n Weak vs Infantry, Aircraft\n Special ability: Can teleport + Valued: + Cost: 1350 + Tooltip: + Name: Chrono Tank + GenericName: Tank + SelectionDecorations: + Health: + HP: 450 + Armor: + Type: Light + Mobile: + Speed: 113 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 8c0 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + Armament@PRIMARY: + Weapon: APTusk + LocalOffset: -160,-276,232 + LocalYaw: 60 + Armament@SECONDARY: + Weapon: APTusk + LocalOffset: -160,276,232 + LocalYaw: -60 + DetectCloaked: + Range: 1c512 + AttackFrontal: + PortableChrono: + ChargeDelay: 300 + MaxDistance: 14 + ProducibleWithLevel: + Prerequisites: vehicles.upgraded + Selectable: + DecorationBounds: 30,30 + +QTNK: + Inherits: ^TrackedVehicle + Buildable: + Queue: Vehicle + BuildPaletteOrder: 170 + BuildDuration: 1917 + Prerequisites: fix, stek, ~vehicles.soviet, ~techlevel.high + Description: Deals seismic damage to nearby vehicles\nand structures.\n Strong vs Vehicles, Buildings\n Weak vs Infantry, Aircraft + Valued: + Cost: 2200 + Tooltip: + Name: MAD Tank + GenericName: Tank + Health: + HP: 800 + Armor: + Type: Heavy + Mobile: + Speed: 56 + Crushes: wall, mine, crate, infantry + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + SelectionDecorations: + MadTank: + ChargeDelay: 192 + KillsSelf: + RequiresCondition: invulnerability + Targetable: + TargetTypes: Ground, MADTank, Repair, Vehicle + Selectable: + DecorationBounds: 44,38,0,-4 + +STNK: + Inherits: ^Vehicle + Inherits@GAINSEXPERIENCE: ^GainsExperience + Inherits@AUTOTARGET: ^AutoTargetGround + Buildable: + Queue: Vehicle + BuildPaletteOrder: 200 + Prerequisites: atek, ~vehicles.england, ~techlevel.high + BuildDuration: 1166 + Description: Lightly armored infantry transport which\ncan cloak. Armed with anti-ground missiles.\nCan detect cloaked units.\n Strong vs Light armor\n Weak vs Infantry, Tanks, Aircraft + Valued: + Cost: 1350 + Tooltip: + Name: Phase Transport + Health: + HP: 300 + Armor: + Type: Light + Mobile: + Speed: 142 + Crushes: wall, mine, crate, infantry + RequiresCondition: !notmobile + RevealsShroud: + Range: 7c256 + RevealGeneratedShroud: False + RevealsShroud@GAPGEN: + Range: 4c0 + AutoTarget: + InitialStance: HoldFire + InitialStanceAI: ReturnFire + Armament: + Weapon: APTusk + LocalOffset: 192,0,176 + DetectCloaked: + Range: 6c0 + Turreted: + TurnSpeed: 5 + AttackTurreted: + WithSpriteTurret: + Cargo: + Types: Infantry + MaxWeight: 4 + PipCount: 4 + LoadingCondition: notmobile + Cloak: + InitialDelay: 125 + CloakDelay: 175 + CloakSound: appear1.aud + UncloakSound: appear1.aud + IsPlayerPalette: true + RequiresCondition: !cloak-force-disabled + GrantConditionOnDamageState@UNCLOAK: + Condition: cloak-force-disabled + ValidDamageStates: Critical + DetectCloaked: + Range: 7c0 + -MustBeDestroyed: + ProducibleWithLevel: + Prerequisites: vehicles.upgraded diff --git a/mods/ura/rules/world.yaml b/mods/ura/rules/world.yaml new file mode 100644 index 0000000..a4606f4 --- /dev/null +++ b/mods/ura/rules/world.yaml @@ -0,0 +1,192 @@ +^BaseWorld: + Inherits: ^Palettes + AlwaysVisible: + ActorMap: + ScreenMap: + MusicPlaylist: + VictoryMusic: score + DefeatMusic: map + TerrainGeometryOverlay: + DebugVisualizations: + ShroudRenderer: + FogVariants: shroud + Index: 255, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240, 20, 40, 56, 65, 97, 130, 148, 194, 24, 33, 66, 132, 28, 41, 67, 134, 1, 2, 4, 8, 3, 6, 12, 9, 7, 14, 13, 11, 5, 10, 15, 255 + UseExtendedIndex: true + Faction@0: + Name: Allies + InternalName: allies + Side: Allies + Selectable: False + Faction@1: + Name: England + InternalName: england + Side: Allies + Description: England: Espionage\nSpecial Unit: British Spy\nSpecial Unit: Phase Transport + Faction@2: + Name: France + InternalName: france + Side: Allies + Description: France: Deception\nSpecial Ability: Can build fake structures\nSpecial Unit: Mobile Gap Generator + Faction@3: + Name: Germany + InternalName: germany + Side: Allies + Description: Germany: Technology\nSpecial Ability: Advanced Chronoshift\nSpecial Unit: Chrono Tank + Faction@4: + Name: Soviet + InternalName: soviet + Side: Soviet + Selectable: False + Faction@5: + Name: Russia + InternalName: russia + Side: Soviet + Description: Russia: Tesla Weapons\nSpecial Unit: Tesla Tank\nSpecial Unit: Shock Trooper + Faction@6: + Name: Ukraine + InternalName: ukraine + Side: Soviet + Description: Ukraine: Demolitions\nSpecial Ability: Parabombs\nSpecial Unit: Demolition Truck + Faction@random: + Name: Any + InternalName: Random + RandomFactionMembers: RandomAllies, RandomSoviet + Side: Random + Description: Random Country\nA random country will be chosen when the game starts. + Faction@randomallies: + Name: Allies + InternalName: RandomAllies + RandomFactionMembers: england, france, germany + Side: Random + Description: Random Allied Country\nA random Allied country will be chosen when the game starts. + Faction@randomsoviet: + Name: Soviet + InternalName: RandomSoviet + RandomFactionMembers: russia, ukraine + Side: Random + Description: Random Soviet Country\nA random Soviet country will be chosen when the game starts. + ResourceType@ore: + Type: Ore + Name: Valuable Minerals + PipColor: Yellow + ResourceType: 1 + TerrainType: Ore + Palette: player + Sequences: gold01,gold02,gold03,gold04 + MaxDensity: 12 + ValuePerUnit: 25 + AllowedTerrainTypes: Clear,Road + AllowUnderActors: true + ResourceType@gem: + Type: Gems + Name: Valuable Minerals + PipColor: Red + ResourceType: 2 + TerrainType: Gems + Palette: player + Sequences: gem01,gem02,gem03,gem04 + MaxDensity: 3 + ValuePerUnit: 50 + AllowedTerrainTypes: Clear,Road + AllowUnderActors: true + +World: + Inherits: ^BaseWorld + ChatCommands: + DevCommands: + DebugVisualizationCommands: + PlayerCommands: + HelpCommand: + ScreenShaker: + BuildingInfluence: + ProductionQueueFromSelection: + ProductionPaletteWidget: PRODUCTION_PALETTE + LegacyBridgeLayer: + Bridges: bridge1, bridge2, br1, br2, br3, sbridge1, sbridge2, sbridge3, sbridge4 + GlobalLightingPaletteEffect: + Ambient: 0.95 + CustomTerrainDebugOverlay: + CrateSpawner: + DeliveryAircraft: badr + QuantizedFacings: 16 + Minimum: 1 + Maximum: 3 + SpawnInterval: 3000 + WaterChance: 20 + InitialSpawnDelay: 1500 + CheckboxDisplayOrder: 1 + DomainIndex: + SmudgeLayer@SCORCH: + Type: Scorch + Sequence: scorches + SmokePercentage: 50 + SmudgeLayer@CRATER: + Type: Crater + Sequence: craters + ResourceLayer: + ResourceClaimLayer: + WarheadDebugOverlay: + SpawnMapActors: + MapBuildRadius: + AllyBuildRadiusCheckboxDisplayOrder: 4 + BuildRadiusCheckboxDisplayOrder: 5 + MapOptions: + ShortGameCheckboxDisplayOrder: 2 + TechLevelDropdownDisplayOrder: 2 + GameSpeedDropdownDisplayOrder: 3 + CreateMPPlayers: + MPStartUnits@mcvonly: + Class: none + ClassName: MCV Only + Factions: allies, england, france, germany, soviet, russia, ukraine + BaseActor: mcv + MPStartUnits@lightallies: + Class: light + ClassName: Light Support + Factions: allies, england, france, germany + BaseActor: mcv + SupportActors: e1,e1,e1,e3,e3,jeep,1tnk + InnerSupportRadius: 3 + OuterSupportRadius: 5 + MPStartUnits@lightsoviet: + Class: light + ClassName: Light Support + Factions: soviet, russia, ukraine + BaseActor: mcv + SupportActors: e1,e1,e1,e3,e3,apc,ftrk + InnerSupportRadius: 3 + OuterSupportRadius: 5 + MPStartUnits@heavyallies: + Class: heavy + ClassName: Heavy Support + Factions: allies, england, france, germany + BaseActor: mcv + SupportActors: e1,e1,e1,e3,e3,jeep,1tnk,2tnk,2tnk,2tnk + InnerSupportRadius: 3 + OuterSupportRadius: 5 + MPStartUnits@heavysoviet: + Class: heavy + ClassName: Heavy Support + Factions: soviet, russia, ukraine + BaseActor: mcv + SupportActors: e1,e1,e1,e3,e3,apc,ftrk,3tnk,3tnk + InnerSupportRadius: 3 + OuterSupportRadius: 5 + MPStartLocations: + SpawnMPUnits: + DropdownDisplayOrder: 1 + PathFinder: + ValidateOrder: + DebugPauseState: + RadarPings: + StartGameNotification: + ObjectivesPanel: + PanelName: SKIRMISH_STATS + LoadWidgetAtGameStart: + +EditorWorld: + Inherits: ^BaseWorld + EditorActorLayer: + EditorResourceLayer: + EditorSelectionLayer: + LoadWidgetAtGameStart: diff --git a/mods/ura/sequences/aircraft.yaml b/mods/ura/sequences/aircraft.yaml new file mode 100644 index 0000000..50df86a --- /dev/null +++ b/mods/ura/sequences/aircraft.yaml @@ -0,0 +1,72 @@ +mig: + idle: + Facings: 16 + icon: migicon + +yak: + idle: + Facings: 16 + muzzle: minigun + Length: 6 + Facings: 8 + icon: yakicon + +heli: + idle: + Facings: 32 + UseClassicFacingFudge: True + rotor: lrotor + Length: 4 + slow-rotor: lrotor + Start: 4 + Length: 8 + icon: heliicon + +hind: + idle: + Facings: 32 + UseClassicFacingFudge: True + rotor: lrotorlg + Length: 4 + slow-rotor: lrotorlg + Start: 4 + Length: 8 + muzzle: minigun + Length: 6 + Facings: 8 + icon: hindicon + +tran: + idle: tran2 + Facings: 32 + UseClassicFacingFudge: True + rotor: lrotor + Length: 4 + rotor2: rrotor + Length: 4 + slow-rotor: lrotor + Start: 4 + Length: 8 + slow-rotor2: rrotor + Start: 4 + Length: 8 + open: tran2 + Start: 32 + Length: 4 + unload: tran2 + Start: 35 + icon: tranicon + +tran1husk: + idle: + +tran2husk: + idle: + +u2: + idle: + Facings: 16 + +badr: + idle: + Facings: 16 diff --git a/mods/ura/sequences/decorations.yaml b/mods/ura/sequences/decorations.yaml new file mode 100644 index 0000000..3bfe78b --- /dev/null +++ b/mods/ura/sequences/decorations.yaml @@ -0,0 +1,989 @@ +tc04: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +tc04.husk: + Defaults: tc04 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +tc05: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +tc05.husk: + Defaults: tc05 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +tc03: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +tc03.husk: + Defaults: tc03 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +tc02: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +tc02.husk: + Defaults: tc02 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +tc01: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + idle: + +tc01.husk: + Defaults: tc01 + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t17: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t17.husk: + Defaults: t17 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t16: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t16.husk: + Defaults: t16 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t15: + Defaults: t15 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t15.husk: + Defaults: t15 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t14: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t14.husk: + Defaults: t14 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t13: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t13.husk: + Defaults: t13 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t12: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t12.husk: + Defaults: t12 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t11: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t11.husk: + Defaults: t11 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t10: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t10.husk: + Defaults: t10 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t08: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + idle: + +t08.husk: + Defaults: t08 + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t07: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t07.husk: + Defaults: t07 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t06: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t06.husk: + Defaults: t06 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t05: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t05.husk: + Defaults: t05 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t03: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t03.husk: + Defaults: t03 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t02: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t02.husk: + Defaults: t02 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +t01: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + +t01.husk: + Defaults: t01 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + Start: 1 + dead: + Start: 2 + Length: 8 + Tick: 80 + +ice01: + idle: ice01.sno + Length: * + AddExtension: false + +ice02: + idle: ice02.sno + Length: * + AddExtension: false + +ice03: + idle: ice03.sno + Length: * + AddExtension: false + +ice04: + idle: ice04.sno + Length: * + AddExtension: false + +ice05: + idle: ice05.sno + Length: * + AddExtension: false + +v01: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 1 + +v02: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 1 + +v03: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 1 + +v04: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 2 + active: + Start: 1 + damaged-active: + Start: 3 + +v05: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 2 + +v06: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 1 + +v07: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 2 + +v08: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 1 + +v09: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 1 + +v10: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 1 + +v11: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 1 + +v12: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 1 + +v13: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 1 + +v14: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + ZOffset: -512 + damaged-idle: + Start: 1 + ZOffset: -512 + +v15: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + ZOffset: -512 + damaged-idle: + Start: 1 + ZOffset: -512 + +v16: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + ZOffset: -512 + damaged-idle: + Start: 1 + ZOffset: -512 + +v17: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + ZOffset: -512 + damaged-idle: + Start: 1 + ZOffset: -512 + +v18: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + idle: + ZOffset: -512 + damaged-idle: + Start: 1 + ZOffset: -512 + +rice: + Defaults: + AddExtension: false + idle: rice.tem + ZOffset: -512 + damaged-idle: rice.tem + Start: 1 + ZOffset: -512 + +v19: + idle: + Length: 14 + +v19.husk: + idle: v19 + Start: 28 + fire-start: flmspt + Length: * + Offset: 7,-15 + ZOffset: 1 + fire-loop: flmspt + Start: 50 + Length: * + Offset: 7,-15 + ZOffset: 1 + +utilpol1: + idle: + damaged-idle: + Start: 1 + dead: + Start: 1 + +utilpol2: + idle: + damaged-idle: + Start: 1 + dead: + Start: 1 + +ammobox1: + idle: + +ammobox2: + idle: + +ammobox3: + idle: + +tanktrap1: + idle: + +tanktrap2: + idle: + +rushouse: + idle: + damaged-idle: + Start: 1 + +asianhut: + idle: + damaged-idle: + Start: 1 + +barb: + idle: + Length: 16 + damaged-idle: + Start: 16 + Length: 16 + +wood: + idle: + Length: 16 + damaged-idle: + Start: 16 + Length: 16 + +barl: + idle: + +brl3: + idle: + +# Interior Terrain +boxes01: + idle: boxes01.int + AddExtension: false + +boxes02: + idle: boxes02.int + AddExtension: false + +boxes03: + idle: boxes03.int + AddExtension: false + +boxes04: + idle: boxes04.int + AddExtension: false + +boxes05: + idle: boxes05.int + AddExtension: false + +boxes06: + idle: boxes06.int + AddExtension: false + +boxes07: + idle: boxes07.int + AddExtension: false + +boxes08: + idle: boxes08.int + AddExtension: false + +boxes09: + idle: boxes09.int + AddExtension: false + +# Desert Terrain Expansion +rock1: + idle: rock1.des + AddExtension: false + +rock2: + idle: rock2.des + AddExtension: false + +rock3: + idle: rock3.des + AddExtension: false + +rock4: + idle: rock4.des + AddExtension: false + +rock5: + idle: rock5.des + AddExtension: false + +rock6: + idle: rock6.des + AddExtension: false + +rock7: + idle: rock7.des + AddExtension: false + +t04: + Defaults: + AddExtension: false + idle: t04.des + +t04.husk: + Defaults: t04.des + AddExtension: false + idle: + Start: 1 + dead: t04.des + Start: 2 + Length: 8 + Tick: 80 + +t09: + Defaults: + AddExtension: false + idle: t09.des + +t09.husk: + Defaults: t09 + AddExtension: false + idle: t09.des + Start: 1 + dead: t09.des + Start: 2 + Length: 8 + Tick: 80 + +v20: + Defaults: + AddExtension: false + idle: v20.des + Length: 3 + Tick: 120 + damaged-idle: v20.des + Start: 3 + Length: 3 + Tick: 120 + +v21: + Defaults: + AddExtension: false + idle: v21.des + Length: 3 + Tick: 120 + damaged-idle: v21.des + Start: 3 + Length: 3 + Tick: 120 + +v22: + Defaults: + AddExtension: false + idle: v22.des + Length: 3 + Tick: 120 + damaged-idle: v22.des + Start: 3 + Length: 3 + Tick: 120 + +v23: + Defaults: + AddExtension: false + idle: v23.des + Length: 3 + Tick: 120 + damaged-idle: v23.des + Start: 3 + Length: 3 + Tick: 120 + +v24: + Defaults: + AddExtension: false + idle: v24.des + damaged-idle: v24.des + Start: 1 + +v25: + Defaults: + AddExtension: false + idle: v25.des + damaged-idle: v25.des + Start: 1 + +v26: + Defaults: + AddExtension: false + idle: v26.des + damaged-idle: v26.des + Start: 1 + +v27: + Defaults: + AddExtension: false + idle: v27.des + damaged-idle: v27.des + Start: 1 + +v28: + Defaults: + AddExtension: false + idle: v28.des + damaged-idle: v28.des + Start: 1 + +v29: + Defaults: + AddExtension: false + idle: v29.des + damaged-idle: v29.des + Start: 1 + +v30: + Defaults: + AddExtension: false + idle: v30.des + damaged-idle: v30.des + Start: 2 + +v31: + Defaults: + AddExtension: false + idle: v31.des + damaged-idle: v31.des + Start: 1 + +v32: + Defaults: + AddExtension: false + idle: v32.des + damaged-idle: v32.des + Start: 1 + +v33: + Defaults: + AddExtension: false + idle: v33.des + damaged-idle: v33.des + Start: 1 + +v34: + Defaults: + AddExtension: false + idle: v34.des + damaged-idle: v34.des + Start: 1 + +v35: + Defaults: + AddExtension: false + idle: v35.des + damaged-idle: v35.des + Start: 1 + +v36: + Defaults: + AddExtension: false + idle: v36.des + damaged-idle: v36.des + Start: 1 + +v37: + Defaults: + AddExtension: false + idle: v37.des + damaged-idle: v37.des + Start: 1 + +snowhut: + Defaults: + Offset: 0,-5 + idle: + Length: 3 + Tick: 360 + damaged-idle: + Start: 3 + Tick: 120 + +lhus: + Defaults: + Offset: 0,-16 + idle: + Length: 16 + Tick: 180 + damaged-idle: + Start: 16 + Tick: 180 + Length: 8 + +windmill: + Defaults: + Offset: 0,-16 + idle: + Length: 8 + Tick: 80 + damaged-idle: + Start: 8 + Length: 8 + Tick: 80 diff --git a/mods/ura/sequences/infantry.yaml b/mods/ura/sequences/infantry.yaml new file mode 100644 index 0000000..b9015a1 --- /dev/null +++ b/mods/ura/sequences/infantry.yaml @@ -0,0 +1,1408 @@ +e1: + stand: + Facings: 8 + stand2: + Start: 8 + Facings: 8 + run: + Start: 16 + Length: 6 + Facings: 8 + Tick: 100 + shoot: + Start: 64 + Length: 8 + Facings: 8 + prone-stand: + Start: 144 + Stride: 4 + Facings: 8 + prone-stand2: + Start: 144 + Stride: 4 + Facings: 8 + prone-run: + Start: 144 + Length: 4 + Facings: 8 + Tick: 100 + liedown: + Start: 128 + Length: 2 + Facings: 8 + standup: + Start: 176 + Length: 2 + Facings: 8 + prone-shoot: + Start: 192 + Length: 8 + Facings: 8 + idle1: + Start: 256 + Length: 16 + Tick: 120 + idle2: + Start: 272 + Length: 16 + Tick: 120 + die1: + Start: 288 + Length: 8 + die2: + Start: 296 + Length: 8 + die3: + Start: 304 + Length: 8 + die4: + Start: 312 + Length: 12 + die5: + Start: 324 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: * + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + garrison-muzzle: minigun + Length: 6 + Facings: 8 + icon: e1icon + +sniper: + stand: + Facings: 8 + stand2: + Start: 8 + Facings: 8 + run: + Start: 16 + Length: 6 + Facings: 8 + Tick: 100 + shoot: + Start: 64 + Length: 16 + Facings: 8 + prone-stand: + Start: 208 + Stride: 4 + Facings: 8 + prone-stand2: + Start: 208 + Stride: 4 + Facings: 8 + prone-run: + Start: 208 + Length: 4 + Facings: 8 + Tick: 100 + liedown: + Start: 192 + Length: 2 + Facings: 8 + standup: + Start: 240 + Length: 2 + Facings: 8 + prone-shoot: + Start: 256 + Length: 16 + Facings: 8 + idle1: + Start: 384 + Length: 14 + Tick: 120 + idle2: + Start: 399 + Length: 16 + Tick: 120 + die1: + Start: 416 + Length: 8 + die2: + Start: 424 + Length: 8 + die3: + Start: 432 + Length: 8 + die4: + Start: 440 + Length: 12 + die5: + Start: 452 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + garrison-muzzle: minigun + Length: 3 + Stride: 6 + Facings: 8 + icon: snipericon + +e3: + stand: + Facings: 8 + stand2: + Start: 8 + Facings: 8 + run: + Start: 16 + Length: 6 + Facings: 8 + Tick: 120 + shoot: + Start: 64 + Length: 8 + Facings: 8 + idle1: + Start: 272 + Length: 14 + Tick: 120 + idle2: + Start: 287 + Length: 16 + Tick: 120 + die1: + Start: 304 + Length: 8 + die2: + Start: 312 + Length: 8 + die3: + Start: 320 + Length: 8 + die4: + Start: 328 + Length: 12 + die5: + Start: 340 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + prone-stand: + Start: 144 + Stride: 4 + Facings: 8 + prone-stand2: + Start: 144 + Stride: 4 + Facings: 8 + prone-run: + Start: 144 + Length: 4 + Facings: 8 + Tick: 120 + prone-shoot: + Start: 192 + Length: 10 + Facings: 8 + icon: e3icon + +e6: + stand: + Facings: 8 + stand2: + Start: 8 + Facings: 8 + run: + Start: 16 + Length: 6 + Facings: 8 + Tick: 100 + idle1: + Start: 121 + Length: 8 + Tick: 120 + idle2: + Start: 130 + Length: 14 + Tick: 120 + die1: + Start: 146 + Length: 8 + die2: + Start: 154 + Length: 8 + die3: + Start: 162 + Length: 8 + die4: + Start: 170 + Length: 12 + die5: + Start: 182 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + prone-stand: + Start: 82 + Stride: 4 + Facings: 8 + prone-stand2: + Start: 82 + Stride: 4 + Facings: 8 + prone-run: + Start: 82 + Length: 4 + Facings: 8 + Tick: 100 + icon: e6icon + +medi: + stand: + Facings: 8 + run: + Start: 8 + Length: 6 + Facings: 8 + Tick: 100 + heal: + Start: 56 + Length: 58 + Tick: 120 + standup: + Start: 114 + Length: 2 + Facings: 8 + idle1: + Start: 163 + Length: 14 + Tick: 120 + idle2: + Start: 178 + Length: 14 + Tick: 120 + die1: + Start: 193 + Length: 7 + die2: + Start: 201 + Length: 8 + die3: + Start: 209 + Length: 8 + die4: + Start: 217 + Length: 12 + die5: + Start: 229 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + prone-stand: + Start: 130 + Stride: 4 + Facings: 8 + prone-run: + Start: 130 + Length: 4 + Facings: 8 + Tick: 100 + icon: mediicon + +mech: + stand: + Facings: 8 + run: + Start: 8 + Length: 6 + Facings: 8 + Tick: 100 + repair: + Start: 56 + Length: 58 + Tick: 120 + standup: + Start: 114 + Length: 2 + Facings: 8 + idle1: + Start: 163 + Length: 14 + Tick: 120 + idle2: + Start: 178 + Length: 14 + Tick: 120 + die1: + Start: 193 + Length: 7 + die2: + Start: 201 + Length: 8 + die3: + Start: 209 + Length: 8 + die4: + Start: 217 + Length: 12 + die5: + Start: 229 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + prone-stand: + Start: 130 + Stride: 4 + Facings: 8 + prone-run: + Start: 130 + Length: 4 + Facings: 8 + Tick: 100 + icon: mechicon + +e2: + stand: + Facings: 8 + stand2: + Start: 8 + Facings: 8 + run: + Start: 16 + Length: 6 + Facings: 8 + Tick: 80 + throw: + Start: 64 + Length: 20 + Facings: 8 + idle1: + Start: 384 + Length: 14 + Tick: 120 + idle2: + Start: 399 + Length: 16 + Tick: 120 + die1: + Start: 416 + Length: 8 + die2: + Start: 424 + Length: 8 + die3: + Start: 432 + Length: 8 + die4: + Start: 440 + Length: 12 + die5: + Start: 452 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + prone-stand: + Start: 240 + Stride: 4 + Facings: 8 + prone-stand2: + Start: 240 + Stride: 4 + Facings: 8 + prone-run: + Start: 240 + Length: 4 + Facings: 8 + Tick: 80 + prone-throw: + Start: 288 + Length: 12 + Facings: 8 + icon: e2icon + +dog: + stand: + Facings: 8 + run: + Start: 8 + Length: 6 + Facings: 8 + Tick: 80 + idle1: + Start: 216 + Length: 7 + Tick: 120 + idle2: + Start: 224 + Length: 11 + Tick: 120 + die1: + Start: 236 + Length: 6 + die2: + Start: 242 + Length: 9 + die3: + Start: 236 + Length: 6 + die4: + Start: 242 + Length: 9 + die5: + Start: 251 + Length: 14 + die6: electdog + Length: * + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + shoot: dogbullt + Length: 4 + Facings: 8 + icon: dogicon + +spy: + stand: + Facings: 8 + stand2: + Start: 8 + Facings: 8 + run: + Start: 16 + Length: 6 + Facings: 8 + Tick: 100 + shoot: + Start: 64 + Length: 8 + Facings: 8 + idle1: + Start: 256 + Length: 14 + Tick: 120 + idle2: + Start: 271 + Length: 16 + Tick: 120 + die1: + Start: 288 + Length: 8 + die2: + Start: 296 + Length: 8 + die3: + Start: 304 + Length: 8 + die4: + Start: 312 + Length: 12 + die5: + Start: 324 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + prone-stand: + Start: 144 + Stride: 4 + Facings: 8 + prone-stand2: + Start: 144 + Stride: 4 + Facings: 8 + prone-run: + Start: 144 + Length: 4 + Facings: 8 + Tick: 100 + prone-shoot: + Start: 192 + Length: 8 + Facings: 8 + icon: spyicon + +thf: + stand: + Facings: 8 + run: + Start: 8 + Length: 6 + Facings: 8 + Tick: 100 + die1: + Start: 139 + Length: 8 + die2: + Start: 147 + Length: 8 + die3: + Start: 155 + Length: 8 + die4: + Start: 163 + Length: 12 + die5: + Start: 175 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + prone-stand: + Start: 72 + Stride: 4 + Facings: 8 + prone-run: + Start: 72 + Length: 4 + Facings: 8 + Tick: 80 + icon: thficon + +hijacker: + stand: thf + Facings: 8 + run: thf + Start: 8 + Length: 6 + Facings: 8 + Tick: 100 + die1: thf + Start: 139 + Length: 8 + die2: thf + Start: 147 + Length: 8 + die3: thf + Start: 155 + Length: 8 + die4: thf + Start: 163 + Length: 12 + die5: thf + Start: 175 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + prone-stand: thf + Start: 72 + Stride: 4 + Facings: 8 + prone-run: thf + Start: 72 + Length: 4 + Facings: 8 + Tick: 80 + icon: hijackericon + +#Tanya swim sequence and SHP by SirCake +e7: + stand: + Facings: 8 + run: + Start: 8 + Length: 6 + Facings: 8 + Tick: 80 + shoot: + Start: 56 + Length: 7 + Facings: 8 + idle1: + Start: 233 + Length: 14 + Tick: 120 + idle2: + Start: 248 + Length: 14 + Tick: 120 + die1: + Start: 262 + Length: 8 + die2: + Start: 270 + Length: 8 + die3: + Start: 278 + Length: 8 + die4: + Start: 286 + Length: 12 + die5: + Start: 298 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + prone-stand: + Start: 128 + Stride: 4 + Facings: 8 + prone-run: + Start: 128 + Length: 4 + Facings: 8 + Tick: 80 + prone-shoot: + Start: 176 + Length: 7 + Facings: 8 + garrison-muzzle: minigun + Length: 3 + Stride: 6 + Facings: 8 + swim_idle: bikinitany + Start: 1 + Facings: 8 + Length: 4 + Tick: 100 + Transpose: True + swim_stand: bikinitany + Start: 1 + Facings: 8 + Length: 4 + Tick: 100 + Transpose: True + swim: bikinitany + Start: 33 + Facings: 8 + Length: 7 + Tick: 100 + Transpose: True + swim_shoot: bikinitany + Start: 89 + Facings: 8 + Length: 6 + Tick: 100 + Transpose: True + prone-swim_shoot: bikinitany + Start: 137 + Facings: 8 + Length: 6 + Tick: 100 + Transpose: True + prone-swim: bikinitany + Start: 217 + Facings: 8 + Length: 9 + Tick: 100 + Transpose: True + liedown: bikinitany + Start: 289 + Facings: 8 + Length: 3 + Tick: 100 + Transpose: True + standup: bikinitany + Start: 185 + Facings: 8 + Length: 4 + Tick: 100 + Transpose: True + prone-swim_stand: bikinitany + Start: 313 + Facings: 8 + Length: 9 + Tick: 100 + Transpose: True + icon: e7icon + +e4: + stand: + Facings: 8 + stand2: + Start: 8 + Facings: 8 + run: + Start: 16 + Length: 6 + Facings: 8 + Tick: 120 + shoot: + Start: 64 + Length: 16 + Facings: 8 + idle1: + Start: 384 + Length: 14 + Tick: 120 + idle2: + Start: 399 + Length: 16 + Tick: 120 + die1: + Start: 416 + Length: 8 + die2: + Start: 424 + Length: 8 + die3: + Start: 432 + Length: 8 + die4: + Start: 440 + Length: 12 + die5: + Start: 452 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + prone-stand: + Start: 208 + Stride: 4 + Facings: 8 + prone-stand2: + Start: 208 + Stride: 4 + Facings: 8 + prone-run: + Start: 208 + Length: 4 + Facings: 8 + Tick: 120 + prone-shoot: + Start: 256 + Length: 16 + Facings: 8 + icon: e4icon + +gnrl: + stand: + Facings: 8 + run: + Start: 8 + Length: 6 + Facings: 8 + Tick: 100 + shoot: + Start: 56 + Length: 4 + Facings: 8 + prone-stand: + Start: 104 + Stride: 4 + Facings: 8 + prone-run: + Start: 104 + Length: 4 + Facings: 8 + Tick: 100 + standup: + Start: 136 + Length: 2 + Facings: 8 + prone-shoot: + Start: 152 + Length: 4 + Facings: 8 + idle1: + Start: 184 + Length: 26 + Tick: 120 + die1: + Start: 210 + Length: 8 + die2: + Start: 218 + Length: 8 + die3: + Start: 226 + Length: 8 + die4: + Start: 234 + Length: 12 + die5: + Start: 246 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + +shok: + stand: + Facings: 8 + stand2: + Start: 8 + Facings: 8 + run: + Start: 16 + Length: 6 + Facings: 8 + Tick: 120 + shoot: + Start: 64 + Length: 16 + Facings: 8 + prone-stand: + Start: 208 + Stride: 4 + Facings: 8 + prone-stand2: + Start: 208 + Stride: 4 + Facings: 8 + prone-run: + Start: 208 + Length: 4 + Facings: 8 + Tick: 120 + liedown: + Start: 192 + Length: 2 + Facings: 8 + standup: + Start: 240 + Length: 2 + Facings: 8 + prone-shoot: + Start: 256 + Length: 16 + Facings: 8 + idle1: + Start: 384 + Length: 14 + Tick: 120 + idle2: + Start: 399 + Length: 16 + Tick: 120 + die1: + Start: 416 + Length: 8 + die2: + Start: 424 + Length: 8 + die3: + Start: 432 + Length: 8 + die4: + Start: 440 + Length: 12 + die5: + Start: 452 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + icon: shokicon + +c1: + stand: + Facings: 8 + panic-stand: + Start: 8 + Stride: 6 + Facings: 8 + panic-run: + Start: 8 + Length: 6 + Facings: 8 + shoot: + Start: 120 + Length: 4 + Facings: 8 + die1: + Start: 152 + Length: 8 + die2: + Start: 160 + Length: 8 + die3: + Start: 168 + Length: 12 + die4: + Start: 180 + Length: 18 + die5: + Start: 160 + Length: 8 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + run: + Start: 56 + Length: 6 + Facings: 8 + Tick: 80 + +c2: + stand: + Facings: 8 + panic-stand: + Start: 8 + Stride: 6 + Facings: 8 + panic-run: + Start: 8 + Length: 6 + Facings: 8 + shoot: + Start: 120 + Length: 4 + Facings: 8 + die1: + Start: 152 + Length: 8 + die2: + Start: 160 + Length: 8 + die3: + Start: 168 + Length: 12 + die4: + Start: 180 + Length: 18 + die5: + Start: 160 + Length: 8 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + run: + Start: 56 + Length: 6 + Facings: 8 + Tick: 80 + +c3: + stand: + Facings: 8 + panic-stand: + Start: 8 + Stride: 6 + Facings: 8 + panic-run: + Start: 8 + Length: 6 + Facings: 8 + shoot: + Start: 120 + Length: 4 + Facings: 8 + die1: + Start: 152 + Length: 8 + die2: + Start: 160 + Length: 8 + die3: + Start: 168 + Length: 12 + die4: + Start: 180 + Length: 18 + die5: + Start: 160 + Length: 8 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + run: + Start: 56 + Length: 6 + Facings: 8 + Tick: 80 + +einstein: + stand: + Facings: 8 + panic-run: + Start: 8 + Length: 6 + Facings: 8 + panic-stand: + Start: 8 + Stride: 6 + Facings: 8 + run: + Start: 56 + Length: 6 + Facings: 8 + Tick: 80 + die1: + Start: 115 + Length: 8 + die2: + Start: 123 + Length: 8 + die3: + Start: 135 + Length: 12 + die4: + Start: 147 + Length: 17 + die5: + Start: 123 + Length: 8 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + +delphi: + stand: + Facings: 8 + panic-run: + Start: 8 + Length: 6 + Facings: 8 + panic-stand: + Start: 8 + Stride: 6 + Facings: 8 + run: + Start: 56 + Length: 6 + Facings: 8 + Tick: 80 + die1: + Start: 115 + Length: 8 + die2: + Start: 123 + Length: 8 + die3: + Start: 135 + Length: 12 + die4: + Start: 147 + Length: 17 + die5: + Start: 123 + Length: 8 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + +chan: + stand: + Facings: 8 + panic-run: + Start: 8 + Length: 6 + Facings: 8 + panic-stand: + Start: 8 + Stride: 6 + Facings: 8 + run: + Start: 56 + Length: 6 + Facings: 8 + Tick: 80 + die1: + Start: 115 + Length: 8 + die2: + Start: 123 + Length: 8 + die3: + Start: 135 + Length: 12 + die4: + Start: 147 + Length: 17 + die5: + Start: 123 + Length: 8 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + +zombie: + stand: + Facings: 8 + stand2: + Start: 8 + Length: 8 + run: + Start: 16 + Length: 6 + Facings: 8 + bite: + Start: 64 + Length: 4 + Facings: 8 + idle1: + Start: 96 + Length: 10 + Tick: 120 + die1: + Start: 106 + Length: 7 + die2: + Start: 106 + Length: 7 + die3: + Start: 106 + Length: 7 + die4: + Start: 106 + Length: 7 + die5: + Start: 114 + Length: 18 + die6: electro + Length: * + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + die-crushed: corpse1 + Length: 6 + Tick: 1600 + ZOffset: -511 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + icon: zombicon + +ant: + stand: ant1 + Facings: 8 + stand2: ant1 + Start: 8 + Length: 8 + run: ant1 + Start: 8 + Length: 8 + Facings: 8 + bite: ant1 + Start: 72 + Length: 4 + Facings: 8 + die: ant1 + Start: 104 + Length: 8 + Tick: 300 + die-crushed: ant1 + Start: 104 + Length: 8 + Tick: 400 + ZOffset: -511 + icon: anticon diff --git a/mods/ura/sequences/misc.yaml b/mods/ura/sequences/misc.yaml new file mode 100644 index 0000000..a675b71 --- /dev/null +++ b/mods/ura/sequences/misc.yaml @@ -0,0 +1,627 @@ +clock: + idle: + Length: * + +powerdown: + disabled: speed + Start: 3 + ZOffset: 2047 + +120mm: + idle: + ZOffset: 1023 + +50cal: + idle: + ZOffset: 1023 + +explosion: + Defaults: + Length: * + ZOffset: 2047 + piff: piff + piffs: piffpiff + water_piff: wpiff + water_piffs: wpifpif + small_explosion: veh-hit3 + med_explosion: veh-hit2 + flak_explosion_ground: flak + small_explosion_air: flak + ZOffset: 511 # only used by AA weapons, so a high ZOffset to overlay buildings isn't needed + med_explosion_air: veh-hit1 + ZOffset: 511 # only used by AA weapons, so a high ZOffset to overlay buildings isn't needed + large_splash: h2o_exp1 + napalm: napalm2 + building_napalm: napalm2 + FlipX: true + nuke: atomsfx + med_splash: h2o_exp2 + self_destruct: art-exp1 + artillery_explosion: art-exp1 + building: fball1 + Offset: 0,-9 + small_splash: h2o_exp3 + large_explosion: frag1 + Offset: -2,0 + small_napalm: napalm1 + offseted_napalm: napalm1 # Used for E4 Explosion + Offset: 0, -6 + large_napalm: napalm3 + corpse: corpse1 + ZOffset: -512 + Tick: 1600 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + INTERIOR: TEMPERAT + +burn-l: + idle: + Length: * + ZOffset: 512 + loop: + Start: 16 + Length: 44 + ZOffset: 512 + end: + Start: 60 + Length: 6 + ZOffset: 512 + +burn-m: + idle: + Length: * + ZOffset: 512 + loop: + Start: 16 + Length: 44 + ZOffset: 512 + end: + Start: 60 + Length: 6 + ZOffset: 512 + +burn-s: + idle: + Length: * + ZOffset: 512 + loop: + Start: 12 + Length: 46 + ZOffset: 512 + end: + Start: 59 + Length: 5 + ZOffset: 512 + +pips: + groups: + Start: 8 + Length: 10 + Offset: 9, 5 + medic: + Start: 20 +# ready: +# Start: 3 +# hold: +# Start: 4 + tag-fake: + Start: 18 + Offset: 0, 2 + tag-primary: + Start: 2 + Offset: 0, 2 + pip-empty: pips2 + pip-green: pips2 + Start: 1 + pip-yellow: pips2 + Start: 2 + pip-gray: pips2 + Start: 3 + pip-red: pips2 + Start: 4 + pip-blue: pips2 + Start: 5 + pip-disguise: pip-disguise + Length: * + Tick: 300 + Offset: 0, -6 + +v2: + idle: + Facings: 32 + ZOffset: 1023 + +rallypoint: + flag: flagfly + Length: * + Offset: 11,-5 + ZOffset: 2535 + circles: fpls + Length: * + ZOffset: 2047 + +beacon: + Defaults: + ZOffset: 2535 + arrow: mouse + Start: 5 + Offset: 1,-12 + circles: fpls + Length: * + ZOffset: 2047 + atomicon: lores|atomicon + Length: * + Offset: 0,-42 + pbmbicon: lores|pbmbicon + Length: * + Offset: 0,-42 + camicon: lores|camicon + Length: * + Offset: 0,-42 + pinficon: lores|pinficon + Length: * + Offset: 0,-42 + clock: beaconclock + Length: * + Offset: 0,-42 + +smoke_m: + idle: + Length: * + Offset: 2, -5 + ZOffset: 512 + loop: + Start: 49 + Length: 42 + Offset: 2, -5 + ZOffset: 512 + end: + Start: 26 + Length: -26 + Offset: 2, -5 + ZOffset: 512 + +dragon: + idle: + Facings: 32 + ZOffset: 1023 + +smokey: + idle: + Length: * + ZOffset: 1023 + +bomb: + idle: + Length: * + ZOffset: 1023 + +missile: + idle: + Facings: 32 + ZOffset: 1023 + +torpedo: + idle: missile + Facings: 32 + ZOffset: -1023 + +litning: + bright: + Length: 4 + ZOffset: 1023 + dim: + Start: 4 + Length: 4 + ZOffset: 1023 + +fb1: + idle: + Length: * + ZOffset: 1023 + +moveflsh: + idle: + Length: * + Tick: 80 + ZOffset: 2047 + UseTilesetExtension: true + TilesetOverrides: + DESERT: TEMPERAT + +select: + repair: + Start: 2 + +poweroff: + offline: + Length: * + Tick: 160 + ZOffset: 2047 + +allyrepair: + repair: + Length: * + Tick: 160 + ZOffset: 2047 + +tabs: + left-normal: + left-pressed: + Start: 1 + +sputnik: + idle: + Length: * + Offset: -4,0 + ZOffset: 1023 + +dd-crnr: + idle: + Length: * + top-left: + top-right: + Start: 1 + bottom-left: + Start: 2 + bottom-right: + Start: 3 + +fb2: + idle: + Length: * + ZOffset: 1023 + +fb3: + idle: + Facings: 32 + ZOffset: 1023 + +fb4: + idle: + Length: * + ZOffset: 1023 + +scrate: + Defaults: + ZOffset: -511 + idle: + land: + Start: 1 + water: + Start: 2 + Length: 4 + Tick: 500 + +wcrate: + Defaults: + ZOffset: -511 + idle: + land: + water: wwcrate + Length: * + Tick: 500 + +xcratea: + idle: + ZOffset: -511 + land: + Start: 1 + ZOffset: -511 + water: + Start: 2 + Length: 4 + Tick: 500 + ZOffset: -511 + +xcrateb: + idle: + ZOffset: -511 + land: + Start: 1 + ZOffset: -511 + water: + Start: 2 + Length: 4 + Tick: 500 + ZOffset: -511 + +xcratec: + idle: + ZOffset: -511 + land: + Start: 1 + ZOffset: -511 + water: + Start: 2 + Length: 4 + Tick: 500 + ZOffset: -511 + +xcrated: + idle: + ZOffset: -511 + land: + Start: 1 + ZOffset: -511 + water: + Start: 2 + Length: 4 + Tick: 500 + ZOffset: -511 + +crate-effects: + Defaults: + ZOffset: 2047 + Length: * + speed: speed + dollar: dollar + reveal-map: earth + hide-map: empulse + fpower: fpower + gps: gpsbox + invuln: invulbox + heal: invun + nuke: missile2 + parabombs: parabox + sonar: sonarbox + stealth: stealth2 + timequake: tquake + armor: armor + chrono: chronbox + airstrike: deviator + levelup: levelup + Tick: 200 + +parach: + open: + Length: 5 + idle: + Start: 5 + Length: 11 + +parach-shadow: + idle: + Length: * + +bomblet: + idle: + Length: * + ZOffset: 1023 + +parabomb: + open: + Length: 8 + ZOffset: 1023 + idle: + Start: 8 + Length: 5 + ZOffset: 1023 + +smokland: + open: playersmoke + Length: 60 + Tick: 120 + ZOffset: 1023 + idle: playersmoke + Start: 60 + Length: 32 + Tick: 120 + ZOffset: 1023 + +fire: + 1: fire1 + Length: * + Offset: 0,-3 + ZOffset: 1023 + 2: fire2 + Length: * + Offset: 0,-3 + ZOffset: 1023 + 3: fire3 + Length: * + Offset: 0,-3 + ZOffset: 1023 + 4: fire4 + Length: * + Offset: 0,-3 + ZOffset: 1023 + +rank: + rank-veteran-1: + rank-veteran-2: + Start: 1 + rank-veteran-3: + Start: 2 + rank-elite: + Start: 3 + +iconchevrons: + veteran: + Offset: 2, 2 + +atomic: + up: atomicup + Length: * + ZOffset: 1023 + down: atomicdn + Length: * + ZOffset: 1023 + +bubbles: + idle: + Length: * + Tick: 220 + +mpspawn: + idle: + Length: * + +waypoint: + idle: + Length: * + +camera: + idle: + Length: * + +gpsdot: + Infantry: + Vehicle: + Start: 1 + Ship: + Start: 2 + Helicopter: + Start: 3 + Plane: + Start: 4 + Harvester: + Start: 5 + Structure: + Start: 6 + Oil: + Start: 7 + Hospital: + Start: 8 + Biohazard: + Start: 9 + Communications: + Start: 10 + Forward: + Start: 11 + +#SniperDrop icon by FiveAces +icon: + abomb: atomicon + invuln: infxicon + chrono: warpicon + spyplane: smigicon + paratroopers: pinficon + gps: gpssicon + parabombs: pbmbicon + sonar: sonricon + sniperdrop: sniperdropicon + +quee: + idle: + Length: 10 + damaged-idle: + Start: 10 + Length: 10 + +lar1: + idle: + +lar2: + idle: + +minp: + idle: + ZOffset: -512 + icon: jmin + +minv: + idle: + ZOffset: -512 + icon: jmin + +overlay: + build-valid-desert: + build-valid-interior: + build-valid-snow: + Start: 2 + build-valid-temperat: + build-invalid: + Start: 1 + target-select: + Start: 2 + target-valid-desert: + target-valid-interior: + target-valid-snow: + Start: 2 + target-valid-temperat: + target-invalid: + Start: 1 + +editor-overlay: + copy: overlay + Start: 0 + paste: overlay + Start: 1 + +resources: + Defaults: + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + DESERT: TEMPERAT + gold01: gold01 + gold02: gold02 + gold03: gold03 + gold04: gold04 + gem01: gem01 + gem02: gem02 + gem03: gem03 + gem04: gem04 + +shroud: + shroud: shadow + Length: * + +# Note: The order of smudges and craters determines +# the index that is mapped to them in maps +scorches: + Defaults: + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + sc1: sc1 + sc2: sc2 + sc3: sc3 + sc4: sc4 + sc5: sc5 + sc6: sc6 + +craters: + Defaults: + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + cr1: cr1 + cr2: cr2 + cr3: cr3 + cr4: cr4 + cr5: cr5 + cr6: cr6 + +mine: + idle: + UseTilesetExtension: true + ZOffset: -512 + +gmine: + idle: + ZOffset: -512 + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + +railmine: + idle: + ZOffset: -512 + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + +ctflag: + idle: + Length: 9 + Tick: 50 + Offset: 0,-12 + bib: mbGAP + Length: * + UseTilesetExtension: true diff --git a/mods/ura/sequences/ships.yaml b/mods/ura/sequences/ships.yaml new file mode 100644 index 0000000..c33d1c9 --- /dev/null +++ b/mods/ura/sequences/ships.yaml @@ -0,0 +1,49 @@ +ss: + idle: + Facings: 16 + icon: ssicon + +ca: + idle: + Facings: 16 + turret: turr + Facings: 32 + muzzle: gunfire2 + Length: 5 + icon: caicon + +dd: + idle: + Facings: 16 + turret: ssam + Facings: 32 + icon: ddicon + +pt: + idle: + Facings: 16 + turret: mgun + Facings: 32 + muzzle: gunfire2 + Length: 5 + icon: pticon + +lst: + idle: + open: + Start: 1 + Length: 4 + Tick: 150 + close: + Frames: 4, 3, 2, 1 + Length: 4 + Tick: 150 + unload: + Start: 4 + ZOffset: -511 + icon: lsticon + +msub: + idle: + Facings: 16 + icon: msubicon diff --git a/mods/ura/sequences/structures.yaml b/mods/ura/sequences/structures.yaml new file mode 100644 index 0000000..6b473ca --- /dev/null +++ b/mods/ura/sequences/structures.yaml @@ -0,0 +1,667 @@ +fcom: + idle: + damaged-idle: + Start: 1 + make: fcommake + Length: * + bib: bib3 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + +hosp: + idle: + Length: 4 + damaged-idle: + Start: 4 + Length: 4 + dead: + Start: 8 + Tick: 800 + make: hospmake + Length: * + bib: mbHOSP + Length: * + Offset: 0,1 + UseTilesetExtension: true + icon: hospicon + +bio: + idle: + damaged-idle: + Start: 1 + dead: + Start: 2 + Tick: 800 + make: biomake + Length: * + +oilb: + Defaults: + Offset: 0,-6 + idle: + damaged-idle: + Start: 1 + Length: * + make: + bib: bib3 + Length: * + Offset: 0,0 + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + +fact: + idle: + make: factmake + Length: * + build: + Start: 1 + Length: 25 + damaged-idle: + Start: 26 + damaged-build: + Start: 27 + Length: 25 + dead: factdead + Tick: 800 + bib: bib2 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + icon: facticon + fake-icon: facficon + +proc: + idle: + ZOffset: -1c511 + damaged-idle: + ZOffset: -1c511 + idle-top: proctop + ZOffset: 0 + damaged-idle-top: proctop + Start: 1 + ZOffset: 0 + make: procmake + Length: * + dead: procdead + Tick: 800 + bib: bib2 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + icon: procicon + +silo: + idle: silo2 + Offset: 0,-1 + damaged-idle: silo2 + Start: 9 + Offset: 0,-1 + stages: silo2 + Length: 9 + Offset: 0,-1 + damaged-stages: silo2 + Start: 9 + Length: 9 + Offset: 0,-1 + make: silomake + Length: * + Offset: 0,-1 + bib: mbSILO + Length: * + UseTilesetExtension: true + icon: siloicon + +powr: + idle: + damaged-idle: + Start: 1 + make: powrmake + Length: * + dead: powrdead + Tick: 800 + bib: bib3 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + icon: powricon + fake-icon: fpwricon + +apwr: + idle: + Offset: 0,-10 + damaged-idle: + Start: 1 + Offset: 0,-10 + make: apwrmake + Length: * + Offset: 0,-10 + dead: apwrdead + Tick: 800 + Offset: 0,-10 + bib: bib2 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + icon: apwricon + fake-icon: fapwicon + +barr: + idle: + Length: 10 + Offset: 0,-6 + damaged-idle: + Start: 10 + Length: 10 + Offset: 0,-6 + make: barrmake + Length: * + Offset: 0,-6 + bib: bib3 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + icon: barricon + +#Fake Barracks icon by MustaphaTR +tent: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + idle: + Length: 10 + damaged-idle: + Start: 10 + Length: 10 + make: tentmake + Length: * + bib: bib3 + Length: * + icon: tenticon + UseTilesetExtension: false + fake-icon: tenficon + UseTilesetExtension: false + +kenn: + idle: + damaged-idle: + Start: 1 + make: kennmake + Length: * + bib: mbSILO + Length: * + UseTilesetExtension: true + icon: kennicon + +dome: + idle: + Offset: 0,-4 + damaged-idle: + Start: 1 + Offset: 0,-4 + make: domemake + Length: * + Offset: 0,-4 + bib: bib3 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + icon: domeicon + fake-icon: domficon + +atek: + idle: + damaged-idle: + Start: 1 + make: atekmake + Length: * + active: sputdoor + Length: * + Offset: -4,0 + bib: bib3 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + icon: atekicon + fake-icon: ateficon + +stek: + idle: + damaged-idle: + Start: 1 + make: stekmake + Length: * + bib: bib2 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + icon: stekicon + +weap: + idle: + damaged-idle: + Start: 1 + make: weapmake + Length: * + build-top: weap3 + Length: 10 + damaged-build-top: weap2 + Start: 4 + Length: 4 + bib: bib2 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + icon: weapicon + fake-icon: weaficon + +hpad: + idle: + ZOffset: -1023 + damaged-idle: + Start: 7 + ZOffset: -1023 + active: + Start: 1 + Length: 6 + ZOffset: -1023 + damaged-active: + Start: 8 + Length: 6 + ZOffset: -1023 + make: hpadmake + Length: * + bib: bib3 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + icon: hpadicon + +afld: + idle: afldidle + Length: 8 + Tick: 160 + ZOffset: -1023 + Offset: 0,-4 + damaged-idle: afldidle + Start: 8 + Length: 8 + Tick: 160 + ZOffset: -1023 + Offset: 0,-4 + active: + Length: 8 + Tick: 160 + ZOffset: -1023 + Offset: 0,-4 + damaged-active: + Start: 8 + Length: 8 + Tick: 160 + ZOffset: -1023 + Offset: 0,-4 + make: afldmake + Length: * + Offset: 0,-4 + icon: afldicon + +spen: + idle: + Offset: 0,2 + damaged-idle: + Start: 1 + Offset: 0,2 + make: spenmake + Length: * + Offset: 0,2 + icon: spenicon + fake-icon: speficon + +syrd: + idle: + damaged-idle: + Start: 1 + make: syrdmake + Length: * + icon: syrdicon + fake-icon: syrficon + +fix: + idle: + Offset: 0,1 + ZOffset: -1c511 + damaged-idle: + Start: 7 + Offset: 0,1 + ZOffset: -1c511 + active: + Start: 1 + Length: 6 + Offset: 0,1 + ZOffset: -1c511 + damaged-active: + Start: 8 + Length: 6 + Offset: 0,1 + ZOffset: -1c511 + make: fixmake + Length: * + Offset: 0,1 + bib: mbFIX + Length: * + ZOffset: -1c511 + Offset: 0,-4 + UseTilesetExtension: true + icon: fixicon + fake-icon: fixficon + +gun: + idle: + Facings: 32 + UseClassicFacingFudge: True + recoil: + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + make: gunmake + Length: * + damaged-idle: + Start: 64 + Facings: 32 + UseClassicFacingFudge: True + damaged-recoil: + Start: 96 + Facings: 32 + UseClassicFacingFudge: True + muzzle: gunfire2 + Length: 5 + bib: mbGUN + Length: * + Offset: -1,-1 + UseTilesetExtension: true + icon: gunicon + +agun: + idle: + Facings: 32 + UseClassicFacingFudge: True + Offset: 0,-13 + recoil: + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + Offset: 0,-13 + make: agunmake + Length: * + Offset: 0,-13 + damaged-idle: + Start: 64 + Facings: 32 + UseClassicFacingFudge: True + Offset: 0,-13 + damaged-recoil: + Start: 96 + Facings: 32 + UseClassicFacingFudge: True + Offset: 0,-13 + muzzle: gunfire2 + Start: 1 + Length: 4 + bib: mbAGUN + Length: * + UseTilesetExtension: true + icon: agunicon + +sam: + idle: sam2 + Facings: 32 + UseClassicFacingFudge: True + Offset: -1,-2 + damaged-idle: sam2 + Start: 34 + Facings: 32 + UseClassicFacingFudge: True + Offset: -1,-2 + make: sammake + Length: * + Offset: -1,-2 + muzzle: samfire + Length: 18 + Facings: 8 + Offset: -1,6 + bib: mbSAM + Length: * + Offset: 0,1 + UseTilesetExtension: true + icon: samicon + +ftur: + idle: + Offset: 0,-2 + damaged-idle: + Start: 1 + Offset: 0,-2 + make: fturmake + Length: * + Offset: 0,-2 + bib: mbFTUR + Length: * + UseTilesetExtension: true + icon: fturicon + +tsla: + idle: + Offset: 0,-13 + damaged-idle: + Start: 10 + Offset: 0,-13 + make: tslamake + Length: * + Offset: 0,-13 + active: + Start: 1 + Length: 9 + Tick: 100 + Offset: 0,-13 + damaged-active: + Start: 11 + Length: 9 + Tick: 100 + Offset: 0,-13 + bib: mbTSLA + Length: * + UseTilesetExtension: true + icon: tslaicon + +pbox: + idle: + damaged-idle: + Start: 1 + make: pboxmake + Length: * + muzzle: minigun + Length: 6 + Facings: 8 + bib: mbPBOX + Length: * + Offset: 0,-2 + UseTilesetExtension: true + icon: pboxicon + +hbox: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 2 + make: hboxmake + Length: * + muzzle: minigun + Length: 6 + Facings: 8 + UseTilesetExtension: false + icon: hboxicon + UseTilesetExtension: false + +gap: + idle: + Length: 32 + Offset: 0,-14 + damaged-idle: + Start: 32 + Length: 32 + Offset: 0,-14 + make: gapmake + Length: * + Offset: 0,-14 + bib: mbGAP + Length: * + UseTilesetExtension: true + icon: gapicon + +iron: + idle: + Offset: 0,-12 + active: + Length: 11 + Offset: 0,-12 + damaged-idle: + Start: 11 + Offset: 0,-12 + damaged-active: + Start: 11 + Length: 11 + Offset: 0,-12 + make: ironmake + Length: * + Offset: 0,-12 + bib: mbIRON + Length: * + Offset: 0,2 + UseTilesetExtension: true + icon: ironicon + +pdox: + idle: + damaged-idle: + Start: 29 + active: + Length: 29 + damaged-active: + Start: 29 + Length: 29 + make: pdoxmake + Length: * + bib: mbPDOX + Length: * + Offset: 0,-4 + UseTilesetExtension: true + icon: pdoxicon + fake-icon: pdoficon + +mslo: + Defaults: + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + idle: + damaged-idle: + Start: 8 + make: mslomake + Length: * + active: + Start: 1 + Length: 7 + Tick: 80 + damaged-active: + Start: 9 + Length: 7 + icon: msloicon2 + UseTilesetExtension: false + fake-icon: mslficon + UseTilesetExtension: false + +miss: + idle: + damaged-idle: + Start: 1 + dead: + Start: 2 + Tick: 800 + make: missmake + Length: * + bib: bib2 + Length: * + UseTilesetExtension: true + TilesetOverrides: + INTERIOR: TEMPERAT + +brik: + idle: + Length: 16 + scratched-idle: + Start: 16 + Length: 16 + damaged-idle: + Start: 32 + Length: 16 + icon: brikicon + +vgate: + make: + Length: 7 + idle: + Frames: 6, 5, 4, 3, 2, 1, 0 + Length: 7 + ZOffset: -1c511 + damaged-idle: + Frames: 13, 12, 11, 10, 9, 8, 7 + Length: 7 + ZOffset: -1c511 + +agate: + make: + Length: 7 + idle: + Frames: 6, 5, 4, 3, 2, 1, 0 + Length: 7 + ZOffset: -1c511 + damaged-idle: + Frames: 13, 12, 11, 10, 9, 8, 7 + Length: 7 + ZOffset: -1c511 + +sgate: + Inherits: agate + +sbag: + idle: + Length: 16 + icon: sbagicon + +fenc: + idle: + Length: 16 + icon: fencicon + +cycl: + idle: + Length: 16 + damaged-idle: + Start: 16 + Length: 16 diff --git a/mods/ura/sequences/vehicles.yaml b/mods/ura/sequences/vehicles.yaml new file mode 100644 index 0000000..c12efff --- /dev/null +++ b/mods/ura/sequences/vehicles.yaml @@ -0,0 +1,324 @@ +mcv: + idle: + Facings: 32 + UseClassicFacingFudge: True + icon: mcvicon + +mcvhusk: + idle: + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -1023 + +truk: + idle: + Facings: 32 + UseClassicFacingFudge: True + icon: trukicon + +harv: + idle: harvempty + Facings: 32 + UseClassicFacingFudge: True + harvest: harvempty + Start: 32 + Length: 8 + Facings: 8 + empty-idle: harvempty + Facings: 32 + UseClassicFacingFudge: True + empty-harvest: harvempty + Start: 32 + Length: 8 + Facings: 8 + half-idle: harvhalf + Facings: 32 + UseClassicFacingFudge: True + half-harvest: harvhalf + Start: 32 + Length: 8 + Facings: 8 + full-idle: + Facings: 32 + UseClassicFacingFudge: True + full-harvest: + Start: 32 + Length: 8 + Facings: 8 + dock: + Start: 96 + Length: 8 + dock-loop: + Start: 104 + Length: 7 + icon: harvicon + Start: 0 + +hhusk: + idle: + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -1023 + +hhusk2: + idle: + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -1023 + +1tnk: + idle: + Facings: 32 + UseClassicFacingFudge: True + turret: + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + muzzle: gunfire2 + Length: 2 + icon: 1tnkicon + +1tnk.destroyed: + idle: 1tnk + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -512 + turret: 1tnk + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -512 + +2tnk: + idle: + Facings: 32 + UseClassicFacingFudge: True + turret: + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + muzzle: gunfire2 + Length: 5 + icon: 2tnkicon + +2tnkger: + idle: + Facings: 32 + UseClassicFacingFudge: True + turret: + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + muzzle: gunfire2 + Length: 5 + icon: 2tnkgericon + UseTilesetExtension: false + +2tnk.destroyed: + idle: 2tnk + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -512 + turret: 2tnk + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -512 + +3tnk: + idle: + Facings: 32 + UseClassicFacingFudge: True + turret: + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + muzzle: gunfire2 + Length: 5 + icon: 3tnkicon + +3tnk.destroyed: + idle: 3tnk + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -512 + turret: 3tnk + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -512 + +4tnk: + idle: + Facings: 32 + UseClassicFacingFudge: True + turret: + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + muzzle: gunfire2 + Length: 5 + icon: 4tnkicon + +#Mammoth KV8 sequence by FiveAces +4tnk.kv-8: + idle: + Facings: 32 + UseClassicFacingFudge: True + turret: + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + muzzle: gunfire2 + Length: 5 + icon: 4tnk.kv-8icon + UseTilesetExtension: false + +4tnk.destroyed: + idle: 4tnk + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -512 + turret: 4tnk + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -512 + +v2rl: + idle: + Facings: 32 + UseClassicFacingFudge: True + empty-idle: + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + icon: v2rlicon + +arty: + idle: + Facings: 32 + UseClassicFacingFudge: True + muzzle: gunfire2 + Length: 5 + icon: artyicon + +jeep: + idle: + Facings: 32 + UseClassicFacingFudge: True + turret: + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + muzzle: minigun + Length: 6 + Facings: 8 + icon: jeepicon + +apc: + idle: + Facings: 32 + UseClassicFacingFudge: True + muzzle: minigun + Length: 6 + Facings: 8 + open: + Start: 32 + Length: 3 + unload: + Start: 32 + icon: apcicon + +mnly: + idle: + Facings: 32 + UseClassicFacingFudge: True + icon: mnlyicon + +mrj: + idle: + Facings: 32 + UseClassicFacingFudge: True + spinner: + Start: 32 + Length: 32 + icon: mrjicon + +mgg: + idle: + Facings: 32 + UseClassicFacingFudge: True + spinner: + Start: 32 + Length: 8 + spinner-idle: + Start: 32 + Length: 1 + icon: mggicon + +mgg.destroyed: + idle: mgg + Facings: 32 + UseClassicFacingFudge: True + ZOffset: -512 + spinner: mgg + Start: 32 + Length: 8 + ZOffset: -512 + spinner-idle: mgg + Start: 32 + +ttnk: + idle: + Facings: 32 + UseClassicFacingFudge: True + spinner: + Start: 32 + Length: 32 + icon: ttnkicon + +ftrk: + idle: + Facings: 32 + UseClassicFacingFudge: True + turret: + Start: 32 + Facings: 32 + UseClassicFacingFudge: True + muzzle: gunfire2 + Length: 2 + icon: ftrkicon + +dtrk: + idle: + Facings: 32 + UseClassicFacingFudge: True + icon: dtrkicon + +ctnk: + idle: + Facings: 32 + UseClassicFacingFudge: True + muzzle: gunfire2 + Length: 5 + icon: ctnkicon + +qtnk: + idle: + Facings: 32 + UseClassicFacingFudge: True + piston: + Start: 32 + Facings: 8 + Length: 8 + icon: qtnkicon + +stnk: + idle: + Facings: 32 + UseClassicFacingFudge: True + turret: + Start: 38 + Facings: 32 + icon: stnkicon diff --git a/mods/ura/tilesets/desert.yaml b/mods/ura/tilesets/desert.yaml new file mode 100644 index 0000000..875e8a4 --- /dev/null +++ b/mods/ura/tilesets/desert.yaml @@ -0,0 +1,3187 @@ +General: + Name: Desert + Id: DESERT + Palette: desert.pal + EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Water Cliffs, Beach, River, Bridge + HeightDebugColors: 880000 + +Terrain: + TerrainType@Beach: + Type: Beach + TargetTypes: Ground + Color: B09C78 + TerrainType@Bridge: + Type: Bridge + TargetTypes: Ground, Bridge + AcceptsSmudgeType: Crater, Scorch + Color: 606060 + TerrainType@Brush: + Type: Brush + TargetTypes: Ground + Color: 1C2024 + TerrainType@Clear: + Type: Clear + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 865F45 + RestrictPlayerColor: true + TerrainType@Gems: + Type: Gems + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 8470FF + RestrictPlayerColor: true + TerrainType@Ore: + Type: Ore + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 948060 + RestrictPlayerColor: true + TerrainType@River: + Type: River + TargetTypes: Ground + Color: 6F848B + TerrainType@Road: + Type: Road + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: A87B53 + TerrainType@Rock: + Type: Rock + TargetTypes: Ground + Color: 745A3F + TerrainType@Rough: + Type: Rough + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 44443C + TerrainType@Tree: + Type: Tree + TargetTypes: Ground + Color: 1C2024 + TerrainType@Wall: + Type: Wall + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: D0C0A0 + TerrainType@Water: + Type: Water + TargetTypes: Water + IsWater: True + Color: 5DA5CE + RestrictPlayerColor: true + +Templates: + Template@255: + Id: 255 + Images: clear1.des + Size: 1,1 + PickAny: True + Categories: Terrain + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear + Template@65535: + Id: 65535 + Images: clear1.des + Size: 1,1 + PickAny: True + Categories: Terrain + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear + Template@256: + Id: 256 + Images: w1.des + Size: 1,1 + Categories: Terrain + Tiles: + 0: Water + Template@257: + Id: 257 + Images: sh17.des + Size: 2,2 + Categories: Terrain + Tiles: + 0: Water + 1: Water + 2: Water + 3: Water + Template@258: + Id: 258 + Images: sh18.des + Size: 2,2 + Categories: Terrain + Tiles: + 0: Water + 1: Water + 2: Water + 3: Water + Template@180: + Id: 180 + Images: s01.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@181: + Id: 181 + Images: s02.des + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@182: + Id: 182 + Images: s03.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@183: + Id: 183 + Images: s04.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@184: + Id: 184 + Images: s05.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@185: + Id: 185 + Images: s06.des + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rough + 1: Rock + 2: Rock + 3: Rock + 4: Rock + Template@186: + Id: 186 + Images: s07.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@187: + Id: 187 + Images: s08.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@188: + Id: 188 + Images: s09.des + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@189: + Id: 189 + Images: s10.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@190: + Id: 190 + Images: s11.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@191: + Id: 191 + Images: s12.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@192: + Id: 192 + Images: s13.des + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rock + 4: Rock + 5: Rough + Template@193: + Id: 193 + Images: s14.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + Template@194: + Id: 194 + Images: s15.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@195: + Id: 195 + Images: s16.des + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rough + 2: Rock + 3: Rock + 5: Rock + Template@196: + Id: 196 + Images: s17.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@197: + Id: 197 + Images: s18.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@198: + Id: 198 + Images: s19.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@199: + Id: 199 + Images: s20.des + Size: 2,3 + Categories: Cliffs + Tiles: + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@200: + Id: 200 + Images: s21.des + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@202: + Id: 202 + Images: s22.des + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@203: + Id: 203 + Images: s23.des + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@204: + Id: 204 + Images: s24.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@205: + Id: 205 + Images: s25.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@206: + Id: 206 + Images: s26.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@207: + Id: 207 + Images: s27.des + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rough + 4: Rock + 5: Rock + Template@208: + Id: 208 + Images: s28.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 3: Rock + Template@209: + Id: 209 + Images: s29.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@210: + Id: 210 + Images: s30.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@211: + Id: 211 + Images: s31.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + Template@212: + Id: 212 + Images: s32.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + Template@213: + Id: 213 + Images: s33.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@214: + Id: 214 + Images: s34.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@215: + Id: 215 + Images: s35.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@216: + Id: 216 + Images: s36.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@217: + Id: 217 + Images: s37.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@218: + Id: 218 + Images: s38.des + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@2: + Id: 2 + Images: b01.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@3: + Id: 3 + Images: b02.des + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@4: + Id: 4 + Images: b03.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@5: + Id: 5 + Images: b04.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@6: + Id: 6 + Images: b05.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@7: + Id: 7 + Images: b06.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@14: + Id: 14 + Images: br01.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Tree + Template@15: + Id: 15 + Images: br02.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Tree + Template@16: + Id: 16 + Images: br03.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Tree + Template@17: + Id: 17 + Images: br04.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Tree + Template@18: + Id: 18 + Images: br05.des + Size: 3,2 + Categories: Debris + Tiles: + 0: Tree + 1: Tree + 2: Rock + 3: Rock + 4: Tree + 5: Rock + Template@19: + Id: 19 + Images: br06.des + Size: 2,2 + Categories: Debris + Tiles: + 0: Tree + 1: Tree + 2: Tree + 3: Tree + Template@20: + Id: 20 + Images: br07.des + Size: 2,2 + Categories: Debris + Tiles: + 0: Tree + 1: Tree + 2: Tree + 3: Tree + Template@21: + Id: 21 + Images: br08.des + Size: 3,2 + Categories: Debris + Tiles: + 0: Tree + 1: Tree + 2: Tree + 3: Tree + 4: Tree + 5: Tree + Template@22: + Id: 22 + Images: br09.des + Size: 3,2 + Categories: Debris + Tiles: + 0: Tree + 1: Tree + 2: Tree + 3: Tree + 4: Tree + 5: Tree + Template@23: + Id: 23 + Images: br10.des + Size: 2,2 + Categories: Debris + Tiles: + 0: Tree + 1: Tree + 2: Tree + 3: Tree + Template@35: + Id: 35 + Images: p01.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@36: + Id: 36 + Images: p02.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@37: + Id: 37 + Images: p03.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@38: + Id: 38 + Images: p04.des + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@39: + Id: 39 + Images: p05.des + Size: 2,2 + Categories: Debris + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + Template@40: + Id: 40 + Images: p06.des + Size: 6,4 + Categories: Debris + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 7: Clear + 8: Clear + 9: Clear + 14: Clear + 15: Clear + 16: Clear + 17: Clear + 20: Clear + 21: Clear + 22: Clear + 23: Clear + Template@41: + Id: 41 + Images: p07.des + Size: 4,2 + Categories: Debris + Tiles: + 0: Rough + 1: Rough + 2: Rough + 3: Rough + 4: Rough + 5: Rough + 6: Rough + Template@42: + Id: 42 + Images: p08.des + Size: 2,1 + Categories: Debris + Tiles: + 0: Rough + 1: Rough + Template@43: + Id: 43 + Images: p09.des + Size: 1,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@44: + Id: 44 + Images: p10.des + Size: 3,2 + Categories: Debris + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + Template@73: + Id: 73 + Images: rv26.des + Size: 1,1 + Categories: River + Tiles: + 0: River + Template@74: + Id: 74 + Images: rv27.des + Size: 1,1 + Categories: River + Tiles: + 0: River + Template@296: + Id: 296 + Images: rvm01.des + Size: 2,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: River + 3: River + 4: Rock + 5: Rock + Template@297: + Id: 297 + Images: rvm02.des + Size: 1,3 + Categories: River + Tiles: + 0: Rock + 1: River + 2: Rock + Template@298: + Id: 298 + Images: rvm03.des + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + Template@299: + Id: 299 + Images: rvm04.des + Size: 3,1 + Categories: River + Tiles: + 0: Rock + 1: River + 2: Rock + Template@60: + Id: 60 + Images: rv14.des + Size: 4,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + 6: Rock + 7: River + 8: Rock + 9: Rock + 10: Tree + 11: Rock + Template@61: + Id: 61 + Images: rv15.des + Size: 4,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Clear + 4: River + 5: River + 6: Rock + 7: River + 8: Clear + 9: Rock + 10: Rock + 11: Clear + Template@62: + Id: 62 + Images: rv16.des + Size: 6,4 + Categories: River + Tiles: + 2: Rock + 3: Rock + 4: Rock + 5: Rock + 7: Rock + 8: Rock + 9: River + 10: River + 11: River + 12: Rock + 13: Rock + 14: River + 15: Rock + 16: Tree + 17: Rock + 18: River + 19: River + 20: Rock + 21: Tree + Template@63: + Id: 63 + Images: rv17.des + Size: 6,5 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 6: River + 7: Rock + 8: Rock + 9: Rock + 10: Tree + 12: Rock + 13: Rock + 14: River + 15: River + 16: River + 17: Rock + 18: Clear + 19: Rock + 20: Rock + 21: Rock + 22: River + 23: River + 28: Rock + 29: River + Template@64: + Id: 64 + Images: rv18.des + Size: 4,4 + Categories: River + Tiles: + 0: Rock + 1: River + 2: Tree + 3: Rock + 4: Rock + 5: Rock + 6: Rock + 8: Rock + 9: River + 10: Tree + 12: Rock + 13: River + 14: Rock + Template@65: + Id: 65 + Images: rv19.des + Size: 4,4 + Categories: River + Tiles: + 1: Rock + 2: River + 3: Clear + 5: Rock + 6: River + 7: Tree + 8: Rock + 9: Rock + 10: River + 11: Rock + 12: Clear + 13: Rock + 14: River + 15: Tree + Template@66: + Id: 66 + Images: rv20.des + Size: 6,8 + Categories: River + Tiles: + 2: Clear + 3: Rock + 4: River + 5: Clear + 7: Clear + 8: Rock + 9: River + 10: Rock + 12: Clear + 13: Rock + 14: Rock + 15: River + 16: Rock + 18: Rock + 19: Rock + 20: River + 21: Rock + 22: Clear + 24: Rock + 25: Rock + 26: River + 27: Rock + 28: Rock + 30: Rock + 31: Rock + 32: River + 33: Rock + 36: Clear + 37: River + 38: River + 39: Rock + 42: Clear + 43: River + 44: Rock + 45: Rock + Template@67: + Id: 67 + Images: rv21.des + Size: 5,8 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Clear + 3: Clear + 5: Clear + 6: River + 7: River + 8: Rock + 11: Rock + 12: River + 13: Rock + 16: Rock + 17: River + 18: Rock + 19: Rock + 21: Rock + 22: River + 23: River + 24: Rock + 27: Rock + 28: River + 29: Rock + 32: Rock + 33: River + 34: River + 38: Clear + 39: River + Template@69: + Id: 69 + Images: rv22.des + Size: 3,3 + Categories: River + Tiles: + 1: Clear + 2: Clear + 3: Rock + 4: Rock + 5: River + 6: Rock + 7: River + 8: Rock + Template@70: + Id: 70 + Images: rv23.des + Size: 3,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: River + 5: Rock + 6: Rock + 7: River + 8: Rock + Template@71: + Id: 71 + Images: rv24.des + Size: 3,3 + Categories: River + Tiles: + 0: Rock + 1: River + 2: Rock + 3: Rock + 4: River + 5: River + 7: Tree + 8: Clear + Template@72: + Id: 72 + Images: rv25.des + Size: 3,3 + Categories: River + Tiles: + 0: Tree + 1: River + 2: Rock + 3: River + 4: Rock + 5: Rock + 6: Rock + 7: Rock + 8: Clear + Template@100: + Id: 100 + Images: dt01.des + Size: 4,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: River + 3: Rock + 4: Rock + 5: River + 6: River + 7: River + 8: River + 9: Rock + 10: Tree + 11: Rock + Template@101: + Id: 101 + Images: dt02.des + Size: 2,4 + Categories: River + Tiles: + 0: Rock + 1: River + 2: River + 3: Rock + 4: Rock + 5: River + 6: Rough + 7: River + Template@102: + Id: 102 + Images: dt03.des + Size: 3,3 + Categories: River + Tiles: + 0: Rough + 1: Tree + 2: River + 3: River + 4: River + 5: River + 6: Tree + 7: River + 8: Rock + Template@103: + Id: 103 + Images: dt04.des + Size: 3,4 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: River + 4: River + 5: Rough + 6: Rock + 7: Rock + 8: River + 9: Rough + 10: River + Template@75: + Id: 75 + Images: rc01.des + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@76: + Id: 76 + Images: rc02.des + Size: 2,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@77: + Id: 77 + Images: rc03.des + Size: 2,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@78: + Id: 78 + Images: rc04.des + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@79: + Id: 79 + Images: falls2.des + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + Template@80: + Id: 80 + Images: falls1.des + Size: 3,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: River + 5: River + 6: Rock + 7: Rock + 8: Rock + Template@90: + Id: 90 + Images: ford1.des + Size: 3,3 + Categories: Bridge + Tiles: + 0: Rock + 1: River + 2: Clear + 3: Road + 4: Rough + 5: Road + 6: Rock + 7: River + 8: Clear + Template@91: + Id: 91 + Images: ford2.des + Size: 3,3 + Categories: Bridge + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: River + 4: Rough + 5: River + 6: Rock + 7: Road + 8: Clear + Template@164: + Id: 164 + Images: d44.des + Size: 1,1 + Categories: Road + Tiles: + 0: Road + Template@165: + Id: 165 + Images: d45.des + Size: 1,1 + Categories: Road + Tiles: + 0: Road + Template@120: + Id: 120 + Images: d01.des + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Road + Template@121: + Id: 121 + Images: d02.des + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Clear + Template@122: + Id: 122 + Images: d03.des + Size: 1,2 + Categories: Road + Tiles: + 0: Road + 1: Road + Template@123: + Id: 123 + Images: d04.des + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Road + Template@124: + Id: 124 + Images: d05.des + Size: 3,4 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Road + 4: Road + 6: Road + 7: Road + 9: Road + 10: Road + Template@125: + Id: 125 + Images: d06.des + Size: 2,3 + Categories: Road + Tiles: + 0: Road + 2: Road + 3: Road + 4: Road + 5: Road + Template@126: + Id: 126 + Images: d07.des + Size: 3,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 4: Road + 5: Clear + Template@127: + Id: 127 + Images: d08.des + Size: 3,2 + Categories: Road + Tiles: + 1: Road + 3: Clear + 4: Road + 5: Clear + Template@128: + Id: 128 + Images: d09.des + Size: 4,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Road + 3: Road + 4: Road + 5: Road + 6: Road + 7: Road + 10: Clear + 11: Clear + Template@129: + Id: 129 + Images: d10.des + Size: 4,2 + Categories: Road + Tiles: + 0: Clear + 1: Clear + 4: Road + 5: Road + 6: Road + 7: Road + Template@130: + Id: 130 + Images: d11.des + Size: 2,3 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Road + 4: Clear + Template@500: + Id: 500 + Images: d12.des + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 2: Road + 3: Road + Template@501: + Id: 501 + Images: d13.des + Size: 4,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Clear + 4: Clear + 5: Road + 6: Road + 7: Clear + 10: Road + 11: Road + Template@502: + Id: 502 + Images: d14.des + Size: 3,3 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + 4: Clear + 5: Road + 6: Road + 7: Road + 8: Road + Template@503: + Id: 503 + Images: d15.des + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + 3: Road + 4: Road + 5: Clear + 6: Road + 7: Clear + Template@135: + Id: 135 + Images: d16.des + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Clear + 4: Road + 5: Road + 6: Road + 7: Clear + 8: Clear + Template@136: + Id: 136 + Images: d17.des + Size: 3,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + 3: Clear + 4: Road + 5: Clear + Template@137: + Id: 137 + Images: d18.des + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Clear + Template@138: + Id: 138 + Images: d19.des + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Road + 4: Road + 5: Road + 6: Clear + 7: Road + 8: Clear + Template@139: + Id: 139 + Images: d20.des + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Road + Template@140: + Id: 140 + Images: d21.des + Size: 3,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Road + 3: Clear + 4: Road + 5: Clear + Template@141: + Id: 141 + Images: d22.des + Size: 3,3 + Categories: Road + Tiles: + 1: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Clear + Template@142: + Id: 142 + Images: d23.des + Size: 3,3 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Clear + 4: Road + 5: Clear + 6: Road + 7: Clear + Template@143: + Id: 143 + Images: d24.des + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Clear + 3: Clear + 4: Road + 5: Clear + 7: Clear + 8: Road + Template@144: + Id: 144 + Images: d25.des + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Clear + 3: Clear + 4: Road + 5: Clear + 7: Clear + 8: Road + Template@145: + Id: 145 + Images: d26.des + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Clear + Template@146: + Id: 146 + Images: d27.des + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Clear + Template@147: + Id: 147 + Images: d28.des + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Clear + 2: Clear + Template@148: + Id: 148 + Images: d29.des + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Clear + 2: Clear + Template@149: + Id: 149 + Images: d30.des + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Clear + 2: Road + Template@151: + Id: 151 + Images: d31.des + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Clear + 3: Road + Template@152: + Id: 152 + Images: d32.des + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + Template@153: + Id: 153 + Images: d33.des + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Road + Template@154: + Id: 154 + Images: d34.des + Size: 3,3 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + 4: Road + 5: Clear + 6: Road + 7: Clear + Template@155: + Id: 155 + Images: d35.des + Size: 3,3 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + 4: Road + 5: Clear + 6: Road + 7: Clear + Template@156: + Id: 156 + Images: d36.des + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 3: Clear + Template@157: + Id: 157 + Images: d37.des + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 3: Clear + Template@158: + Id: 158 + Images: d38.des + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 3: Clear + Template@159: + Id: 159 + Images: d39.des + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 3: Clear + Template@160: + Id: 160 + Images: d40.des + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 3: Road + Template@161: + Id: 161 + Images: d41.des + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 2: Road + 3: Clear + Template@162: + Id: 162 + Images: d42.des + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 2: Road + 3: Clear + Template@163: + Id: 163 + Images: d43.des + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 2: Road + 3: Road + Template@300: + Id: 300 + Images: wc01.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@301: + Id: 301 + Images: wc02.des + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@302: + Id: 302 + Images: wc03.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@303: + Id: 303 + Images: wc04.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@304: + Id: 304 + Images: wc05.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@305: + Id: 305 + Images: wc06.des + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rough + 1: Rock + 2: Rock + 3: Rock + 4: Rock + Template@306: + Id: 306 + Images: wc07.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@307: + Id: 307 + Images: wc08.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@308: + Id: 308 + Images: wc09.des + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: Rock + 5: Rock + Template@309: + Id: 309 + Images: wc10.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@310: + Id: 310 + Images: wc11.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@311: + Id: 311 + Images: wc12.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@312: + Id: 312 + Images: wc13.des + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rock + 4: Rock + 5: Clear + Template@313: + Id: 313 + Images: wc14.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Beach + 2: Beach + Template@314: + Id: 314 + Images: wc15.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@315: + Id: 315 + Images: wc16.des + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Water + 2: Rock + 3: Rock + 5: Rock + Template@316: + Id: 316 + Images: wc17.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@317: + Id: 317 + Images: wc18.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@318: + Id: 318 + Images: wc19.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@319: + Id: 319 + Images: wc20.des + Size: 2,3 + Categories: Water Cliffs + Tiles: + 1: River + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@320: + Id: 320 + Images: wc21.des + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@321: + Id: 321 + Images: wc22.des + Size: 2,1 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@322: + Id: 322 + Images: wc23.des + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: River + 3: Rock + 4: Rock + 5: Water + Template@323: + Id: 323 + Images: wc24.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@324: + Id: 324 + Images: wc25.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@325: + Id: 325 + Images: wc26.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@326: + Id: 326 + Images: wc27.des + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Water + 3: Clear + 4: Rock + 5: Rock + Template@327: + Id: 327 + Images: wc28.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 3: Rock + Template@328: + Id: 328 + Images: wc29.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@329: + Id: 329 + Images: wc30.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@330: + Id: 330 + Images: wc31.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: River + 2: Rock + 3: Rock + Template@331: + Id: 331 + Images: wc32.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Water + Template@332: + Id: 332 + Images: wc33.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@333: + Id: 333 + Images: wc34.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@334: + Id: 334 + Images: wc35.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@335: + Id: 335 + Images: wc36.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@336: + Id: 336 + Images: wc37.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@337: + Id: 337 + Images: wc38.des + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@338: + Id: 338 + Images: wc39.des + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@339: + Id: 339 + Images: wc40.des + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@340: + Id: 340 + Images: wc41.des + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@341: + Id: 341 + Images: wc42.des + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@342: + Id: 342 + Images: wc43.des + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@343: + Id: 343 + Images: wc44.des + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@344: + Id: 344 + Images: wc45.des + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@345: + Id: 345 + Images: wc46.des + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@346: + Id: 346 + Images: falls3.des + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + Template@347: + Id: 347 + Images: falls4.des + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: River + 3: River + 4: Rock + 5: Rock + Template@400: + Id: 400 + Images: sh19.des + Size: 3,2 + Categories: Beach + Tiles: + 1: Rock + 2: Clear + 3: Beach + 4: Rock + 5: Beach + Template@401: + Id: 401 + Images: sh20.des + Size: 4,1 + Categories: Beach + Tiles: + 0: Beach + 1: Rock + 2: Rock + 3: Beach + Template@402: + Id: 402 + Images: sh21.des + Size: 3,1 + Categories: Beach + Tiles: + 0: Rock + 1: Beach + 2: Beach + Template@403: + Id: 403 + Images: sh22.des + Size: 6,2 + Categories: Beach + Tiles: + 1: Rock + 2: Rock + 3: Rock + 6: Beach + 7: Water + 8: Water + 9: Rock + 10: Beach + 11: Beach + Template@404: + Id: 404 + Images: sh23.des + Size: 2,2 + Categories: Beach + Tiles: + 0: Clear + 1: Clear + 2: Beach + 3: Beach + Template@405: + Id: 405 + Images: sh24.des + Size: 3,3 + Categories: Beach + Tiles: + 0: Rock + 1: River + 2: Rock + 3: River + 4: River + 5: Clear + 6: River + 7: Water + 8: Beach + Template@431: + Id: 431 + Images: sh54.des + Size: 3,2 + Categories: Beach + Tiles: + 0: Clear + 1: Tree + 2: River + 3: Beach + 4: Water + 5: River + Template@432: + Id: 432 + Images: sh55.des + Size: 3,2 + Categories: Beach + Tiles: + 0: Rock + 1: Rock + 2: Clear + 3: Water + 4: Rock + 5: Rock + Template@439: + Id: 439 + Images: sh62.des + Size: 6,1 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + Template@440: + Id: 440 + Images: sh63.des + Size: 4,1 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + Template@406: + Id: 406 + Images: sh25.des + Size: 3,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Clear + 4: Clear + 5: Rock + Template@407: + Id: 407 + Images: sh26.des + Size: 3,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 4: Clear + 5: Clear + Template@408: + Id: 408 + Images: sh27.des + Size: 4,1 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Rock + Template@409: + Id: 409 + Images: sh28.des + Size: 3,1 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Water + Template@410: + Id: 410 + Images: sh29.des + Size: 6,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Rock + 3: Beach + 4: Beach + 5: Beach + 7: Clear + 8: Clear + 9: Clear + Template@411: + Id: 411 + Images: sh30.des + Size: 2,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Rock + Template@412: + Id: 412 + Images: sh31.des + Size: 3,3 + Categories: Beach + Tiles: + 0: River + 1: River + 2: River + 3: Rock + 4: River + 5: Rock + 6: Clear + 7: River + 8: Rock + Template@433: + Id: 433 + Images: sh56.des + Size: 3,2 + Categories: Beach + Tiles: + 1: Water + 2: River + 3: Beach + 4: Rock + 5: Rock + Template@434: + Id: 434 + Images: sh57.des + Size: 3,2 + Categories: Beach + Tiles: + 0: Beach + 3: Beach + 4: Water + 5: River + Template@413: + Id: 413 + Images: sh36.des + Size: 1,1 + Categories: Beach + Tiles: + 0: Clear + Template@414: + Id: 414 + Images: sh37.des + Size: 1,1 + Categories: Beach + Tiles: + 0: Clear + Template@415: + Id: 415 + Images: sh38.des + Size: 1,1 + Categories: Beach + Tiles: + 0: Clear + Template@416: + Id: 416 + Images: sh39.des + Size: 1,1 + Categories: Beach + Tiles: + 0: Clear + Template@417: + Id: 417 + Images: sh40.des + Size: 3,3 + Categories: Beach + Tiles: + 0: Clear + 1: Beach + 2: Rock + 3: Beach + 4: Water + 5: Water + 6: Beach + 7: Water + 8: Water + Template@418: + Id: 418 + Images: sh41.des + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Beach + 3: Water + 4: Beach + 5: Clear + 6: Beach + 7: Rock + 8: Clear + Template@423: + Id: 423 + Images: sh46.des + Size: 3,3 + Categories: Beach + Tiles: + 0: Clear + 1: Clear + 2: Beach + 3: Clear + 4: Beach + 5: Water + 6: Beach + 7: Water + 8: Water + Template@424: + Id: 424 + Images: sh47.des + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Rock + 3: Beach + 4: Clear + 6: Water + 7: Beach + 8: Beach + Template@425: + Id: 425 + Images: sh48.des + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 3: Beach + 6: Beach + 7: Beach + 8: Beach + Template@426: + Id: 426 + Images: sh49.des + Size: 3,3 + Categories: Beach + Tiles: + 1: Water + 2: Beach + 3: Beach + 4: Rock + 5: Rock + 6: Clear + 7: Rock + 8: Rock + Template@427: + Id: 427 + Images: sh50.des + Size: 4,3 + Categories: Beach + Tiles: + 1: Water + 2: Water + 3: Beach + 4: Rock + 5: Rock + 6: Rock + 8: Beach + 9: Clear + Template@428: + Id: 428 + Images: sh51.des + Size: 4,3 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 4: Clear + 5: Water + 6: Water + 8: Rock + 9: Rock + 10: Beach + 11: Water + Template@429: + Id: 429 + Images: sh52.des + Size: 4,3 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: Beach + 3: Rock + 6: Water + 7: Rock + 10: Water + 11: River + Template@430: + Id: 430 + Images: sh53.des + Size: 4,3 + Categories: Beach + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Beach + 4: Clear + 5: River + 6: Water + 7: Water + 8: River + 9: Water + 10: River + 11: River + Template@419: + Id: 419 + Images: sh42.des + Size: 1,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + Template@420: + Id: 420 + Images: sh43.des + Size: 1,3 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 2: Beach + Template@437: + Id: 437 + Images: sh60.des + Size: 2,3 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: Beach + 3: Clear + 4: Beach + 5: Clear + Template@438: + Id: 438 + Images: sh61.des + Size: 2,3 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 2: Water + 3: Beach + 5: Beach + Template@441: + Id: 441 + Images: sh64.des + Size: 2,3 + Categories: Beach + Tiles: + 0: River + 1: Rough + 2: River + 3: River + 4: River + 5: Rock + Template@421: + Id: 421 + Images: sh44.des + Size: 1,3 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 2: Beach + Template@422: + Id: 422 + Images: sh45.des + Size: 1,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + Template@435: + Id: 435 + Images: sh58.des + Size: 2,3 + Categories: Beach + Tiles: + 0: Beach + 2: Beach + 3: Water + 4: Clear + 5: Beach + Template@436: + Id: 436 + Images: sh59.des + Size: 2,3 + Categories: Beach + Tiles: + 0: Clear + 1: Beach + 2: Beach + 3: River + 4: River + 5: River + Template@442: + Id: 442 + Images: sh65.des + Size: 2,3 + Categories: Beach + Tiles: + 0: Rough + 1: River + 2: River + 3: River + 4: Rock + 5: River + Template@600: + Id: 600 + Images: f01.des + Size: 3,3 + Categories: Bridge + Tiles: + 0: Rough + 1: Road + 2: Road + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@601: + Id: 601 + Images: f02.des + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@602: + Id: 602 + Images: f03.des + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Clear + 7: Road + 8: Clear + Template@603: + Id: 603 + Images: f04.des + Size: 3,3 + Categories: Bridge + Tiles: + 0: Clear + 1: Beach + 2: Beach + 3: Road + 4: Beach + 5: Beach + 6: Clear + 7: Beach + 8: Beach + Template@604: + Id: 604 + Images: f05.des + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@605: + Id: 605 + Images: f06.des + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Clear + 3: Beach + 4: Beach + 5: Road + 6: Beach + 7: Beach + 8: Clear + Template@620: + Id: 620 + Images: bridge1.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Bridge + 3: Rock + 4: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@621: + Id: 621 + Images: bridge1h.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Bridge + 3: Rock + 4: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@622: + Id: 622 + Images: bridge1d.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + 6: Rock + 7: Rock + Template@623: + Id: 623 + Images: bridge1x.des + Size: 6,4 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Road + 4: Road + 6: River + 11: Rock + 12: Rock + 17: Rock + 18: Road + 19: Road + 20: Rock + 21: Rock + 22: River + 23: River + Template@624: + Id: 624 + Images: bridge2.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Bridge + 3: Rock + 4: Rock + 5: Rock + 6: Bridge + 7: Bridge + Template@625: + Id: 625 + Images: bridge2h.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Bridge + 3: Rock + 4: Rock + 5: Rock + 6: Bridge + 7: Bridge + Template@626: + Id: 626 + Images: bridge2d.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + 6: Rock + 7: Rock + Template@627: + Id: 627 + Images: bridge2x.des + Size: 6,4 + Categories: Bridge + Tiles: + 1: Road + 2: Road + 3: Rock + 4: Rock + 5: Rock + 6: Rock + 11: River + 12: Rock + 17: Rock + 18: River + 19: River + 20: Rock + 21: Rock + 22: Road + 23: Road + Template@235: + Id: 235 + Images: br1a.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Bridge + 3: Rock + 5: Bridge + 6: Rock + 7: River + Template@236: + Id: 236 + Images: br1b.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Bridge + 3: Rock + 5: Bridge + 6: Rock + 7: River + Template@237: + Id: 237 + Images: br1c.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 5: River + 6: Rock + 7: River + Template@238: + Id: 238 + Images: br2a.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 4: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@239: + Id: 239 + Images: br2b.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 4: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@240: + Id: 240 + Images: br2c.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: River + 1: River + 4: Rock + 5: Rock + 6: Rock + 7: River + Template@241: + Id: 241 + Images: br3a.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@242: + Id: 242 + Images: br3b.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@243: + Id: 243 + Images: br3c.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 5: Rock + 6: Rock + 7: Rock + Template@244: + Id: 244 + Images: br3d.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: River + 1: Rock + 5: River + 6: River + 7: River + Template@245: + Id: 245 + Images: br3e.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Water + 1: Water + 5: Rock + 6: Water + 7: Water + Template@246: + Id: 246 + Images: br3f.des + Size: 4,2 + Categories: Bridge + Tiles: + 0: Water + 1: Water + 5: Water + 6: Water + 7: Water + Template@380: + Id: 380 + Images: br1x.des + Size: 5,3 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 2: Road + 3: Road + 9: Rock + 14: Rock + Template@381: + Id: 381 + Images: br2x.des + Size: 5,3 + Categories: Bridge + Tiles: + 0: Beach + 5: Rock + 10: Road + 11: Road + 12: Rock + 13: Rock + 14: Rock + Template@382: + Id: 382 + Images: cliffsl1.des + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@383: + Id: 383 + Images: cliffsl2.des + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@384: + Id: 384 + Images: cliffsl3.des + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@385: + Id: 385 + Images: cliffsl4.des + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@386: + Id: 386 + Images: cliffsw1.des + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@387: + Id: 387 + Images: cliffsw2.des + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@388: + Id: 388 + Images: cliffsw3.des + Size: 2,1 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@389: + Id: 389 + Images: cliffsw4.des + Size: 2,1 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock diff --git a/mods/ura/tilesets/interior.yaml b/mods/ura/tilesets/interior.yaml new file mode 100644 index 0000000..49d3df5 --- /dev/null +++ b/mods/ura/tilesets/interior.yaml @@ -0,0 +1,1394 @@ +General: + Name: Interior + Id: INTERIOR + Palette: interior.pal + EditorTemplateOrder: Floor, Wall + HeightDebugColors: 880000 + +Terrain: + TerrainType@Clear: + Type: Clear + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 000000 + TerrainType@ClearNoSmudges: + Type: ClearNoSmudges + TargetTypes: Ground + Color: 000000 + TerrainType@Gems: + Type: Gems + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 8470FF + RestrictPlayerColor: true + TerrainType@Ore: + Type: Ore + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 948060 + RestrictPlayerColor: true + TerrainType@Tree: + Type: Tree + TargetTypes: Ground + Color: 1C2024 + TerrainType@Wall: + Type: Wall + TargetTypes: Ground + Color: D0C0A0 + RestrictPlayerColor: true + +Templates: + Template@255: + Id: 255 + Images: clear1.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: ClearNoSmudges + 1: ClearNoSmudges + 2: ClearNoSmudges + 3: ClearNoSmudges + 4: ClearNoSmudges + 5: ClearNoSmudges + 6: ClearNoSmudges + 7: ClearNoSmudges + 8: ClearNoSmudges + 9: ClearNoSmudges + 10: ClearNoSmudges + 11: ClearNoSmudges + 12: ClearNoSmudges + 13: ClearNoSmudges + 14: ClearNoSmudges + 15: ClearNoSmudges + Template@65535: + Id: 65535 + Images: clear1.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: ClearNoSmudges + 1: ClearNoSmudges + 2: ClearNoSmudges + 3: ClearNoSmudges + 4: ClearNoSmudges + 5: ClearNoSmudges + 6: ClearNoSmudges + 7: ClearNoSmudges + 8: ClearNoSmudges + 9: ClearNoSmudges + 10: ClearNoSmudges + 11: ClearNoSmudges + 12: ClearNoSmudges + 13: ClearNoSmudges + 14: ClearNoSmudges + 15: ClearNoSmudges + Template@329: + Id: 329 + Images: wall0001.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@330: + Id: 330 + Images: wall0002.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@331: + Id: 331 + Images: wall0003.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@332: + Id: 332 + Images: wall0004.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@333: + Id: 333 + Images: wall0005.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@334: + Id: 334 + Images: wall0006.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@335: + Id: 335 + Images: wall0007.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@336: + Id: 336 + Images: wall0008.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@337: + Id: 337 + Images: wall0009.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@338: + Id: 338 + Images: wall0010.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@339: + Id: 339 + Images: wall0011.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@340: + Id: 340 + Images: wall0012.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@341: + Id: 341 + Images: wall0013.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@342: + Id: 342 + Images: wall0014.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@343: + Id: 343 + Images: wall0015.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@344: + Id: 344 + Images: wall0016.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@345: + Id: 345 + Images: wall0017.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@346: + Id: 346 + Images: wall0018.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@347: + Id: 347 + Images: wall0019.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@348: + Id: 348 + Images: wall0020.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@349: + Id: 349 + Images: wall0021.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@350: + Id: 350 + Images: wall0022.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@351: + Id: 351 + Images: wall0023.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + Template@352: + Id: 352 + Images: wall0024.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + Template@353: + Id: 353 + Images: wall0025.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + Template@354: + Id: 354 + Images: wall0026.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + Template@355: + Id: 355 + Images: wall0027.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 3: Wall + Template@356: + Id: 356 + Images: wall0028.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 3: Wall + Template@357: + Id: 357 + Images: wall0029.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 3: Wall + Template@358: + Id: 358 + Images: wall0030.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 3: Wall + Template@359: + Id: 359 + Images: wall0031.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 2: Wall + 3: Wall + Template@360: + Id: 360 + Images: wall0032.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 2: Wall + 3: Wall + Template@361: + Id: 361 + Images: wall0033.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 2: Wall + 3: Wall + Template@362: + Id: 362 + Images: wall0034.int + Size: 2,2 + Categories: Wall + Tiles: + 0: Wall + 2: Wall + 3: Wall + Template@363: + Id: 363 + Images: wall0035.int + Size: 2,2 + Categories: Wall + Tiles: + 1: Wall + 2: Wall + 3: Wall + Template@364: + Id: 364 + Images: wall0036.int + Size: 2,2 + Categories: Wall + Tiles: + 1: Wall + 2: Wall + 3: Wall + Template@365: + Id: 365 + Images: wall0037.int + Size: 2,2 + Categories: Wall + Tiles: + 1: Wall + 2: Wall + 3: Wall + Template@366: + Id: 366 + Images: wall0038.int + Size: 2,2 + Categories: Wall + Tiles: + 1: Wall + 2: Wall + 3: Wall + Template@367: + Id: 367 + Images: wall0039.int + Size: 2,3 + Categories: Wall + Tiles: + 0: Wall + 2: Wall + 3: Wall + 4: Wall + Template@368: + Id: 368 + Images: wall0040.int + Size: 2,3 + Categories: Wall + Tiles: + 0: Wall + 2: Wall + 3: Wall + 4: Wall + Template@369: + Id: 369 + Images: wall0041.int + Size: 2,3 + Categories: Wall + Tiles: + 1: Wall + 2: Wall + 3: Wall + 5: Wall + Template@370: + Id: 370 + Images: wall0042.int + Size: 2,3 + Categories: Wall + Tiles: + 1: Wall + 2: Wall + 3: Wall + 5: Wall + Template@371: + Id: 371 + Images: wall0043.int + Size: 3,2 + Categories: Wall + Tiles: + 1: Wall + 3: Wall + 4: Wall + 5: Wall + Template@372: + Id: 372 + Images: wall0044.int + Size: 3,2 + Categories: Wall + Tiles: + 1: Wall + 3: Wall + 4: Wall + 5: Wall + Template@373: + Id: 373 + Images: wall0045.int + Size: 3,2 + Categories: Wall + Tiles: + 1: Wall + 3: Wall + 4: Wall + 5: Wall + Template@374: + Id: 374 + Images: wall0046.int + Size: 3,2 + Categories: Wall + Tiles: + 1: Wall + 3: Wall + 4: Wall + 5: Wall + Template@375: + Id: 375 + Images: wall0047.int + Size: 3,2 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + 4: Wall + Template@376: + Id: 376 + Images: wall0048.int + Size: 3,2 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + 4: Wall + Template@377: + Id: 377 + Images: wall0049.int + Size: 3,3 + Categories: Wall + Tiles: + 1: Wall + 3: Wall + 4: Wall + 5: Wall + 7: Wall + Template@268: + Id: 268 + Images: flor0001.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + Template@269: + Id: 269 + Images: flor0002.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + Template@270: + Id: 270 + Images: flor0003.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + Template@271: + Id: 271 + Images: flor0004.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + Template@272: + Id: 272 + Images: flor0005.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + Template@273: + Id: 273 + Images: flor0006.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + Template@274: + Id: 274 + Images: flor0007.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + Template@384: + Id: 384 + Images: xtra0001.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@385: + Id: 385 + Images: xtra0002.int + Size: 2,1 + Categories: Wall + Tiles: + 0: Wall + 1: Clear + Template@386: + Id: 386 + Images: xtra0003.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@387: + Id: 387 + Images: xtra0004.int + Size: 1,2 + Categories: Wall + Tiles: + 0: Wall + 1: Clear + Template@388: + Id: 388 + Images: xtra0005.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@389: + Id: 389 + Images: xtra0006.int + Size: 2,1 + Categories: Wall + Tiles: + 0: Wall + 1: Clear + Template@390: + Id: 390 + Images: xtra0007.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@391: + Id: 391 + Images: xtra0008.int + Size: 1,2 + Categories: Wall + Tiles: + 0: Wall + 1: Clear + Template@392: + Id: 392 + Images: xtra0009.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@393: + Id: 393 + Images: xtra0010.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@394: + Id: 394 + Images: xtra0011.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@395: + Id: 395 + Images: xtra0012.int + Size: 1,2 + Categories: Wall + Tiles: + 0: Wall + 1: Clear + Template@396: + Id: 396 + Images: xtra0013.int + Size: 1,2 + Categories: Wall + Tiles: + 0: Wall + 1: Clear + Template@397: + Id: 397 + Images: xtra0014.int + Size: 3,2 + Categories: Wall + Tiles: + 0: Clear + 1: Wall + 2: Clear + 3: Clear + 4: Clear + 5: Clear + Template@398: + Id: 398 + Images: xtra0015.int + Size: 3,2 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + 3: Wall + 4: Wall + 5: Wall + Template@399: + Id: 399 + Images: xtra0016.int + Size: 2,4 + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + 3: Wall + 4: Wall + 5: Wall + 6: Wall + 7: Wall + Template@318: + Id: 318 + Images: strp0001.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + Template@319: + Id: 319 + Images: strp0002.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + Template@320: + Id: 320 + Images: strp0003.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@321: + Id: 321 + Images: strp0004.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@322: + Id: 322 + Images: strp0005.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@323: + Id: 323 + Images: strp0006.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@324: + Id: 324 + Images: strp0007.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@325: + Id: 325 + Images: strp0008.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@326: + Id: 326 + Images: strp0009.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@327: + Id: 327 + Images: strp0010.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@328: + Id: 328 + Images: strp0011.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@253: + Id: 253 + Images: arro0001.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + Template@254: + Id: 254 + Images: arro0002.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + Template@256: + Id: 256 + Images: arro0004.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + Template@257: + Id: 257 + Images: arro0005.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + Template@258: + Id: 258 + Images: arro0006.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + Template@259: + Id: 259 + Images: arro0007.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@260: + Id: 260 + Images: arro0008.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@261: + Id: 261 + Images: arro0009.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@262: + Id: 262 + Images: arro0010.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@263: + Id: 263 + Images: arro0011.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@264: + Id: 264 + Images: arro0012.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@265: + Id: 265 + Images: arro0013.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@266: + Id: 266 + Images: arro0014.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@267: + Id: 267 + Images: arro0015.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@275: + Id: 275 + Images: gflr0001.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + Template@276: + Id: 276 + Images: gflr0002.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + Template@277: + Id: 277 + Images: gflr0003.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + Template@278: + Id: 278 + Images: gflr0004.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + Template@279: + Id: 279 + Images: gflr0005.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + Template@280: + Id: 280 + Images: gstr0001.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + Template@281: + Id: 281 + Images: gstr0002.int + Size: 1,1 + PickAny: True + Categories: Floor + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + Template@282: + Id: 282 + Images: gstr0003.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@283: + Id: 283 + Images: gstr0004.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@284: + Id: 284 + Images: gstr0005.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@285: + Id: 285 + Images: gstr0006.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@286: + Id: 286 + Images: gstr0007.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@287: + Id: 287 + Images: gstr0008.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@288: + Id: 288 + Images: gstr0009.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@289: + Id: 289 + Images: gstr0010.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@290: + Id: 290 + Images: gstr0011.int + Size: 1,1 + Categories: Floor + Tiles: + 0: Clear + Template@291: + Id: 291 + Images: lwal0001.int + Size: 1,1 + PickAny: True + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + 3: Wall + Template@292: + Id: 292 + Images: lwal0002.int + Size: 1,1 + PickAny: True + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + 3: Wall + Template@293: + Id: 293 + Images: lwal0003.int + Size: 1,1 + PickAny: True + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + 3: Wall + Template@294: + Id: 294 + Images: lwal0004.int + Size: 1,1 + PickAny: True + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + 3: Wall + Template@295: + Id: 295 + Images: lwal0005.int + Size: 1,1 + PickAny: True + Categories: Wall + Tiles: + 0: Wall + 1: Wall + 2: Wall + 3: Wall + 4: Wall + 5: Wall + Template@296: + Id: 296 + Images: lwal0006.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@297: + Id: 297 + Images: lwal0007.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@298: + Id: 298 + Images: lwal0008.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@299: + Id: 299 + Images: lwal0009.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@300: + Id: 300 + Images: lwal0010.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@301: + Id: 301 + Images: lwal0011.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@302: + Id: 302 + Images: lwal0012.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@303: + Id: 303 + Images: lwal0013.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@304: + Id: 304 + Images: lwal0014.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@305: + Id: 305 + Images: lwal0015.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@306: + Id: 306 + Images: lwal0016.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@307: + Id: 307 + Images: lwal0017.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@308: + Id: 308 + Images: lwal0018.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@309: + Id: 309 + Images: lwal0019.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@310: + Id: 310 + Images: lwal0020.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@311: + Id: 311 + Images: lwal0021.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@312: + Id: 312 + Images: lwal0022.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@313: + Id: 313 + Images: lwal0023.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@314: + Id: 314 + Images: lwal0024.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@315: + Id: 315 + Images: lwal0025.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@316: + Id: 316 + Images: lwal0026.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall + Template@317: + Id: 317 + Images: lwal0027.int + Size: 1,1 + Categories: Wall + Tiles: + 0: Wall diff --git a/mods/ura/tilesets/snow.yaml b/mods/ura/tilesets/snow.yaml new file mode 100644 index 0000000..d5a25cb --- /dev/null +++ b/mods/ura/tilesets/snow.yaml @@ -0,0 +1,3226 @@ +General: + Name: Snow + Id: SNOW + Palette: snow.pal + EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Water Cliffs, Beach, River, Bridge + HeightDebugColors: 880000 + +Terrain: + TerrainType@Beach: + Type: Beach + TargetTypes: Ground + Color: B09C78 + TerrainType@Bridge: + Type: Bridge + TargetTypes: Ground, Bridge + AcceptsSmudgeType: Crater, Scorch + Color: 606060 + TerrainType@Clear: + Type: Clear + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: C4C4C4 + RestrictPlayerColor: true + TerrainType@Gems: + Type: Gems + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 8470FF + RestrictPlayerColor: true + TerrainType@Ore: + Type: Ore + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 948060 + RestrictPlayerColor: true + TerrainType@River: + Type: River + TargetTypes: Ground + Color: 5C8CB4 + TerrainType@Road: + Type: Road + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 587474 + TerrainType@Rock: + Type: Rock + TargetTypes: Ground + Color: 44443C + TerrainType@Rough: + Type: Rough + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 44443C + TerrainType@Tree: + Type: Tree + TargetTypes: Ground + Color: 1C2024 + TerrainType@Wall: + Type: Wall + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: D0C0A0 + TerrainType@Water: + Type: Water + TargetTypes: Water + IsWater: True + Color: 5C74A4 + RestrictPlayerColor: true + +Templates: + Template@255: + Id: 255 + Images: clear1.sno + Size: 1,1 + PickAny: True + Categories: Terrain + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear + 16: Clear + 17: Clear + 18: Clear + 19: Clear + Template@65535: + Id: 65535 + Images: clear1.sno + Size: 1,1 + PickAny: True + Categories: Terrain + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear + 16: Clear + 17: Clear + 18: Clear + 19: Clear + Template@1: + Id: 1 + Images: w1.sno + Size: 1,1 + Categories: Terrain + Tiles: + 0: Water + Template@2: + Id: 2 + Images: w2.sno + Size: 2,2 + Categories: Terrain + Tiles: + 0: Water + 1: Water + 2: Water + 3: Water + Template@3: + Id: 3 + Images: sh01.sno + Size: 4,5 + Categories: Beach + Tiles: + 3: Rock + 5: Clear + 6: Clear + 7: Beach + 8: Beach + 9: Water + 10: Water + 11: River + 12: Water + 13: Water + 16: Water + Template@4: + Id: 4 + Images: sh02.sno + Size: 5,5 + Categories: Beach + Tiles: + 4: Clear + 8: Beach + 9: Beach + 10: Beach + 11: Clear + 12: Beach + 13: Beach + 14: Beach + 15: Beach + 16: Rough + 17: Rough + 18: River + 20: Water + 21: Water + 22: Rock + Template@5: + Id: 5 + Images: sh03.sno + Size: 3,5 + Categories: Beach + Tiles: + 2: Clear + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + 9: Water + 10: Water + 12: Water + Template@6: + Id: 6 + Images: sh04.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Water + 8: Water + Template@7: + Id: 7 + Images: sh05.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Rock + 2: Beach + 3: Beach + 4: Rock + 5: Rock + 6: Rock + 7: River + 8: River + Template@8: + Id: 8 + Images: sh06.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Water + 8: Water + Template@9: + Id: 9 + Images: sh07.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Water + 8: Water + Template@10: + Id: 10 + Images: sh08.sno + Size: 1,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + Template@11: + Id: 11 + Images: sh09.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Clear + 1: River + 2: Rock + 3: Clear + 4: River + 5: Beach + 6: Water + 7: Water + 8: Water + Template@12: + Id: 12 + Images: sh10.sno + Size: 5,6 + Categories: Beach + Tiles: + 0: Clear + 5: Beach + 6: Clear + 10: Water + 11: Beach + 12: Beach + 13: Water + 17: Water + 18: Beach + 19: Beach + 22: Rock + 23: Rock + 24: Rock + 28: Water + 29: Water + Template@13: + Id: 13 + Images: sh11.sno + Size: 4,5 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 4: Beach + 5: Water + 6: Beach + 8: Water + 9: Water + 10: Beach + 11: Beach + 14: Beach + 15: Beach + 18: Water + 19: Beach + Template@14: + Id: 14 + Images: sh12.sno + Size: 3,5 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Beach + 8: Beach + 10: Water + 11: Beach + 14: Water + Template@15: + Id: 15 + Images: sh13.sno + Size: 6,5 + Categories: Beach + Tiles: + 0: Water + 1: Rock + 2: Beach + 7: Beach + 8: Beach + 9: Beach + 13: Water + 14: Beach + 15: Beach + 16: Clear + 19: Water + 20: Water + 21: Rough + 22: Beach + 23: Clear + 27: Beach + 28: Beach + 29: Beach + Template@16: + Id: 16 + Images: sh14.sno + Size: 4,4 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Clear + 4: River + 5: Beach + 6: Beach + 8: Rough + 9: Beach + 10: Beach + 13: Water + 14: Beach + 15: Beach + Template@17: + Id: 17 + Images: sh15.sno + Size: 5,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Beach + 3: Clear + 6: Water + 7: Beach + 8: Beach + 12: Water + 13: Beach + 14: Beach + Template@18: + Id: 18 + Images: sh16.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: Clear + 3: Water + 4: Beach + 5: Clear + 6: Water + 7: Beach + 8: Clear + Template@19: + Id: 19 + Images: sh17.sno + Size: 2,1 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + Template@20: + Id: 20 + Images: sh18.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Rough + 3: Water + 4: River + 5: River + 6: Water + 7: Beach + 8: Rough + Template@21: + Id: 21 + Images: sh19.sno + Size: 4,5 + Categories: Beach + Tiles: + 1: Water + 2: Beach + 3: Clear + 5: Beach + 6: Beach + 7: Clear + 8: Water + 9: Beach + 10: Beach + 12: Water + 13: Beach + 14: Beach + 16: Water + 17: Beach + 18: Clear + Template@22: + Id: 22 + Images: sh20.sno + Size: 5,4 + Categories: Beach + Tiles: + 2: Water + 3: Beach + 4: Beach + 5: Water + 6: Beach + 7: Beach + 8: Beach + 10: Water + 11: Beach + 12: Beach + 15: Water + 16: Beach + 17: Beach + Template@23: + Id: 23 + Images: sh21.sno + Size: 5,3 + Categories: Beach + Tiles: + 1: Water + 2: Beach + 3: Beach + 4: Clear + 5: Water + 6: Beach + 7: Beach + 8: Clear + 10: Water + 11: Beach + 12: Beach + Template@24: + Id: 24 + Images: sh22.sno + Size: 6,5 + Categories: Beach + Tiles: + 0: Water + 6: Water + 7: Water + 12: Beach + 13: Beach + 14: Water + 15: Water + 16: Water + 17: Water + 19: Clear + 20: Beach + 21: Beach + 22: Water + 23: Beach + 27: Beach + 28: Beach + 29: Beach + Template@25: + Id: 25 + Images: sh23.sno + Size: 5,5 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 2: Water + 5: Beach + 6: Beach + 7: Water + 8: Water + 9: Water + 11: Clear + 12: Beach + 13: River + 14: Water + 17: Clear + 18: Beach + 19: Beach + 22: Beach + 23: Beach + 24: Beach + Template@26: + Id: 26 + Images: sh24.sno + Size: 3,4 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 3: Beach + 4: Water + 5: Water + 7: Clear + 8: Beach + 11: Clear + Template@27: + Id: 27 + Images: sh25.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Water + 3: Rock + 4: Rock + 5: Beach + 6: Rock + 7: Rock + 8: Beach + Template@28: + Id: 28 + Images: sh26.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Water + 3: Beach + 4: Beach + 5: Rough + 6: Beach + 7: Beach + 8: Beach + Template@29: + Id: 29 + Images: sh27.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Rough + Template@30: + Id: 30 + Images: sh28.sno + Size: 3,3 + Categories: Beach + Tiles: + 1: Rock + 2: Rock + 3: Beach + 4: Rock + 5: Rock + 6: Beach + 7: Rough + 8: Rough + Template@31: + Id: 31 + Images: sh29.sno + Size: 1,2 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + Template@32: + Id: 32 + Images: sh30.sno + Size: 3,2 + Categories: Beach + Tiles: + 0: Beach + 1: River + 2: River + 3: Clear + 4: River + 5: Rough + Template@33: + Id: 33 + Images: sh31.sno + Size: 6,5 + Categories: Beach + Tiles: + 3: Water + 4: Water + 5: Beach + 8: Water + 9: Water + 10: Beach + 11: Beach + 12: Water + 13: Water + 14: Water + 15: Beach + 16: Clear + 18: Beach + 19: Beach + 20: Water + 21: Beach + 22: Clear + 24: Clear + 25: Clear + 26: Beach + 27: Beach + 28: Clear + Template@34: + Id: 34 + Images: sh32.sno + Size: 4,4 + Categories: Beach + Tiles: + 2: Water + 3: Water + 4: Water + 5: Water + 6: Beach + 7: Beach + 8: Beach + 9: Beach + 10: Beach + 12: Clear + 13: Clear + Template@35: + Id: 35 + Images: sh33.sno + Size: 3,4 + Categories: Beach + Tiles: + 1: Water + 2: Beach + 3: Water + 4: Beach + 5: Clear + 6: Beach + 7: Rough + 9: Beach + 10: Beach + Template@36: + Id: 36 + Images: sh34.sno + Size: 6,5 + Categories: Beach + Tiles: + 3: Clear + 4: Beach + 5: Water + 7: Beach + 8: Beach + 9: Beach + 10: Beach + 13: Beach + 14: Beach + 15: Water + 19: Beach + 20: Beach + 21: Water + 24: Beach + 25: Beach + 26: Water + Template@37: + Id: 37 + Images: sh35.sno + Size: 4,4 + Categories: Beach + Tiles: + 2: Beach + 3: Water + 5: Clear + 6: Beach + 7: Rough + 9: Beach + 10: Beach + 11: Water + 12: Clear + 13: Beach + 14: Water + Template@38: + Id: 38 + Images: sh36.sno + Size: 4,3 + Categories: Beach + Tiles: + 1: Beach + 2: Beach + 3: Water + 4: Beach + 5: Beach + 6: Water + 8: Beach + 9: Water + 10: Water + Template@39: + Id: 39 + Images: sh37.sno + Size: 3,3 + Categories: Beach + Tiles: + 1: Beach + 2: Water + 3: Clear + 4: Beach + 5: Water + 6: Rough + 7: Beach + 8: Water + Template@40: + Id: 40 + Images: sh38.sno + Size: 2,1 + Categories: Beach + Tiles: + 0: Clear + 1: Beach + Template@41: + Id: 41 + Images: sh39.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Rock + 1: Beach + 2: Water + 3: River + 4: River + 5: Water + 6: Clear + 7: Beach + 8: Water + Template@42: + Id: 42 + Images: sh40.sno + Size: 5,5 + Categories: Beach + Tiles: + 0: Clear + 1: Beach + 2: Water + 6: Beach + 7: Water + 11: Beach + 12: Water + 13: Water + 16: Clear + 17: Beach + 18: Beach + 19: Water + 22: Beach + 23: Beach + 24: Water + Template@43: + Id: 43 + Images: sh41.sno + Size: 4,4 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 4: Beach + 5: Beach + 6: Water + 8: Beach + 9: Beach + 10: Water + 11: Water + 13: Clear + 14: Beach + 15: Water + Template@44: + Id: 44 + Images: sh42.sno + Size: 4,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Water + 5: Beach + 6: Beach + 7: River + 9: Clear + 10: Beach + 11: Water + Template@45: + Id: 45 + Images: sh43.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Water + 8: Water + Template@46: + Id: 46 + Images: sh44.sno + Size: 2,2 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: River + 3: Water + Template@47: + Id: 47 + Images: sh45.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: Water + 3: Water + 4: Rough + 5: Beach + 6: Water + 7: River + 8: Beach + Template@48: + Id: 48 + Images: sh46.sno + Size: 2,2 + Categories: Beach + Tiles: + 0: Water + 1: River + 2: River + 3: Beach + Template@49: + Id: 49 + Images: sh47.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 3: Beach + 4: Water + 6: Beach + 7: Beach + 8: Water + Template@50: + Id: 50 + Images: sh48.sno + Size: 2,2 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Clear + 3: Beach + Template@51: + Id: 51 + Images: sh49.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 2: Water + 3: Rock + 4: Rock + 5: River + 6: River + 7: Rock + 8: Rock + Template@52: + Id: 52 + Images: sh50.sno + Size: 2,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Water + Template@53: + Id: 53 + Images: sh51.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Clear + 1: Beach + 2: Beach + 4: Beach + 5: Beach + 7: Rough + 8: Clear + Template@54: + Id: 54 + Images: sh52.sno + Size: 3,3 + Categories: Beach + Tiles: + 1: Clear + 2: Clear + 3: Clear + 4: Beach + 5: Beach + 7: Beach + 8: Water + Template@55: + Id: 55 + Images: sh53.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 3: Beach + 4: Beach + 5: Clear + 6: Water + 7: Beach + 8: Clear + Template@56: + Id: 56 + Images: sh54.sno + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: Clear + 3: Beach + 4: Beach + 6: Clear + Template@57: + Id: 57 + Images: sh55.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@58: + Id: 58 + Images: sh56.sno + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@135: + Id: 135 + Images: s01.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@136: + Id: 136 + Images: s02.sno + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@137: + Id: 137 + Images: s03.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@138: + Id: 138 + Images: s04.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@139: + Id: 139 + Images: s05.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@140: + Id: 140 + Images: s06.sno + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rough + 1: Rock + 2: Rock + 3: Rock + 4: Rock + Template@141: + Id: 141 + Images: s07.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@142: + Id: 142 + Images: s08.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@143: + Id: 143 + Images: s09.sno + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@144: + Id: 144 + Images: s10.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@145: + Id: 145 + Images: s11.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@146: + Id: 146 + Images: s12.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@147: + Id: 147 + Images: s13.sno + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rock + 4: Rock + 5: Rough + Template@148: + Id: 148 + Images: s14.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + Template@149: + Id: 149 + Images: s15.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@150: + Id: 150 + Images: s16.sno + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rough + 2: Rock + 3: Rock + 5: Rock + Template@151: + Id: 151 + Images: s17.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@152: + Id: 152 + Images: s18.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@153: + Id: 153 + Images: s19.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@154: + Id: 154 + Images: s20.sno + Size: 2,3 + Categories: Cliffs + Tiles: + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@155: + Id: 155 + Images: s21.sno + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@156: + Id: 156 + Images: s22.sno + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@157: + Id: 157 + Images: s23.sno + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@158: + Id: 158 + Images: s24.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@159: + Id: 159 + Images: s25.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@160: + Id: 160 + Images: s26.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@161: + Id: 161 + Images: s27.sno + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rough + 4: Rock + 5: Rock + Template@162: + Id: 162 + Images: s28.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 3: Rock + Template@163: + Id: 163 + Images: s29.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@164: + Id: 164 + Images: s30.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@165: + Id: 165 + Images: s31.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + Template@166: + Id: 166 + Images: s32.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + Template@167: + Id: 167 + Images: s33.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@168: + Id: 168 + Images: s34.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@169: + Id: 169 + Images: s35.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@170: + Id: 170 + Images: s36.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@171: + Id: 171 + Images: s37.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@172: + Id: 172 + Images: s38.sno + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@59: + Id: 59 + Images: wc01.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@60: + Id: 60 + Images: wc02.sno + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@61: + Id: 61 + Images: wc03.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@62: + Id: 62 + Images: wc04.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@63: + Id: 63 + Images: wc05.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@64: + Id: 64 + Images: wc06.sno + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rough + 1: Rock + 2: Rock + 3: Rock + 4: Rock + Template@65: + Id: 65 + Images: wc07.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@66: + Id: 66 + Images: wc08.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@67: + Id: 67 + Images: wc09.sno + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: Rock + 5: Rock + Template@68: + Id: 68 + Images: wc10.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@69: + Id: 69 + Images: wc11.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@70: + Id: 70 + Images: wc12.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@71: + Id: 71 + Images: wc13.sno + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rock + 4: Rock + 5: Clear + Template@72: + Id: 72 + Images: wc14.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Beach + 2: Beach + 3: Beach + Template@73: + Id: 73 + Images: wc15.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@74: + Id: 74 + Images: wc16.sno + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Water + 2: Rock + 3: Rock + 5: Rock + Template@75: + Id: 75 + Images: wc17.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@76: + Id: 76 + Images: wc18.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@77: + Id: 77 + Images: wc19.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@78: + Id: 78 + Images: wc20.sno + Size: 2,3 + Categories: Water Cliffs + Tiles: + 1: River + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@79: + Id: 79 + Images: wc21.sno + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@80: + Id: 80 + Images: wc22.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@81: + Id: 81 + Images: wc23.sno + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: River + 3: Rock + 4: Rock + 5: Water + Template@82: + Id: 82 + Images: wc24.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@83: + Id: 83 + Images: wc25.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@84: + Id: 84 + Images: wc26.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@85: + Id: 85 + Images: wc27.sno + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Water + 3: Clear + 4: Rock + 5: Rock + Template@86: + Id: 86 + Images: wc28.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 3: Rock + Template@87: + Id: 87 + Images: wc29.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@88: + Id: 88 + Images: wc30.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@89: + Id: 89 + Images: wc31.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: River + 2: Rock + 3: Rock + Template@90: + Id: 90 + Images: wc32.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Water + Template@91: + Id: 91 + Images: wc33.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@92: + Id: 92 + Images: wc34.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@93: + Id: 93 + Images: wc35.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@94: + Id: 94 + Images: wc36.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@95: + Id: 95 + Images: wc37.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@96: + Id: 96 + Images: wc38.sno + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@173: + Id: 173 + Images: d01.sno + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Clear + Template@174: + Id: 174 + Images: d02.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Clear + Template@175: + Id: 175 + Images: d03.sno + Size: 1,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + Template@176: + Id: 176 + Images: d04.sno + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + Template@177: + Id: 177 + Images: d05.sno + Size: 3,4 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Road + 4: Road + 6: Road + 7: Road + 9: Road + 10: Road + Template@178: + Id: 178 + Images: d06.sno + Size: 2,3 + Categories: Road + Tiles: + 0: Road + 2: Road + 3: Road + 4: Road + 5: Clear + Template@179: + Id: 179 + Images: d07.sno + Size: 3,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 4: Road + 5: Clear + Template@180: + Id: 180 + Images: d08.sno + Size: 3,2 + Categories: Road + Tiles: + 1: Road + 3: Clear + 4: Road + 5: Clear + Template@181: + Id: 181 + Images: d09.sno + Size: 4,3 + Categories: Road + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Road + 5: Road + 6: Road + 7: Road + 10: Clear + 11: Clear + Template@182: + Id: 182 + Images: d10.sno + Size: 4,2 + Categories: Road + Tiles: + 0: Clear + 1: Rock + 4: Road + 5: Road + 6: Road + 7: Road + Template@183: + Id: 183 + Images: d11.sno + Size: 2,3 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Road + 4: Clear + Template@184: + Id: 184 + Images: d12.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 2: Road + 3: Road + Template@185: + Id: 185 + Images: d13.sno + Size: 4,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Clear + 4: Clear + 5: Road + 6: Road + 7: Rock + 10: Rock + 11: Road + Template@186: + Id: 186 + Images: d14.sno + Size: 3,3 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + 4: Rock + 5: Road + 6: Road + 7: Road + 8: Road + Template@187: + Id: 187 + Images: d15.sno + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + 3: Road + 4: Road + 5: Clear + 6: Road + 7: Clear + Template@188: + Id: 188 + Images: d16.sno + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Road + 3: Road + 4: Road + 5: Road + 6: Road + 7: Road + 8: Rock + Template@189: + Id: 189 + Images: d17.sno + Size: 3,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + 3: Clear + 4: Road + 5: Clear + Template@190: + Id: 190 + Images: d18.sno + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Rock + Template@191: + Id: 191 + Images: d19.sno + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Road + 4: Road + 5: Road + 6: Clear + 7: Road + 8: Clear + Template@192: + Id: 192 + Images: d20.sno + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Road + Template@193: + Id: 193 + Images: d21.sno + Size: 3,2 + Categories: Road + Tiles: + 0: Rock + 1: Road + 2: Road + 3: Clear + 4: Road + 5: Rough + Template@194: + Id: 194 + Images: d22.sno + Size: 3,3 + Categories: Road + Tiles: + 1: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Clear + Template@195: + Id: 195 + Images: d23.sno + Size: 3,3 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Clear + 4: Road + 5: Clear + 6: Road + 7: Road + Template@196: + Id: 196 + Images: d24.sno + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + 4: Road + 5: Road + 7: Road + 8: Road + Template@197: + Id: 197 + Images: d25.sno + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + 4: Road + 5: Road + 7: Road + 8: Road + Template@198: + Id: 198 + Images: d26.sno + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + Template@199: + Id: 199 + Images: d27.sno + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + Template@200: + Id: 200 + Images: d28.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Rough + Template@201: + Id: 201 + Images: d29.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + Template@202: + Id: 202 + Images: d30.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + Template@203: + Id: 203 + Images: d31.sno + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + Template@204: + Id: 204 + Images: d32.sno + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + Template@205: + Id: 205 + Images: d33.sno + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + Template@206: + Id: 206 + Images: d34.sno + Size: 3,3 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + 4: Road + 5: Road + 6: Road + 7: Road + Template@207: + Id: 207 + Images: d35.sno + Size: 3,3 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + 4: Road + 5: Road + 6: Road + 7: Road + Template@208: + Id: 208 + Images: d36.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 3: Road + Template@209: + Id: 209 + Images: d37.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 3: Road + Template@210: + Id: 210 + Images: d38.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + Template@211: + Id: 211 + Images: d39.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + Template@212: + Id: 212 + Images: d40.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + Template@213: + Id: 213 + Images: d41.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Rock + 2: Road + 3: Road + Template@214: + Id: 214 + Images: d42.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 2: Road + 3: Road + Template@215: + Id: 215 + Images: d43.sno + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 2: Road + 3: Road + Template@227: + Id: 227 + Images: d44.sno + Size: 1,1 + Categories: Road + Tiles: + 0: Road + Template@228: + Id: 228 + Images: d45.sno + Size: 1,1 + Categories: Road + Tiles: + 0: Road + Template@231: + Id: 231 + Images: rc01.sno + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@232: + Id: 232 + Images: rc02.sno + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@233: + Id: 233 + Images: rc03.sno + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@234: + Id: 234 + Images: rc04.sno + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@112: + Id: 112 + Images: rv01.sno + Size: 5,4 + Categories: River + Tiles: + 0: Rock + 1: Rock + 5: Rock + 6: River + 7: River + 8: River + 9: River + 10: Rock + 11: Rock + 12: Rock + 13: Rock + 14: Rock + 16: Rock + 17: Rough + Template@113: + Id: 113 + Images: rv02.sno + Size: 5,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rough + 4: Rough + 5: River + 6: River + 7: River + 8: River + 9: River + 10: Rock + 11: Rock + 12: Rock + Template@114: + Id: 114 + Images: rv03.sno + Size: 4,4 + Categories: River + Tiles: + 0: Rock + 1: Rough + 4: Rock + 5: Rock + 6: Rock + 7: Clear + 8: Rock + 9: Rock + 10: River + 11: River + 13: Clear + 14: Clear + 15: Rock + Template@115: + Id: 115 + Images: rv04.sno + Size: 4,4 + Categories: River + Tiles: + 2: Rock + 3: Rough + 5: Rough + 6: Rock + 7: River + 8: River + 9: River + 10: River + 11: River + 12: Rock + 13: Rock + 14: Rock + Template@116: + Id: 116 + Images: rv05.sno + Size: 3,3 + Categories: River + Tiles: + 0: Clear + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + 6: Rock + 7: River + 8: Rock + Template@117: + Id: 117 + Images: rv06.sno + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + Template@118: + Id: 118 + Images: rv07.sno + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: River + 3: Rock + 4: Rock + 5: River + Template@119: + Id: 119 + Images: rv08.sno + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: River + 2: River + 3: River + Template@120: + Id: 120 + Images: rv09.sno + Size: 2,2 + Categories: River + Tiles: + 0: Clear + 1: Clear + 2: River + 3: River + Template@121: + Id: 121 + Images: rv10.sno + Size: 2,2 + Categories: River + Tiles: + 0: River + 1: River + 2: Rock + 3: River + Template@122: + Id: 122 + Images: rv11.sno + Size: 2,2 + Categories: River + Tiles: + 0: River + 1: River + 2: River + 3: Rock + Template@123: + Id: 123 + Images: rv12.sno + Size: 3,4 + Categories: River + Tiles: + 0: Clear + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + 6: River + 7: River + 8: Rock + 9: Rough + 10: River + 11: Rock + Template@124: + Id: 124 + Images: rv13.sno + Size: 4,4 + Categories: River + Tiles: + 2: Clear + 3: Rough + 4: River + 5: River + 6: River + 7: River + 8: Rough + 9: Rock + 10: River + 11: Rock + 12: Clear + 13: Rock + 14: River + 15: Rough + Template@229: + Id: 229 + Images: rv14.sno + Size: 1,2 + Categories: River + Tiles: + 0: Rock + 1: River + Template@230: + Id: 230 + Images: rv15.sno + Size: 2,1 + Categories: River + Tiles: + 0: Rock + 1: River + Template@235: + Id: 235 + Images: br1a.sno + Size: 4,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 4: Rock + 5: Bridge + 6: Bridge + 7: Rock + 9: Bridge + 10: Rock + 11: Rock + Template@236: + Id: 236 + Images: br1b.sno + Size: 4,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rough + 4: Rock + 5: Rough + 6: Rough + 7: Rock + 9: Rough + 10: Rock + 11: Rock + Template@237: + Id: 237 + Images: br1c.sno + Size: 4,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rock + 4: Rock + 5: Rock + 6: Rock + 7: Rock + 9: Rock + 10: Rock + 11: Rock + Template@238: + Id: 238 + Images: br2a.sno + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 5: Rock + 6: Bridge + 7: Bridge + 8: Rock + 9: Rock + 11: Bridge + 12: Rock + 13: Rock + Template@239: + Id: 239 + Images: br2b.sno + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rough + 5: Rock + 6: Rough + 7: Rough + 8: Rock + 9: Rock + 11: Rough + 12: Rock + 13: Rock + Template@240: + Id: 240 + Images: br2c.sno + Size: 5,3 + Categories: Bridge + Tiles: + 1: Water + 2: Water + 5: Rock + 6: Rock + 7: Rock + 8: Rock + 9: Rock + 11: Rock + 12: Rock + 13: Rock + Template@241: + Id: 241 + Images: br3a.sno + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@242: + Id: 242 + Images: br3b.sno + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@243: + Id: 243 + Images: br3c.sno + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 5: Rock + 6: Rock + 7: Rock + Template@244: + Id: 244 + Images: br3d.sno + Size: 4,2 + Categories: Bridge + Tiles: + 0: River + 1: Rock + 5: River + 6: River + 7: River + Template@245: + Id: 245 + Images: br3e.sno + Size: 4,2 + Categories: Bridge + Tiles: + 0: Water + 1: Water + 5: Rock + 6: Water + 7: Water + Template@246: + Id: 246 + Images: br3f.sno + Size: 4,2 + Categories: Bridge + Tiles: + 0: Water + 1: Water + 5: Water + 6: Water + 7: Water + Template@380: + Id: 380 + Images: br1x.sno + Size: 5,3 + Categories: Bridge + Tiles: + 0: Rock + 3: Road + 4: Clear + 9: Rock + 14: Water + Template@381: + Id: 381 + Images: br2x.sno + Size: 5,1 + Categories: Bridge + Tiles: + 0: Road + 4: Beach + Template@131: + Id: 131 + Images: bridge1.sno + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 3: Bridge + 4: Rock + 5: Rock + 6: Bridge + 7: Bridge + 8: Rock + 9: Rock + 12: Rock + Template@132: + Id: 132 + Images: bridge1d.sno + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + 6: Rock + 7: Rock + 8: Rock + 9: Rock + 12: Rock + Template@378: + Id: 378 + Images: bridge1h.sno + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rough + 3: Rough + 4: Rock + 5: Rock + 6: Rough + 7: Rough + 8: Rock + 9: Rock + 12: Rough + Template@382: + Id: 382 + Images: bridge1x.sno + Size: 5,4 + Categories: Bridge + Tiles: + 2: Clear + 3: Road + 4: Road + 5: Rock + 15: Road + 16: Road + 18: Rock + 19: Rock + Template@133: + Id: 133 + Images: bridge2.sno + Size: 5,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Bridge + 3: Rock + 5: Rock + 6: Rock + 7: Bridge + 8: Bridge + 9: Rock + Template@134: + Id: 134 + Images: bridge2d.sno + Size: 5,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 5: Rock + 6: Rock + 7: Rock + 8: Rock + 9: Rock + Template@379: + Id: 379 + Images: bridge2h.sno + Size: 5,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rough + 2: Rough + 3: Rock + 5: Rock + 6: Rock + 7: Rough + 8: Rough + 9: Rock + Template@383: + Id: 383 + Images: bridge2x.sno + Size: 5,5 + Categories: Bridge + Tiles: + 0: Road + 1: Road + 2: Rough + 3: Clear + 4: Rough + 9: River + 15: Rock + 16: Rock + 17: Rough + 18: Road + 19: Road + 23: Road + 24: Road + Template@247: + Id: 247 + Images: f01.sno + Size: 3,3 + Categories: Bridge + Tiles: + 0: Rough + 1: Road + 2: Road + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@248: + Id: 248 + Images: f02.sno + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@249: + Id: 249 + Images: f03.sno + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Clear + 7: Road + 8: Clear + Template@250: + Id: 250 + Images: f04.sno + Size: 3,3 + Categories: Bridge + Tiles: + 0: Clear + 1: Beach + 2: Beach + 3: Road + 4: Beach + 5: Beach + 6: Clear + 7: Beach + 8: Beach + Template@251: + Id: 251 + Images: f05.sno + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@252: + Id: 252 + Images: f06.sno + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Clear + 3: Beach + 4: Beach + 5: Road + 6: Beach + 7: Beach + 8: Clear + Template@129: + Id: 129 + Images: ford1.sno + Size: 3,3 + Categories: Bridge + Tiles: + 0: Rough + 1: River + 2: Rough + 3: Road + 4: Rough + 5: Road + 6: Clear + 7: Rough + 8: Rough + Template@130: + Id: 130 + Images: ford2.sno + Size: 3,3 + Categories: Bridge + Tiles: + 0: Rough + 1: Rough + 2: Rough + 3: Rock + 4: Rough + 5: Rough + 6: Clear + 7: Road + 8: Clear + Template@125: + Id: 125 + Images: falls1.sno + Size: 3,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: Rock + 5: Rock + 6: Rough + 7: Rock + 8: Rock + Template@126: + Id: 126 + Images: falls1a.sno + Size: 3,3 + Categories: Water Cliffs + Tiles: + 0: Water + 1: River + 2: Rock + 3: Water + 4: Rock + 5: Rock + 6: Water + 7: River + 8: Rock + Template@127: + Id: 127 + Images: falls2.sno + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: Rock + 5: Rock + Template@128: + Id: 128 + Images: falls2a.sno + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: River + 5: River + Template@97: + Id: 97 + Images: b1.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@98: + Id: 98 + Images: b2.sno + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@99: + Id: 99 + Images: b3.sno + Size: 3,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + 2: Rock + Template@216: + Id: 216 + Images: rf01.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@217: + Id: 217 + Images: rf02.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@218: + Id: 218 + Images: rf03.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@219: + Id: 219 + Images: rf04.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@220: + Id: 220 + Images: rf05.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@221: + Id: 221 + Images: rf06.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@222: + Id: 222 + Images: rf07.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@223: + Id: 223 + Images: rf08.sno + Size: 1,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@224: + Id: 224 + Images: rf09.sno + Size: 1,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@225: + Id: 225 + Images: rf10.sno + Size: 2,1 + Categories: Debris + Tiles: + 0: Rough + 1: Rough + Template@226: + Id: 226 + Images: rf11.sno + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@103: + Id: 103 + Images: p01.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@104: + Id: 104 + Images: p02.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@105: + Id: 105 + Images: p03.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@106: + Id: 106 + Images: p04.sno + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@107: + Id: 107 + Images: p07.sno + Size: 4,2 + Categories: Debris + Tiles: + 0: Rough + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + Template@108: + Id: 108 + Images: p08.sno + Size: 3,2 + Categories: Debris + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + Template@109: + Id: 109 + Images: p13.sno + Size: 3,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@110: + Id: 110 + Images: p14.sno + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@401: + Id: 401 + Images: cliffsl1.sno + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@402: + Id: 402 + Images: cliffsl2.sno + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@403: + Id: 403 + Images: cliffsl3.sno + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@404: + Id: 404 + Images: cliffsl4.sno + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@405: + Id: 405 + Images: cliffsw1.sno + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@406: + Id: 406 + Images: cliffsw2.sno + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@407: + Id: 407 + Images: cliffsw3.sno + Size: 2,1 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@408: + Id: 408 + Images: cliffsw4.sno + Size: 2,1 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock diff --git a/mods/ura/tilesets/temperat.yaml b/mods/ura/tilesets/temperat.yaml new file mode 100644 index 0000000..4b98c12 --- /dev/null +++ b/mods/ura/tilesets/temperat.yaml @@ -0,0 +1,3688 @@ +General: + Name: Temperate + Id: TEMPERAT + Palette: temperat.pal + SheetSize: 1024 + EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Water Cliffs, Beach, River, Bridge + HeightDebugColors: AA0000 + +Terrain: + TerrainType@Beach: + Type: Beach + TargetTypes: Ground + Color: B09C78 + TerrainType@Bridge: + Type: Bridge + TargetTypes: Ground, Bridge + AcceptsSmudgeType: Crater, Scorch + Color: 606060 + TerrainType@Clear: + Type: Clear + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 284428 + RestrictPlayerColor: true + TerrainType@Gems: + Type: Gems + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 8470FF + RestrictPlayerColor: true + TerrainType@Ore: + Type: Ore + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 948060 + RestrictPlayerColor: true + TerrainType@River: + Type: River + TargetTypes: Ground + Color: 5C8CB4 + TerrainType@Road: + Type: Road + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 5E430D + TerrainType@Rock: + Type: Rock + TargetTypes: Ground + Color: 44443C + TerrainType@Rough: + Type: Rough + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: 44443C + TerrainType@Tree: + Type: Tree + TargetTypes: Ground + Color: 1C2024 + TerrainType@Wall: + Type: Wall + TargetTypes: Ground + AcceptsSmudgeType: Crater, Scorch + Color: D0C0A0 + TerrainType@Water: + Type: Water + TargetTypes: Water + IsWater: True + Color: 5C74A4 + RestrictPlayerColor: true + +Templates: + Template@255: + Id: 255 + Images: clear1.tem + Size: 1,1 + PickAny: True + Categories: Terrain + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear + Template@65535: + Id: 65535 + Images: clear1.tem + Size: 1,1 + PickAny: True + Categories: Terrain + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + 8: Clear + 9: Clear + 10: Clear + 11: Clear + 12: Clear + 13: Clear + 14: Clear + 15: Clear + Template@1: + Id: 1 + Images: w1.tem + Size: 1,1 + Categories: Terrain + Tiles: + 0: Water + Template@2: + Id: 2 + Images: w2.tem + Size: 2,2 + Categories: Terrain + Tiles: + 0: Water + 1: Water + 2: Water + 3: Water + Template@3: + Id: 3 + Images: sh01.tem + Size: 4,5 + Categories: Beach + Tiles: + 3: Rock + 5: Clear + 6: Clear + 7: Beach + 8: Beach + 9: Water + 10: Water + 11: River + 12: Water + 13: Water + 16: Water + Template@4: + Id: 4 + Images: sh02.tem + Size: 5,5 + Categories: Beach + Tiles: + 4: Clear + 8: Beach + 9: Beach + 10: Beach + 11: Clear + 12: Beach + 13: Beach + 14: Beach + 15: Beach + 16: Rough + 17: Rough + 18: River + 20: Water + 21: Water + 22: Rock + Template@5: + Id: 5 + Images: sh03.tem + Size: 3,5 + Categories: Beach + Tiles: + 2: Clear + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + 9: Water + 10: Water + 12: Water + Template@6: + Id: 6 + Images: sh04.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Water + 8: Water + Template@7: + Id: 7 + Images: sh05.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Rock + 2: Beach + 3: Beach + 4: Rock + 5: Rock + 6: Rock + 7: River + 8: River + Template@8: + Id: 8 + Images: sh06.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Water + 8: Water + Template@9: + Id: 9 + Images: sh07.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Water + 8: Water + Template@10: + Id: 10 + Images: sh08.tem + Size: 1,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + Template@11: + Id: 11 + Images: sh09.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Clear + 1: River + 2: Rock + 3: Clear + 4: River + 5: Beach + 6: Water + 7: Water + 8: Water + Template@12: + Id: 12 + Images: sh10.tem + Size: 5,6 + Categories: Beach + Tiles: + 0: Clear + 5: Beach + 6: Clear + 10: Water + 11: Beach + 12: Beach + 13: Water + 17: Water + 18: Beach + 19: Beach + 22: Rock + 23: Rock + 24: Rock + 28: Water + 29: Water + Template@13: + Id: 13 + Images: sh11.tem + Size: 4,5 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 4: Beach + 5: Water + 6: Beach + 8: Water + 9: Water + 10: Beach + 11: Beach + 14: Beach + 15: Beach + 18: Water + 19: Beach + Template@14: + Id: 14 + Images: sh12.tem + Size: 3,5 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 3: Beach + 4: Beach + 5: Beach + 6: Water + 7: Beach + 8: Beach + 10: Water + 11: Beach + 14: Water + Template@15: + Id: 15 + Images: sh13.tem + Size: 6,5 + Categories: Beach + Tiles: + 0: Water + 1: Rock + 2: Beach + 7: Beach + 8: Beach + 9: Beach + 13: Water + 14: Beach + 15: Beach + 16: Clear + 19: Water + 20: Water + 21: Rough + 22: Beach + 23: Clear + 27: Beach + 28: Beach + 29: Beach + Template@16: + Id: 16 + Images: sh14.tem + Size: 4,4 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Clear + 4: River + 5: Beach + 6: Beach + 8: Rough + 9: Beach + 10: Beach + 13: Water + 14: Beach + 15: Beach + Template@17: + Id: 17 + Images: sh15.tem + Size: 5,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Beach + 3: Clear + 6: Water + 7: Beach + 8: Beach + 12: Water + 13: Beach + 14: Beach + Template@18: + Id: 18 + Images: sh16.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: Clear + 3: Water + 4: Beach + 5: Clear + 6: Water + 7: Beach + 8: Clear + Template@19: + Id: 19 + Images: sh17.tem + Size: 2,1 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + Template@20: + Id: 20 + Images: sh18.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Rough + 3: Water + 4: River + 5: River + 6: Water + 7: Beach + 8: Rough + Template@21: + Id: 21 + Images: sh19.tem + Size: 4,5 + Categories: Beach + Tiles: + 1: Water + 2: Beach + 3: Clear + 5: Beach + 6: Beach + 7: Clear + 8: Water + 9: Beach + 10: Beach + 12: Water + 13: Beach + 14: Beach + 16: Water + 17: Beach + 18: Clear + Template@22: + Id: 22 + Images: sh20.tem + Size: 5,4 + Categories: Beach + Tiles: + 2: Water + 3: Beach + 4: Beach + 5: Water + 6: Beach + 7: Beach + 8: Beach + 10: Water + 11: Beach + 12: Beach + 15: Water + 16: Beach + 17: Beach + Template@23: + Id: 23 + Images: sh21.tem + Size: 5,3 + Categories: Beach + Tiles: + 1: Water + 2: Beach + 3: Beach + 4: Clear + 5: Water + 6: Beach + 7: Beach + 8: Clear + 10: Water + 11: Beach + 12: Beach + Template@24: + Id: 24 + Images: sh22.tem + Size: 6,5 + Categories: Beach + Tiles: + 0: Water + 6: Water + 7: Water + 12: Beach + 13: Beach + 14: Water + 15: Water + 16: Water + 17: Water + 19: Clear + 20: Beach + 21: Beach + 22: Water + 23: Beach + 27: Beach + 28: Beach + 29: Beach + Template@25: + Id: 25 + Images: sh23.tem + Size: 5,5 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 2: Water + 5: Beach + 6: Beach + 7: Water + 8: Water + 9: Water + 11: Clear + 12: Beach + 13: River + 14: Water + 17: Clear + 18: Beach + 19: Beach + 22: Beach + 23: Beach + 24: Beach + Template@26: + Id: 26 + Images: sh24.tem + Size: 3,4 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 3: Beach + 4: Water + 5: Water + 7: Clear + 8: Beach + 11: Clear + Template@27: + Id: 27 + Images: sh25.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Water + 3: Rock + 4: Rock + 5: Beach + 6: Rock + 7: Rock + 8: Beach + Template@28: + Id: 28 + Images: sh26.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Water + 3: Beach + 4: Beach + 5: Rough + 6: Beach + 7: Beach + 8: Beach + Template@29: + Id: 29 + Images: sh27.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Rough + Template@30: + Id: 30 + Images: sh28.tem + Size: 3,3 + Categories: Beach + Tiles: + 1: Rock + 2: Rock + 3: Beach + 4: Rock + 5: Rock + 6: Beach + 7: Rough + 8: Rough + Template@31: + Id: 31 + Images: sh29.tem + Size: 1,2 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + Template@32: + Id: 32 + Images: sh30.tem + Size: 3,2 + Categories: Beach + Tiles: + 0: Beach + 1: River + 2: River + 3: Clear + 4: River + 5: Rough + Template@33: + Id: 33 + Images: sh31.tem + Size: 6,5 + Categories: Beach + Tiles: + 3: Water + 4: Water + 5: Beach + 8: Water + 9: Water + 10: Beach + 11: Beach + 12: Water + 13: Water + 14: Water + 15: Beach + 16: Clear + 18: Beach + 19: Beach + 20: Water + 21: Beach + 22: Clear + 24: Clear + 25: Clear + 26: Beach + 27: Beach + 28: Clear + Template@34: + Id: 34 + Images: sh32.tem + Size: 4,4 + Categories: Beach + Tiles: + 2: Water + 3: Water + 4: Water + 5: Water + 6: Beach + 7: Beach + 8: Beach + 9: Beach + 10: Beach + 12: Clear + 13: Clear + Template@35: + Id: 35 + Images: sh33.tem + Size: 3,4 + Categories: Beach + Tiles: + 1: Water + 2: Beach + 3: Water + 4: Beach + 5: Clear + 6: Beach + 7: Rough + 9: Beach + 10: Beach + Template@36: + Id: 36 + Images: sh34.tem + Size: 6,5 + Categories: Beach + Tiles: + 3: Clear + 4: Beach + 5: Water + 7: Beach + 8: Beach + 9: Beach + 10: Beach + 13: Beach + 14: Beach + 15: Water + 19: Beach + 20: Beach + 21: Water + 24: Beach + 25: Beach + 26: Water + Template@37: + Id: 37 + Images: sh35.tem + Size: 4,4 + Categories: Beach + Tiles: + 2: Beach + 3: Water + 5: Clear + 6: Beach + 7: Rough + 9: Beach + 10: Beach + 11: Water + 12: Clear + 13: Beach + 14: Water + Template@38: + Id: 38 + Images: sh36.tem + Size: 4,3 + Categories: Beach + Tiles: + 1: Beach + 2: Beach + 3: Water + 4: Beach + 5: Beach + 6: Water + 8: Beach + 9: Water + 10: Water + Template@39: + Id: 39 + Images: sh37.tem + Size: 3,3 + Categories: Beach + Tiles: + 1: Beach + 2: Water + 3: Clear + 4: Beach + 5: Water + 6: Rough + 7: Beach + 8: Water + Template@40: + Id: 40 + Images: sh38.tem + Size: 2,1 + Categories: Beach + Tiles: + 0: Clear + 1: Beach + Template@41: + Id: 41 + Images: sh39.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Rock + 1: Beach + 2: Water + 3: River + 4: River + 5: Water + 6: Clear + 7: Beach + 8: Water + Template@42: + Id: 42 + Images: sh40.tem + Size: 5,5 + Categories: Beach + Tiles: + 0: Clear + 1: Beach + 2: Water + 6: Beach + 7: Water + 11: Beach + 12: Water + 13: Water + 16: Clear + 17: Beach + 18: Beach + 19: Water + 22: Beach + 23: Beach + 24: Water + Template@43: + Id: 43 + Images: sh41.tem + Size: 4,4 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 4: Beach + 5: Beach + 6: Water + 8: Beach + 9: Beach + 10: Water + 11: Water + 13: Clear + 14: Beach + 15: Water + Template@44: + Id: 44 + Images: sh42.tem + Size: 4,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Water + 5: Beach + 6: Beach + 7: River + 9: Clear + 10: Beach + 11: Water + Template@45: + Id: 45 + Images: sh43.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Water + 8: Water + Template@46: + Id: 46 + Images: sh44.tem + Size: 2,2 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: River + 3: Water + Template@47: + Id: 47 + Images: sh45.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: Water + 3: Water + 4: Rough + 5: Beach + 6: Water + 7: River + 8: Beach + Template@48: + Id: 48 + Images: sh46.tem + Size: 2,2 + Categories: Beach + Tiles: + 0: Water + 1: River + 2: River + 3: Beach + Template@49: + Id: 49 + Images: sh47.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 3: Beach + 4: Water + 6: Beach + 7: Beach + 8: Water + Template@50: + Id: 50 + Images: sh48.tem + Size: 2,2 + Categories: Beach + Tiles: + 0: Water + 1: Water + 2: Clear + 3: Beach + Template@51: + Id: 51 + Images: sh49.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Water + 2: Water + 3: Rock + 4: Rock + 5: River + 6: River + 7: Rock + 8: Rock + Template@52: + Id: 52 + Images: sh50.tem + Size: 2,2 + Categories: Beach + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Water + Template@53: + Id: 53 + Images: sh51.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Clear + 1: Beach + 2: Beach + 4: Beach + 5: Beach + 7: Rough + 8: Clear + Template@54: + Id: 54 + Images: sh52.tem + Size: 3,3 + Categories: Beach + Tiles: + 1: Clear + 2: Clear + 3: Clear + 4: Beach + 5: Beach + 7: Beach + 8: Water + Template@55: + Id: 55 + Images: sh53.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Beach + 1: Clear + 3: Beach + 4: Beach + 5: Clear + 6: Water + 7: Beach + 8: Clear + Template@56: + Id: 56 + Images: sh54.tem + Size: 3,3 + Categories: Beach + Tiles: + 0: Water + 1: Beach + 2: Clear + 3: Beach + 4: Beach + 6: Clear + Template@57: + Id: 57 + Images: sh55.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@58: + Id: 58 + Images: sh56.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@135: + Id: 135 + Images: s01.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@136: + Id: 136 + Images: s02.tem + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@137: + Id: 137 + Images: s03.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@138: + Id: 138 + Images: s04.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@139: + Id: 139 + Images: s05.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@140: + Id: 140 + Images: s06.tem + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rough + 1: Rock + 2: Rock + 3: Rock + 4: Rock + Template@141: + Id: 141 + Images: s07.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@142: + Id: 142 + Images: s08.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@143: + Id: 143 + Images: s09.tem + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@144: + Id: 144 + Images: s10.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@145: + Id: 145 + Images: s11.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@146: + Id: 146 + Images: s12.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@147: + Id: 147 + Images: s13.tem + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rock + 4: Rock + 5: Rough + Template@148: + Id: 148 + Images: s14.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + Template@149: + Id: 149 + Images: s15.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@150: + Id: 150 + Images: s16.tem + Size: 2,3 + Categories: Cliffs + Tiles: + 0: Rough + 2: Rock + 3: Rock + 5: Rock + Template@151: + Id: 151 + Images: s17.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@152: + Id: 152 + Images: s18.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@153: + Id: 153 + Images: s19.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@154: + Id: 154 + Images: s20.tem + Size: 2,3 + Categories: Cliffs + Tiles: + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@155: + Id: 155 + Images: s21.tem + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@156: + Id: 156 + Images: s22.tem + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@157: + Id: 157 + Images: s23.tem + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@158: + Id: 158 + Images: s24.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@159: + Id: 159 + Images: s25.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@160: + Id: 160 + Images: s26.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@161: + Id: 161 + Images: s27.tem + Size: 3,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rough + 4: Rock + 5: Rock + Template@162: + Id: 162 + Images: s28.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 3: Rock + Template@163: + Id: 163 + Images: s29.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@164: + Id: 164 + Images: s30.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@165: + Id: 165 + Images: s31.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + Template@166: + Id: 166 + Images: s32.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + Template@167: + Id: 167 + Images: s33.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@168: + Id: 168 + Images: s34.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@169: + Id: 169 + Images: s35.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@170: + Id: 170 + Images: s36.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@171: + Id: 171 + Images: s37.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@172: + Id: 172 + Images: s38.tem + Size: 2,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@59: + Id: 59 + Images: wc01.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@60: + Id: 60 + Images: wc02.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rough + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@61: + Id: 61 + Images: wc03.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@62: + Id: 62 + Images: wc04.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@63: + Id: 63 + Images: wc05.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@64: + Id: 64 + Images: wc06.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rough + 1: Rock + 2: Rock + 3: Rock + 4: Rock + Template@65: + Id: 65 + Images: wc07.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@66: + Id: 66 + Images: wc08.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@67: + Id: 67 + Images: wc09.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: Rock + 5: Rock + Template@68: + Id: 68 + Images: wc10.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@69: + Id: 69 + Images: wc11.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@70: + Id: 70 + Images: wc12.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@71: + Id: 71 + Images: wc13.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rough + 3: Rock + 4: Rock + 5: Clear + Template@72: + Id: 72 + Images: wc14.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Beach + 2: Beach + 3: Beach + Template@73: + Id: 73 + Images: wc15.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@74: + Id: 74 + Images: wc16.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Water + 2: Rock + 3: Rock + 5: Rock + Template@75: + Id: 75 + Images: wc17.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@76: + Id: 76 + Images: wc18.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@77: + Id: 77 + Images: wc19.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@78: + Id: 78 + Images: wc20.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 1: River + 2: Rock + 3: Rock + 4: Rock + 5: Rough + Template@79: + Id: 79 + Images: wc21.tem + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@80: + Id: 80 + Images: wc22.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@81: + Id: 81 + Images: wc23.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: River + 3: Rock + 4: Rock + 5: Water + Template@82: + Id: 82 + Images: wc24.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@83: + Id: 83 + Images: wc25.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@84: + Id: 84 + Images: wc26.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@85: + Id: 85 + Images: wc27.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Water + 3: Clear + 4: Rock + 5: Rock + Template@86: + Id: 86 + Images: wc28.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 3: Rock + Template@87: + Id: 87 + Images: wc29.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@88: + Id: 88 + Images: wc30.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@89: + Id: 89 + Images: wc31.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: River + 2: Rock + 3: Rock + Template@90: + Id: 90 + Images: wc32.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Water + Template@91: + Id: 91 + Images: wc33.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@92: + Id: 92 + Images: wc34.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@93: + Id: 93 + Images: wc35.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@94: + Id: 94 + Images: wc36.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@95: + Id: 95 + Images: wc37.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@96: + Id: 96 + Images: wc38.tem + Size: 2,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@173: + Id: 173 + Images: d01.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Clear + Template@174: + Id: 174 + Images: d02.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Clear + Template@175: + Id: 175 + Images: d03.tem + Size: 1,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + Template@176: + Id: 176 + Images: d04.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + Template@177: + Id: 177 + Images: d05.tem + Size: 3,4 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Road + 4: Road + 6: Road + 7: Road + 9: Road + 10: Road + Template@178: + Id: 178 + Images: d06.tem + Size: 2,3 + Categories: Road + Tiles: + 0: Road + 2: Road + 3: Road + 4: Road + 5: Clear + Template@179: + Id: 179 + Images: d07.tem + Size: 3,2 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 4: Road + 5: Clear + Template@180: + Id: 180 + Images: d08.tem + Size: 3,2 + Categories: Road + Tiles: + 1: Road + 3: Clear + 4: Road + 5: Clear + Template@181: + Id: 181 + Images: d09.tem + Size: 4,3 + Categories: Road + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Road + 5: Road + 6: Road + 7: Road + 10: Clear + 11: Clear + Template@182: + Id: 182 + Images: d10.tem + Size: 4,2 + Categories: Road + Tiles: + 0: Clear + 1: Rock + 4: Road + 5: Road + 6: Road + 7: Road + Template@183: + Id: 183 + Images: d11.tem + Size: 2,3 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Road + 4: Clear + Template@184: + Id: 184 + Images: d12.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 2: Road + 3: Road + Template@185: + Id: 185 + Images: d13.tem + Size: 4,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Clear + 4: Clear + 5: Road + 6: Road + 7: Rock + 10: Rock + 11: Road + Template@186: + Id: 186 + Images: d14.tem + Size: 3,3 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + 4: Rock + 5: Road + 6: Road + 7: Road + 8: Road + Template@187: + Id: 187 + Images: d15.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + 3: Road + 4: Road + 5: Clear + 6: Road + 7: Clear + Template@188: + Id: 188 + Images: d16.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Road + 3: Road + 4: Road + 5: Road + 6: Road + 7: Road + 8: Rock + Template@189: + Id: 189 + Images: d17.tem + Size: 3,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + 3: Clear + 4: Road + 5: Clear + Template@190: + Id: 190 + Images: d18.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Rock + Template@191: + Id: 191 + Images: d19.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Clear + 1: Road + 2: Clear + 3: Road + 4: Road + 5: Road + 6: Clear + 7: Road + 8: Clear + Template@192: + Id: 192 + Images: d20.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Road + Template@193: + Id: 193 + Images: d21.tem + Size: 3,2 + Categories: Road + Tiles: + 0: Rock + 1: Road + 2: Road + 3: Clear + 4: Road + 5: Rough + Template@194: + Id: 194 + Images: d22.tem + Size: 3,3 + Categories: Road + Tiles: + 1: Clear + 3: Road + 4: Road + 5: Clear + 6: Clear + 7: Road + 8: Clear + Template@195: + Id: 195 + Images: d23.tem + Size: 3,3 + Categories: Road + Tiles: + 1: Road + 2: Clear + 3: Clear + 4: Road + 5: Clear + 6: Road + 7: Road + Template@196: + Id: 196 + Images: d24.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + 4: Road + 5: Road + 7: Road + 8: Road + Template@197: + Id: 197 + Images: d25.tem + Size: 3,3 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + 4: Road + 5: Road + 7: Road + 8: Road + Template@198: + Id: 198 + Images: d26.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + Template@199: + Id: 199 + Images: d27.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + Template@200: + Id: 200 + Images: d28.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Rough + Template@201: + Id: 201 + Images: d29.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + Template@202: + Id: 202 + Images: d30.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 2: Road + Template@203: + Id: 203 + Images: d31.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + Template@204: + Id: 204 + Images: d32.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Clear + 2: Road + 3: Clear + Template@205: + Id: 205 + Images: d33.tem + Size: 2,2 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + Template@206: + Id: 206 + Images: d34.tem + Size: 3,3 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + 4: Road + 5: Road + 6: Road + 7: Road + Template@207: + Id: 207 + Images: d35.tem + Size: 3,3 + Categories: Road + Tiles: + 1: Road + 2: Road + 3: Road + 4: Road + 5: Road + 6: Road + 7: Road + Template@208: + Id: 208 + Images: d36.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 3: Road + Template@209: + Id: 209 + Images: d37.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 3: Road + Template@210: + Id: 210 + Images: d38.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + Template@211: + Id: 211 + Images: d39.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + Template@212: + Id: 212 + Images: d40.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 1: Road + 3: Road + Template@213: + Id: 213 + Images: d41.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Rock + 2: Road + 3: Road + Template@214: + Id: 214 + Images: d42.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Road + 2: Road + 3: Road + Template@215: + Id: 215 + Images: d43.tem + Size: 2,2 + Categories: Road + Tiles: + 0: Clear + 2: Road + 3: Road + Template@227: + Id: 227 + Images: d44.tem + Size: 1,1 + Categories: Road + Tiles: + 0: Road + Template@228: + Id: 228 + Images: d45.tem + Size: 1,1 + Categories: Road + Tiles: + 0: Road + Template@231: + Id: 231 + Images: rc01.tem + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@232: + Id: 232 + Images: rc02.tem + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@233: + Id: 233 + Images: rc03.tem + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@234: + Id: 234 + Images: rc04.tem + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@112: + Id: 112 + Images: rv01.tem + Size: 5,4 + Categories: River + Tiles: + 0: Rock + 1: Rock + 5: Rock + 6: River + 7: River + 8: River + 9: River + 10: Rock + 11: Rock + 12: Rock + 13: Rock + 14: Rock + 16: Rock + 17: Rough + Template@113: + Id: 113 + Images: rv02.tem + Size: 5,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rough + 4: Rough + 5: River + 6: River + 7: River + 8: River + 9: River + 10: Rock + 11: Rock + 12: Rock + Template@114: + Id: 114 + Images: rv03.tem + Size: 4,4 + Categories: River + Tiles: + 0: Rock + 1: Rough + 4: Rock + 5: Rock + 6: Rock + 7: Clear + 8: Rock + 9: Rock + 10: River + 11: River + 13: Clear + 14: Clear + 15: Rock + Template@115: + Id: 115 + Images: rv04.tem + Size: 4,4 + Categories: River + Tiles: + 2: Rock + 3: Rough + 5: Rough + 6: Rock + 7: River + 8: River + 9: River + 10: River + 11: River + 12: Rock + 13: Rock + 14: Rock + Template@116: + Id: 116 + Images: rv05.tem + Size: 3,3 + Categories: River + Tiles: + 0: Clear + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + 6: Rock + 7: River + 8: Rock + Template@117: + Id: 117 + Images: rv06.tem + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + Template@118: + Id: 118 + Images: rv07.tem + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: River + 3: Rock + 4: Rock + 5: River + Template@119: + Id: 119 + Images: rv08.tem + Size: 2,2 + Categories: River + Tiles: + 0: Rock + 1: River + 2: River + 3: River + Template@120: + Id: 120 + Images: rv09.tem + Size: 2,2 + Categories: River + Tiles: + 0: Clear + 1: Clear + 2: River + 3: River + Template@121: + Id: 121 + Images: rv10.tem + Size: 2,2 + Categories: River + Tiles: + 0: River + 1: River + 2: Rock + 3: River + Template@122: + Id: 122 + Images: rv11.tem + Size: 2,2 + Categories: River + Tiles: + 0: River + 1: River + 2: River + 3: Rock + Template@123: + Id: 123 + Images: rv12.tem + Size: 3,4 + Categories: River + Tiles: + 0: Clear + 1: River + 2: Rock + 3: Rock + 4: River + 5: Rock + 6: River + 7: River + 8: Rock + 9: Rough + 10: River + 11: Rock + Template@124: + Id: 124 + Images: rv13.tem + Size: 4,4 + Categories: River + Tiles: + 2: Clear + 3: Rough + 4: River + 5: River + 6: River + 7: River + 8: River + 9: Rock + 10: River + 11: Rock + 12: Clear + 13: Rock + 14: River + 15: Rough + Template@229: + Id: 229 + Images: rv14.tem + Size: 1,2 + Categories: River + Tiles: + 0: Rock + 1: River + Template@230: + Id: 230 + Images: rv15.tem + Size: 2,1 + Categories: River + Tiles: + 0: Rock + 1: River + Template@235: + Id: 235 + Images: br1a.tem + Size: 4,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 4: Rock + 5: Bridge + 6: Bridge + 7: Rock + 9: Bridge + 10: Rock + 11: Rock + Template@236: + Id: 236 + Images: br1b.tem + Size: 4,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rough + 4: Rock + 5: Rough + 6: Rough + 7: Rock + 9: Rough + 10: Rock + 11: Rock + Template@237: + Id: 237 + Images: br1c.tem + Size: 4,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rock + 4: Rock + 5: Rock + 6: Rock + 7: Rock + 9: Rock + 10: Rock + 11: Rock + Template@238: + Id: 238 + Images: br2a.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 5: Rock + 6: Bridge + 7: Bridge + 8: Rock + 9: Rock + 11: Bridge + 12: Rock + 13: Rock + Template@239: + Id: 239 + Images: br2b.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rough + 5: Rock + 6: Rough + 7: Rough + 8: Rock + 9: Rock + 11: Rough + 12: Rock + 13: Rock + Template@240: + Id: 240 + Images: br2c.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Water + 2: Water + 5: Rock + 6: Rock + 7: Rock + 8: Rock + 9: Rock + 11: Rock + 12: Rock + 13: Rock + Template@241: + Id: 241 + Images: br3a.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@242: + Id: 242 + Images: br3b.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 5: Bridge + 6: Rock + 7: Rock + Template@243: + Id: 243 + Images: br3c.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 5: Rock + 6: Rock + 7: Rock + Template@244: + Id: 244 + Images: br3d.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: River + 1: Rock + 5: River + 6: River + 7: River + Template@245: + Id: 245 + Images: br3e.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Water + 1: Water + 5: Rock + 6: Water + 7: Water + Template@246: + Id: 246 + Images: br3f.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Water + 1: Water + 5: Water + 6: Water + 7: Water + Template@380: + Id: 380 + Images: br1x.tem + Size: 5,3 + Categories: Bridge + Tiles: + 0: Rock + 3: Road + 4: Clear + 9: Rock + 14: Water + Template@381: + Id: 381 + Images: br2x.tem + Size: 5,1 + Categories: Bridge + Tiles: + 0: Road + 4: Beach + Template@131: + Id: 131 + Images: bridge1.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 3: Bridge + 4: Rock + 5: Rock + 6: Bridge + 7: Bridge + 8: Rock + 9: Rock + 12: Rock + Template@132: + Id: 132 + Images: bridge1d.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + 6: Rock + 7: Rock + 8: Rock + 9: Rock + 12: Rock + Template@378: + Id: 378 + Images: bridge1h.tem + Size: 5,3 + Categories: Bridge + Tiles: + 1: Rock + 2: Rough + 3: Rough + 4: Rock + 5: Rock + 6: Rough + 7: Rough + 8: Rock + 9: Rock + 12: Rough + 13: Clear + 14: Clear + Template@382: + Id: 382 + Images: bridge1x.tem + Size: 5,4 + Categories: Bridge + Tiles: + 2: Clear + 3: Bridge + 4: Bridge + 5: Rock + 15: Bridge + 16: Bridge + 18: Rock + 19: Rock + Template@133: + Id: 133 + Images: bridge2.tem + Size: 5,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Bridge + 3: Rock + 5: Rock + 6: Rock + 7: Bridge + 8: Bridge + 9: Rock + Template@134: + Id: 134 + Images: bridge2d.tem + Size: 5,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 5: Rock + 6: Rock + 7: Rock + 8: Rock + 9: Rock + Template@379: + Id: 379 + Images: bridge2h.tem + Size: 5,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rough + 2: Rough + 3: Rock + 5: Rock + 6: Rock + 7: Rough + 8: Rough + 9: Rock + Template@383: + Id: 383 + Images: bridge2x.tem + Size: 5,5 + Categories: Bridge + Tiles: + 0: Bridge + 1: Bridge + 2: Rough + 3: Clear + 4: Rough + 9: River + 15: Rock + 16: Rock + 17: Rough + 18: Bridge + 19: Bridge + 23: Bridge + 24: Bridge + Template@247: + Id: 247 + Images: f01.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Rough + 1: Road + 2: Road + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@248: + Id: 248 + Images: f02.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@249: + Id: 249 + Images: f03.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Clear + 7: Road + 8: Clear + Template@250: + Id: 250 + Images: f04.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Clear + 1: Beach + 2: Beach + 3: Road + 4: Beach + 5: Beach + 6: Clear + 7: Beach + 8: Beach + Template@251: + Id: 251 + Images: f05.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Beach + 3: Beach + 4: Beach + 5: Beach + 6: Beach + 7: Beach + 8: Beach + Template@252: + Id: 252 + Images: f06.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Beach + 1: Beach + 2: Clear + 3: Beach + 4: Beach + 5: Road + 6: Beach + 7: Beach + 8: Clear + Template@129: + Id: 129 + Images: ford1.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Rough + 1: River + 2: Rough + 3: Road + 4: Rough + 5: Road + 6: Clear + 7: Rough + 8: Rough + Template@130: + Id: 130 + Images: ford2.tem + Size: 3,3 + Categories: Bridge + Tiles: + 0: Rough + 1: Rough + 2: Rough + 3: Rock + 4: Rough + 5: Rough + 6: Clear + 7: Road + 8: Clear + Template@125: + Id: 125 + Images: falls1.tem + Size: 3,3 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: Rock + 5: Rock + 6: Rough + 7: Rock + 8: Rock + Template@126: + Id: 126 + Images: falls1a.tem + Size: 3,3 + Categories: Water Cliffs + Tiles: + 0: Water + 1: River + 2: Rock + 3: Water + 4: Rock + 5: Rock + 6: Water + 7: River + 8: Rock + Template@127: + Id: 127 + Images: falls2.tem + Size: 3,2 + Categories: River + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: Rock + 5: Rock + Template@128: + Id: 128 + Images: falls2a.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: River + 4: River + 5: River + Template@97: + Id: 97 + Images: b1.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@98: + Id: 98 + Images: b2.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@99: + Id: 99 + Images: b3.tem + Size: 3,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + 2: Rock + Template@216: + Id: 216 + Images: rf01.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@217: + Id: 217 + Images: rf02.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@218: + Id: 218 + Images: rf03.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@219: + Id: 219 + Images: rf04.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@220: + Id: 220 + Images: rf05.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@221: + Id: 221 + Images: rf06.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@222: + Id: 222 + Images: rf07.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@223: + Id: 223 + Images: rf08.tem + Size: 1,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@224: + Id: 224 + Images: rf09.tem + Size: 1,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@225: + Id: 225 + Images: rf10.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rough + 1: Rough + Template@226: + Id: 226 + Images: rf11.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@103: + Id: 103 + Images: p01.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@104: + Id: 104 + Images: p02.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@105: + Id: 105 + Images: p03.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@106: + Id: 106 + Images: p04.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@107: + Id: 107 + Images: p07.tem + Size: 4,2 + Categories: Debris + Tiles: + 0: Rough + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + 6: Clear + 7: Clear + Template@108: + Id: 108 + Images: p08.tem + Size: 3,2 + Categories: Debris + Tiles: + 0: Clear + 1: Clear + 2: Clear + 3: Clear + 4: Clear + 5: Clear + Template@109: + Id: 109 + Images: p13.tem + Size: 3,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@110: + Id: 110 + Images: p14.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@500: + Id: 500 + Images: sh57.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@502: + Id: 502 + Images: sh58.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@503: + Id: 503 + Images: sh59.tem + Size: 2,1 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@504: + Id: 504 + Images: sh60.tem + Size: 1,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + Template@505: + Id: 505 + Images: sh61.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@506: + Id: 506 + Images: sh62.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@507: + Id: 507 + Images: sh63.tem + Size: 2,2 + Categories: Debris + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + Template@508: + Id: 508 + Images: sh64.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rock + Template@519: + Id: 519 + Images: sbridge1x.tem + Size: 3,4 + Categories: Bridge + Tiles: + 0: Clear + 1: Road + 2: Clear + 9: Clear + 10: Road + 11: Rock + Template@520: + Id: 520 + Images: sbridge1.tem + Size: 3,2 + Categories: Bridge + Tiles: + 0: River + 1: Bridge + 2: River + 3: River + 4: Bridge + 5: River + Template@521: + Id: 521 + Images: sbridge1h.tem + Size: 3,2 + Categories: Bridge + Tiles: + 0: River + 1: Bridge + 2: River + 3: River + 4: Bridge + 5: River + Template@522: + Id: 522 + Images: sbridge1d.tem + Size: 3,2 + Categories: Bridge + Tiles: + 0: River + 1: Rock + 2: River + 3: River + 4: Rock + 5: River + Template@523: + Id: 523 + Images: sbridge3.tem + Size: 4,2 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 3: Rock + 4: River + 5: Bridge + 6: Rock + 7: River + Template@524: + Id: 524 + Images: sbridge3h.tem + Size: 4,2 + Categories: Bridge + Tiles: + 1: Rock + 2: Bridge + 3: Rock + 4: River + 5: Bridge + 6: Rock + 7: River + Template@525: + Id: 525 + Images: sbridge3d.tem + Size: 4,2 + Categories: Bridge + Tiles: + 1: Rock + 2: Rock + 3: Rock + 4: River + 5: River + 6: Rock + 7: River + Template@526: + Id: 526 + Images: sbridge3x.tem + Size: 4,4 + Categories: Bridge + Tiles: + 1: Clear + 2: Clear + 3: Road + 4: River + 12: Road + 13: Clear + 14: River + 15: River + Template@527: + Id: 527 + Images: sbridge4.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Rock + 4: River + 5: Rock + 6: Bridge + 7: Rock + Template@528: + Id: 528 + Images: sbridge4h.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Bridge + 2: Rock + 4: River + 5: Rock + 6: Bridge + 7: Rock + Template@529: + Id: 529 + Images: sbridge4d.tem + Size: 4,2 + Categories: Bridge + Tiles: + 0: Rock + 1: Rock + 2: Rock + 4: River + 5: Rock + 6: Rock + 7: Rock + Template@530: + Id: 530 + Images: sbridge4x.tem + Size: 5,5 + Categories: Bridge + Tiles: + 0: Road + 1: Clear + 2: Clear + 4: River + 8: River + 9: River + 14: River + 15: River + 16: River + 17: Clear + 18: Road + 19: Clear + 23: Clear + 24: Road + Template@531: + Id: 531 + Images: sbridge2.tem + Size: 2,3 + Categories: Bridge + Tiles: + 0: River + 1: River + 2: Bridge + 3: Bridge + 4: Rock + 5: Rock + Template@532: + Id: 532 + Images: sbridge2h.tem + Size: 2,3 + Categories: Bridge + Tiles: + 0: River + 1: River + 2: Bridge + 3: Bridge + 4: Rock + 5: Rock + Template@533: + Id: 533 + Images: sbridge2d.tem + Size: 2,3 + Categories: Bridge + Tiles: + 0: River + 1: River + 2: River + 3: River + 4: River + 5: River + Template@534: + Id: 534 + Images: sbridge2x.tem + Size: 4,4 + Categories: Bridge + Tiles: + 0: Clear + 3: Rock + 4: Road + 7: Road + 8: Clear + 11: Rock + 12: Clear + 13: River + 14: River + 15: Clear + Template@550: + Id: 550 + Images: sccnr.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@551: + Id: 551 + Images: sccnl.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@552: + Id: 552 + Images: sccsr.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@553: + Id: 553 + Images: sccsl.tem + Size: 2,3 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@554: + Id: 554 + Images: sccln.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@555: + Id: 555 + Images: sccls.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@556: + Id: 556 + Images: sccrn.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@557: + Id: 557 + Images: sccrs.tem + Size: 3,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + 2: Rock + 3: Rock + 4: Rock + 5: Rock + Template@580: + Id: 580 + Images: deca.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@581: + Id: 581 + Images: decb.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@582: + Id: 582 + Images: decc.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@583: + Id: 583 + Images: decc.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@584: + Id: 584 + Images: decd.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@585: + Id: 585 + Images: dece.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@586: + Id: 586 + Images: decf.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@587: + Id: 587 + Images: decg.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@588: + Id: 588 + Images: dech.tem + Size: 1,1 + Categories: Debris + Tiles: + 0: Rough + Template@590: + Id: 590 + Images: fjord1.tem + Size: 1,2 + Categories: Bridge + Tiles: + 0: Rough + 1: Rough + Template@591: + Id: 591 + Images: fjord2.tem + Size: 2,1 + Categories: Bridge + Tiles: + 0: Rough + 1: Rough + Template@400: + Id: 400 + Images: hill01.tem + Size: 4,3 + Categories: Debris + Tiles: + 0: Rough + 1: Rough + 2: Rough + 3: Rough + 4: Rough + 5: Rough + 6: Rough + 7: Rough + 8: Rough + 9: Rough + 10: Rough + 11: Clear + Template@401: + Id: 401 + Images: cliffsl1.tem + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@402: + Id: 402 + Images: cliffsl2.tem + Size: 1,2 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@403: + Id: 403 + Images: cliffsl3.tem + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@404: + Id: 404 + Images: cliffsl4.tem + Size: 2,1 + Categories: Cliffs + Tiles: + 0: Rock + 1: Rock + Template@405: + Id: 405 + Images: cliffsw1.tem + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@406: + Id: 406 + Images: cliffsw2.tem + Size: 1,2 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@407: + Id: 407 + Images: cliffsw3.tem + Size: 2,1 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock + Template@408: + Id: 408 + Images: cliffsw4.tem + Size: 2,1 + Categories: Water Cliffs + Tiles: + 0: Rock + 1: Rock diff --git a/mods/ura/uibits/buttons.png b/mods/ura/uibits/buttons.png new file mode 100644 index 0000000..a73f2a2 Binary files /dev/null and b/mods/ura/uibits/buttons.png differ diff --git a/mods/ura/uibits/chrome.png b/mods/ura/uibits/chrome.png new file mode 100644 index 0000000..ede6f2c Binary files /dev/null and b/mods/ura/uibits/chrome.png differ diff --git a/mods/ura/uibits/dialog.png b/mods/ura/uibits/dialog.png new file mode 100644 index 0000000..2e8cf1c Binary files /dev/null and b/mods/ura/uibits/dialog.png differ diff --git a/mods/ura/uibits/loadscreen.png b/mods/ura/uibits/loadscreen.png new file mode 100644 index 0000000..b313707 Binary files /dev/null and b/mods/ura/uibits/loadscreen.png differ diff --git a/mods/ura/weapons/ballistics.yaml b/mods/ura/weapons/ballistics.yaml new file mode 100644 index 0000000..85fe981 --- /dev/null +++ b/mods/ura/weapons/ballistics.yaml @@ -0,0 +1,226 @@ +^Cannon: + ReloadDelay: 50 + Range: 6c0 + Report: cannon1.aud + Projectile: Bullet + Speed: 853 + Image: 120MM + Shadow: True + Warhead@1Dam: SpreadDamage + Spread: 128 + Damage: 40 + Versus: + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 + DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath + Warhead@2Smu: LeaveSmudge + SmudgeType: Crater + InvalidTargets: Vehicle, Structure, Wall, Husk, Trees + Warhead@3Eff: CreateEffect + Explosions: small_explosion + ImpactSounds: kaboom12.aud + ValidTargets: Ground, Ship, Trees + Warhead@4EffWater: CreateEffect + Explosions: small_splash + ImpactSounds: splash9.aud + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + +25mm: + Inherits: ^Cannon + ReloadDelay: 22 + Range: 5c0 + Report: cannon2.aud + Projectile: Bullet + Speed: 853 + Image: 50CAL + Warhead@1Dam: SpreadDamage + Damage: 30 + Versus: + Wood: 40 + Light: 110 + Heavy: 45 + Concrete: 30 + -Warhead@2Smu: LeaveSmudge + Warhead@3Eff: CreateEffect + -ImpactSounds: + Warhead@4EffWater: CreateEffect + -ImpactSounds: + +90mm: + Inherits: ^Cannon + Warhead@1Dam: SpreadDamage + Versus: + Heavy: 140 + Light: 90 + +#90mm.Germany: +# Inherits: 90mm +# Projectile: Bullet +# Speed: 1024 +# Warhead@1Dam: SpreadDamage +# Versus: +# Heavy: originally +33% above regular medium +# Light: 90 + +105mm: + Inherits: ^Cannon + ReloadDelay: 70 + Burst: 2 + BurstDelays: 4 + Warhead@1Dam: SpreadDamage + Versus: + Heavy: 125 + Light: 90 + +120mm: + Inherits: ^Cannon + ReloadDelay: 90 + Burst: 2 + InvalidTargets: Air, Infantry + Warhead@1Dam: SpreadDamage + Damage: 60 + Versus: + Heavy: 125 + Light: 90 + InvalidTargets: Air + +TurretGun: + Inherits: ^Cannon + ReloadDelay: 30 + Range: 8c0 + Report: turret1.aud + Warhead@1Dam: SpreadDamage + Damage: 60 + Versus: + None: 20 + Wood: 50 + +^Artillery: + Inherits: ^Cannon + ReloadDelay: 85 + Range: 13c0 + Projectile: Bullet + Speed: 204 + Blockable: false + LaunchAngle: 62 + Inaccuracy: 1c938 + Warhead@1Dam: SpreadDamage + Spread: 426 + Damage: 230 + Versus: + None: 80 + Wood: 40 + Light: 60 + Heavy: 25 + Concrete: 50 + DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath + Warhead@3Eff: CreateEffect + Explosions: artillery_explosion + ImpactSounds: kaboom15.aud + Warhead@4EffWater: CreateEffect + Explosions: med_splash + +155mm: + Inherits: ^Artillery + MinRange: 4c0 + Report: tank5.aud + TargetActorCenter: true + Projectile: Bullet + ContrailLength: 30 + +8Inch: + Inherits: ^Artillery + MinRange: 3c0 + ReloadDelay: 250 + Range: 18c0 + Burst: 2 + Report: turret1.aud + TargetActorCenter: true + Projectile: Bullet + Inaccuracy: 2c512 + ContrailLength: 30 + Warhead@1Dam: SpreadDamage + Spread: 213 + Damage: 25 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Versus: + None: 60 + Wood: 35 + Light: 60 + Heavy: 25 + Concrete: 100 + Warhead@4EffWater: CreateEffect + Explosions: large_splash + +2Inch: + Inherits: ^Cannon + ReloadDelay: 60 + Range: 7c0 + Report: cannon2.aud + InvalidTargets: Underwater + Projectile: Bullet + Speed: 426 + Warhead@1Dam: SpreadDamage + Damage: 25 + Versus: + None: 28 + Wood: 72 + Light: 72 + Concrete: 48 + +Grenade: + Inherits: ^Artillery + ReloadDelay: 60 + Range: 5c0 + Report: grenade1.aud + Projectile: Bullet + Speed: 136 + Inaccuracy: 554 + Image: BOMB + Warhead@1Dam: SpreadDamage + Spread: 256 + Damage: 60 + Versus: + None: 60 + Wood: 100 + Light: 25 + Heavy: 25 + Concrete: 100 + Warhead@3Eff: CreateEffect + Explosions: med_explosion + ImpactSounds: kaboom25.aud + Warhead@4EffWater: CreateEffect + Explosions: small_splash + +DepthCharge: + Inherits: ^Artillery + -Report: + ReloadDelay: 60 + Range: 6c0 + ValidTargets: Underwater + Projectile: Bullet + Speed: 100 + Image: BOMB + Inaccuracy: 128 + Warhead@1Dam: SpreadDamage + Spread: 128 + Damage: 80 + ValidTargets: Submarine + Versus: + None: 30 + Wood: 75 + Light: 75 + Heavy: 100 + Concrete: 50 + DamageTypes: ExplosionDeath + Warhead@4EffWater: CreateEffect + Explosions: large_splash + ImpactSounds: h2obomb2.aud + ValidTargets: Water, Underwater + Warhead@3Eff: CreateEffect + Explosions: small_explosion + ImpactSounds: kaboom15.aud + ValidTargets: Submarine diff --git a/mods/ura/weapons/explosions.yaml b/mods/ura/weapons/explosions.yaml new file mode 100644 index 0000000..41af25f --- /dev/null +++ b/mods/ura/weapons/explosions.yaml @@ -0,0 +1,322 @@ +^Explosion: + ValidTargets: Ground, Water, Air + Warhead@1Dam: SpreadDamage + Spread: 426 + Damage: 50 + Versus: + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 + Concrete: 100 + DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath + Warhead@Smu: LeaveSmudge + SmudgeType: Crater + InvalidTargets: Structure, Wall, Trees + Warhead@2Eff: CreateEffect + Explosions: self_destruct + ImpactSounds: kaboom22.aud + ValidTargets: Ground, Air, Ship, Trees + Warhead@3EffWater: CreateEffect + Explosions: large_splash + ImpactSounds: splash9.aud + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + +CrateNapalm: + Inherits: ^Explosion + ValidTargets: Ground, Trees + Warhead@1Dam: SpreadDamage + Spread: 170 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + ValidTargets: Ground, Trees + Versus: + Wood: 100 + Concrete: 50 + AffectsParent: true + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@2Eff: CreateEffect + Explosions: napalm + ImpactSounds: firebl3.aud + ValidTargets: Ground, Water, Air, Trees + -Warhead@3EffWater: CreateEffect + Warhead@Smu: LeaveSmudge + SmudgeType: Scorch + +CrateExplosion: + Inherits: ^Explosion + Warhead@1Dam: SpreadDamage + Falloff: 1000, 368, 135, 50, 18, 7, 0 + AffectsParent: true + Warhead@2Eff: CreateEffect + ValidTargets: Ground, Water, Air + -Warhead@3EffWater: CreateEffect + +UnitExplode: + Inherits: ^Explosion + Warhead@1Dam: SpreadDamage + Falloff: 1000, 368, 135, 50, 18, 7, 0 + +UnitExplodePlane: + Inherits: UnitExplode + Warhead@2Eff: CreateEffect + Explosions: large_napalm + +UnitExplodeHeli: + Inherits: UnitExplode + Warhead@2Eff: CreateEffect + Explosions: napalm + +VisualExplode: + Inherits: ^Explosion + -Warhead@1Dam: SpreadDamage + Warhead@2Eff: CreateEffect + Explosions: offseted_napalm + ImpactSounds: firebl3.aud + +UnitExplodeShip: + Inherits: ^Explosion + -Warhead@Smu: LeaveSmudge + Warhead@2Eff: CreateEffect + Explosions: building + ImpactSounds: kaboom25.aud + ValidTargets: Ground, Water + +UnitExplodeSubmarine: + Inherits: ^Explosion + -Warhead@Smu: LeaveSmudge + Warhead@2Eff: CreateEffect + Explosions: large_splash + ImpactSounds: splash9.aud + ValidTargets: Ground, Water + +UnitExplodeSmall: + Inherits: ^Explosion + Warhead@1Dam: SpreadDamage + Damage: 40 + Warhead@2Eff: CreateEffect + Explosions: large_explosion + ImpactSounds: kaboom15.aud + +ArtilleryExplode: + Inherits: ^Explosion + Warhead@1Dam: SpreadDamage + Damage: 150 + Warhead@2Eff: CreateEffect + Explosions: self_destruct + ImpactSounds: kaboom22.aud + +V2Explode: + Inherits: SCUD + -Report: + +BuildingExplode: + Warhead@2Eff: CreateEffect + Explosions: building, building_napalm, large_explosion, self_destruct, large_napalm + Warhead@Smu: LeaveSmudge + SmudgeType: Crater + InvalidTargets: Wall, Trees + +SmallBuildingExplode: + Inherits: BuildingExplode + Warhead@2Eff: CreateEffect + Explosions: building, building_napalm, large_explosion, self_destruct + +CivPanicExplosion: + Warhead@1Dam: SpreadDamage # Used to panic civilians which are emitted from a killed CivBuilding + Falloff: 100, 100 + Range: 0, 128 + Damage: 1 + Delay: 1 + +BarrelExplode: + Inherits: ^Explosion + Warhead@1Dam: SpreadDamage + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 5 + ValidTargets: Ground, Trees + Versus: + None: 120 + Wood: 100 + Light: 50 + Concrete: 10 + DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath, Incendiary + Warhead@2Eff: CreateEffect + Explosions: napalm + ImpactSounds: firebl3.aud + Delay: 5 + -Warhead@3EffWater: CreateEffect + Warhead@Smu: LeaveSmudge + SmudgeType: Scorch + Size: 2 + Delay: 5 + +ATMine: + Warhead@1Dam: SpreadDamage + Spread: 256 + Damage: 400 + AffectsParent: true + DamageTypes: Prone50Percent, TriggerProne, DefaultDeath + Warhead@2Eff: CreateEffect + Explosions: large_explosion + ImpactSounds: mineblo1.aud + Warhead@Smu: LeaveSmudge + SmudgeType: Crater + InvalidTargets: Structure, Wall, Trees + +APMine: + Inherits: ATMine + Warhead@1Dam: SpreadDamage + DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath + Warhead@2Eff: CreateEffect + Explosions: napalm + ImpactSounds: mine1.aud + Warhead@Smu: LeaveSmudge + SmudgeType: Scorch + +OreExplosion: + Warhead@1Dam: SpreadDamage + Spread: 9 + Damage: 10 + Versus: + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 + DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath + Warhead@3Res: CreateResource + AddsResourceType: Ore + Size: 1,1 + Warhead@2Eff: CreateEffect + Explosions: med_explosion + ImpactSounds: kaboom25.aud + +CrateNuke: + ValidTargets: Ground, Trees, Water, Air + Warhead@1Dam_impact: SpreadDamage + Spread: 1c0 + Damage: 100 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + ValidTargets: Ground, Trees, Water, Air + Versus: + Concrete: 25 + AffectsParent: true + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@2Res_impact: DestroyResource + Warhead@3Eff_impact: CreateEffect + Explosions: nuke + ImpactSounds: kaboom1.aud + VictimScanRadius: 0 + Warhead@4Dam_areanuke1: SpreadDamage + Spread: 1c0 + Damage: 60 + Falloff: 1000, 600, 400, 250, 150, 100, 0 + Delay: 5 + ValidTargets: Ground, Water, Air + Versus: + Concrete: 25 + AffectsParent: true + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@5Res_areanuke1: DestroyResource + Size: 4 + Delay: 5 + Warhead@6Eff_areanuke1: CreateEffect + ImpactSounds: kaboom22.aud + Delay: 5 + VictimScanRadius: 0 + Warhead@6Smu_areanuke1: LeaveSmudge + SmudgeType: Scorch + InvalidTargets: Vehicle, Structure, Wall, Trees + Size: 4 + Delay: 5 + Warhead@TREEKILL: SpreadDamage + Spread: 1c0 + Damage: 120 + Falloff: 1000, 600, 400, 250, 150, 100, 0 + Delay: 5 + ValidTargets: Trees + DamageTypes: Incendiary + +MiniNuke: + ValidTargets: Ground, Trees, Water, Underwater, Air + Warhead@1Dam_impact: SpreadDamage + Spread: 1c0 + Damage: 150 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + ValidTargets: Ground, Trees, Water, Air + Versus: + Wood: 25 + Concrete: 25 + AffectsParent: true + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@2Res_impact: DestroyResource + Size: 1 + Warhead@3Eff_impact: CreateEffect + Explosions: nuke + ImpactSounds: kaboom1.aud + VictimScanRadius: 0 + Warhead@4Dam_areanuke1: SpreadDamage + Spread: 2c0 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 5 + ValidTargets: Ground, Trees, Water, Underwater, Air + Versus: + Wood: 50 + Concrete: 25 + AffectsParent: true + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@5Res_areanuke1: DestroyResource + Size: 2 + Delay: 5 + Warhead@6Eff_areanuke1: CreateEffect + ImpactSounds: kaboom22.aud + Delay: 5 + VictimScanRadius: 0 + Warhead@7Dam_areanuke2: SpreadDamage + Spread: 3c0 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 10 + ValidTargets: Ground, Water, Underwater, Air + Versus: + Wood: 50 + Concrete: 25 + AffectsParent: true + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@8Dam_areanuke2: SpreadDamage + Spread: 3c0 + Damage: 120 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 10 + ValidTargets: Trees + DamageTypes: Incendiary + Warhead@9Res_areanuke2: DestroyResource + Size: 3 + Delay: 10 + Warhead@10Dam_areanuke3: SpreadDamage + Spread: 4c0 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 15 + ValidTargets: Ground, Water, Underwater + Versus: + Concrete: 25 + AffectsParent: true + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@11Dam_areanuke3: SpreadDamage + Spread: 4c0 + Damage: 180 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 15 + ValidTargets: Trees + DamageTypes: Incendiary + Warhead@12Res_areanuke3: DestroyResource + Size: 4 + Delay: 15 + Warhead@13Smu_areanuke3: LeaveSmudge + SmudgeType: Scorch + InvalidTargets: Vehicle, Structure, Wall, Trees + Size: 4 + Delay: 15 diff --git a/mods/ura/weapons/missiles.yaml b/mods/ura/weapons/missiles.yaml new file mode 100644 index 0000000..3c1d26b --- /dev/null +++ b/mods/ura/weapons/missiles.yaml @@ -0,0 +1,388 @@ +^AntiGroundMissile: + ReloadDelay: 50 + Range: 6c0 + MinRange: 0c512 + Report: missile6.aud + Projectile: Missile + Speed: 213 + Arm: 2 + Blockable: false + ContrailLength: 10 + Inaccuracy: 128 + Image: DRAGON + Shadow: True + HorizontalRateOfTurn: 5 + RangeLimit: 6c0 + Warhead@1Dam: SpreadDamage + Spread: 128 + Damage: 50 + ValidTargets: Ground, Water, Air + Versus: + None: 10 + Wood: 75 + Light: 35 + Heavy: 100 + Concrete: 50 + DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath + Warhead@2Smu: LeaveSmudge + SmudgeType: Crater + InvalidTargets: Vehicle, Structure, Wall, Husk, Trees + Warhead@3Eff: CreateEffect + Explosions: med_explosion + ImpactSounds: kaboom25.aud + ValidTargets: Ground, Air, Ship, Trees + Warhead@4EffWater: CreateEffect + Explosions: med_splash + ImpactSounds: splash9.aud + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + +^AntiAirMissile: + Inherits: ^AntiGroundMissile + ValidTargets: Air + Warhead@3Eff: CreateEffect + VictimScanRadius: 0 + +Maverick: + Inherits: ^AntiGroundMissile + ReloadDelay: 30 + Range: 11c0 + MinRange: 4c0 + Report: missile7.aud + Burst: 2 + BurstDelays: 7 + Projectile: Missile + Speed: 256 + Inaccuracy: 512 + CruiseAltitude: 2c0 + RangeLimit: 14c410 + Warhead@1Dam: SpreadDamage + Damage: 140 + Versus: + None: 30 + Wood: 90 + Light: 90 + Concrete: 100 + +Dragon: + Inherits: ^AntiGroundMissile + Projectile: Missile + TrailImage: smokey + +HellfireAG: + Inherits: ^AntiGroundMissile + ReloadDelay: 60 + MinRange: 1c256 + Burst: 4 + BurstDelays: 14 + Projectile: Missile + Speed: 256 + HorizontalRateOfTurn: 10 + RangeLimit: 8c512 + Warhead@1Dam: SpreadDamage + Damage: 60 + Versus: + None: 30 + Wood: 90 + Light: 90 + Concrete: 100 + +HellfireAA: + Inherits: ^AntiAirMissile + ReloadDelay: 60 + MinRange: 1c256 + Burst: 2 + BurstDelays: 10 + Projectile: Missile + Speed: 384 + Inaccuracy: 128 + HorizontalRateOfTurn: 10 + RangeLimit: 7c0 + Warhead@1Dam: SpreadDamage + Damage: 40 + ValidTargets: Air + Versus: + Wood: 75 + Light: 75 + Warhead@3Eff: CreateEffect + Explosions: med_explosion_air + +MammothTusk: + Inherits: ^AntiGroundMissile + ReloadDelay: 60 + Range: 9c0 + Burst: 2 + ValidTargets: Air, Infantry + Projectile: Missile + Speed: 341 + HorizontalRateOfTurn: 15 + RangeLimit: 9c614 + Warhead@1Dam: SpreadDamage + Spread: 256 + Damage: 50 + ValidTargets: Air, Infantry + Versus: + None: 100 + Light: 60 + Heavy: 25 + Concrete: 50 + DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath + Warhead@3Eff: CreateEffect + ImpactSounds: kaboom12.aud + ValidTargets: Ground, Trees + Warhead@5EffAir: CreateEffect + Explosions: med_explosion_air + ImpactSounds: kaboom25.aud + ValidTargets: Air + +#Modified version of MammothTuskAT by FiveAces +MammothTuskAT: + ReloadDelay: 60 + Range: 6c0 + Report: missile6.aud + Burst: 2 + ValidTargets: Tank, Vehicle, Husk + Projectile: Missile + Speed: 341 + Arm: 2 + Blockable: false + ContrailLength: 10 + Inaccuracy: 128 + Image: DRAGON + HorizontalRateOfTurn: 15 + RangeLimit: 7c256 + Warhead@1Dam: SpreadDamage + Spread: 256 + Damage: 25 + ValidTargets: Tank, Vehicle, Husk + Versus: + Light: 80 + DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath + Warhead@2Smu: LeaveSmudge + SmudgeType: Crater + InvalidTargets: Vehicle, Tank, Structure, Wall, Husk, Trees + Warhead@3EffGround: CreateEffect + Explosions: med_explosion + ImpactSounds: kaboom12.aud + InvalidTargets: Air + Warhead@4EffWater: CreateEffect + Explosions: small_splash + ImpactSounds: splash9.aud + ValidTargets: Water + Warhead@5EffAir: CreateEffect + Explosions: med_explosion_air + ImpactSounds: kaboom25.aud + ValidTargets: Air + +Nike: + Inherits: ^AntiAirMissile + ReloadDelay: 15 + Range: 9c0 + Report: missile1.aud + Projectile: Missile + Arm: 3 + Inaccuracy: 0 + Image: MISSILE + HorizontalRateOfTurn: 25 + RangeLimit: 9c0 + Speed: 341 + Warhead@1Dam: SpreadDamage + Damage: 50 + ValidTargets: Air + Versus: + None: 90 + Light: 90 + Heavy: 50 + Warhead@3Eff: CreateEffect + Explosions: med_explosion_air + ImpactSounds: kaboom25.aud + +RedEye: + Inherits: Nike + ReloadDelay: 50 + Projectile: Missile + Inaccuracy: 0 + HorizontalRateOfTurn: 20 + Speed: 298 + Warhead@1Dam: SpreadDamage + Damage: 40 + ValidTargets: Air + Versus: + Wood: 75 + Light: 60 + Heavy: 25 + +Stinger: + Inherits: ^AntiGroundMissile + ReloadDelay: 60 + Range: 9c0 + Burst: 2 + BurstDelays: 0 + InvalidTargets: Underwater + Projectile: Missile + Arm: 3 + Inaccuracy: 0 + HorizontalRateOfTurn: 20 + RangeLimit: 11c0 + Speed: 170 + CloseEnough: 149 + Warhead@1Dam: SpreadDamage + Damage: 30 + Versus: + None: 30 + Light: 75 + Concrete: 50 + +StingerAA: + Inherits: Stinger + ValidTargets: Air + Projectile: Missile + Speed: 255 + CloseEnough: 298 + Warhead@3Eff: CreateEffect + Explosions: med_explosion_air + ImpactSounds: kaboom25.aud + +APTusk: + Inherits: ^AntiGroundMissile + ReloadDelay: 60 + Range: 7c0 + Projectile: Missile + Spread: 256 + Speed: 298 + TrailImage: smokey + HorizontalRateOfTurn: 10 + RangeLimit: 9c0 + Warhead@1Dam: SpreadDamage + Damage: 30 + Versus: + None: 50 + Light: 75 + Heavy: 110 + Concrete: 50 + +TorpTube: + ReloadDelay: 100 + Range: 11c0 + Report: torpedo1.aud + ValidTargets: Water, Underwater, Bridge + Burst: 2 + BurstDelays: 20 + Projectile: Missile + Image: torpedo + Arm: 3 + Speed: 85 + TrailImage: bubbles + HorizontalRateOfTurn: 1 + RangeLimit: 11c0 + BoundToTerrainType: Water + Palette: shadow + MaximumLaunchAngle: 0 + CruiseAltitude: 0 + Warhead@1Dam: SpreadDamage + Spread: 426 + Damage: 180 + ValidTargets: Water, Underwater, Bridge + Versus: + None: 30 + Wood: 75 + Light: 75 + Heavy: 100 + Concrete: 500 + DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath + Warhead@3Eff: CreateEffect + Explosions: artillery_explosion + ImpactSounds: kaboom15.aud + ValidTargets: Ship, Structure, Underwater, Ground, Bridge + Warhead@4EffWater: CreateEffect + Explosions: large_splash + ImpactSounds: splash9.aud + ValidTargets: Water + InvalidTargets: Ship, Structure, Underwater, Bridge + +^SubMissileDefault: + Inherits: ^AntiGroundMissile + ReloadDelay: 300 + Range: 10c0 + Burst: 2 + Projectile: Missile + Speed: 234 + Inaccuracy: 0c614 + HorizontalRateOfTurn: 15 + RangeLimit: 9c0 + LaunchAngle: 120 + Image: MISSILE + TrailImage: smokey + ContrailLength: 30 + Warhead@1Dam: SpreadDamage + Spread: 426 + Damage: 25 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Versus: + None: 40 + Wood: 40 + Light: 35 + Heavy: 30 + Concrete: 100 + DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath + Warhead@3Eff: CreateEffect + Explosions: artillery_explosion + ImpactSounds: kaboom15.aud + Warhead@4EffWater: CreateEffect + Explosions: large_splash + ImpactSounds: splash9.aud + +SubMissile: + Inherits: ^SubMissileDefault + Range: 16c0 + TargetActorCenter: true + -Projectile: + Projectile: Bullet + Speed: 162 + Blockable: false + LaunchAngle: 120 + Inaccuracy: 1c512 + Image: MISSILE + Shadow: True + TrailImage: smokey + ContrailLength: 30 + +SubMissileAA: + Inherits: ^SubMissileDefault + ValidTargets: Air + Warhead@1Dam: SpreadDamage + Damage: 15 + +SCUD: + Inherits: ^AntiGroundMissile + ReloadDelay: 0 + Range: 12c0 + MinRange: 4c0 + Report: missile1.aud + -Projectile: + Projectile: Bullet + Speed: 220 + Blockable: false + TrailImage: smokey + TrailDelay: 5 + Inaccuracy: 213 + Image: V2 + Shadow: True + LaunchAngle: 62 + Warhead@1Dam: SpreadDamage + Spread: 341 + Damage: 45 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + ValidTargets: Ground, Water, Trees + Versus: + None: 90 + Wood: 75 + Light: 70 + Heavy: 40 + Concrete: 100 + DamageTypes: Prone50Percent, TriggerProne, SmallExplosionDeath, Incendiary + Warhead@3Eff: CreateEffect + Explosions: napalm + ImpactSounds: firebl3.aud + Warhead@4EffWater: CreateEffect + Explosions: large_splash diff --git a/mods/ura/weapons/other.yaml b/mods/ura/weapons/other.yaml new file mode 100644 index 0000000..a02245f --- /dev/null +++ b/mods/ura/weapons/other.yaml @@ -0,0 +1,251 @@ +^FireWeapon: + ValidTargets: Ground, Water, Trees + ReloadDelay: 65 + Range: 6c0 + Warhead@1Dam: SpreadDamage + Spread: 213 + Damage: 150 + ValidTargets: Ground, Water, Trees + Versus: + None: 90 + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 20 + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@2Smu: LeaveSmudge + SmudgeType: Scorch + InvalidTargets: Structure, Wall + Warhead@3Eff: CreateEffect + Explosions: napalm + ImpactSounds: firebl3.aud + VictimScanRadius: 0 + +FireballLauncher: + Inherits: ^FireWeapon + Burst: 2 + BurstDelays: 20 + Projectile: Bullet + Speed: 250 + TrailImage: fb2 + Image: FB1 + Warhead@1Dam: SpreadDamage + Versus: + Light: 50 + +Flamer: + Inherits: ^FireWeapon + ReloadDelay: 50 + Burst: 15 + BurstDelays: 1 + Projectile: Bullet + Speed: 190 + TrailImage: fb4 + Image: fb3 + LaunchAngle: 62 + Inaccuracy: 853 + Warhead@1Dam: SpreadDamage + Spread: 341 + Damage: 8 + Versus: + Wood: 100 + Warhead@3Eff: CreateEffect + Explosions: small_napalm + +Napalm: + Inherits: ^FireWeapon + ReloadDelay: 20 + Range: 4c512 + Projectile: Bullet + Image: BOMBLET + Speed: 85 + Blockable: false + Warhead@1Dam: SpreadDamage + Spread: 170 + Damage: 100 + Versus: + Wood: 100 + Concrete: 50 + +#Modified version of KVFlame by FiveAces +KVFlame: + ValidTargets: Infantry, Vehicle, Tank, Structure, Wall, Ground + InvalidTargets: Water + ReloadDelay: 90 + Range: 6c0 + Burst: 25 + BurstDelays: 1 + Projectile: Bullet + Speed: 200 + TrailImage: fb4 + Image: fb3 + LaunchAngle: 31 + Inaccuracy: 853 + Warhead@1Dam: SpreadDamage + Spread: 841 + Damage: 8 + ValidTargets: Ground, Water, Trees + Versus: + None: 100 + Wood: 100 + Light: 30 + Heavy: 20 + Concrete: 50 + DamageTypes: Prone50Percent, TriggerProne, FireDeath + Warhead@2Smu: LeaveSmudge + SmudgeType: Scorch + Warhead@3Eff: CreateEffect + Explosions: small_napalm + ImpactSounds: firebl3.aud + +^TeslaWeapon: + ReloadDelay: 3 + Range: 9c0 + Report: tesla1.aud + Projectile: TeslaZap + Warhead@1Dam: SpreadDamage + Spread: 42 + Damage: 100 + Versus: + None: 1000 + DamageTypes: Prone50Percent, TriggerProne, ElectricityDeath + +TeslaZap: + Inherits: ^TeslaWeapon + Warhead@1Dam: SpreadDamage + Versus: + Wood: 60 + +PortaTesla: + Inherits: ^TeslaWeapon + ReloadDelay: 70 + Range: 7c0 + Warhead@1Dam: SpreadDamage + Damage: 45 + Versus: + Wood: 75 + Heavy: 60 + +TTankZap: + Inherits: ^TeslaWeapon + ReloadDelay: 120 + Range: 9c0 + Warhead@1Dam: SpreadDamage + Damage: 85 + +DogJaw: + ValidTargets: Infantry + ReloadDelay: 10 + Range: 3c0 + Report: dogg5p.aud + Warhead@1Dam: SpreadDamage + Spread: 213 + Damage: 100 + ValidTargets: Infantry + InvalidTargets: Ant + DamageTypes: DefaultDeath + +Heal: + ReloadDelay: 80 + Range: 4c0 + Report: heal2.aud + ValidTargets: Infantry + Projectile: Bullet + Speed: 1c682 + Warhead@1Dam: SpreadDamage + Spread: 213 + Damage: -50 + ValidStances: Ally + ValidTargets: Infantry + DebugOverlayColor: 00FF00 + +Repair: + Inherits: Heal + Report: fixit1.aud + ValidTargets: Repair + Warhead@1Dam: SpreadDamage + Damage: -20 + ValidTargets: Repair + +Hover: + ReloadDelay: 100 + Range: 0c0 + ValidTargets: Ground, Water + Projectile: Bullet + Speed: 1c0 + Warhead@1Dam: SpreadDamage + Damage: 0 + ValidTargets: Ground, Water + +Crush: + Warhead@1Dam: SpreadDamage + Damage: 100 + DamageTypes: Prone50Percent, TriggerProne, DefaultDeath + Warhead@2Eff: CreateEffect + ImpactSounds: squishy2.aud + +Demolish: + Warhead@1Dam: SpreadDamage + DamageTypes: DefaultDeath + Warhead@2Eff: CreateEffect + Explosions: building + ImpactSounds: kaboom25.aud + +Claw: + ReloadDelay: 30 + Range: 1c512 + Projectile: Bullet + Speed: 1c682 + Warhead@1Dam: SpreadDamage + Spread: 213 + Damage: 33 + Versus: + None: 90 + Wood: 10 + Light: 30 + Heavy: 10 + Concrete: 10 + DamageTypes: Prone50Percent, TriggerProne, DefaultDeath + +Mandible: + Inherits: Claw + ReloadDelay: 10 + Warhead@1Dam: SpreadDamage + Damage: 60 + Versus: + None: 90 + +MADTankThump: + InvalidTargets: MADTank + Warhead@1Dam: HealthPercentageDamage + Spread: 20c0 + Damage: 1 + Versus: + None: 200 + Wood: 80 + Light: 60 + Heavy: 40 + InvalidTargets: MADTank + DamageTypes: Prone50Percent, TriggerProne, DefaultDeath + Warhead@2Dam: HealthPercentageDamage + Spread: 12c0 + Damage: 1 + Versus: + None: 200 + Wood: 55 + Light: 45 + Heavy: 30 + InvalidTargets: MADTank + DamageTypes: Prone50Percent, TriggerProne, DefaultDeath + +MADTankDetonate: + InvalidTargets: MADTank, Infantry + Warhead@1Dam: HealthPercentageDamage + Spread: 7c256 + Damage: 5 + Versus: + Concrete: 1000 + InvalidTargets: MADTank, Infantry + DamageTypes: Prone50Percent, TriggerProne, DefaultDeath + Warhead@2Smu: LeaveSmudge + Size: 10,9 diff --git a/mods/ura/weapons/smallcaliber.yaml b/mods/ura/weapons/smallcaliber.yaml new file mode 100644 index 0000000..8ee39c8 --- /dev/null +++ b/mods/ura/weapons/smallcaliber.yaml @@ -0,0 +1,305 @@ +^AACannon: + ReloadDelay: 10 + Range: 9c0 + Report: aacanon3.aud + ValidTargets: Air + Projectile: Bullet + Speed: 1c682 + Blockable: false + Warhead@1Dam: SpreadDamage + Spread: 213 + Damage: 20 + ValidTargets: Air + Versus: + None: 40 + Wood: 10 + Light: 60 + Heavy: 10 + Concrete: 20 + DamageTypes: Prone50Percent, TriggerProne, DefaultDeath + Warhead@2Eff: CreateEffect + Explosions: small_explosion_air + ValidTargets: Air, Ground, Water, Trees + +ZSU-23: + Inherits: ^AACannon + Burst: 2 + BurstDelays: 0 + ReloadDelay: 5 + Range: 11c0 + Projectile: Bullet + Speed: 3c340 + Warhead@1Dam: SpreadDamage + Damage: 12 + Versus: + None: 30 + Wood: 75 + Light: 75 + Heavy: 100 + Concrete: 50 + +FLAK-23-AA: + Inherits: ^AACannon + Warhead@1Dam: SpreadDamage + ValidTargets: Air, Ground, Water + +FLAK-23-AG: + Inherits: ^AACannon + Range: 7c0 + ValidTargets: Ground, Water + Warhead@1Dam: SpreadDamage + ValidTargets: Air, Ground, Water + Warhead@2Eff: CreateEffect + Explosions: flak_explosion_ground + ValidTargets: Ground, Ship, Air, Trees + Warhead@3EffWater: CreateEffect + Explosions: small_splash + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + +^HeavyMG: + ReloadDelay: 30 + Range: 7c0 + Report: gun13.aud + Projectile: Bullet + Speed: 1c682 + Warhead@1Dam: SpreadDamage + Spread: 128 + Damage: 30 + Versus: + None: 100 + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, BulletDeath + Warhead@2Eff: CreateEffect + Explosions: piffs + ValidTargets: Ground, Ship, Air, Trees + Warhead@3EffWater: CreateEffect + Explosions: water_piffs + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + +^LightMG: + Inherits: ^HeavyMG + Warhead@1Dam: SpreadDamage + Damage: 15 + Versus: + None: 150 + Wood: 10 + Light: 30 + Heavy: 10 + Concrete: 10 + +Vulcan: + Inherits: ^HeavyMG + Warhead@1Dam: SpreadDamage + Damage: 10 + Versus: + None: 200 + Wood: 50 + Light: 50 + Heavy: 20 + Concrete: 20 + Warhead@4Dam_2: SpreadDamage + Spread: 128 + Damage: 10 + Delay: 2 + Versus: + None: 200 + Wood: 50 + Light: 50 + Heavy: 25 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, BulletDeath + Warhead@4Eff_2: CreateEffect + Explosions: piffs + ValidTargets: Ground, Ship, Trees + Delay: 2 + Warhead@4Eff_2Water: CreateEffect + Explosions: water_piffs + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + Delay: 2 + Warhead@5Dam_3: SpreadDamage + Spread: 128 + Damage: 10 + Delay: 4 + Versus: + None: 200 + Wood: 50 + Light: 50 + Heavy: 25 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, BulletDeath + Warhead@6Eff_3: CreateEffect + Explosions: piffs + ValidTargets: Ground, Ship, Trees + Delay: 4 + Warhead@6Eff_3Water: CreateEffect + Explosions: water_piffs + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + Delay: 4 + Warhead@7Dam_4: SpreadDamage + Spread: 128 + Damage: 10 + Delay: 6 + Versus: + None: 200 + Wood: 50 + Light: 50 + Heavy: 25 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, BulletDeath + Warhead@8Eff_4: CreateEffect + Explosions: piffs + ValidTargets: Ground, Ship, Trees + Delay: 6 + Warhead@8Eff_4Water: CreateEffect + Explosions: water_piffs + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + Delay: 6 + Warhead@9Dam_5: SpreadDamage + Spread: 128 + Damage: 10 + Delay: 8 + Versus: + None: 200 + Wood: 50 + Light: 50 + Heavy: 25 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, BulletDeath + Warhead@10Eff_5: CreateEffect + Explosions: piffs + ValidTargets: Ground, Ship, Trees + Delay: 8 + Warhead@10Eff_5Water: CreateEffect + Explosions: water_piffs + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + Delay: 8 + Warhead@11Dam_6: SpreadDamage + Spread: 128 + Damage: 10 + Delay: 10 + Versus: + None: 200 + Wood: 50 + Light: 50 + Heavy: 25 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, BulletDeath + Warhead@12Eff_6: CreateEffect + Explosions: piffs + ValidTargets: Ground, Ship, Trees + Delay: 10 + Warhead@12Eff_6Water: CreateEffect + Explosions: water_piffs + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + Delay: 10 + +ChainGun: + Inherits: ^HeavyMG + ReloadDelay: 10 + Range: 7c0 + MinRange: 0c768 + Projectile: Bullet + Blockable: false + Warhead@1Dam: SpreadDamage + Versus: + None: 120 + +ChainGun.Yak: + Inherits: ^HeavyMG + ReloadDelay: 3 + Range: 7c0 + MinRange: 4c0 + Projectile: Bullet + Blockable: false + Warhead@1Dam: SpreadDamage + Damage: 40 + +Pistol: + Inherits: ^LightMG + ReloadDelay: 7 + Range: 4c0 + Report: gun27.aud + Warhead@1Dam: SpreadDamage + Damage: 1 + Warhead@2Eff: CreateEffect + Explosions: piff + Warhead@3EffWater: CreateEffect + Explosions: water_piff + +M1Carbine: + Inherits: ^LightMG + ReloadDelay: 20 + Range: 6c0 + Report: gun11.aud + Warhead@1Dam: SpreadDamage + Versus: + Wood: 25 + +M60mg: + Inherits: ^LightMG + ReloadDelay: 30 + Range: 5c0 + Report: pillbox1.aud + Burst: 5 + +^SnipeWeapon: + ReloadDelay: 80 + Range: 5c0 + Report: gun5.aud + ValidTargets: Ground, Water, Infantry + InvalidTargets: Vehicle, Tank, Ship, Structure, Wall, Husk + Projectile: Bullet + Speed: 1c682 + Warhead@1Dam: SpreadDamage + Spread: 42 + Damage: 150 + ValidTargets: Barrel, Infantry + DamageTypes: Prone50Percent, TriggerProne, BulletDeath + +SilencedPPK: + Inherits: ^SnipeWeapon + Report: silppk.aud + Warhead@1Dam: SpreadDamage + Spread: 128 + Warhead@2Eff: CreateEffect + Explosions: piffs + ValidTargets: Ground, Ship, Air, Trees + Warhead@3EffWater: CreateEffect + Explosions: water_piffs + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + +Colt45: + Inherits: ^SnipeWeapon + ReloadDelay: 5 + Range: 8c0 + Warhead@1Dam: SpreadDamage + Damage: 50 + Warhead@2Eff: CreateEffect + Explosions: piff + ValidTargets: Ground, Ship, Air, Trees + Warhead@3EffWater: CreateEffect + Explosions: water_piff + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure, Bridge + +Sniper: + Inherits: ^SnipeWeapon + ReloadDelay: 70 + Range: 10c0 + Warhead@1Dam: SpreadDamage + Damage: 140 + +SniperIFV: + Inherits: Sniper + Range: 8c0 diff --git a/mods/ura/weapons/superweapons.yaml b/mods/ura/weapons/superweapons.yaml new file mode 100644 index 0000000..f407955 --- /dev/null +++ b/mods/ura/weapons/superweapons.yaml @@ -0,0 +1,149 @@ +ParaBomb: + ReloadDelay: 10 + Range: 3c0 + Report: chute1.aud + Projectile: GravityBomb + Image: PARABOMB + OpenSequence: open + Velocity: 0, 0, -86 + Acceleration: 0, 0, 0 + Shadow: False + Warhead@1Dam: SpreadDamage + Spread: 768 + Damage: 300 + Versus: + None: 30 + Wood: 30 + Light: 75 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, ExplosionDeath + Warhead@2Smu: LeaveSmudge + SmudgeType: Crater + InvalidTargets: Vehicle, Structure, Wall, Husk, Trees + Warhead@3Eff: CreateEffect + Explosions: artillery_explosion + ImpactSounds: kaboom15.aud + ValidTargets: Ground, Ship, Trees + Warhead@4EffWater: CreateEffect + Explosions: small_splash + ImpactSounds: splash9.aud + ValidTargets: Water, Underwater + InvalidTargets: Ship, Structure + +Atomic: + ValidTargets: Ground, Trees, Water, Underwater, Air + Warhead@1Dam_impact: SpreadDamage + Spread: 1c0 + Damage: 150 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + ValidTargets: Ground, Trees, Water, Underwater, Air + Versus: + Wood: 25 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@2Res_impact: DestroyResource + Size: 1 + Warhead@3Smu_impact: LeaveSmudge + SmudgeType: Scorch + InvalidTargets: Vehicle, Structure, Wall + Size: 1 + Warhead@4Eff_impact: CreateEffect + Explosions: nuke + ImpactSounds: kaboom1.aud + VictimScanRadius: 0 + ValidTargets: Ground, Water, Air + Warhead@5Dam_areanuke1: SpreadDamage + Spread: 2c0 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 5 + ValidTargets: Ground, Trees, Water, Underwater, Air + Versus: + Wood: 25 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@6Res_areanuke1: DestroyResource + Size: 2 + Delay: 5 + Warhead@7Smu_areanuke1: LeaveSmudge + SmudgeType: Scorch + InvalidTargets: Vehicle, Structure, Wall, Husk, Trees + Size: 2 + Delay: 5 + Warhead@8Eff_areanuke1: CreateEffect + ImpactSounds: kaboom22.aud + Delay: 5 + VictimScanRadius: 0 + Warhead@9Dam_areanuke2: SpreadDamage + Spread: 3c0 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 10 + ValidTargets: Ground, Water, Underwater, Air + Versus: + Wood: 50 + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@10Dam_areanuke2: SpreadDamage + Spread: 3c0 + Damage: 120 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 15 + ValidTargets: Trees + DamageTypes: Incendiary + Warhead@11Res_areanuke2: DestroyResource + Size: 3 + Delay: 10 + Warhead@12Smu_areanuke2: LeaveSmudge + SmudgeType: Scorch + InvalidTargets: Vehicle, Structure, Wall, Husk, Trees + Size: 3 + Delay: 10 + Warhead@13Dam_areanuke3: SpreadDamage + Spread: 4c0 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 15 + ValidTargets: Ground, Water, Underwater, Air + Versus: + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@14Dam_areanuke3: SpreadDamage + Spread: 4c0 + Damage: 120 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 15 + ValidTargets: Trees + DamageTypes: Incendiary + Warhead@15Res_areanuke3: DestroyResource + Size: 4 + Delay: 15 + Warhead@16Smu_areanuke3: LeaveSmudge + SmudgeType: Scorch + InvalidTargets: Vehicle, Structure, Wall, Husk, Trees + Size: 4 + Delay: 15 + Warhead@17Dam_areanuke4: SpreadDamage + Spread: 5c0 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 20 + ValidTargets: Ground, Water, Underwater, Air + Versus: + Concrete: 25 + DamageTypes: Prone50Percent, TriggerProne, FireDeath, Incendiary + Warhead@18Dam_areanuke4: SpreadDamage + Spread: 5c0 + Damage: 120 + Falloff: 1000, 368, 135, 50, 18, 7, 0 + Delay: 20 + ValidTargets: Trees + DamageTypes: Incendiary + Warhead@19Res_areanuke4: DestroyResource + Size: 5 + Delay: 20 + Warhead@20Smu_areanuke4: LeaveSmudge + SmudgeType: Scorch + InvalidTargets: Vehicle, Structure, Wall, Husk, Trees + Size: 5 + Delay: 20 diff --git a/packaging/osx/buildpackage.sh b/packaging/osx/buildpackage.sh new file mode 100644 index 0000000..08a9a09 --- /dev/null +++ b/packaging/osx/buildpackage.sh @@ -0,0 +1,100 @@ +#!/bin/bash +# OpenRA packaging script for macOS +set -e + +command -v make >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires make."; exit 1; } +command -v python >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires python."; exit 1; } +command -v curl >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires curl."; exit 1; } + +if [ $# -eq "0" ]; then + echo "Usage: `basename $0` version [outputdir]" + exit 1 +fi + +PACKAGING_DIR=$(python -c "import os; print(os.path.dirname(os.path.realpath('$0')))") +TEMPLATE_ROOT="${PACKAGING_DIR}/../../" + +# shellcheck source=mod.config +. "${TEMPLATE_ROOT}/mod.config" + +if [ -f "${TEMPLATE_ROOT}/user.config" ]; then + # shellcheck source=user.config + . "${TEMPLATE_ROOT}/user.config" +fi + +if [ "${INCLUDE_DEFAULT_MODS}" = "True" ]; then + echo "Cannot generate installers while INCLUDE_DEFAULT_MODS is enabled." + echo "Make sure that this setting is disabled in both your mod.config and user.config." + exit 1 +fi + +TAG="$1" +if [ $# -eq "1" ]; then + OUTPUTDIR=$(python -c "import os; print(os.path.realpath('.'))") +else + OUTPUTDIR=$(python -c "import os; print(os.path.realpath('$2'))") +fi + +BUILTDIR="${PACKAGING_DIR}/build" +PACKAGING_OSX_APP_NAME="OpenRA - ${PACKAGING_DISPLAY_NAME}.app" + +# Set the working dir to the location of this script +cd "${PACKAGING_DIR}" + +modify_plist() { + sed "s|$1|$2|g" "$3" > "$3.tmp" && mv "$3.tmp" "$3" +} + +echo "Building launcher" +curl -s -L -o "${PACKAGING_OSX_LAUNCHER_TEMP_ARCHIVE_NAME}" -O "${PACKAGING_OSX_LAUNCHER_SOURCE}" || exit 3 + +unzip -qq -d "${BUILTDIR}" "${PACKAGING_OSX_LAUNCHER_TEMP_ARCHIVE_NAME}" +rm "${PACKAGING_OSX_LAUNCHER_TEMP_ARCHIVE_NAME}" + +modify_plist "{DEV_VERSION}" "${TAG}" "${BUILTDIR}/OpenRA.app/Contents/Info.plist" +modify_plist "{FAQ_URL}" "${PACKAGING_FAQ_URL}" "${BUILTDIR}/OpenRA.app/Contents/Info.plist" +echo "Building core files" + +pushd ${TEMPLATE_ROOT} > /dev/null + +if [ ! -f "${ENGINE_DIRECTORY}/Makefile" ]; then + echo "Required engine files not found." + echo "Run \`make\` in the mod directory to fetch and build the required files, then try again."; + exit 1 +fi + +if [ ! -d "${OUTPUTDIR}" ]; then + echo "Output directory '${OUTPUTDIR}' does not exist."; + exit 1 +fi + +make version VERSION="${TAG}" + +pushd ${ENGINE_DIRECTORY} > /dev/null +make osx-dependencies +make core SDK="-sdk:4.5" +make install-engine gameinstalldir="/Contents/Resources/" DESTDIR="${BUILTDIR}/OpenRA.app" +make install-common-mod-files gameinstalldir="/Contents/Resources/" DESTDIR="${BUILTDIR}/OpenRA.app" +popd > /dev/null +popd > /dev/null + +# Add mod files +cp -r "${TEMPLATE_ROOT}/mods/"* "${BUILTDIR}/OpenRA.app/Contents/Resources/mods" +cp "mod.icns" "${BUILTDIR}/OpenRA.app/Contents/Resources/${MOD_ID}.icns" + +pushd "${BUILTDIR}" > /dev/null +mv "OpenRA.app" "${PACKAGING_OSX_APP_NAME}" + +# Copy macOS specific files +modify_plist "{MOD_ID}" "${MOD_ID}" "${PACKAGING_OSX_APP_NAME}/Contents/Info.plist" +modify_plist "{MOD_NAME}" "${PACKAGING_DISPLAY_NAME}" "${PACKAGING_OSX_APP_NAME}/Contents/Info.plist" +modify_plist "{JOIN_SERVER_URL_SCHEME}" "openra-${MOD_ID}-${TAG}" "${PACKAGING_OSX_APP_NAME}/Contents/Info.plist" + +echo "Packaging zip archive" + +zip "${PACKAGING_INSTALLER_NAME}-${TAG}-macOS.zip" -r -9 "${PACKAGING_OSX_APP_NAME}" --quiet --symlinks +mv "${PACKAGING_INSTALLER_NAME}-${TAG}-macOS.zip" "${OUTPUTDIR}" +popd > /dev/null + +# Clean up +rm -rf "${BUILTDIR}" diff --git a/packaging/osx/mod.icns b/packaging/osx/mod.icns new file mode 100644 index 0000000..68e41c8 Binary files /dev/null and b/packaging/osx/mod.icns differ diff --git a/packaging/package-all.sh b/packaging/package-all.sh new file mode 100644 index 0000000..d667159 --- /dev/null +++ b/packaging/package-all.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -e + +if [ $# -eq "0" ]; then + echo "Usage: `basename $0` version [outputdir]" + exit 1 +fi + +TAG="$1" +if [ $# -eq "1" ]; then + OUTPUTDIR=$(pwd) +else + OUTPUTDIR=$2 +fi + +command -v python >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires python."; exit 1; } +command -v make >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires make."; exit 1; } +command -v curl >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires curl."; exit 1; } +command -v makensis >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires makensis."; exit 1; } + +PACKAGING_DIR=$(python -c "import os; print(os.path.dirname(os.path.realpath('$0')))") + +echo "Building Windows package" +${PACKAGING_DIR}/windows/buildpackage.sh "${TAG}" "${OUTPUTDIR}" +if [ $? -ne 0 ]; then + echo "Windows package build failed." +fi + +echo "Building macOS package" +${PACKAGING_DIR}/osx/buildpackage.sh "${TAG}" "${OUTPUTDIR}" +if [ $? -ne 0 ]; then + echo "macOS package build failed." +fi + +echo "Package build done." diff --git a/packaging/windows/buildpackage.nsi b/packaging/windows/buildpackage.nsi new file mode 100644 index 0000000..b0a2070 --- /dev/null +++ b/packaging/windows/buildpackage.nsi @@ -0,0 +1,244 @@ +; Copyright 2007-2015 OpenRA developers (see AUTHORS) +; This file is part of OpenRA. +; +; OpenRA 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. +; +; OpenRA 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 OpenRA. If not, see . + + +!include "MUI2.nsh" +!include "FileFunc.nsh" +!include "WordFunc.nsh" + +Name "${PACKAGING_DISPLAY_NAME}" +OutFile "OpenRA.Setup.exe" + +InstallDir "$PROGRAMFILES\${PACKAGING_WINDOWS_INSTALL_DIR_NAME}" +InstallDirRegKey HKLM "Software\${PACKAGING_WINDOWS_REGISTRY_KEY}" "InstallDir" + +SetCompressor lzma +RequestExecutionLevel admin + +!insertmacro MUI_PAGE_WELCOME +!insertmacro MUI_PAGE_LICENSE "${SRCDIR}\COPYING" +!insertmacro MUI_PAGE_DIRECTORY + +!define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM" +!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\${PACKAGING_WINDOWS_REGISTRY_KEY}" +!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" +!define MUI_STARTMENUPAGE_DEFAULTFOLDER "OpenRA" + +Var StartMenuFolder +!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder + +!insertmacro MUI_PAGE_COMPONENTS +!insertmacro MUI_PAGE_INSTFILES + +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES +!insertmacro MUI_UNPAGE_FINISH + +!insertmacro MUI_LANGUAGE "English" + +;*************************** +;Section Definitions +;*************************** +Section "-Reg" Reg + + ; Installation directory + WriteRegStr HKLM "Software\${PACKAGING_WINDOWS_REGISTRY_KEY}" "InstallDir" $INSTDIR + + ; Join server URL Scheme + WriteRegStr HKLM "Software\Classes\openra-${MOD_ID}-${TAG}" "" "URL:Join OpenRA server" + WriteRegStr HKLM "Software\Classes\openra-${MOD_ID}-${TAG}" "URL Protocol" "" + WriteRegStr HKLM "Software\Classes\openra-${MOD_ID}-${TAG}\DefaultIcon" "" "$INSTDIR\${MOD_ID}.ico,0" + WriteRegStr HKLM "Software\Classes\openra-${MOD_ID}-${TAG}\Shell\Open\Command" "" "$INSTDIR\${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe Launch.URI=%1" + +SectionEnd + +Section "Game" GAME + SectionIn RO + + SetOutPath "$INSTDIR" + File /r "${SRCDIR}\mods" + File "${SRCDIR}\${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" + File "${SRCDIR}\OpenRA.Game.exe" + File "${SRCDIR}\OpenRA.Game.exe.config" + File "${SRCDIR}\OpenRA.Utility.exe" + File "${SRCDIR}\OpenRA.Server.exe" + File "${SRCDIR}\OpenRA.Platforms.Default.dll" + File "${SRCDIR}\ICSharpCode.SharpZipLib.dll" + File "${SRCDIR}\FuzzyLogicLibrary.dll" + File "${SRCDIR}\Open.Nat.dll" + File "${SRCDIR}\VERSION" + File "${SRCDIR}\AUTHORS" + File "${SRCDIR}\COPYING" + File "${SRCDIR}\${MOD_ID}.ico" + File "${SRCDIR}\SharpFont.dll" + File "${SRCDIR}\SDL2-CS.dll" + File "${SRCDIR}\OpenAL-CS.dll" + File "${SRCDIR}\global mix database.dat" + File "${SRCDIR}\MaxMind.Db.dll" + File "${SRCDIR}\GeoLite2-Country.mmdb.gz" + File "${SRCDIR}\eluant.dll" + File "${SRCDIR}\rix0rrr.BeaconLib.dll" + File "${DEPSDIR}\soft_oal.dll" + File "${DEPSDIR}\SDL2.dll" + File "${DEPSDIR}\freetype6.dll" + File "${DEPSDIR}\lua51.dll" + + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + CreateDirectory "$SMPROGRAMS\$StartMenuFolder" + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\${PACKAGING_DISPLAY_NAME}.lnk" "$OUTDIR\${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" "" \ + "$OUTDIR\${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" "" "" "" "" + !insertmacro MUI_STARTMENU_WRITE_END + + SetOutPath "$INSTDIR\lua" + File "${SRCDIR}\lua\*.lua" + + SetOutPath "$INSTDIR\glsl" + File "${SRCDIR}\glsl\*.frag" + File "${SRCDIR}\glsl\*.vert" + + ; Estimated install size for the control panel properties + ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 + IntFmt $0 "0x%08X" $0 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" "EstimatedSize" "$0" + + SetShellVarContext all + CreateDirectory "$APPDATA\OpenRA\ModMetadata" + nsExec::ExecToLog '"$INSTDIR\OpenRA.Utility.exe" ${MOD_ID} --register-mod "$INSTDIR\${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" system' + nsExec::ExecToLog '"$INSTDIR\OpenRA.Utility.exe" ${MOD_ID} --clear-invalid-mod-registrations system' + SetShellVarContext current + +SectionEnd + +Section "Desktop Shortcut" DESKTOPSHORTCUT + SetOutPath "$INSTDIR" + CreateShortCut "$DESKTOP\OpenRA - ${PACKAGING_DISPLAY_NAME}.lnk" "$INSTDIR\${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" "" \ + "$INSTDIR\${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" "" "" "" "" +SectionEnd + +;*************************** +;Dependency Sections +;*************************** +Section "-DotNet" DotNet + ClearErrors + ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" "Install" + IfErrors error 0 + IntCmp $0 1 0 error 0 + ClearErrors + ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Install" + IfErrors error 0 + IntCmp $0 1 done error done + error: + MessageBox MB_OK ".NET Framework v4.5 or later is required to run OpenRA." + Abort + done: +SectionEnd + +;*************************** +;Uninstaller Sections +;*************************** +Section "-Uninstaller" + WriteUninstaller $INSTDIR\uninstaller.exe + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" "DisplayName" "${PACKAGING_DISPLAY_NAME}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" "UninstallString" "$INSTDIR\uninstaller.exe" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" "InstallLocation" "$INSTDIR" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" "DisplayIcon" "$INSTDIR\${MOD_ID}.ico" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" "Publisher" "${PACKAGING_AUTHORS}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" "URLInfoAbout" "${PACKAGING_WEBSITE_URL}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" "DisplayVersion" "${TAG}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" "NoModify" "1" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" "NoRepair" "1" +SectionEnd + +!macro Clean UN +Function ${UN}Clean + nsExec::ExecToLog '"$INSTDIR\OpenRA.Utility.exe" ${MOD_ID} --unregister-mod system' + + RMDir /r $INSTDIR\mods + RMDir /r $INSTDIR\maps + RMDir /r $INSTDIR\glsl + RMDir /r $INSTDIR\lua + Delete "$INSTDIR\${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" + Delete $INSTDIR\OpenRA.Game.exe + Delete $INSTDIR\OpenRA.Game.exe.config + Delete $INSTDIR\OpenRA.Utility.exe + Delete $INSTDIR\OpenRA.Server.exe + Delete $INSTDIR\OpenRA.Platforms.Default.dll + Delete $INSTDIR\ICSharpCode.SharpZipLib.dll + Delete $INSTDIR\FuzzyLogicLibrary.dll + Delete $INSTDIR\Open.Nat.dll + Delete $INSTDIR\SharpFont.dll + Delete $INSTDIR\VERSION + Delete $INSTDIR\AUTHORS + Delete $INSTDIR\COPYING + Delete $INSTDIR\${MOD_ID}.ico + Delete "$INSTDIR\global mix database.dat" + Delete $INSTDIR\MaxMind.Db.dll + Delete $INSTDIR\GeoLite2-Country.mmdb.gz + Delete $INSTDIR\KopiLua.dll + Delete $INSTDIR\soft_oal.dll + Delete $INSTDIR\SDL2.dll + Delete $INSTDIR\lua51.dll + Delete $INSTDIR\eluant.dll + Delete $INSTDIR\freetype6.dll + Delete $INSTDIR\SDL2-CS.dll + Delete $INSTDIR\OpenAL-CS.dll + Delete $INSTDIR\rix0rrr.BeaconLib.dll + RMDir /r $INSTDIR\Support + + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PACKAGING_WINDOWS_REGISTRY_KEY}" + DeleteRegKey HKLM "Software\Classes\openra-${MOD_ID}-${TAG}" + + Delete $INSTDIR\uninstaller.exe + RMDir $INSTDIR + + !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder + + ; Clean up start menu: Delete all our icons, and the OpenRA folder + ; *only* if we were the only installed version + Delete "$SMPROGRAMS\$StartMenuFolder\${PACKAGING_DISPLAY_NAME}.lnk" + RMDir "$SMPROGRAMS\$StartMenuFolder" + + Delete "$DESKTOP\OpenRA - ${PACKAGING_DISPLAY_NAME}.lnk" + DeleteRegKey HKLM "Software\${PACKAGING_WINDOWS_REGISTRY_KEY}" +FunctionEnd +!macroend + +!insertmacro Clean "" +!insertmacro Clean "un." + +Section "Uninstall" + Call un.Clean +SectionEnd + +;*************************** +;Section Descriptions +;*************************** +LangString DESC_GAME ${LANG_ENGLISH} "${PACKAGING_DISPLAY_NAME} game files." +LangString DESC_DESKTOPSHORTCUT ${LANG_ENGLISH} "Place shortcut on the Desktop." + +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${GAME} $(DESC_GAME) + !insertmacro MUI_DESCRIPTION_TEXT ${DESKTOPSHORTCUT} $(DESC_DESKTOPSHORTCUT) +!insertmacro MUI_FUNCTION_DESCRIPTION_END + +;*************************** +;Callbacks +;*************************** + +Function .onInstFailed + Call Clean +FunctionEnd diff --git a/packaging/windows/buildpackage.sh b/packaging/windows/buildpackage.sh new file mode 100644 index 0000000..52b8eae --- /dev/null +++ b/packaging/windows/buildpackage.sh @@ -0,0 +1,96 @@ +#!/bin/bash +set -e + +command -v curl >/dev/null 2>&1 || { echo >&2 "Windows packaging requires curl."; exit 1; } +command -v makensis >/dev/null 2>&1 || { echo >&2 "Windows packaging requires makensis."; exit 1; } + +if [ $# -eq "0" ]; then + echo "Usage: `basename $0` version [outputdir]" + exit 1 +fi + +PACKAGING_DIR=$(python -c "import os; print(os.path.dirname(os.path.realpath('$0')))") +TEMPLATE_ROOT="${PACKAGING_DIR}/../../" + +# shellcheck source=mod.config +. "${TEMPLATE_ROOT}/mod.config" + +if [ -f "${TEMPLATE_ROOT}/user.config" ]; then + # shellcheck source=user.config + . "${TEMPLATE_ROOT}/user.config" +fi + +if [ "${INCLUDE_DEFAULT_MODS}" = "True" ]; then + echo "Cannot generate installers while INCLUDE_DEFAULT_MODS is enabled." + echo "Make sure that this setting is disabled in both your mod.config and user.config." + exit 1 +fi + +TAG="$1" +if [ $# -eq "1" ]; then + OUTPUTDIR=$(python -c "import os; print(os.path.realpath('.'))") +else + OUTPUTDIR=$(python -c "import os; print(os.path.realpath('$2'))") +fi + +BUILTDIR="${PACKAGING_DIR}/build" + +# Set the working dir to the location of this script +cd "${PACKAGING_DIR}" + +LAUNCHER_LIBS="-r:System.dll -r:System.Drawing.dll -r:System.Windows.Forms.dll -r:${BUILTDIR}/OpenRA.Game.exe" + +echo "Building core files" + +pushd ${TEMPLATE_ROOT} > /dev/null + +if [ ! -f "${ENGINE_DIRECTORY}/Makefile" ]; then + echo "Required engine files not found." + echo "Run \`make\` in the mod directory to fetch and build the required files, then try again."; + exit 1 +fi + +if [ ! -d "${OUTPUTDIR}" ]; then + echo "Output directory '${OUTPUTDIR}' does not exist."; + exit 1 +fi + +make version VERSION="${TAG}" + +pushd ${ENGINE_DIRECTORY} > /dev/null +SRC_DIR="$(pwd)" +make windows-dependencies +make core SDK="-sdk:4.5" +make install-engine gameinstalldir="" DESTDIR="${BUILTDIR}" +make install-common-mod-files gameinstalldir="" DESTDIR="${BUILTDIR}" +popd > /dev/null +popd > /dev/null + +# Add mod files +cp -r "${TEMPLATE_ROOT}/mods/"* "${BUILTDIR}/mods" +cp "mod.ico" "${BUILTDIR}/${MOD_ID}.ico" +cp "${SRC_DIR}/OpenRA.Game.exe.config" "${BUILTDIR}" + +echo "Compiling Windows launcher" +sed "s|DISPLAY_NAME|${PACKAGING_DISPLAY_NAME}|" "${SRC_DIR}/packaging/windows/WindowsLauncher.cs.in" | sed "s|MOD_ID|${MOD_ID}|" | sed "s|FAQ_URL|${PACKAGING_FAQ_URL}|" > "${BUILTDIR}/WindowsLauncher.cs" +mcs -sdk:4.5 "${BUILTDIR}/WindowsLauncher.cs" -warn:4 -codepage:utf8 -warnaserror -out:"${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" -t:winexe ${LAUNCHER_LIBS} -win32icon:"${BUILTDIR}/${MOD_ID}.ico" +rm "${BUILTDIR}/WindowsLauncher.cs" +mono "${SRC_DIR}/fixheader.exe" "${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" > /dev/null + +echo "Building Windows setup.exe" +pushd "${PACKAGING_DIR}" > /dev/null +makensis -V2 -DSRCDIR="${BUILTDIR}" -DDEPSDIR="${SRC_DIR}/thirdparty/download/windows" -DTAG="${TAG}" -DMOD_ID="${MOD_ID}" -DPACKAGING_WINDOWS_INSTALL_DIR_NAME="${PACKAGING_WINDOWS_INSTALL_DIR_NAME}" -DPACKAGING_WINDOWS_LAUNCHER_NAME="${PACKAGING_WINDOWS_LAUNCHER_NAME}" -DPACKAGING_DISPLAY_NAME="${PACKAGING_DISPLAY_NAME}" -DPACKAGING_WEBSITE_URL="${PACKAGING_WEBSITE_URL}" -DPACKAGING_AUTHORS="${PACKAGING_AUTHORS}" -DPACKAGING_WINDOWS_REGISTRY_KEY="${PACKAGING_WINDOWS_REGISTRY_KEY}" buildpackage.nsi +if [ $? -eq 0 ]; then + mv OpenRA.Setup.exe "${OUTPUTDIR}/${PACKAGING_INSTALLER_NAME}-$TAG.exe" +fi +popd > /dev/null + +echo "Packaging zip archive" +pushd "${BUILTDIR}" > /dev/null +find "${SRC_DIR}/thirdparty/download/windows/" -name '*.dll' -exec cp '{}' '.' ';' +zip "${PACKAGING_INSTALLER_NAME}-${TAG}-winportable" -r -9 * --quiet --symlinks +mv "${PACKAGING_INSTALLER_NAME}-${TAG}-winportable.zip" "${OUTPUTDIR}" +popd > /dev/null + +# Cleanup +rm -rf "${BUILTDIR}" diff --git a/packaging/windows/mod.ico b/packaging/windows/mod.ico new file mode 100644 index 0000000..8acff66 Binary files /dev/null and b/packaging/windows/mod.ico differ diff --git a/utility.cmd b/utility.cmd new file mode 100644 index 0000000..500e2e2 --- /dev/null +++ b/utility.cmd @@ -0,0 +1,38 @@ +@echo off + +FOR /F "tokens=1,2 delims==" %%A IN (mod.config) DO (set %%A=%%B) +if exist user.config (FOR /F "tokens=1,2 delims==" %%A IN (user.config) DO (set %%A=%%B)) + +title OpenRA.Utility.exe %MOD_ID% + +set MOD_SEARCH_PATHS=%~dp0mods +if %INCLUDE_DEFAULT_MODS% neq "True" goto start +set MOD_SEARCH_PATHS=%MOD_SEARCH_PATHS%,./mods + +:start +set TEMPLATE_DIR=%CD% +if not exist %ENGINE_DIRECTORY%\OpenRA.Game.exe goto noengine +cd %ENGINE_DIRECTORY% + +:loop +echo. +echo ---------------------------------------- +echo. +echo Enter a utility command or --exit to exit. +echo Press enter to view a list of valid utility commands. +echo. + +set /P command=Please enter a command: OpenRA.Utility.exe %MOD_ID% +if /I "%command%" EQU "--exit" (cd %TEMPLATE_DIR% & exit /b) +echo. +echo ---------------------------------------- +echo. +echo OpenRA.Utility.exe %MOD_ID% %command% +call OpenRA.Utility.exe %MOD_ID% %command% +goto loop + +:noengine +echo Required engine files not found. +echo Run `make all` in the mod directory to fetch and build the required files, then try again. +pause +exit /b \ No newline at end of file diff --git a/utility.sh b/utility.sh new file mode 100644 index 0000000..ac35531 --- /dev/null +++ b/utility.sh @@ -0,0 +1,37 @@ +#!/bin/sh +# Usage: +# $ ./utility.sh # Launch the OpenRA.Utility with the default mod +# $ Mod="" ./launch-utility.sh # Launch the OpenRA.Utility with a specific mod + +set -e +command -v make >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires make."; exit 1; } +command -v python >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires python."; exit 1; } +command -v mono >/dev/null 2>&1 || { echo >&2 "The OpenRA mod template requires mono."; exit 1; } + +TEMPLATE_LAUNCHER=$(python -c "import os; print(os.path.realpath('$0'))") +TEMPLATE_ROOT=$(dirname "${TEMPLATE_LAUNCHER}") + +# shellcheck source=mod.config +. "${TEMPLATE_ROOT}/mod.config" + +if [ -f "${TEMPLATE_ROOT}/user.config" ]; then + # shellcheck source=user.config + . "${TEMPLATE_ROOT}/user.config" +fi + +MOD_SEARCH_PATHS="${TEMPLATE_ROOT}/mods" +if [ "${INCLUDE_DEFAULT_MODS}" = "True" ]; then + MOD_SEARCH_PATHS="${MOD_SEARCH_PATHS},./mods" +fi + +LAUNCH_MOD="${Mod:-"${MOD_ID}"}" + +cd "${TEMPLATE_ROOT}" +if [ ! -f "${ENGINE_DIRECTORY}/OpenRA.Game.exe" ]; then + echo "Required engine files not found." + echo "Run \`make\` in the mod directory to fetch and build the required files, then try again."; + exit 1 +fi + +cd "${ENGINE_DIRECTORY}" +MOD_SEARCH_PATHS="${MOD_SEARCH_PATHS}" mono --debug OpenRA.Utility.exe "${LAUNCH_MOD}" "$@"