diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..b266ecf --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +patreon: wolfylpdc +custom: paypal.me/echaravolar diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb4b68f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# IDE +.idea diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..d330212 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [1.0.0] Initial Release - 29.07.2022 + +- Initial Release diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index b35b8e8..334541c 100644 --- a/README.md +++ b/README.md @@ -1 +1,45 @@ -# tww3-woc-confederation \ No newline at end of file +[![Steam Workshop Subscribers](https://img.shields.io/endpoint?style=for-the-badge&url=https%3A%2F%2Fshieldsio-steam-workshop.jross.me%2F2841939065%2Fsubscriptions-text)](https://steamcommunity.com/sharedfiles/filedetails/?id=2841939065) +[![Steam Workshop Favorites](https://img.shields.io/endpoint?style=for-the-badge&url=https%3A%2F%2Fshieldsio-steam-workshop.jross.me%2F2841939065%2Ffavourites-text)](https://steamcommunity.com/sharedfiles/filedetails/?id=2841939065) + +# Allegiance of the Damned + +[![GitHub release](https://img.shields.io/github/release/msolefonte/tww3-chaos-confederation.svg?style=flat)](https://GitHub.com/msolefonte/tww3-chaos-confederation/releases/) +[![Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dwolfylpdc%26type%3Dpatrons&style=flat)](https://www.patreon.com/wolfylpdc) +[![GitHub license](https://img.shields.io/github/license/msolefonte/tww3-chaos-confederation?style=flat)](https://github.com/msolefonte/tww3-chaos-confederation/blob/master/LICENSE) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](http://makeapullrequest.com) + +[Steam Workshop Mod Link](https://steamcommunity.com/sharedfiles/filedetails/?id=2841939065) + +Allegiance of the Damned mod for Total War: Warhammer III. + +## Introduction + +This mod allows Chaos factions to confederate via domination, using the same feature already existent with the +Greenskins. It is designed following loreful rules, so champions can only confederate each other if they follow the same +god. Only exceptions are Archaon, who can confederate all mortal, and Be'lakor and Daniel, who can confederate all +daemons. + +## Contributing + +Feel free to add issues or to create pull requests. Help is always welcome. + +## Versioning + +[SemVer](http://semver.org/) is used for versioning. For the changelog, see [CHANGELOG.md](CHANGELOG.md). + +## Authors + +* **Marc Solé Fonte** - *Initial work* - [msolefonte](https://github.com/msolefonte) + +## License + +This project is licensed under the Apache License, Version 2.0 - see the [LICENSE](LICENSE) file for details. + +## Acknowledgments + +* Special thanks to the **Da Modding Den** community for their knowledge and patience. This would have not not been +possible without them. I resist to give names because you are all amazing <3 +* Special thanks to **Deus** for his help with the texts. +* Special thanks to all the users that have supported the development economically. +* Thanks to all the users that have participated in the beta releases, that have reported bugs and that have contributed +with reports, feelings and new ideas. You keep this alive. diff --git a/dist/wolfy_chaos-confederation.pack b/dist/wolfy_chaos-confederation.pack new file mode 100644 index 0000000..11bdfa4 Binary files /dev/null and b/dist/wolfy_chaos-confederation.pack differ diff --git a/dist/wolfy_chaos-confederation.png b/dist/wolfy_chaos-confederation.png new file mode 100644 index 0000000..b96ed65 Binary files /dev/null and b/dist/wolfy_chaos-confederation.png differ diff --git a/dist/wolfy_chaos-confederation_1.png b/dist/wolfy_chaos-confederation_1.png new file mode 100644 index 0000000..d3143f5 Binary files /dev/null and b/dist/wolfy_chaos-confederation_1.png differ diff --git a/dist/wolfy_chaos_confederation_2.png b/dist/wolfy_chaos_confederation_2.png new file mode 100644 index 0000000..2967fe8 Binary files /dev/null and b/dist/wolfy_chaos_confederation_2.png differ diff --git a/dist/wolfy_chaos_confederation_3.png b/dist/wolfy_chaos_confederation_3.png new file mode 100644 index 0000000..f067779 Binary files /dev/null and b/dist/wolfy_chaos_confederation_3.png differ diff --git a/docs/wolfy_chaos_confederation_1.drawio b/docs/wolfy_chaos_confederation_1.drawio new file mode 100644 index 0000000..1188f6c --- /dev/null +++ b/docs/wolfy_chaos_confederation_1.drawio @@ -0,0 +1 @@ +7Vxbd6o4FP41rrYPZxYQRProdWatTs+Lc65vqaSQMRInxGr76ydAonC80RYIPeKLZueeb++PZO9gBwwXmz8ZXAb31EOkYxnepgNGHcuyDMcSX7HkOZWYhtNNJT7DnpTtBFP8glRBKV1hD0W5gpxSwvEyL5zRMEQznpNBxug6X+yRknyvS+ijPcF0Bsm+9Bv2eJBK3a6xk/+FsB+onk1D5iygKiwFUQA9us6IwLgDhoxSnv5abIaIxKun1iWtNzmSux0YQyEvUmFz++ULceeTnz/ve9/BjIMxWXy6lWPjz2rCyBPzl8mQhuJrwOgq9FDcjCFSlPGA+jSE5G9Kl0JoCuG/iPNniR5ccSpEAV8QmYs2mH+Pq//RlakfmZzRRracJJ5VIuTsOVMpTv7I5u2qJSlV75GGXA7EdGV6SAllyfTAJPkIeTrxeLZH11OKIrpiM3RiEZVeQuYjfqKctUVd2AuiCyTGLeoxRCDHT/lxQKm3/rbcDlrxQ6L7CqSVQbVQ1wE10Aq12UJdH9RdrVBbLdT1Qe3ohBq0UNf5rLa1mnXa7hMkK9lTx3IIl0uUUwLnvxVVGZ+iZDH7ooDpLjfJyqn8ZI+slnYnBI/JJyty/Ph7BNGChpGoRkWuMQwgjdQgHpgqdT2CIU72/B0r7mKArgicU3YjCsCF0LhB+BAt02Z/qaokYoHSSSnxL0qe1+h1gDmaLmEC8locOvLa+4gJyWhQ+tm2+oQYR5vTOrQPuazgqJ29Osqojf16dy6wbCkLsmcCVbB0NbHcxlJCUdOOhCXyfnxQExkzAqMIz5R4gokaQokMYBVlAOOwOtTDANY5BihozAeYYt/WVdPREoZvJJeDpPF5xXzR0s7Q0w7yne4zwruHcX23uvLj87eipXscUnZmHO/u9ebVE62S+npjd2CPElNidI4yOfbIAaBbDinaeU4Ejn5OvFyXRv1cCopy6REtqmnn/Dtw6V1AWaiDS6dzyB4YDL39Ld2WWjVT3x7FOdAwjAOk6LrAttxyqA9YjeM+cLk+PhR6+8wnhBneq58eu0XpUatnuFsdPb6R66YEwhBFwSvo4wzbySnEg2D+w7XVFZMWq2Vkf9yksyhMjJ+v7iDD5ewxKxjfOU6uDVw9+9+Bc9sf9g4+HFzbcY1yHgKu27yHwOV6/+tneKcow2sNCDmNY/h/XpBY61nDGf4OYhZ7PVuGbyLD22ZvMugfZHjHMIbDchjeNJ3GUbwJTlL8js3HO+lgtmJPyUqb5dJ/7w38b+bYXzbRrEBRYTexTmI3u60iVK0IRX1ceq989FpFqFoRip7m9V4IOR0SbBWhxk2/1usiavPxwbze90LhINEfQZygiK+iMx23IcP3hwy7+rfTag4HTKXO49xW9Q/fnKnqkFehMesNXH2FZI5hG5pqho0dv9ByATb2KoP5GNGP/gt8yVz8m2JfQOu13rGmeMf0xD+awDTHr3u0TJNnmo/hhf+KCc4MsqUW3dSiyfHeBG6xzx2qq7+YL/bTBM31IF/lfXpbP7zgdFyl2tD51iX2rvv0Jbq5rMLBba3vygC7saAdu++w9XE2x6dZHGytr0WA0wGvFuySwdZ7b9tpwa4TbK2hbHA6gtmCXTLYWsPV1tkbadXvo79BhunZ91v7bCZywgt4n9U1Ktx/i+Tun26SvMwfBoHx/w== \ No newline at end of file diff --git a/docs/wolfy_chaos_confederation_2.drawio b/docs/wolfy_chaos_confederation_2.drawio new file mode 100644 index 0000000..036cac7 --- /dev/null +++ b/docs/wolfy_chaos_confederation_2.drawio @@ -0,0 +1 @@ +7Vxbc6s2EP41niQPpwMIY/LoS9zOpDnTGfdc3xSjgGoZuUKO7fz6CpBsOL7hBBBp8Iut1V3f6kPaXdwBw/n6dwYXwQP1EOlYhrfugFHHsizDscRXLNmkEtNwuqnEZ9iTsp1ggl+QKiilS+yhKFeQU0o4XuSFUxqGaMpzMsgYXeWLPVGS73UBfbQnmEwh2Zd+wx4PUqnbNXbyPxD2A9WzacicOVSFpSAKoEdXGRG464Aho5Snv+brISLx6ql1SeuNj+RuB8ZQyItUWN9++ULc2fjnz4fedzDl4I7MP93KsfGNmjDyxPxlMqSh+Bowugw9FDdjiBRlPKA+DSH5k9KFEJpC+A/ifCPRg0tOhSjgcyJz0Rrz73H137oy9SOTM1rLlpPERiVCzjaZSnHyRzZvVy1JqXpPNORyIKYr00NKKEumB8bJR8jTicezPbqeUhTRJZuiE4uo9BIyH/ET5awt6mK/IDpHYtyiHkMEcvycHweUeutvy+2gFT8kuhcgrTZUC3UdUAOtUJst1PVB3dUKtdVCXR/Ujk6oQQt1nc9qW+u2Ttt9hmQpe+pYDuFyiXJK4Py7pCrjU5QsZl8UMN3FOlk5lZ+ckdXS7oTgKflkRY4ff48gmtMwEtWoyDWGAaSRGsQjU6WuRzDEyZm/Y8VdDNAVgTPKbkQBOBcaNwgfo0Xa7C9VlUQsUDopJf5FyfMavQowR5MFTEBeiUtHXnufMCEZDUo/21afEeNofVqH9iGXFRx1sldXGXWwX+3uBZYtZUH2TqAKlq4mlttYSii6tSOxE3k/vqiJjCmBUYSnSjzGRA2hRAawijKAcVgd6mEA6xwDFNzMB5hif6+rpqMFDF9JLgdJ4/OS+aKl3UZPO8h3us8Ibx7G9f3yyo/v34qWHnBI2ZlxvLnXm4snWiX19e7cgT1KthKjM5TJsUcOAN1ySNHOcyJw9HPixzVp1M+loCiXHtGimk7O/wcuvQ8oC3Vw6WQG2SODobd/pNtSq2bq26M4BxqGcYAUXRfYllsO9QGrcdwHPq6ND4XePvMJYYb36qfHblF61GoZ7lZHj6/kugmBMERRcAF9nGE7OYV4EMx/vLa6YtJitYzsj5t0FoWJ8fPVPWS4nDNmBeM7x8m1gavn/DtwbvvD3sGHg2s7rlHOQ8B1m/cQ+LjW//oZ3inK8FodQk7jGP7vFyTWetpwhr+HmMVWz5bhm8jwttkbD/oHGd4xjOGwHIY3TadxFG+CkxS/Y/O7nXQwXbLnZKXNcum/9wr+N3PsL5tolqOosJlYJ7Gb3VYRqlaEojYuvSEfvVYRqlaEord5vQEhp12CrSLUeOjXGi6iDh/vzOr9IBQOEv0exDGK+DI603HrMny7y7Cr/zit5nBgq9R5nduq/uHImaoueRVuZr2Oq6+QzDBsXVPN2GPHA1o+wB67aMO8D+9H/wW+ZAL/JtgX0Hqtdawp1jE9/o8mMM3xcI+WafJM8z6s8F8xwZlBttSim1o0Gd6bwC32uUt19YH54jxN0EwP8lXG09v64QWn/SrVus63JrE3xdOXaOayCju3tb4rA+zGgnYs3mFr42yOTbM42FpfiwCnHV4t2CWDrTdu22nBrhNsra5scNqD2YJdMtha3dXW2Yi06s/R3yDD9Oz7rX02FTnhB3if1TX0n79Pv7v17pzXjtM7QxFJ6i/EsFhAxC7kjVy4qyTIbKxr2sHZ9yLKpB9L87NGJHf/qJTkZf6YCtz9Bw== \ No newline at end of file diff --git a/src/LICENSE.txt b/src/LICENSE.txt new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/src/LICENSE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/src/db/campaign_payload_ui_details_tables/wolfy_chaos_confederation b/src/db/campaign_payload_ui_details_tables/wolfy_chaos_confederation new file mode 100644 index 0000000..ecf3017 Binary files /dev/null and b/src/db/campaign_payload_ui_details_tables/wolfy_chaos_confederation differ diff --git a/src/db/cdir_events_dilemma_choice_details_tables/wolfy_chaos_confederation b/src/db/cdir_events_dilemma_choice_details_tables/wolfy_chaos_confederation new file mode 100644 index 0000000..b7d3009 Binary files /dev/null and b/src/db/cdir_events_dilemma_choice_details_tables/wolfy_chaos_confederation differ diff --git a/src/db/cdir_events_dilemma_option_junctions_tables/wolfy_chaos_confederation b/src/db/cdir_events_dilemma_option_junctions_tables/wolfy_chaos_confederation new file mode 100644 index 0000000..4e50401 Binary files /dev/null and b/src/db/cdir_events_dilemma_option_junctions_tables/wolfy_chaos_confederation differ diff --git a/src/db/cdir_events_dilemma_payloads_tables/wolfy_chaos_confederation b/src/db/cdir_events_dilemma_payloads_tables/wolfy_chaos_confederation new file mode 100644 index 0000000..d627d7e Binary files /dev/null and b/src/db/cdir_events_dilemma_payloads_tables/wolfy_chaos_confederation differ diff --git a/src/db/dilemmas_tables/wolfy_roc_confederation b/src/db/dilemmas_tables/wolfy_roc_confederation new file mode 100644 index 0000000..f6e6f49 Binary files /dev/null and b/src/db/dilemmas_tables/wolfy_roc_confederation differ diff --git a/src/script/campaign/mod/wolfy_chaos_confederation.lua b/src/script/campaign/mod/wolfy_chaos_confederation.lua new file mode 100644 index 0000000..b654738 --- /dev/null +++ b/src/script/campaign/mod/wolfy_chaos_confederation.lua @@ -0,0 +1,358 @@ +local debug_mode = false; -- TODO Always set to false for production +local wcc = { + confederable_legendary_lords = { + wh_dlc01_chs_kholek_suneater = true, + wh_dlc01_chs_prince_sigvald = true, + placeholder_azazel = true, -- TODO + placeholder_festus = true, -- TODO + placeholder_vilitch = true, -- TODO + placeholder_valkia = true, -- TODO + wh3_main_nur_kugath = true, + wh3_main_sla_nkari = true, + wh3_main_tze_kairos = true, + wh3_main_kho_skarbrand = true + }, + dilemma_execution_option = 1, + dilemma_key = "wolfy_roc_confederation_generic", + dilemma_key_lls = "wolfy_roc_confederation_generic_no_execution", + enable_minor_factions = true; + valid_factions = { + placeholder_archaon_faction = { + "placeholder_festus_faction", + "placeholder_azazel_faction", + "placeholder_sigvald_faction", + "placeholder_kholek_faction", + "placeholder_valkia_faction", + "placeholder_vilitch_faction" + }, + placeholder_festus_faction = { + "wh3_main_nur_poxmakers_of_nurgle" + }, + placeholder_azazel_faction = { + "wh3_main_sla_seducers_of_slaanesh", + "placeholder_sigvald_faction" + }, + placeholder_sigvald_faction = { + "wh3_main_sla_seducers_of_slaanesh", + "placeholder_azazel_faction" + }, + placeholder_valkia_faction = { + "wh3_main_kho_exiles_of_khorne" + }, + placeholder_vilitch_faction = { + "wh3_main_tze_oracles_of_tzeentch" + }, + wh3_main_nur_poxmakers_of_nurgle = { + "placeholder_festus_faction" + }, + wh3_main_sla_seducers_of_slaanesh = { + "placeholder_azazel_faction", + "placeholder_sigvald_faction" + }, + wh3_main_kho_exiles_of_khorne = { + "placeholder_valkia_faction" + }, + wh3_main_tze_oracles_of_tzeentch = { + "placeholder_vilitch_faction" + }, + placeholder_belakor_faction = { + "wh3_main_nur_poxmakers_of_nurgle", + "wh3_main_sla_seducers_of_slaanesh", + "placeholder_kholek_faction", + "wh3_main_kho_exiles_of_khorne", + "wh3_main_tze_oracles_of_tzeentch" + }, + wh3_main_dae_daemon_prince = { + "wh3_main_nur_poxmakers_of_nurgle", + "wh3_main_sla_seducers_of_slaanesh", + "placeholder_kholek_faction", + "wh3_main_kho_exiles_of_khorne", + "wh3_main_tze_oracles_of_tzeentch" + } + }, + valid_races = { + "wh_main_chs_chaos", + "wh3_main_dae_daemons", + "wh3_main_kho_khorne", + "wh3_main_nur_nurgle", + "wh3_main_sla_slaanesh", + "wh3_main_tze_tzeentch" + } +} + +function wcc.load_minor_factions() + out("WCC Loading Minor Factions"); + local function table_concat(t1,t2) + for i=1,#t2 do + t1[#t1+1] = t2[i]; + end + return t1; + end + + local minor_khorne = { + "wh3_main_kho_brazen_throne", + "wh3_main_kho_crimson_skull", + "wh3_main_kho_karneths_sons" + }; + local minor_nurgle = { + "wh3_main_nur_bubonic_swarm", + "wh3_main_nur_maggoth_kin", + "wh3_main_nur_septic_claw" + }; + local minor_slaanesh = { + "wh3_main_sla_exquisite_pain", + "wh3_main_sla_rapturous_excess", + "wh3_main_sla_subtle_torture" + }; + local minor_tzeentch = { + "wh3_main_tze_all_seeing_eye", + "wh3_main_tze_broken_wheel", + "wh3_main_tze_flaming_scribes", + "wh3_main_tze_sarthoraels_watchers" + }; + + wcc.valid_factions["wh3_main_kho_exiles_of_khorne"] = table_concat( + wcc.valid_factions["wh3_main_nur_poxmakers_of_nurgle"], + minor_khorne + ); + + wcc.valid_factions["placeholder_valkia_faction"] = table_concat( + wcc.valid_factions["placeholder_valkia_faction"], + minor_khorne + ); + + wcc.valid_factions["wh3_main_nur_poxmakers_of_nurgle"] = table_concat( + wcc.valid_factions["wh3_main_nur_poxmakers_of_nurgle"], + minor_nurgle + ); + + wcc.valid_factions["placeholder_festus_faction"] = table_concat( + wcc.valid_factions["placeholder_festus_faction"], + minor_nurgle + ); + + wcc.valid_factions["wh3_main_sla_seducers_of_slaanesh"] = table_concat( + wcc.valid_factions["wh3_main_nur_poxmakers_of_nurgle"], + minor_slaanesh + ); + + wcc.valid_factions["placeholder_azazel_faction"] = table_concat( + wcc.valid_factions["placeholder_azazel_faction"], + minor_slaanesh + ); + + wcc.valid_factions["placeholder_sigvald_faction"] = table_concat( + wcc.valid_factions["placeholder_sigvald_faction"], + minor_slaanesh + ); + + wcc.valid_factions["wh3_main_tze_oracles_of_tzeentch"] = table_concat( + wcc.valid_factions["wh3_main_nur_poxmakers_of_nurgle"], + minor_tzeentch + ); + + wcc.valid_factions["placeholder_vilitch_faction"] = table_concat( + wcc.valid_factions["placeholder_vilitch_faction"], + minor_tzeentch + ); + + wcc.valid_factions["placeholder_belakor_faction"] = table_concat( + wcc.valid_factions["placeholder_belakor_faction"], + table_concat(minor_khorne, + table_concat(minor_nurgle, + table_concat(minor_slaanesh, minor_tzeentch) + ) + ) + ); + + wcc.valid_factions["wh3_main_dae_daemon_prince"] = table_concat( + wcc.valid_factions["wh3_main_dae_daemon_prince"], + table_concat(minor_khorne, + table_concat(minor_nurgle, + table_concat(minor_slaanesh, minor_tzeentch) + ) + ) + ); +end + +function wcc.load_minor_factions_if_required() + if get_mct then + local mct = get_mct(); + + if mct ~= nil then + out("WCC Loading config from MCT"); + local mod_cfg = mct:get_mod_by_key("wolfy_chaos_confederation"); + wcc.enable_minor_factions = mod_cfg:get_option_by_key("wcc_enable_minor_factions"):get_finalized_setting(); + end + end + + out("WCC Check if Minor Factions are enabled"); + if wcc.enable_minor_factions then + wcc.load_minor_factions(); + end +end + +function wcc.check_attacker_and_defender_races_are_valid() + out("WCC Check attacker and defender races are valid IN"); + if debug_mode then + return true; + end + + local attacker_valid = false; + local defender_valid = false; + + for _, race in ipairs(wcc.valid_races) do + if cm:pending_battle_cache_culture_is_attacker(race) then + out("WCC Valid attacker race: " .. race); + attacker_valid = true; + end + if cm:pending_battle_cache_culture_is_defender(race) then + out("WCC Valid defender race: " .. race); + defender_valid = true; + end + end + + out("WCC Check attacker and defender races are valid OUT"); + return attacker_valid and defender_valid; +end + +function wcc.check_if_confederation_is_possible(victorious_character_faction_name, defeated_character) + out("WCC Check if a confederation is possible IN"); + if defeated_character:is_faction_leader() then + if debug_mode then + return true; + end + + wcc.load_minor_factions_if_required(); + + local valid_factions = wcc.valid_factions[victorious_character_faction_name] + if valid_factions ~= nil then + for _, valid_faction in ipairs(valid_factions) do + if defeated_character:faction():name() == valid_faction then + out("WCC Confederation valid: " .. valid_faction .. " -> " .. victorious_character_faction_name); + out("WCC Check attacker and defender factions are valid OUT"); + return true; + end + end + end + end + out("WCC Check if a confederation is possible OUT"); + return false; +end + +function wcc.force_kill_leader(enemy_leader_family_member_key) + local character_interface = cm:get_family_member_by_cqi(enemy_leader_family_member_key):character(); + local character_cqi = character_interface:command_queue_index(); + + if wcc.confederable_legendary_lords[character_interface:character_subtype_key()] then + script_error(string.format("ERROR: WCC Attempt was made to force-kill one of the legendary lords ('%s'): this should not be possible through events, as legendary lords should trigger a confederation dilemma with no execution option. Aborting process.", + character_interface:character_subtype_key())); + return; + end + out("WCC KILLING CHARACTER: " .. character_interface:get_forename()); + cm:set_character_immortality("character_cqi:"..character_cqi, false); + cm:kill_character(character_cqi, false); +end + +function wcc.listen_for_execution_of_lord(enemy_leader_family_member_key) + core:add_listener( + "wcc_dilemma_choice_made_event", + "DilemmaChoiceMadeEvent", + true, + function(context) + if cm:model():difficulty_level() == -3 and not cm:is_multiplayer() then -- Auto save on legendary + cm:callback(function() cm:autosave_at_next_opportunity() end, 0.5); + end; + + if context:dilemma() == wcc.dilemma_key and context:choice() == wcc.dilemma_execution_option then + wcc.force_kill_leader(enemy_leader_family_member_key); + end + end, + false + ); +end + +function wcc.attempt_to_launch_confederate_dilemma(victorious_character_faction, defeated_character) + if wcc.check_if_confederation_is_possible(victorious_character_faction:name(), defeated_character) then + if victorious_character_faction:is_human() then + local confederate_dilemma_key = wcc.confederate_dilemma_key; + if wcc.confederable_legendary_lords[defeated_character:character_subtype_key()] ~= nil then + confederate_dilemma_key = wcc.dilemma_key_lls; + end + + cm:trigger_dilemma_with_targets(victorious_character_faction:command_queue_index(), + confederate_dilemma_key, + defeated_character:faction():command_queue_index(), + 0, + defeated_character:command_queue_index(), + 0, + 0, + 0, + function() wcc.listen_for_execution_of_lord(defeated_character:family_member():command_queue_index()) end); + else + cm:force_confederation(victorious_character_faction:name(), defeated_character:faction():name()); + out.design("###### WCC AI CONFEDERATION"); + out.design("WCC Faction: ".. victorious_character_faction:name().." is confederating ".. defeated_character:faction():name()); + end + end +end + +function main() + out("WCC LOADED"); + + core:add_listener( + "wcc_character_completed_battle_chaos_confederation_dilemma", + "BattleCompleted", + true, + function(context) + if not wcc.check_attacker_and_defender_races_are_valid() then + return; + end + + local victorious_character; + if cm:pending_battle_cache_attacker_victory() then + victorious_character = cm:get_character_by_cqi(cm:pending_battle_cache_get_attacker(1)); + elseif cm:pending_battle_cache_defender_victory() then + victorious_character = cm:get_character_by_cqi(cm:pending_battle_cache_get_defender(1)); + elseif cm:model():pending_battle():has_been_fought() then + script_error("ERROR: WCC Attempted to get victorious character in most recent battle when trying to fire Chaos Confederation event, but the battle was neither an attacker nor a defender victory. This is unhandled."); + return; + else + -- Likely a retreat. + return; + end + + -- We have to get the enemies using family members, instead of character interfaces. + -- This is because a lot of the enemies may have just died and respawned, in which case their character CQIs will have changed. + local enemies = cm:pending_battle_cache_get_enemy_fms_of_char_fm(victorious_character:family_member()); + local enemy_count = #enemies; + + if cm:model():pending_battle():night_battle() == true or cm:model():pending_battle():ambush_battle() == true then + enemy_count = 1; + end + + for i = 1, enemy_count do + local enemy_fm = enemies[i]; + local enemy_char = enemy_fm:character(); + + local custom_character_context = custom_context:new(); + if not enemy_char:is_null_interface() then + custom_character_context:add_data(enemy_char); + end + + if enemy_fm:character_details():is_immortal() then + cm:progress_on_event( + "wcc_chaos_leader_respawned", + "CharacterCreated", + function(context) return context.character and not context:character():is_null_interface() end, + function(context) wcc.attempt_to_launch_confederate_dilemma(victorious_character:faction(), context:character()) end, + custom_character_context + ); + end + end + end, + true + ); +end + +main(); diff --git a/src/script/mct/settings/wolfy_chaos_confederation.lua b/src/script/mct/settings/wolfy_chaos_confederation.lua new file mode 100644 index 0000000..e2194fd --- /dev/null +++ b/src/script/mct/settings/wolfy_chaos_confederation.lua @@ -0,0 +1,14 @@ +if not get_mct then return end +local mct = get_mct(); + +if not mct then return end +local mct_mod = mct:register_mod("wolfy_chaos_confederation"); + +mct_mod:set_title("Allegiance of the Damned"); +mct_mod:set_author("Wolfy"); +mct_mod:set_description("Allow Chaos factions to confederate via imposition following loreful rules."); + +local wcc_enable_minor_factions = mct_mod:add_new_option("wcc_enable_minor_factions", "checkbox"); +wcc_enable_minor_factions:set_default_value(true); +wcc_enable_minor_factions:set_text("Enable Minor Factions"); +wcc_enable_minor_factions:set_tooltip_text("Enable if you want minor factions to be confederable"); \ No newline at end of file diff --git a/src/text/db/wolfy_chaos_confederation.loc b/src/text/db/wolfy_chaos_confederation.loc new file mode 100644 index 0000000..0ec270a Binary files /dev/null and b/src/text/db/wolfy_chaos_confederation.loc differ