Compare commits

...

16 Commits

Author SHA1 Message Date
zhexu14
ef8eeeb1f1 Update README.md due to changes in URLs 2024-03-05 21:45:23 +11:00
Starfire13
e42a7b9a59 Remove squadrons from Nevatim in Exercise Bright Star (#3345)
This is a (potentially) temporary modification for Exercise Bright Star
that moves one of its squadrons to Hatzerim and disables the other two.
The reason is because Nevatim is currently bugged and only 11 out of its
120 airfield parking spots are usable. You can place aircraft into the
other parking spots in the mission editor but they will all explode upon
entering the mission.
2024-02-28 20:35:03 +11:00
Starfire13
24c9ca5d12 Add FCR to the Apache Blk II's new loadout slot (#3343)
The Apache Blk II now has a dedicated loadout slot for the CFR, rather
than it being set by a checkbox in the mission editor. This PR updates
the loadouts for that new slot.

This PR should not be merged until Liberation/pydcs has been updated to
support the change.
2024-02-24 16:25:25 +11:00
zhexu14
678dd58e7d Update pydcs version for DCS 2.9.3.51704 (#3344)
- Updates pydcs version for DCS 2.9.3.51704
- Removes AH-64 FCR/RFI default override, which does not exist any more.
- Update custom payloads for SA342L/M due to changes to CLSIDs. SA342
Minigun payloads also updated but not tested as the unit type does not
have any tasks assigned.

This PR is missing updates to the AH-64 payloads, so this PR complements
#3343
2024-02-24 16:22:54 +11:00
zhexu14
d6879040ad Fix syntax error in tripoint_hostility.yaml campaign definition (#3341)
This PR fixes a minor syntax error in tripoint_hostility.yaml that was
preventing the New Game Wizard from opening successfully.
2024-02-21 20:47:40 +11:00
Starfire13
d0be4b6a29 Update Vectron's Claw (#3339)
Modernises Vectron's Claw, which is my oldest campaign and is getting a
little outdated.
2024-02-21 20:47:10 +11:00
dependabot[bot]
0d71372377 Bump jinja2 from 3.1.2 to 3.1.3 (#3327)
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.2 to 3.1.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/releases">jinja2's
releases</a>.</em></p>
<blockquote>
<h2>3.1.3</h2>
<p>This is a fix release for the 3.1.x feature branch.</p>
<ul>
<li>Fix for <a
href="https://github.com/pallets/jinja/security/advisories/GHSA-h5c8-rqwp-cp95">GHSA-h5c8-rqwp-cp95</a>.
You are affected if you are using <code>xmlattr</code> and passing user
input as attribute keys.</li>
<li>Changes: <a
href="https://jinja.palletsprojects.com/en/3.1.x/changes/#version-3-1-3">https://jinja.palletsprojects.com/en/3.1.x/changes/#version-3-1-3</a></li>
<li>Milestone: <a
href="https://github.com/pallets/jinja/milestone/15?closed=1">https://github.com/pallets/jinja/milestone/15?closed=1</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/blob/main/CHANGES.rst">jinja2's
changelog</a>.</em></p>
<blockquote>
<h2>Version 3.1.3</h2>
<p>Released 2024-01-10</p>
<ul>
<li>Fix compiler error when checking if required blocks in parent
templates are
empty. :pr:<code>1858</code></li>
<li><code>xmlattr</code> filter does not allow keys with spaces.
GHSA-h5c8-rqwp-cp95</li>
<li>Make error messages stemming from invalid nesting of <code>{% trans
%}</code> blocks
more helpful. :pr:<code>1918</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d9de4bb215"><code>d9de4bb</code></a>
release version 3.1.3</li>
<li><a
href="50124e1656"><code>50124e1</code></a>
skip test pypi</li>
<li><a
href="9ea7222ef3"><code>9ea7222</code></a>
use trusted publishing</li>
<li><a
href="da703f7aae"><code>da703f7</code></a>
use trusted publishing</li>
<li><a
href="bce1746925"><code>bce1746</code></a>
use trusted publishing</li>
<li><a
href="7277d8068b"><code>7277d80</code></a>
update pre-commit hooks</li>
<li><a
href="5c8a105224"><code>5c8a105</code></a>
Make nested-trans-block exceptions nicer (<a
href="https://redirect.github.com/pallets/jinja/issues/1918">#1918</a>)</li>
<li><a
href="19a55db3b4"><code>19a55db</code></a>
Make nested-trans-block exceptions nicer</li>
<li><a
href="716795349a"><code>7167953</code></a>
Merge pull request from GHSA-h5c8-rqwp-cp95</li>
<li><a
href="7dd3680e6e"><code>7dd3680</code></a>
xmlattr filter disallows keys with spaces</li>
<li>Additional commits viewable in <a
href="https://github.com/pallets/jinja/compare/3.1.2...3.1.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jinja2&package-manager=pip&previous-version=3.1.2&new-version=3.1.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

You can trigger a rebase of this PR by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

> **Note**
> Automatic rebases have been disabled on this pull request as it has
been open for over 30 days.

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-20 22:55:03 +11:00
dependabot[bot]
86de5df21e Bump pillow from 10.0.1 to 10.2.0 (#3330)
Bumps [pillow](https://github.com/python-pillow/Pillow) from 10.0.1 to
10.2.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/python-pillow/Pillow/releases">pillow's
releases</a>.</em></p>
<blockquote>
<h2>10.2.0</h2>
<p><a
href="https://pillow.readthedocs.io/en/stable/releasenotes/10.2.0.html">https://pillow.readthedocs.io/en/stable/releasenotes/10.2.0.html</a></p>
<h2>Changes</h2>
<ul>
<li>Add <code>keep_rgb</code> option when saving JPEG to prevent
conversion of RGB colorspace <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7553">#7553</a>
[<a href="https://github.com/bgilbert"><code>@​bgilbert</code></a>]</li>
<li>Trim negative glyph offsets in ImageFont.getmask() <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7672">#7672</a>
[<a href="https://github.com/nulano"><code>@​nulano</code></a>]</li>
<li>Removed unnecessary &quot;pragma: no cover&quot; <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7668">#7668</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Trim glyph size in ImageFont.getmask() <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7669">#7669</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Fix loading IPTC images and update test <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7667">#7667</a>
[<a href="https://github.com/nulano"><code>@​nulano</code></a>]</li>
<li>Allow uncompressed TIFF images to be saved in chunks <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7650">#7650</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Concatenate multiple JPEG EXIF markers <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7496">#7496</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Changed IPTC tile tuple to match other plugins <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7661">#7661</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Do not assign new fp attribute when exiting context manager <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7566">#7566</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Support arbitrary masks for uncompressed RGB DDS images <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7589">#7589</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Support setting ROWSPERSTRIP tag <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7654">#7654</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Apply ImageFont.MAX_STRING_LENGTH to ImageFont.getmask() <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7662">#7662</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Optimise <code>ImageColor</code> using
<code>functools.lru_cache</code> <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7657">#7657</a>
[<a href="https://github.com/hugovk"><code>@​hugovk</code></a>]</li>
<li>Restricted environment keys for ImageMath.eval() <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7655">#7655</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Optimise <code>ImageMode.getmode</code> using
<code>functools.lru_cache</code> <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7641">#7641</a>
[<a href="https://github.com/hugovk"><code>@​hugovk</code></a>]</li>
<li>Added trusted PyPI publishing <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7616">#7616</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Compile FriBiDi for Windows ARM64 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7629">#7629</a>
[<a href="https://github.com/nulano"><code>@​nulano</code></a>]</li>
<li>Fix incorrect color blending for overlapping glyphs <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7497">#7497</a>
[<a
href="https://github.com/ZachNagengast"><code>@​ZachNagengast</code></a>]</li>
<li>Add .git-blame-ignore-revs file <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7528">#7528</a>
[<a href="https://github.com/akx"><code>@​akx</code></a>]</li>
<li>Attempt memory mapping when tile args is a string <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7565">#7565</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Fill identical pixels with transparency in subsequent frames when
saving GIF <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7568">#7568</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Removed unnecessary string length check <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7560">#7560</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Determine mask mode in Python instead of C <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7548">#7548</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Corrected duration when combining multiple GIF frames into single
frame <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7521">#7521</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Handle disposing GIF background from outside palette <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7515">#7515</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Seek past the data when skipping a PSD layer <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7483">#7483</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>ImageMath: Inline <code>isinstance</code> check <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7623">#7623</a>
[<a href="https://github.com/hugovk"><code>@​hugovk</code></a>]</li>
<li>Update actions/upload-artifact action to v4 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7619">#7619</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Import plugins relative to the module <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7576">#7576</a>
[<a
href="https://github.com/deliangyang"><code>@​deliangyang</code></a>]</li>
<li>Translate encoder error codes to strings; deprecate
<code>ImageFile.raise_oserror()</code> <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7609">#7609</a>
[<a href="https://github.com/bgilbert"><code>@​bgilbert</code></a>]</li>
<li>Updated readthedocs to latest version of Python <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7611">#7611</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Support reading BC4U and DX10 BC1 images <a
href="https://redirect.github.com/python-pillow/Pillow/issues/6486">#6486</a>
[<a href="https://github.com/REDxEYE"><code>@​REDxEYE</code></a>]</li>
<li>Optimize ImageStat.Stat.extrema <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7593">#7593</a>
[<a href="https://github.com/florath"><code>@​florath</code></a>]</li>
<li>Handle pathlib.Path in FreeTypeFont <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7578">#7578</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Use list comprehensions to create transformed lists <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7597">#7597</a>
[<a href="https://github.com/hugovk"><code>@​hugovk</code></a>]</li>
<li>Added support for reading DX10 BC4 DDS images <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7603">#7603</a>
[<a href="https://github.com/sambvfx"><code>@​sambvfx</code></a>]</li>
<li>Optimized ImageStat.Stat.count <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7599">#7599</a>
[<a href="https://github.com/florath"><code>@​florath</code></a>]</li>
<li>Moved error from truetype() to FreeTypeFont <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7587">#7587</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Correct PDF palette size when saving <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7555">#7555</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Fixed closing file pointer with olefile 0.47 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7594">#7594</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>ruff: Minor optimizations of list comprehensions, x in set, etc. <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7524">#7524</a>
[<a href="https://github.com/cclauss"><code>@​cclauss</code></a>]</li>
<li>Build Windows wheels using cibuildwheel <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7580">#7580</a>
[<a href="https://github.com/nulano"><code>@​nulano</code></a>]</li>
<li>Raise ValueError when TrueType font size is zero or less <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7584">#7584</a>
[<a href="https://github.com/akx"><code>@​akx</code></a>]</li>
<li>Install cibuildwheel from requirements file <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7581">#7581</a>
[<a href="https://github.com/hugovk"><code>@​hugovk</code></a>]</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst">pillow's
changelog</a>.</em></p>
<blockquote>
<h2>10.2.0 (2024-01-02)</h2>
<ul>
<li>
<p>Add <code>keep_rgb</code> option when saving JPEG to prevent
conversion of RGB colorspace <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7553">#7553</a>
[bgilbert, radarhere]</p>
</li>
<li>
<p>Trim glyph size in ImageFont.getmask() <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7669">#7669</a>,
<a
href="https://redirect.github.com/python-pillow/Pillow/issues/7672">#7672</a>
[radarhere, nulano]</p>
</li>
<li>
<p>Deprecate IptcImagePlugin helpers <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7664">#7664</a>
[nulano, hugovk, radarhere]</p>
</li>
<li>
<p>Allow uncompressed TIFF images to be saved in chunks <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7650">#7650</a>
[radarhere]</p>
</li>
<li>
<p>Concatenate multiple JPEG EXIF markers <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7496">#7496</a>
[radarhere]</p>
</li>
<li>
<p>Changed IPTC tile tuple to match other plugins <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7661">#7661</a>
[radarhere]</p>
</li>
<li>
<p>Do not assign new fp attribute when exiting context manager <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7566">#7566</a>
[radarhere]</p>
</li>
<li>
<p>Support arbitrary masks for uncompressed RGB DDS images <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7589">#7589</a>
[radarhere, akx]</p>
</li>
<li>
<p>Support setting ROWSPERSTRIP tag <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7654">#7654</a>
[radarhere]</p>
</li>
<li>
<p>Apply ImageFont.MAX_STRING_LENGTH to ImageFont.getmask() <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7662">#7662</a>
[radarhere]</p>
</li>
<li>
<p>Optimise <code>ImageColor</code> using
<code>functools.lru_cache</code> <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7657">#7657</a>
[hugovk]</p>
</li>
<li>
<p>Restricted environment keys for ImageMath.eval() <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7655">#7655</a>
[wiredfool, radarhere]</p>
</li>
<li>
<p>Optimise <code>ImageMode.getmode</code> using
<code>functools.lru_cache</code> <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7641">#7641</a>
[hugovk, radarhere]</p>
</li>
<li>
<p>Fix incorrect color blending for overlapping glyphs <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7497">#7497</a>
[ZachNagengast, nulano, radarhere]</p>
</li>
<li>
<p>Attempt memory mapping when tile args is a string <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7565">#7565</a>
[radarhere]</p>
</li>
<li>
<p>Fill identical pixels with transparency in subsequent frames when
saving GIF <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7568">#7568</a>
[radarhere]</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6956d0b285"><code>6956d0b</code></a>
10.2.0 version bump</li>
<li><a
href="31c8dacdc7"><code>31c8dac</code></a>
Merge pull request <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7675">#7675</a>
from python-pillow/pre-commit-ci-update-config</li>
<li><a
href="40a3f91af2"><code>40a3f91</code></a>
Merge pull request <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7674">#7674</a>
from nulano/url-example</li>
<li><a
href="cb41b0cc78"><code>cb41b0c</code></a>
[pre-commit.ci] pre-commit autoupdate</li>
<li><a
href="de62b25ed3"><code>de62b25</code></a>
fix image url in &quot;Reading from URL&quot; example</li>
<li><a
href="7c526a6c6b"><code>7c526a6</code></a>
Update CHANGES.rst [ci skip]</li>
<li><a
href="d93a5ad70b"><code>d93a5ad</code></a>
Merge pull request <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7553">#7553</a>
from bgilbert/jpeg-rgb</li>
<li><a
href="aed764fe84"><code>aed764f</code></a>
Update CHANGES.rst [ci skip]</li>
<li><a
href="f8df5303fa"><code>f8df530</code></a>
Merge pull request <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7672">#7672</a>
from nulano/imagefont-negative-crop</li>
<li><a
href="24e9485e6b"><code>24e9485</code></a>
Merge pull request <a
href="https://redirect.github.com/python-pillow/Pillow/issues/7671">#7671</a>
from radarhere/imagetransform</li>
<li>Additional commits viewable in <a
href="https://github.com/python-pillow/Pillow/compare/10.0.1...10.2.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pillow&package-manager=pip&previous-version=10.0.1&new-version=10.2.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/dcs-liberation/dcs_liberation/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-20 22:54:52 +11:00
tmz42
d1daa0521c Tripoint correction for max A-10C size 2024-02-08 20:44:46 -08:00
tmz42
ffa88688dc Added new merged campaign of both Scenic Routes, Scenic Merge. 2024-02-08 20:44:46 -08:00
tmz42
5ecaeca910 Campaign corrections : A-10C II instead of A-10CI, From Incirlik is actually from Incirlik in Tripoint 2024-02-08 20:44:46 -08:00
Chilli935
e1d443b697 Super Hornet mod support (#3331)
F/A-18E and F/A-18F are added to their factions, Growler is currently in
its respective factions but was released in 2009, this will be changed
if needed.
2024-01-27 23:14:57 +00:00
zhexu14
5af4e56f30 Add hit points to unit yamls.
This PR:

- Introduces a new member of UnitType, hit_points, which is an abstract
representation of the durability of a unit, and loads it in from the
YAML files in the various subclasses (Ship, Ground etc).
- Adds scripts for populating/updating the unit YAML files with hit
point data from DCS. This script also gets the data for static objects,
but I'll leave the plugging in of static object data into Liberation for
another PR.
- Updates the unit YAML files by running the above scripts.

I did toy with the idea of adding this data to the unit definitions in
pydcs via an export from DCS, but it would be a more involved change,
since the current pydcs export script runs in the Hooks Lua environment
in DCS and AFAICT the hit points (via Unit.getLife()) is run in the
mission scripting environment.
2024-01-04 00:49:33 -08:00
zhexu14
5b858886c0 Doctrine cleanup (#3318)
This PR:

- Refactors the doctrine class to have a bit more structure, in
anticipation of adding more elements to Doctrine.
- Moves previously hard coded helo-specific altitudes into the Doctrine
class, aligning a bunch of altitudes ~200ft in the process.
- Refactors ingress_altitude to combat_altitude to clarify that the
altitude is applied to multiple waypoint types, not just the ingress
altitude.
2024-01-01 13:31:26 -08:00
Dan Albert
c695e7724a Update bug templates for 10.0.0. 2023-12-31 12:57:12 -08:00
Dan Albert
2fb22e4e17 Bump develop to 11.0.0. 2023-12-30 16:05:45 -08:00
432 changed files with 1751 additions and 634 deletions

View File

@@ -31,7 +31,7 @@ body:
If the bug was found in a development build, select "Development build"
and provide a link to the build in the field below.
options:
- 9.0.0
- 10.0.0
- Development build
- type: textarea
attributes:

View File

@@ -39,7 +39,7 @@ body:
If the bug was found in a development build, select "Development build"
and provide a link to the build in the field below.
options:
- 9.0.0
- 10.0.0
- Development build
- type: textarea
attributes:

View File

@@ -2,7 +2,7 @@
(Github Readme Banner and Splash screen Artwork by Andriy Dankovych, CC BY-SA 4.0)
[![Patreon](https://img.shields.io/badge/patreon-become%20a%20patron-orange?logo=patreon)](https://patreon.com/khopa)
[![Patreon](https://img.shields.io/badge/patreon-become%20a%20patron-orange?logo=patreon)](https://patreon.com/dcsliberation)
[![Download](https://img.shields.io/github/downloads/dcs-liberation/dcs_liberation/total?label=Download)](https://github.com/dcs-liberation/dcs_liberation/releases)

View File

@@ -1,3 +1,13 @@
# 11.0.0
Saves from 10.x are not compatible with 11.0.0.
## Features/Improvements
* **[Engine]** Support for DCS 2.9.3.51704 Open Beta.
## Fixes
# 10.0.0
Saves from 9.x are not compatible with 10.0.0.

View File

@@ -9,7 +9,7 @@
project = "DCS Liberation"
copyright = "2023, DCS Liberation Team"
author = "DCS Liberation Team"
release = "10.0.0"
release = "11.0.0"
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration

View File

@@ -88,7 +88,7 @@ class Builder(IBuilder[AirAssaultFlightPlan, AirAssaultLayout]):
raise PlanningError("Air assault is only usable by helicopters")
assert self.package.waypoints is not None
altitude = feet(1500) if self.flight.is_helo else self.doctrine.ingress_altitude
altitude = self.doctrine.helicopter.air_assault_nav_altitude
altitude_is_agl = self.flight.is_helo
builder = WaypointBuilder(self.flight, self.coalition)

View File

@@ -19,7 +19,7 @@ class BarCapFlightPlan(PatrollingFlightPlan[PatrollingLayout]):
@property
def patrol_duration(self) -> timedelta:
return self.flight.coalition.doctrine.cap_duration
return self.flight.coalition.doctrine.cap.duration
@property
def patrol_speed(self) -> Speed:
@@ -29,7 +29,7 @@ class BarCapFlightPlan(PatrollingFlightPlan[PatrollingLayout]):
@property
def engagement_distance(self) -> Distance:
return self.flight.coalition.doctrine.cap_engagement_range
return self.flight.coalition.doctrine.cap.engagement_range
class Builder(CapBuilder[BarCapFlightPlan, PatrollingLayout]):
@@ -44,8 +44,8 @@ class Builder(CapBuilder[BarCapFlightPlan, PatrollingLayout]):
preferred_alt = self.flight.unit_type.preferred_patrol_altitude
randomized_alt = preferred_alt + feet(random.randint(-2, 1) * 1000)
patrol_alt = max(
self.doctrine.min_patrol_altitude,
min(self.doctrine.max_patrol_altitude, randomized_alt),
self.doctrine.cap.min_patrol_altitude,
min(self.doctrine.cap.max_patrol_altitude, randomized_alt),
)
builder = WaypointBuilder(self.flight, self.coalition)

View File

@@ -90,10 +90,10 @@ class CapBuilder(IBuilder[FlightPlanT, LayoutT], ABC):
# buffer.
distance_to_no_fly = (
meters(position.distance(self.threat_zones.all))
- self.doctrine.cap_engagement_range
- self.doctrine.cap.engagement_range
- nautical_miles(5)
)
max_track_length = self.doctrine.cap_max_track_length
max_track_length = self.doctrine.cap.max_track_length
else:
# Other race tracks (TARCAPs, currently) just try to keep some
# distance from the nearest enemy airbase, but since they are by
@@ -108,15 +108,15 @@ class CapBuilder(IBuilder[FlightPlanT, LayoutT], ABC):
distance_to_no_fly = distance_to_airfield - min_distance_from_enemy
# TARCAPs fly short racetracks because they need to react faster.
max_track_length = self.doctrine.cap_min_track_length + 0.3 * (
self.doctrine.cap_max_track_length - self.doctrine.cap_min_track_length
max_track_length = self.doctrine.cap.min_track_length + 0.3 * (
self.doctrine.cap.max_track_length - self.doctrine.cap.min_track_length
)
min_cap_distance = min(
self.doctrine.cap_min_distance_from_cp, distance_to_no_fly
self.doctrine.cap.min_distance_from_cp, distance_to_no_fly
)
max_cap_distance = min(
self.doctrine.cap_max_distance_from_cp, distance_to_no_fly
self.doctrine.cap.max_distance_from_cp, distance_to_no_fly
)
end = location.position.point_from_heading(
@@ -125,7 +125,7 @@ class CapBuilder(IBuilder[FlightPlanT, LayoutT], ABC):
)
track_length = random.randint(
int(self.doctrine.cap_min_track_length.meters),
int(self.doctrine.cap.min_track_length.meters),
int(max_track_length.meters),
)
start = end.point_from_heading(heading.opposite.degrees, track_length)

View File

@@ -44,7 +44,7 @@ class CasFlightPlan(PatrollingFlightPlan[CasLayout], UiZoneDisplay):
@property
def patrol_duration(self) -> timedelta:
return self.flight.coalition.doctrine.cas_duration
return self.flight.coalition.doctrine.cas.duration
@property
def patrol_speed(self) -> Speed:
@@ -96,7 +96,7 @@ class Builder(IBuilder[CasFlightPlan, CasLayout]):
builder = WaypointBuilder(self.flight, self.coalition)
is_helo = self.flight.unit_type.dcs_unit_type.helicopter
patrol_altitude = self.doctrine.ingress_altitude if not is_helo else meters(50)
patrol_altitude = self.doctrine.resolve_combat_altitude(is_helo)
use_agl_patrol_altitude = is_helo
ip_solver = IpSolver(

View File

@@ -33,7 +33,7 @@ class Builder(FormationAttackBuilder[EscortFlightPlan, FormationAttackLayout]):
departure=builder.takeoff(self.flight.departure),
hold=hold,
nav_to=builder.nav_path(
hold.position, join.position, self.doctrine.ingress_altitude
hold.position, join.position, self.doctrine.combat_altitude
),
join=join,
ingress=ingress,
@@ -43,7 +43,7 @@ class Builder(FormationAttackBuilder[EscortFlightPlan, FormationAttackLayout]):
nav_from=builder.nav_path(
refuel.position,
self.flight.arrival.position,
self.doctrine.ingress_altitude,
self.doctrine.combat_altitude,
),
arrival=builder.land(self.flight.arrival),
divert=builder.divert(self.flight.divert),

View File

@@ -163,7 +163,7 @@ class FormationAttackBuilder(IBuilder[FlightPlanT, LayoutT], ABC):
departure=builder.takeoff(self.flight.departure),
hold=hold,
nav_to=builder.nav_path(
hold.position, join.position, self.doctrine.ingress_altitude
hold.position, join.position, self.doctrine.combat_altitude
),
join=join,
ingress=ingress,
@@ -173,7 +173,7 @@ class FormationAttackBuilder(IBuilder[FlightPlanT, LayoutT], ABC):
nav_from=builder.nav_path(
refuel.position,
self.flight.arrival.position,
self.doctrine.ingress_altitude,
self.doctrine.combat_altitude,
),
arrival=builder.land(self.flight.arrival),
divert=builder.divert(self.flight.divert),

View File

@@ -114,11 +114,11 @@ class Builder(IBuilder[SweepFlightPlan, SweepLayout]):
self.package.waypoints.join.heading_between_point(target)
)
start_pos = target.point_from_heading(
heading.degrees, -self.doctrine.sweep_distance.meters
heading.degrees, -self.doctrine.sweep.distance.meters
)
builder = WaypointBuilder(self.flight, self.coalition)
start, end = builder.sweep(start_pos, target, self.doctrine.ingress_altitude)
start, end = builder.sweep(start_pos, target, self.doctrine.combat_altitude)
hold = builder.hold(self._hold_point())
@@ -126,12 +126,12 @@ class Builder(IBuilder[SweepFlightPlan, SweepLayout]):
departure=builder.takeoff(self.flight.departure),
hold=hold,
nav_to=builder.nav_path(
hold.position, start.position, self.doctrine.ingress_altitude
hold.position, start.position, self.doctrine.combat_altitude
),
nav_from=builder.nav_path(
end.position,
self.flight.arrival.position,
self.doctrine.ingress_altitude,
self.doctrine.combat_altitude,
),
sweep_start=start,
sweep_end=end,

View File

@@ -40,7 +40,7 @@ class TarCapFlightPlan(PatrollingFlightPlan[TarCapLayout]):
# flights in the package that have requested escort. If the package
# requests an escort the CAP self.flight will remain on station for the
# duration of the escorted mission, or until it is winchester/bingo.
return self.flight.coalition.doctrine.cap_duration
return self.flight.coalition.doctrine.cap.duration
@property
def patrol_speed(self) -> Speed:
@@ -50,7 +50,7 @@ class TarCapFlightPlan(PatrollingFlightPlan[TarCapLayout]):
@property
def engagement_distance(self) -> Distance:
return self.flight.coalition.doctrine.cap_engagement_range
return self.flight.coalition.doctrine.cap.engagement_range
@staticmethod
def builder_type() -> Type[Builder]:
@@ -90,8 +90,8 @@ class Builder(CapBuilder[TarCapFlightPlan, TarCapLayout]):
preferred_alt = self.flight.unit_type.preferred_patrol_altitude
randomized_alt = preferred_alt + feet(random.randint(-2, 1) * 1000)
patrol_alt = max(
self.doctrine.min_patrol_altitude,
min(self.doctrine.max_patrol_altitude, randomized_alt),
self.doctrine.cap.min_patrol_altitude,
min(self.doctrine.cap.max_patrol_altitude, randomized_alt),
)
builder = WaypointBuilder(self.flight, self.coalition)

View File

@@ -72,7 +72,7 @@ class WaypointBuilder:
"NAV",
FlightWaypointType.NAV,
position,
meters(500) if self.is_helo else self.doctrine.rendezvous_altitude,
self.doctrine.resolve_rendezvous_altitude(self.is_helo),
description="Enter theater",
pretty_name="Enter theater",
)
@@ -99,7 +99,7 @@ class WaypointBuilder:
"NAV",
FlightWaypointType.NAV,
position,
meters(500) if self.is_helo else self.doctrine.rendezvous_altitude,
self.doctrine.resolve_rendezvous_altitude(self.is_helo),
description="Exit theater",
pretty_name="Exit theater",
)
@@ -127,10 +127,7 @@ class WaypointBuilder:
position = divert.position
altitude_type: AltitudeReference
if isinstance(divert, OffMapSpawn):
if self.is_helo:
altitude = meters(500)
else:
altitude = self.doctrine.rendezvous_altitude
altitude = self.doctrine.resolve_rendezvous_altitude(self.is_helo)
altitude_type = "BARO"
else:
altitude = meters(0)
@@ -168,10 +165,7 @@ class WaypointBuilder:
"HOLD",
FlightWaypointType.LOITER,
position,
# Bug: DCS only accepts MSL altitudes for the orbit task and 500 meters is
# below the ground for most if not all of NTTR (and lots of places in other
# maps).
meters(500) if self.is_helo else self.doctrine.rendezvous_altitude,
self.doctrine.resolve_rendezvous_altitude(self.is_helo),
alt_type,
description="Wait until push time",
pretty_name="Hold",
@@ -186,7 +180,7 @@ class WaypointBuilder:
"JOIN",
FlightWaypointType.JOIN,
position,
meters(80) if self.is_helo else self.doctrine.ingress_altitude,
self.doctrine.resolve_combat_altitude(self.is_helo),
alt_type,
description="Rendezvous with package",
pretty_name="Join",
@@ -201,7 +195,7 @@ class WaypointBuilder:
"REFUEL",
FlightWaypointType.REFUEL,
position,
meters(80) if self.is_helo else self.doctrine.ingress_altitude,
self.doctrine.resolve_combat_altitude(self.is_helo),
alt_type,
description="Refuel from tanker",
pretty_name="Refuel",
@@ -229,7 +223,7 @@ class WaypointBuilder:
"SPLIT",
FlightWaypointType.SPLIT,
position,
meters(80) if self.is_helo else self.doctrine.ingress_altitude,
self.doctrine.resolve_combat_altitude(self.is_helo),
alt_type,
description="Depart from package",
pretty_name="Split",
@@ -249,7 +243,7 @@ class WaypointBuilder:
"INGRESS",
ingress_type,
position,
meters(60) if self.is_helo else self.doctrine.ingress_altitude,
self.doctrine.resolve_combat_altitude(self.is_helo),
alt_type,
description=f"INGRESS on {objective.name}",
pretty_name=f"INGRESS on {objective.name}",
@@ -294,7 +288,7 @@ class WaypointBuilder:
f"SEAD on {target.name}",
target,
flyover=True,
altitude=self.doctrine.ingress_altitude,
altitude=self.doctrine.combat_altitude,
alt_type="BARO",
)
@@ -484,7 +478,7 @@ class WaypointBuilder:
"TARGET",
FlightWaypointType.TARGET_GROUP_LOC,
target.position,
meters(60) if self.is_helo else self.doctrine.ingress_altitude,
self.doctrine.resolve_combat_altitude(self.is_helo),
alt_type,
description="Escort the package",
pretty_name="Target area",

View File

@@ -158,7 +158,7 @@ class TheaterState(WorldState["TheaterState"]):
# Plan enough rounds of CAP that the target has coverage over the expected
# mission duration.
mission_duration = game.settings.desired_player_mission_duration.total_seconds()
barcap_duration = coalition.doctrine.cap_duration.total_seconds()
barcap_duration = coalition.doctrine.cap.duration.total_seconds()
barcap_rounds = math.ceil(mission_duration / barcap_duration)
refueling_targets: list[MissionTarget] = []

View File

@@ -2,7 +2,7 @@ from __future__ import annotations
from pathlib import Path
import yaml
from typing import ClassVar
from typing import Any, ClassVar
from dataclasses import dataclass
from datetime import timedelta
@@ -32,18 +32,94 @@ class GroundUnitProcurementRatios:
return GroundUnitProcurementRatios(r)
@dataclass
class Helicopter:
#: The altitude used for combat section of a flight, overrides the base combat_altitude parameter for helos
combat_altitude: Distance
#: The altitude used for forming up a pacakge. Overrides the base rendezvous_altitude parameter for helos
rendezvous_altitude: Distance
#: Altitude of the nav points (cruise section) of air assault missions.
air_assault_nav_altitude: Distance
@staticmethod
def from_dict(data: dict[str, Any]) -> Helicopter:
return Helicopter(
combat_altitude=feet(data["combat_altitude_ft_agl"]),
rendezvous_altitude=feet(data["rendezvous_altitude_ft_agl"]),
air_assault_nav_altitude=feet(data["air_assault_nav_altitude_ft_agl"]),
)
@dataclass
class Cas:
#: The duration that CAP flights will remain on-station.
duration: timedelta
@staticmethod
def from_dict(data: dict[str, Any]) -> Cas:
return Cas(duration=timedelta(minutes=data["duration_minutes"]))
@dataclass
class Sweep:
#: Length of the sweep / patrol leg
distance: Distance
@staticmethod
def from_dict(data: dict[str, Any]) -> Sweep:
return Sweep(
distance=nautical_miles(data["distance_nm"]),
)
@dataclass
class Cap:
#: The duration that CAP flights will remain on-station.
duration: timedelta
#: The minimum length of the CAP race track.
min_track_length: Distance
#: The maximum length of the CAP race track.
max_track_length: Distance
#: The minimum distance between the defended position and the *end* of the
#: CAP race track.
min_distance_from_cp: Distance
#: The maximum distance between the defended position and the *end* of the
#: CAP race track.
max_distance_from_cp: Distance
#: The engagement range of CAP flights. Any enemy aircraft within this range
#: of the CAP's current position will be engaged by the CAP.
engagement_range: Distance
#: Defines the range of altitudes CAP racetracks are planned at.
min_patrol_altitude: Distance
max_patrol_altitude: Distance
@staticmethod
def from_dict(data: dict[str, Any]) -> Cap:
return Cap(
duration=timedelta(minutes=data["duration_minutes"]),
min_track_length=nautical_miles(data["min_track_length_nm"]),
max_track_length=nautical_miles(data["max_track_length_nm"]),
min_distance_from_cp=nautical_miles(data["min_distance_from_cp_nm"]),
max_distance_from_cp=nautical_miles(data["max_distance_from_cp_nm"]),
engagement_range=nautical_miles(data["engagement_range_nm"]),
min_patrol_altitude=feet(data["min_patrol_altitude_ft_msl"]),
max_patrol_altitude=feet(data["max_patrol_altitude_ft_msl"]),
)
@dataclass(frozen=True)
class Doctrine:
#: Name of the doctrine, used to assign a doctrine in a faction.
name: str
cas: bool
cap: bool
sead: bool
strike: bool
antiship: bool
rendezvous_altitude: Distance
#: The minimum distance between the departure airfield and the hold point.
hold_distance: Distance
@@ -62,42 +138,40 @@ class Doctrine:
#: target.
min_ingress_distance: Distance
ingress_altitude: Distance
#: The altitude used for combat section of a flight.
combat_altitude: Distance
min_patrol_altitude: Distance
max_patrol_altitude: Distance
pattern_altitude: Distance
#: The duration that CAP flights will remain on-station.
cap_duration: timedelta
#: The minimum length of the CAP race track.
cap_min_track_length: Distance
#: The maximum length of the CAP race track.
cap_max_track_length: Distance
#: The minimum distance between the defended position and the *end* of the
#: CAP race track.
cap_min_distance_from_cp: Distance
#: The maximum distance between the defended position and the *end* of the
#: CAP race track.
cap_max_distance_from_cp: Distance
#: The engagement range of CAP flights. Any enemy aircraft within this range
#: of the CAP's current position will be engaged by the CAP.
cap_engagement_range: Distance
cas_duration: timedelta
sweep_distance: Distance
#: The altitude used for forming up a pacakge.
rendezvous_altitude: Distance
#: Defines prioritization of ground unit purchases.
ground_unit_procurement_ratios: GroundUnitProcurementRatios
#: Helicopter specific doctrines.
helicopter: Helicopter
#: Doctrine for CAS missions.
cas: Cas
#: Doctrine for CAP missions.
cap: Cap
#: Doctrine for Fighter Sweep missions.
sweep: Sweep
_by_name: ClassVar[dict[str, Doctrine]] = {}
_loaded: ClassVar[bool] = False
def resolve_combat_altitude(self, is_helo: bool = False) -> Distance:
if is_helo:
return self.helicopter.combat_altitude
return self.combat_altitude
def resolve_rendezvous_altitude(self, is_helo: bool = False) -> Distance:
if is_helo:
return self.helicopter.rendezvous_altitude
return self.rendezvous_altitude
@classmethod
def register(cls, doctrine: Doctrine) -> None:
if doctrine.name in cls._by_name:
@@ -127,11 +201,6 @@ class Doctrine:
cls.register(
Doctrine(
name=data["name"],
cap=data["cap"],
cas=data["cas"],
sead=data["sead"],
strike=data["strike"],
antiship=data["antiship"],
rendezvous_altitude=feet(data["rendezvous_altitude_ft_msl"]),
hold_distance=nautical_miles(data["hold_distance_nm"]),
push_distance=nautical_miles(data["push_distance_nm"]),
@@ -142,31 +211,14 @@ class Doctrine:
min_ingress_distance=nautical_miles(
data["min_ingress_distance_nm"]
),
ingress_altitude=feet(data["ingress_altitude_ft_msl"]),
min_patrol_altitude=feet(data["min_patrol_altitude_ft_msl"]),
max_patrol_altitude=feet(data["max_patrol_altitude_ft_msl"]),
pattern_altitude=feet(data["pattern_altitude_ft_msl"]),
cap_duration=timedelta(minutes=data["cap_duration_minutes"]),
cap_min_track_length=nautical_miles(
data["cap_min_track_length_nm"]
),
cap_max_track_length=nautical_miles(
data["cap_max_track_length_nm"]
),
cap_min_distance_from_cp=nautical_miles(
data["cap_min_distance_from_cp_nm"]
),
cap_max_distance_from_cp=nautical_miles(
data["cap_max_distance_from_cp_nm"]
),
cap_engagement_range=nautical_miles(
data["cap_engagement_range_nm"]
),
cas_duration=timedelta(minutes=data["cas_duration_minutes"]),
sweep_distance=nautical_miles(data["sweep_distance_nm"]),
combat_altitude=feet(data["combat_altitude_ft_msl"]),
ground_unit_procurement_ratios=GroundUnitProcurementRatios.from_dict(
data["ground_unit_procurement_ratios"]
),
helicopter=Helicopter.from_dict(data["helicopter"]),
cas=Cas.from_dict(data["cas"]),
cap=Cap.from_dict(data["cap"]),
sweep=Sweep.from_dict(data["sweep"]),
)
)
cls._loaded = True

View File

@@ -517,6 +517,7 @@ class AircraftType(UnitType[Type[FlyingType]]):
LaserCodeConfig.from_yaml(d) for d in data.get("laser_codes", [])
],
use_f15e_waypoint_names=data.get("use_f15e_waypoint_names", False),
hit_points=data.get("hit_points", 1),
)
def __hash__(self) -> int:

View File

@@ -133,4 +133,5 @@ class GroundUnitType(UnitType[Type[VehicleType]]):
data.get("skynet_properties", {})
),
reversed_heading=data.get("reversed_heading", False),
hit_points=data.get("hit_points", 1),
)

View File

@@ -79,4 +79,5 @@ class ShipUnitType(UnitType[Type[ShipType]]):
manufacturer=data.get("manufacturer", "No data."),
role=data.get("role", "No data."),
price=data["price"],
hit_points=data.get("hit_points", 1),
)

View File

@@ -27,6 +27,7 @@ class UnitType(ABC, Generic[DcsUnitTypeT]):
role: str
price: int
unit_class: UnitClass
hit_points: int
_loaded: ClassVar[bool] = False

View File

@@ -300,6 +300,8 @@ class Faction:
self.remove_aircraft("Su-57")
if not mod_settings.ov10a_bronco:
self.remove_aircraft("Bronco-OV-10A")
if not mod_settings.superhornet:
self.remove_aircraft("Super-Hornet")
# frenchpack
if not mod_settings.frenchpack:
self.remove_vehicle("AMX10RCR")

View File

@@ -66,6 +66,7 @@ class ModSettings:
frenchpack: bool = False
high_digit_sams: bool = False
ov10a_bronco: bool = False
superhornet: bool = False
def save_player_settings(self) -> None:
"""Saves the player's global settings to the user directory."""

View File

@@ -165,7 +165,7 @@ class ThreatZones:
cls, doctrine: Doctrine, control_point: ControlPoint
) -> Distance:
cap_threat_range = (
doctrine.cap_max_distance_from_cp + doctrine.cap_engagement_range
doctrine.cap.max_distance_from_cp + doctrine.cap.engagement_range
)
opposing_airfield = cls.closest_enemy_airbase(
control_point, cap_threat_range * 2

View File

@@ -1,7 +1,7 @@
from pathlib import Path
MAJOR_VERSION = 10
MAJOR_VERSION = 11
MINOR_VERSION = 0
MICRO_VERSION = 0
VERSION_NUMBER = ".".join(str(v) for v in (MAJOR_VERSION, MINOR_VERSION, MICRO_VERSION))

View File

@@ -204,6 +204,7 @@ class NewGameWizard(QtWidgets.QWizard):
ov10a_bronco=self.field("ov10a_bronco"),
frenchpack=self.field("frenchpack"),
high_digit_sams=self.field("high_digit_sams"),
superhornet=self.field("superhornet"),
)
mod_settings.save_player_settings()
@@ -826,6 +827,10 @@ class GeneratorOptions(QtWidgets.QWizardPage):
high_digit_sams.setChecked(mod_settings.high_digit_sams)
self.registerField("high_digit_sams", high_digit_sams)
superhornet = QtWidgets.QCheckBox()
superhornet.setChecked(mod_settings.superhornet)
self.registerField("superhornet", superhornet)
modHelpText = QtWidgets.QLabel(
"<p>Select the mods you have installed. If your chosen factions support them, you'll be able to use these mods in your campaign.</p>"
)
@@ -877,6 +882,11 @@ class GeneratorOptions(QtWidgets.QWizardPage):
modLayout.addWidget(QtWidgets.QLabel("High Digit SAMs"), modLayout_row, 0)
modLayout.addWidget(high_digit_sams, modLayout_row, 1)
modSettingsGroup.setLayout(modLayout)
modLayout_row += 1
modLayout.addWidget(QtWidgets.QLabel("Super Hornet"), modLayout_row, 0)
modLayout.addWidget(superhornet, modLayout_row, 1)
modSettingsGroup.setLayout(modLayout)
modLayout_row += 1
mlayout = QVBoxLayout()
mlayout.addWidget(generatorSettingsGroup)

View File

@@ -20,7 +20,7 @@ httptools==0.6.1
identify==2.5.32
idna==3.6
iniconfig==2.0.0
Jinja2==3.1.2
Jinja2==3.1.3
MarkupSafe==2.1.3
mypy==1.7.1
mypy-extensions==1.0.0
@@ -29,14 +29,14 @@ numpy==1.26.2
packaging==23.2
pathspec==0.11.2
pefile==2023.2.7
Pillow==10.0.1
Pillow==10.2.0
platformdirs==4.0.0
pluggy==1.3.0
pre-commit==3.5.0
pydantic==2.5.2
pydantic-settings==2.1.0
pydantic_core==2.14.5
pydcs @ git+https://github.com/pydcs/dcs@1092fc419d3f879e8e7951b25e15d8b7c9938627
pydcs @ git+https://github.com/pydcs/dcs@7eeec23ea428846ebbbd0ea4c746f8eafea04e0d
pyinstaller==5.13.1
pyinstaller-hooks-contrib==2023.6
pyproj==3.6.1

View File

@@ -1,155 +1,155 @@
---
name: Sinai - Exercise Bright Star
theater: Sinai
authors: Starfire
recommended_player_faction: Bluefor Modern
recommended_enemy_faction: Egypt 2000s
description:
<p>For over 4 decades, the United States and Egypt have run a series of
biannual joint military exercises called Bright Star. Over the years, the
number of participating countries has grown substantially. Exercise Bright
Star 2025 boasts 8 participant nations and 14 observer nations. The United
States and a portion of the exercise coalition will play the part of a
fictional hostile nation dubbed Orangeland, staging a mock invasion against
Cairo. Israel, having for the first time accepted the invitation to observe,
is hosting the aggressor faction of the exercise coalition at its
airfields.</p>
miz: exercise_bright_star.miz
performance: 1
recommended_start_date: 2025-09-01
version: "11.0"
squadrons:
Blue CV-1:
- primary: SEAD
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
size: 24
- primary: AEW&C
aircraft:
- E-2D Advanced Hawkeye
size: 2
- primary: Refueling
aircraft:
- S-3B Tanker
size: 4
Bombers from RAF Fairford:
- primary: Anti-ship
secondary: air-to-ground
aircraft:
- B-52H Stratofortress
size: 8
- primary: Strike
secondary: air-to-ground
aircraft:
- B-1B Lancer
size: 8
# Hatzerim (141)
7:
- primary: Escort
secondary: any
aircraft:
- F-15C Eagle
size: 20
- primary: OCA/Runway
secondary: any
aircraft:
- F-15E Strike Eagle (Suite 4+)
size: 16
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 20
- primary: BAI
secondary: any
aircraft:
- JF-17 Thunder
size: 16
- primary: BARCAP
secondary: any
aircraft:
- Mirage 2000C
size: 12
# Kedem
12:
- primary: Transport
secondary: any
aircraft:
- CH-47D
size: 20
- primary: Air Assault
secondary: any
aircraft:
- UH-60L
- UH-60A
size: 4
# Nevatim (106)
8:
- primary: AEW&C
aircraft:
- E-3A
size: 2
- primary: Refueling
aircraft:
- KC-135 Stratotanker
size: 2
- primary: CAS
secondary: air-to-ground
aircraft:
- A-10C Thunderbolt II (Suite 7)
size: 8
# Melez (30)
5:
- primary: CAS
secondary: air-to-ground
aircraft:
- Ka-50 Hokum (Blackshark 3)
size: 4
- primary: BAI
secondary: any
aircraft:
- Mirage 2000C
size: 12
- primary: Escort
secondary: any
aircraft:
- MiG-21bis Fishbed-N
size: 12
# Wadi al Jandali (72)
13:
- primary: AEW&C
aircraft:
- E-2C Hawkeye
size: 2
- primary: SEAD
secondary: any
aircraft:
- F-4E Phantom II
size: 20
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 20
- primary: Air Assault
secondary: any
aircraft:
- Mi-24P Hind-F
size: 4
- primary: OCA/Aircraft
secondary: any
aircraft:
- SA 342L Gazelle
size: 4
# Cairo West (95)
18:
- primary: Transport
aircraft:
- C-130
size: 8
- primary: BARCAP
secondary: air-to-air
aircraft:
- MiG-29S Fulcrum-C
---
name: Sinai - Exercise Bright Star
theater: Sinai
authors: Starfire
recommended_player_faction: Bluefor Modern
recommended_enemy_faction: Egypt 2000s
description:
<p>For over 4 decades, the United States and Egypt have run a series of
biannual joint military exercises called Bright Star. Over the years, the
number of participating countries has grown substantially. Exercise Bright
Star 2025 boasts 8 participant nations and 14 observer nations. The United
States and a portion of the exercise coalition will play the part of a
fictional hostile nation dubbed Orangeland, staging a mock invasion against
Cairo. Israel, having for the first time accepted the invitation to observe,
is hosting the aggressor faction of the exercise coalition at its
airfields.</p>
miz: exercise_bright_star.miz
performance: 1
recommended_start_date: 2025-09-01
version: "11.0"
squadrons:
Blue CV-1:
- primary: SEAD
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
size: 24
- primary: AEW&C
aircraft:
- E-2D Advanced Hawkeye
size: 2
- primary: Refueling
aircraft:
- S-3B Tanker
size: 4
Bombers from RAF Fairford:
- primary: Anti-ship
secondary: air-to-ground
aircraft:
- B-52H Stratofortress
size: 8
- primary: Strike
secondary: air-to-ground
aircraft:
- B-1B Lancer
size: 8
# Hatzerim (141)
7:
- primary: CAS
secondary: air-to-ground
aircraft:
- A-10C Thunderbolt II (Suite 7)
size: 6
- primary: Escort
secondary: any
aircraft:
- F-15C Eagle
size: 20
- primary: OCA/Runway
secondary: any
aircraft:
- F-15E Strike Eagle (Suite 4+)
size: 16
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 20
- primary: BAI
secondary: any
aircraft:
- JF-17 Thunder
size: 16
- primary: BARCAP
secondary: any
aircraft:
- Mirage 2000C
size: 12
# Kedem
12:
- primary: Transport
secondary: any
aircraft:
- CH-47D
size: 20
- primary: Air Assault
secondary: any
aircraft:
- UH-60L
- UH-60A
size: 4
# Nevatim (106)
# 8:
# - primary: AEW&C
# aircraft:
# - E-3A
# size: 2
# - primary: Refueling
# aircraft:
# - KC-135 Stratotanker
# size: 2
# Melez (30)
5:
- primary: CAS
secondary: air-to-ground
aircraft:
- Ka-50 Hokum (Blackshark 3)
size: 4
- primary: BAI
secondary: any
aircraft:
- Mirage 2000C
size: 12
- primary: Escort
secondary: any
aircraft:
- MiG-21bis Fishbed-N
size: 12
# Wadi al Jandali (72)
13:
- primary: AEW&C
aircraft:
- E-2C Hawkeye
size: 2
- primary: SEAD
secondary: any
aircraft:
- F-4E Phantom II
size: 20
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 20
- primary: Air Assault
secondary: any
aircraft:
- Mi-24P Hind-F
size: 4
- primary: OCA/Aircraft
secondary: any
aircraft:
- SA 342L Gazelle
size: 4
# Cairo West (95)
18:
- primary: Transport
aircraft:
- C-130
size: 8
- primary: BARCAP
secondary: air-to-air
aircraft:
- MiG-29S Fulcrum-C
size: 20

View File

@@ -1,155 +1,169 @@
---
name: Caucasus - Operation Vectron's Claw
theater: Caucasus
authors: Starfire
recommended_player_faction: USA 2005
recommended_enemy_faction: Russia 2010
description:
<p>United Nations Observer Mission in Georgia (UNOMIG) observers stationed in
Georgia to monitor the ceasefire between Georgia and Abkhazia have been cut
off from friendly forces by Russian troops backing the separatist state. The
UNOMIG HQ at Sukhumi has been taken, and a small contingent of observers and
troops at the Zugdidi Sector HQ will have to make a run for the coast,
supported by offshore US naval aircraft. The contingent is aware that their
best shot at survival is to swiftly retake Sukhumi before Russian forces have
a chance to dig in, so that friendly ground forces can land and reinforce
them.</p><p><strong>Note:</strong> Ground unit purchase will not be available
past Turn 0 until Sukhumi is retaken, so it is imperative you reach Sukhumi
with at least one surviving ground unit to capture it. Two Hueys are available
at Zugdidi for some close air support. The player can either play the first
leg of the scenario as an evacuation with a couple of light vehicles (e.g.
Humvees) set on breakthrough (modifying waypoints in the mission editor so
they are not charging head-on into enemy ground forces is suggested), or
purchase heavier ground units if they wish to experience a more traditional
frontline ground war. Once Sukhumi has been captured, squadrons based in
Incirlik Turkey can be ferried in via the "From Incirlik" off-map spawn
point.</p>
miz: operation_vectrons_claw.miz
performance: 1
recommended_start_date: 2008-08-08
version: "11.0"
control_points:
From Incirlik:
ferry_only: true
squadrons:
Blue CV-1:
- primary: BARCAP
secondary: any
aircraft:
- F-14B Tomcat
size: 16
- primary: SEAD
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
size: 60
- primary: CAS
secondary: air-to-ground
aircraft:
- S-3B Viking
size: 8
- primary: AEW&C
aircraft:
- E-2C Hawkeye
size: 2
- primary: Refueling
aircraft:
- S-3B Tanker
size: 2
- primary: Air Assault
secondary: any
aircraft:
- UH-60L
- UH-60A
size: 2
Blue LHA:
- primary: BAI
secondary: air-to-ground
aircraft:
- AV-8B Harrier II Night Attack
size: 20
From Incirlik:
- primary: CAS
secondary: air-to-ground
aircraft:
- AH-64D Apache Longbow
size: 8
- primary: CAS
secondary: air-to-ground
aircraft:
- A-10C Thunderbolt II (Suite 7)
size: 8
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 16
- primary: BAI
secondary: any
aircraft:
- F-15E Strike Eagle (Suite 4+)
size: 8
- primary: Refueling
aircraft:
- KC-135 Stratotanker
size: 1
#FARPs
UNOMIG Sector HQ:
- primary: Transport
secondary: any
aircraft:
- UH-1H Iroquois
size: 2
Dzhugba:
- primary: CAS
secondary: any
aircraft:
- Mi-24P Hind-F
size: 8
#Sukhumi-Babushara
20:
- primary: TARCAP
secondary: air-to-air
aircraft:
- MiG-29S Fulcrum-C
size: 8
- primary: BAI
secondary: air-to-ground
aircraft:
- Su-25T Frogfoot
size: 12
#Sochi-Adler
18:
- primary: Escort
secondary: air-to-air
aircraft:
- Su-27 Flanker-B
size: 8
- primary: SEAD
secondary: air-to-ground
aircraft:
- Su-24M Fencer-D
size: 20
- primary: DEAD
secondary: air-to-ground
aircraft:
- Su-34 Fullback
size: 20
#Anapa-Vityazevo
12:
- primary: Strike
secondary: air-to-ground
aircraft:
- Tu-95MS Bear-H
size: 16
Red CV:
- primary: BARCAP
secondary: any
aircraft:
- SU-33 Flanker-D
size: 18
#I am aware there is no Russian LHA. This is just for campaign inversion.
Red LHA:
- primary: BAI
secondary: air-to-ground
size: 20
---
name: Caucasus - Operation Vectron's Claw
theater: Caucasus
authors: Starfire
recommended_player_faction: USA 2005
recommended_enemy_faction: Russia 2010
description:
<p>United Nations Observer Mission in Georgia (UNOMIG) observers stationed in
Georgia to monitor the ceasefire between Georgia and Abkhazia have been cut
off from friendly forces by Russian troops backing the separatist state. The
UNOMIG HQ at Sukhumi has been taken, and a small contingent of observers and
troops at the Zugdidi Sector HQ will have to make a run for the coast,
supported by offshore US naval aircraft. The contingent is aware that their
best shot at survival is to swiftly retake Sukhumi before Russian forces have
a chance to dig in, so that friendly ground forces can land and reinforce
them.</p><p><strong>Note:</strong> Ground unit purchase will not be available
past Turn 0 until Sukhumi is retaken, so it is imperative you reach Sukhumi
with at least one surviving ground unit to capture it. Two Hueys are available
at Zugdidi for some close air support. The player can either play the first
leg of the scenario as an evacuation with a couple of light vehicles (e.g.
Humvees) set on breakthrough (modifying waypoints in the mission editor so
they are not charging head-on into enemy ground forces is suggested), or
purchase heavier ground units if they wish to experience a more traditional
frontline ground war. Once Sukhumi has been captured, squadrons based in
Incirlik Turkey can be ferried in via the "From Incirlik" off-map spawn
point.</p>
miz: operation_vectrons_claw.miz
performance: 1
recommended_start_date: 2008-08-08
version: "11.0"
control_points:
Squadrons from Incirlik:
ferry_only: true
squadrons:
Blue CV-1:
- primary: BARCAP
secondary: any
aircraft:
- F-14B Tomcat
size: 16
- primary: SEAD
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
size: 60
- primary: CAS
secondary: air-to-ground
aircraft:
- S-3B Viking
size: 8
- primary: AEW&C
aircraft:
- E-2C Hawkeye
size: 2
- primary: Refueling
aircraft:
- S-3B Tanker
size: 2
- primary: Air Assault
secondary: any
aircraft:
- UH-60L
- UH-60A
size: 2
Blue LHA:
- primary: BAI
secondary: air-to-ground
aircraft:
- AV-8B Harrier II Night Attack
size: 20
Squadrons from Incirlik:
- primary: CAS
secondary: air-to-ground
aircraft:
- AH-64D Apache Longbow
size: 4
- primary: CAS
secondary: air-to-ground
aircraft:
- A-10C Thunderbolt II (Suite 7)
size: 6
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 16
- primary: BAI
secondary: any
aircraft:
- F-15E Strike Eagle (Suite 4+)
size: 8
- primary: Refueling
aircraft:
- KC-135 Stratotanker
size: 1
Bombers from RAF Fairford:
- primary: Anti-ship
secondary: air-to-ground
aircraft:
- B-52H Stratofortress
size: 4
Bombers from Base Aérea de Morón:
- primary: OCA/Runway
secondary: air-to-ground
aircraft:
- B-1B Lancer
size: 4
#FARPs
UNOMIG Sector HQ:
- primary: Transport
secondary: any
aircraft:
- UH-1H Iroquois
size: 2
Dzhugba:
- primary: CAS
secondary: any
aircraft:
- Mi-24P Hind-F
size: 4
#Sukhumi-Babushara
20:
- primary: TARCAP
secondary: air-to-air
aircraft:
- MiG-29S Fulcrum-C
size: 8
- primary: BAI
secondary: air-to-ground
aircraft:
- Su-25T Frogfoot
size: 12
#Sochi-Adler
18:
- primary: Escort
secondary: air-to-air
aircraft:
- Su-27 Flanker-B
size: 8
- primary: SEAD
secondary: air-to-ground
aircraft:
- Su-24M Fencer-D
size: 20
- primary: DEAD
secondary: air-to-ground
aircraft:
- Su-34 Fullback
size: 20
#Maykop-Khanskaya
16:
- primary: Anti-ship
secondary: air-to-ground
aircraft:
- Tu-22M3 Backfire-C
size: 20
#Anapa-Vityazevo
12:
- primary: Strike
secondary: air-to-ground
aircraft:
- Tu-95MS Bear-H
size: 16
Red CV:
- primary: BARCAP
secondary: any
aircraft:
- SU-33 Flanker-D
size: 16

View File

@@ -49,7 +49,7 @@ squadrons:
- primary: BAI
secondary: air-to-ground
aircraft:
- 81st FS
- A-10C Thunderbolt II (Suite 7)
size: 10
#USAF A-10CI
#BLUFOR CVN

Binary file not shown.

View File

@@ -0,0 +1,387 @@
---
name: Persian Gulf - Scenic Route Merged
theater: Persian Gulf
authors: Fuzzle, merged by tmz42
description: <p>A merge of the two Scenic Route campaigns. <p><strong>Backstory:</strong> Iran has declared war on all US forces in the Gulf resulting in all local allies withdrawing their support for American troops. A carrier group, aided by USAF units stationed on the south bank must pacify Iran's coastal defences and push inland. Iran has assembled the full might of its air and ground divisions to defend their heartland.</p>
version: "11.0"
advanced_iads: true
recommended_player_faction: USA 2005
recommended_enemy_faction: Iran 2015
miz: scenic_merge.miz
performance: 3
recommended_start_date: 2005-06-29
recommended_player_money: 2000
recommended_enemy_money: 1000
recommended_player_income_multiplier: 1.5
recommended_enemy_income_multiplier: 0.7
squadrons:
#BLUFOR CVN
Naval-3:
# Pukin' Dogs F-14
- primary: BARCAP
secondary: air-to-air
aircraft:
- VF-143
size: 14
# Golden Dragons F/A-18
- primary: SEAD
secondary: any
aircraft:
- VFA-192
size: 12
# Thunderbolts F/A-18C
- primary: DEAD
secondary: any
aircraft:
- VMFA-251
size: 12
# Hawkeye
- primary: AEW&C
aircraft:
- VAW-125
size: 2
# S-3 Tankers
- primary: Refueling
aircraft:
- VS-35 (Tanker)
size: 4
# BLUFOR LHA
Naval-4:
- primary: BAI
secondary: air-to-ground
aircraft:
- VMA-223
size: 12
- primary: Transport
secondary: air-to-ground
aircraft:
- HMLA-169 (UH-1H)
size: 8
# Al-Dhafra AFB
4:
#USAF F-16C Gamblers
- primary: SEAD
secondary: any
aircraft:
- 77th FS
size: 12
- primary: Strike
secondary: air-to-ground
aircraft:
- B-1B Lancer
size: 6
- primary: Refueling
size: 2
aircraft:
- 18th Air Refueling Squadron
- primary: Transport
secondary: air-to-ground
aircraft:
- HMLA-169 (UH-1H)
size: 4
- primary: AEW&C
aircraft:
- E-3
size: 2
- primary: BARCAP
secondary: any
aircraft:
- 493rd FS
#USAF F-15C
# Al-Minhab AFB
12:
- primary: Transport
secondary: air-to-ground
aircraft:
- 101st Combat Aviation Brigade
#US Army UH-60
size: 6
- primary: SEAD
secondary: any
aircraft:
- 480th FS
#USAF F-16C
- primary: Strike
secondary: air-to-ground
aircraft:
- F-15E Strike Eagle (Suite 4+)
# Strike Eagle (Chiefs?)
- primary: BAI
secondary: air-to-ground
aircraft:
- A-10C Thunderbolt II (Suite 7)
#USAF A-10CII
- primary: Transport
aircraft:
- C-130
size: 8
# Kish Intl
24:
- primary: AEW&C
aircraft:
- A-50
size: 1
- primary: BARCAP
secondary: any
aircraft:
- F-14A Tomcat (Block 135-GR Late)
size: 12
- primary: Strike
secondary: air-to-ground
aircraft:
- Su-24MK Fencer-D
size: 12
# Havadarya
9:
- primary: BARCAP
secondary: any
aircraft:
- F-4E Phantom II
size: 6
- primary: CAS
secondary: air-to-ground
aircraft:
- Su-25 Frogfoot
size: 6
# Bandar Abbas Intl
2:
- primary: TARCAP
secondary: any
aircraft:
- F-5E Tiger II
size: 6
- primary: BARCAP
secondary: air-to-ground
aircraft:
- MiG-29A Fulcrum-A
size: 6
- primary: Strike
secondary: air-to-ground
aircraft:
- Su-24MK
size: 6
# OPFOR First FOB
FOB Seerik:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24V Hind-E
size: 2
# OPFOR Second FOB
FOB Kohnehshahr:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24V Hind-F
size: 2
# OPFOR Third FOB
FOB Khvosh:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-28N Havoc
size: 2
# OPFOR Last FOB
FOB Charak:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-28N Havoc
size: 2
# BLUFOR Start FOB
FOB Anguran:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24V Hind-F
size: 2
# OPFOR L1F1
FOB Tang-e Dalan:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L1F2
FOB Fars Border:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L1F2 split
FOB Bikuyeh:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-28N Havoc
size: 2
# Lar
11:
- primary: BARCAP
secondary: air-to-air
aircraft:
- MiG-21bis Fishbed-N
size: 4
# OPFOR L2F1
FOB Mansurabad:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L2F2
FOB Jahrom:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L2F3
FOB Tower:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L2F3 split
FOB Nouderan:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-28N Havoc
size: 2
# Shiraz Intl
19:
- primary: AEW&C
aircraft:
- A-50
size: 2
- primary: Refueling
aircraft:
- IL-78M
size: 2
- primary: TARCAP
secondary: air-to-air
aircraft:
- MiG-29A Fulcrum-A
size: 12
- primary: Strike
secondary: air-to-ground
aircraft:
- Su-22M4 Fitter-K
size: 6
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 4
- primary: SEAD
secondary: air-to-ground
aircraft:
- Su-25T Frogfoot
size: 6
# OPFOR L3F1
FOB Kherameh:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L3F2
FOB Tashk:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L3F3
FOB Chahak:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L3F4
FOB Plainhold:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L3F4 split
FOB Robat:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L3F5
FOB Plainguard:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L3F6
FOB Hasanabad:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L3F6 split
FOB Najafabad:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-28N Havoc
size: 2
# OPFOR L3F7
FOB Kabutarkhan:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# OPFOR L3F8
FOB Sa'di:
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2
# Kerman
18:
- primary: AEW&C
aircraft:
- A-50
size: 2
- primary: Refueling
aircraft:
- IL-78M
size: 2
- primary: Transport
aircraft:
- IL-78MD
size: 2
- primary: BARCAP
secondary: any
aircraft:
- F-14A Tomcat (Block 135-GR Late)
size: 12
- primary: TARCAP
secondary: air-to-air
aircraft:
- MiG-29A Fulcrum-A
size: 12
- primary: Strike
secondary: air-to-ground
aircraft:
- Su-24MK Fencer-D
size: 6
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 2

View File

@@ -13,9 +13,6 @@ recommended_player_money: 900
recommended_enemy_money: 1200
recommended_player_income_multiplier: 1.0
recommended_enemy_income_multiplier: 0.6
control_points:
From Turkey:
ferry_only: true
squadrons:
#BLUFOR CVN
Naval-1:
@@ -62,8 +59,8 @@ squadrons:
aircraft:
- HMLA-169 (AH-1W)
size: 6
# Off-theatre forces
From Turkey:
# Incirlik
16:
- primary: Strike
secondary: air-to-ground
aircraft:
@@ -73,8 +70,25 @@ squadrons:
- 960th AAC Squadron
#USAF E-3A
size: 2
- primary: Strike
secondary: air-to-ground
aircraft:
- F-15E Strike Eagle (Suite 4+)
size: 12
- primary: SEAD
secondary: any
aircraft:
- 77th FS
#USAF F-16C
size: 12
# King Hussein Air College, BLUFOR start
19:
- primary: BAI
secondary: air-to-ground
aircraft:
- A-10C Thunderbolt II (Suite 7)
#USAF A-10CII
size: 8
- primary: BARCAP
secondary: air-to-air
aircraft:
@@ -85,11 +99,6 @@ squadrons:
aircraft:
- 23rd FS
#USAF F-16C
- primary: BAI
secondary: air-to-ground
aircraft:
- 81st FS
#USAF A-10CII
- primary: Transport
secondary: air-to-ground
aircraft:

View File

@@ -2,30 +2,6 @@ local unitPayloads = {
["name"] = "AH-64D_BLK_II",
["payloads"] = {
[1] = {
["name"] = "Liberation CAS",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{M299_4xAGM_114L}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{M299_4xAGM_114L}",
["num"] = 1,
},
},
["tasks"] = {
[1] = 31,
},
},
[2] = {
["displayName"] = "Liberation BAI",
["name"] = "Liberation BAI",
["pylons"] = {
@@ -45,12 +21,72 @@ local unitPayloads = {
["CLSID"] = "{M299_4xAGM_114L}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{AN_APG_78}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
},
},
[2] = {
["name"] = "Liberation OCA/Aircraft",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{M261_M229}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{M261_M229}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{AN_APG_78}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
},
},
[3] = {
["name"] = "Liberation CAS",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{M299_4xAGM_114L}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 2,
},
[4] = {
["CLSID"] = "{M299_4xAGM_114L}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{AN_APG_78}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
},
},
[4] = {
["displayName"] = "Liberation DEAD",
["name"] = "Liberation DEAD",
["pylons"] = {
@@ -70,30 +106,39 @@ local unitPayloads = {
["CLSID"] = "{M299_4xAGM_114L}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{AN_APG_78}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,
},
},
[4] = {
["name"] = "Liberation OCA/Aircraft",
[5] = {
["displayName"] = "Liberation Escort",
["name"] = "Liberation Escort",
["pylons"] = {
[1] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 3,
},
[2] = {
["CLSID"] = "{M299_4xAGM_114L}",
["num"] = 4,
},
[3] = {
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{M261_M229}",
["num"] = 4,
},
[4] = {
["CLSID"] = "{M261_M229}",
["CLSID"] = "{M299_4xAGM_114L}",
["num"] = 1,
},
[5] = {
["CLSID"] = "{AN_APG_78}",
["num"] = 6,
},
},
["tasks"] = {
[1] = 31,

View File

@@ -10,11 +10,11 @@ local unitPayloads = {
},
[2] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
[3] = {
["CLSID"] = "{FAS}",
["num"] = 5,
["num"] = 3,
},
},
["tasks"] = {
@@ -30,11 +30,11 @@ local unitPayloads = {
},
[2] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
[3] = {
["CLSID"] = "{FAS}",
["num"] = 5,
["num"] = 3,
},
},
["tasks"] = {
@@ -50,11 +50,11 @@ local unitPayloads = {
},
[2] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
[3] = {
["CLSID"] = "{FAS}",
["num"] = 5,
["num"] = 3,
},
},
["tasks"] = {
@@ -70,11 +70,11 @@ local unitPayloads = {
},
[2] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
[3] = {
["CLSID"] = "{FAS}",
["num"] = 5,
["num"] = 3,
},
},
["tasks"] = {
@@ -90,11 +90,11 @@ local unitPayloads = {
},
[2] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
[3] = {
["CLSID"] = "{FAS}",
["num"] = 5,
["num"] = 3,
},
},
["tasks"] = {

View File

@@ -5,28 +5,20 @@ local unitPayloads = {
["name"] = "CAS",
["pylons"] = {
[1] = {
["CLSID"] = "{HOT3D}",
["CLSID"] = "{HOT3_R2_M}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{HOT3G}",
["CLSID"] = "{HOT3_L2_M}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{HOT3D}",
["CLSID"] = "{FAS}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{HOT3G}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{FAS}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
},
["tasks"] = {
@@ -37,28 +29,20 @@ local unitPayloads = {
["name"] = "CAP",
["pylons"] = {
[1] = {
["CLSID"] = "{HOT3D}",
["CLSID"] = "{HOT3_R2_M}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{HOT3G}",
["CLSID"] = "{HOT3_L2_M}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{HOT3D}",
["CLSID"] = "{FAS}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{HOT3G}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{FAS}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
},
["tasks"] = {
@@ -69,28 +53,20 @@ local unitPayloads = {
["name"] = "STRIKE",
["pylons"] = {
[1] = {
["CLSID"] = "{HOT3D}",
["CLSID"] = "{HOT3_R2_M}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{HOT3G}",
["CLSID"] = "{HOT3_L2_M}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{HOT3D}",
["CLSID"] = "{FAS}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{HOT3G}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{FAS}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
},
["tasks"] = {
@@ -101,28 +77,20 @@ local unitPayloads = {
["name"] = "SEAD",
["pylons"] = {
[1] = {
["CLSID"] = "{HOT3D}",
["CLSID"] = "{HOT3_R2_M}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{HOT3G}",
["CLSID"] = "{HOT3_L2_M}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{HOT3D}",
["CLSID"] = "{FAS}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{HOT3G}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{FAS}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
},
["tasks"] = {
@@ -133,28 +101,20 @@ local unitPayloads = {
["name"] = "ANTISHIP",
["pylons"] = {
[1] = {
["CLSID"] = "{HOT3D}",
["CLSID"] = "{HOT3_R2_M}",
["num"] = 1,
},
[2] = {
["CLSID"] = "{HOT3G}",
["CLSID"] = "{HOT3_L2_M}",
["num"] = 2,
},
[3] = {
["CLSID"] = "{HOT3D}",
["CLSID"] = "{FAS}",
["num"] = 3,
},
[4] = {
["CLSID"] = "{HOT3G}",
["num"] = 4,
},
[5] = {
["CLSID"] = "{FAS}",
["num"] = 5,
},
[6] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
},
["tasks"] = {

View File

@@ -6,7 +6,7 @@ local unitPayloads = {
["pylons"] = {
[1] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
},
["tasks"] = {
@@ -19,7 +19,7 @@ local unitPayloads = {
["pylons"] = {
[1] = {
["CLSID"] = "{IR_Deflector}",
["num"] = 6,
["num"] = 4,
},
},
["tasks"] = {

View File

@@ -1,27 +1,24 @@
name: coldwar
cap: true
cas: true
sead: true
strike: true
antiship: true
rendezvous_altitude_ft_msl: 22000
hold_distance_nm: 15
push_distance_nm: 10
join_distance_nm: 10
max_ingress_distance_nm: 30
min_ingress_distance_nm: 10
ingress_altitude_ft_msl: 18000
min_patrol_altitude_ft_msl: 10000
max_patrol_altitude_ft_msl: 24000
pattern_altitude_ft_msl: 5000
cap_duration_minutes: 30
cap_min_track_length_nm: 12
cap_max_track_length_nm: 24
cap_min_distance_from_cp_nm: 8
cap_max_distance_from_cp_nm: 25
cap_engagement_range_nm: 35
cas_duration_minutes: 30
sweep_distance_nm: 40
rendezvous_altitude_ft_msl: 22000
combat_altitude_ft_msl: 18000
cap:
duration_minutes: 30
min_track_length_nm: 12
max_track_length_nm: 24
min_distance_from_cp_nm: 8
max_distance_from_cp_nm: 25
engagement_range_nm: 35
min_patrol_altitude_ft_msl: 10000
max_patrol_altitude_ft_msl: 24000
cas:
duration_minutes: 30
sweep:
distance_nm: 40
ground_unit_procurement_ratios:
Tank: 4
ATGM: 2
@@ -30,3 +27,8 @@ ground_unit_procurement_ratios:
Artillery: 1
SHORAD: 2
Recon: 1
helicopter:
combat_altitude_ft_agl: 200
rendezvous_altitude_ft_agl: 1500
air_assault_nav_altitude_ft_agl: 1500

View File

@@ -1,27 +1,24 @@
name: modern
cap: true
cas: true
sead: true
strike: true
antiship: true
rendezvous_altitude_ft_msl: 25000
hold_distance_nm: 25
push_distance_nm: 20
join_distance_nm: 20
max_ingress_distance_nm: 45
min_ingress_distance_nm: 10
ingress_altitude_ft_msl: 20000
min_patrol_altitude_ft_msl: 15000
max_patrol_altitude_ft_msl: 33000
pattern_altitude_ft_msl: 5000
cap_duration_minutes: 30
cap_min_track_length_nm: 15
cap_max_track_length_nm: 40
cap_min_distance_from_cp_nm: 10
cap_max_distance_from_cp_nm: 40
cap_engagement_range_nm: 50
cas_duration_minutes: 30
sweep_distance_nm: 60
rendezvous_altitude_ft_msl: 25000
combat_altitude_ft_msl: 20000
cap:
duration_minutes: 30
min_track_length_nm: 15
max_track_length_nm: 40
min_distance_from_cp_nm: 10
max_distance_from_cp_nm: 40
engagement_range_nm: 50
min_patrol_altitude_ft_msl: 15000
max_patrol_altitude_ft_msl: 33000
cas:
duration_minutes: 30
sweep:
distance_nm: 60
ground_unit_procurement_ratios:
Tank: 3
ATGM: 2
@@ -30,3 +27,7 @@ ground_unit_procurement_ratios:
Artillery: 1
SHORAD: 2
Recon: 1
helicopter:
combat_altitude_ft_agl: 200
rendezvous_altitude_ft_agl: 1500
air_assault_nav_altitude_ft_agl: 1500

View File

@@ -1,27 +1,24 @@
name: ww2
cap: true
cas: true
sead: false
strike: true
antiship: true
hold_distance_nm: 10
push_distance_nm: 5
join_distance_nm: 5
rendezvous_altitude_ft_msl: 10000
max_ingress_distance_nm: 7
min_ingress_distance_nm: 5
ingress_altitude_ft_msl: 8000
min_patrol_altitude_ft_msl: 4000
max_patrol_altitude_ft_msl: 15000
pattern_altitude_ft_msl: 5000
cap_duration_minutes: 30
cap_min_track_length_nm: 8
cap_max_track_length_nm: 18
cap_min_distance_from_cp_nm: 0
cap_max_distance_from_cp_nm: 5
cap_engagement_range_nm: 20
cas_duration_minutes: 30
sweep_distance_nm: 10
rendezvous_altitude_ft_msl: 10000
combat_altitude_ft_msl: 8000
cap:
duration_minutes: 30
min_track_length_nm: 8
max_track_length_nm: 18
min_distance_from_cp_nm: 0
max_distance_from_cp_nm: 5
engagement_range_nm: 20
min_patrol_altitude_ft_msl: 4000
max_patrol_altitude_ft_msl: 15000
cas:
duration_minutes: 30
sweep:
distance_nm: 10
ground_unit_procurement_ratios:
Tank: 3
ATGM: 3
@@ -29,3 +26,7 @@ ground_unit_procurement_ratios:
Artillery: 1
SHORAD: 3
Recon: 1
helicopter:
combat_altitude_ft_agl: 200
rendezvous_altitude_ft_agl: 1500
air_assault_nav_altitude_ft_agl: 1500

View File

@@ -11,6 +11,9 @@ aircrafts:
- F/A-18C Hornet (Lot 20)
- SH-60B Seahawk
- UH-1H Iroquois
- F/A-18E Super Hornet
- F/A-18F Super Hornet
- EA-18G Growler
awacs:
- E-3A
tankers:

View File

@@ -13,6 +13,9 @@ aircrafts:
- S-3B Viking
- SH-60B Seahawk
- UH-1H Iroquois
- F/A-18E Super Hornet
- F/A-18F Super Hornet
- EA-18G Growler
awacs:
- E-2C Hawkeye
tankers:

Binary file not shown.

After

Width:  |  Height:  |  Size: 989 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -20,3 +20,4 @@ tasks:
BAI: 680
CAS: 680
OCA/Aircraft: 680
hit_points: 32

View File

@@ -30,3 +30,4 @@ tasks:
OCA/Aircraft: 820
OCA/Runway: 380
Strike: 380
hit_points: 32

View File

@@ -34,3 +34,4 @@ tasks:
OCA/Aircraft: 830
OCA/Runway: 390
Strike: 390
hit_points: 32

View File

@@ -24,3 +24,4 @@ tasks:
OCA/Aircraft: 160
OCA/Runway: 140
Strike: 140
hit_points: 18

View File

@@ -8,3 +8,4 @@ variants:
A-50: null
tasks:
AEW&C: 10
hit_points: 60

View File

@@ -23,3 +23,4 @@ tasks:
BAI: 480
CAS: 480
OCA/Aircraft: 480
hit_points: 14

View File

@@ -24,3 +24,4 @@ tasks:
BAI: 490
CAS: 490
OCA/Aircraft: 490
hit_points: 14

View File

@@ -25,3 +25,4 @@ tasks:
BAI: 500
CAS: 500
OCA/Aircraft: 500
hit_points: 14

View File

@@ -40,5 +40,4 @@ tasks:
CAS: 510
DEAD: 115
OCA/Aircraft: 510
default_overrides:
FCR_RFI_removed: false
hit_points: 20

View File

@@ -43,3 +43,4 @@ tasks:
OCA/Aircraft: 620
OCA/Runway: 620
Strike: 630
hit_points: 18

View File

@@ -63,3 +63,4 @@ tasks:
SEAD: 70
SEAD Escort: 70
Strike: 590
hit_points: 18

View File

@@ -5,3 +5,4 @@ variants:
An-26B: null
tasks:
Transport: 110
hit_points: 45

View File

@@ -3,3 +3,4 @@ price: 15
variants:
An-30M: null
tasks: {}
hit_points: 45

View File

@@ -23,3 +23,4 @@ variants:
tasks:
OCA/Runway: 150
Strike: 150
hit_points: 18

View File

@@ -23,3 +23,4 @@ tasks:
OCA/Aircraft: 670
OCA/Runway: 670
Strike: 700
hit_points: 60

View File

@@ -17,3 +17,4 @@ tasks:
DEAD: 210
OCA/Runway: 660
Strike: 690
hit_points: 60

View File

@@ -34,3 +34,4 @@ tasks:
OCA/Runway: 20
Strike: 20
TARCAP: 60
hit_points: 18

View File

@@ -30,3 +30,4 @@ tasks:
OCA/Runway: 170
Strike: 170
TARCAP: 130
hit_points: 18

View File

@@ -5,3 +5,4 @@ variants:
C-130: null
tasks:
Transport: 130
hit_points: 45

View File

@@ -5,3 +5,4 @@ variants:
C-17A: null
tasks:
Transport: 150
hit_points: 45

View File

@@ -13,3 +13,4 @@ variants:
C-47 Dakota: null
tasks:
Transport: 90
hit_points: 18

View File

@@ -10,3 +10,4 @@ variants:
tasks:
Air Assault: 90
Transport: 70
hit_points: 20

View File

@@ -10,3 +10,4 @@ variants:
tasks:
Air Assault: 100
Transport: 80
hit_points: 20

View File

@@ -16,3 +16,4 @@ variants:
E-2D Advanced Hawkeye: {}
tasks:
AEW&C: 20
hit_points: 25

View File

@@ -8,3 +8,4 @@ variants:
E-3A: null
tasks:
AEW&C: 30
hit_points: 60

View File

@@ -0,0 +1,47 @@
carrier_capable: true
description:
'The EA-18G Growler is twin engine, supersonic Electronic Warfare Aircraft that is flown
by a pilot and a WSO (Weapon Systems Officer) in a "glass cockpit". It combines extreme maneuverability , a
deadly arsenal of weapons, and the ability to operate from an aircraft carrier.
Operated by several nations, this multi-role fighter has been instrumental in conflicts
from 2009 to today.
The flight capabilities of the Growler closely mirror those of the F/A-18E/F.
This characteristic allows the Growler to excel in both escort jamming and the conventional standoff jamming mission,
which involves radar jamming and deception. Growlers can seamlessly accompany F/A-18s throughout
all stages of an attack mission. To enhance the Growler's stability during electronic warfare operations,
Boeing made modifications to the leading edge fairings and wing fold hinge fairings, incorporating wing fences and
aileron "tripper strips".'
introduced: 1999
manufacturer: Boeing Defense, Space & Security
origin: USA
price: 32
role: Carrier-based Electronic Warfare Aircraft
default_livery: "VAQ-139"
fuel:
variants:
radios:
intra_flight: AN/ARC-210
inter_flight: AN/ARC-210
channels:
type: common
# DCS will clobber channel 1 of the first radio compatible with the flight's
# assigned frequency. Since the EA-18's two radios are both AN/ARC-210s,
# radio 1 will be compatible regardless of which frequency is assigned, so
# we must use radio 1 for the intra-flight radio.
intra_flight_radio_index: 1
inter_flight_radio_index: 2
utc_kneeboard: true
# default_overrides:
# HelmetMountedDevice: 1
# InnerBoard: 0
# OuterBoard: 0
tasks:
DEAD: 600
SEAD: 500
EA: 750
hit_points: 20

View File

@@ -20,3 +20,4 @@ variants:
tasks:
Strike: 710
has_built_in_target_pod: true
hit_points: 20

View File

@@ -59,3 +59,4 @@ tasks:
SEAD Escort: 90
Strike: 550
TARCAP: 520
hit_points: 20

View File

@@ -59,3 +59,4 @@ tasks:
SEAD Escort: 100
Strike: 560
TARCAP: 530
hit_points: 20

View File

@@ -18,3 +18,4 @@ tasks:
Fighter sweep: 540
Intercept: 540
TARCAP: 540
hit_points: 20

View File

@@ -25,3 +25,4 @@ tasks:
Strike: 640
TARCAP: 240
has_built_in_target_pod: true
hit_points: 20

View File

@@ -51,3 +51,4 @@ laser_codes:
- property:
id: Sta8LaserCode
digits: 3
hit_points: 18

View File

@@ -16,3 +16,4 @@ tasks:
OCA/Runway: 570
Strike: 570
TARCAP: 420
hit_points: 14

View File

@@ -78,3 +78,4 @@ laser_codes:
digit: 1
- id: LaserCode1
digit: 0
hit_points: 20

View File

@@ -33,3 +33,4 @@ tasks:
SEAD Escort: 120
Strike: 400
TARCAP: 410
hit_points: 20

View File

@@ -48,3 +48,4 @@ tasks:
OCA/Runway: 190
Strike: 200
TARCAP: 200
hit_points: 16

View File

@@ -26,3 +26,4 @@ tasks:
OCA/Runway: 180
Strike: 190
TARCAP: 150
hit_points: 15

View File

@@ -68,3 +68,4 @@ tasks:
SEAD Escort: 160
Strike: 600
TARCAP: 450
hit_points: 20

View File

@@ -44,3 +44,4 @@ tasks:
OCA/Runway: 0
Strike: 0
TARCAP: 40
hit_points: 18

View File

@@ -33,3 +33,4 @@ tasks:
OCA/Runway: 10
Strike: 10
TARCAP: 50
hit_points: 18

View File

@@ -24,3 +24,4 @@ tasks:
OCA/Aircraft: 380
OCA/Runway: 640
Strike: 650
hit_points: 18

View File

@@ -28,3 +28,4 @@ tasks:
Intercept: 0
OCA/Aircraft: 60
TARCAP: 0
hit_points: 15

View File

@@ -4,3 +4,4 @@ variants:
IL-76MD: null
tasks:
Transport: 120
hit_points: 60

View File

@@ -9,3 +9,4 @@ variants:
IL-78M: null
tasks:
Refueling: 30
hit_points: 60

View File

@@ -18,3 +18,4 @@ tasks:
Fighter sweep: 500
Intercept: 500
TARCAP: 500
hit_points: 18

View File

@@ -53,3 +53,4 @@ tasks:
SEAD Escort: 180
Strike: 580
TARCAP: 440
hit_points: 18

View File

@@ -27,3 +27,4 @@ tasks:
OCA/Aircraft: 150
OCA/Runway: 130
Strike: 130
hit_points: 18

View File

@@ -17,3 +17,4 @@ variants:
KC-135 Stratotanker: {}
tasks:
Refueling: 50
hit_points: 60

View File

@@ -15,3 +15,4 @@ variants:
KC-130: {}
tasks:
Refueling: 10
hit_points: 18

Some files were not shown because too many files have changed in this diff Show More