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