mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Compare commits
71 Commits
develop-5.
...
5.2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a87fa119aa | ||
|
|
eb8859ebea | ||
|
|
7e54c8dea7 | ||
|
|
e86bd4fa14 | ||
|
|
178ae3774e | ||
|
|
1988836c61 | ||
|
|
e0ba2609b1 | ||
|
|
72050df5ff | ||
|
|
28c775af60 | ||
|
|
3d5f94db1f | ||
|
|
c93695ac36 | ||
|
|
0b33b0f9fb | ||
|
|
e043e6073e | ||
|
|
c7d764da85 | ||
|
|
367a7f9829 | ||
|
|
4a99b59a38 | ||
|
|
9b125a644e | ||
|
|
5a037d8b75 | ||
|
|
30ac898aa9 | ||
|
|
74fb390dcd | ||
|
|
6f0119731b | ||
|
|
a6e1dc14c3 | ||
|
|
d23b1fbb2c | ||
|
|
26f3bf5827 | ||
|
|
48945c1ce9 | ||
|
|
a75a3af13d | ||
|
|
a88cd60f31 | ||
|
|
86b204883a | ||
|
|
4d2289ece9 | ||
|
|
7d65e55665 | ||
|
|
edb10f60fb | ||
|
|
a7a28205a9 | ||
|
|
a22452baca | ||
|
|
8422823921 | ||
|
|
30fe1ca6af | ||
|
|
faf70debce | ||
|
|
42929b08d8 | ||
|
|
91bb5acd04 | ||
|
|
d69841f261 | ||
|
|
dba8c26887 | ||
|
|
bef27ffb20 | ||
|
|
d9eac37766 | ||
|
|
39a5d4e7c4 | ||
|
|
ce4d388e27 | ||
|
|
3a318fbbdf | ||
|
|
526d082020 | ||
|
|
3d68eabcaa | ||
|
|
409a099339 | ||
|
|
0ba86af4fd | ||
|
|
99d4cb7ad5 | ||
|
|
815849ae64 | ||
|
|
31efac53f4 | ||
|
|
3ede2b5755 | ||
|
|
de43c0d621 | ||
|
|
7a6ec30368 | ||
|
|
08c3da9502 | ||
|
|
6d389f7612 | ||
|
|
bc3b6c2a26 | ||
|
|
041cd0057a | ||
|
|
57ee611d06 | ||
|
|
f63fae2d4f | ||
|
|
cd120047cb | ||
|
|
7bb41d07b3 | ||
|
|
8aca036bf0 | ||
|
|
878695b2c7 | ||
|
|
f57bd2f253 | ||
|
|
cf7330e938 | ||
|
|
e56abbe768 | ||
|
|
b7a92a2ebf | ||
|
|
a17b8dac7f | ||
|
|
dbe9691d9e |
@@ -1,4 +1,6 @@
|
||||

|
||||
[](https://shdwp.github.io/ukraine/)
|
||||
|
||||
(Github Readme Banner and Splash screen Artwork by Andriy Dankovych, CC BY-SA 4.0)
|
||||
|
||||
[](https://patreon.com/khopa)
|
||||
|
||||
|
||||
30
changelog.md
30
changelog.md
@@ -1,3 +1,30 @@
|
||||
# 5.2.0
|
||||
|
||||
Saves from 5.1.0 are compatible with 5.2.0
|
||||
|
||||
## Features/Improvements
|
||||
|
||||
* **[Engine]** Support for DCS DCS 2.7.11.21408, including the new Apache AH-64D and the Syria map extension
|
||||
* **[Mission Generation]** Improved FARP Helipad handling and creation (now includes windsocks)
|
||||
* **[Modding]** Add UH-60L mod support
|
||||
* **[Modding]** Updated Community A-4E-C mod version support to 2.0.0 release. Version 1.4.2 is no longer compatible, unless the mod default loadouts are deleted/modified.
|
||||
* **[Modding]** Updated JAS-39-C mod support for v1.8.0-beta
|
||||
* **[Campaign]** Peace Spring, Vectron's Claw, Vegas Nerve, Scenic Route 2 campaign update
|
||||
* **[Campaign]** Added Tripoint Hostility campaign by Fuzzle
|
||||
* **[Campaign]** Add 3 new campaigns from Sith1144
|
||||
## Fixes
|
||||
|
||||
* **[Mission Generation]** Fixed incorrect SA-5 and NASAMS threat range when TR destroyed. It will not count as threat anymore when the TR is dead.
|
||||
* **[Mission Generation]** Fixed "Max Threat Range" error
|
||||
* **[Mission Generation]** Fix unculled zones not updating when needed
|
||||
* **[Mission Planner]** Now allows squadron transfers to control points where the number of free slots matches exactly the expected size of the transferring squadron next turn.
|
||||
* **[Data]** Removed Fw 190 A-8 and D-9 from Germany 1940 and 1942 faction list for historical accuracy.
|
||||
* **[Data]** Updated Loadouts for Tornado GR4, F-15E and F-16C
|
||||
* **[Data]** Corrected some unit data
|
||||
* **[UI]** Fixed various UI issues (for example Scaling and HighDPI)
|
||||
* **[UI]** Typhoon GR4 and IDS images
|
||||
|
||||
|
||||
# 5.1.0
|
||||
|
||||
Saves from 5.0.0 are compatible with 5.1.0
|
||||
@@ -9,7 +36,6 @@ Saves from 5.0.0 are compatible with 5.1.0
|
||||
* **[Mission Generation]** Add Option to enforce the Easy Communication setting for the mission
|
||||
* **[Mission Generation]** Add Option to select between only night missions, day missions or any time (default).
|
||||
* **[Modding]** Add F-104 mod support
|
||||
|
||||
## Fixes
|
||||
|
||||
* **[Campaign]** Fixed some minor issues in campaigns which generated error messages in the log.
|
||||
@@ -18,7 +44,9 @@ Saves from 5.0.0 are compatible with 5.1.0
|
||||
* **[Mission Generation]** Fixed mission scripting error when using a dedicated server.
|
||||
* **[Mission Generation]** Fixed an issue where empty convoys lead to an index error when a point capture made a pending transfer of units not completable anymore.
|
||||
* **[Mission Generation]** Corrected Viggen FR22 & FR24 preset channels for the DCS 2.7.9 update
|
||||
* **[Mission Generation]** Fixed the SA-5 Generator to use the P-19 FlatFace SR as a Fallback radar if the faction does not have access to the TinShield SR.
|
||||
* **[UI]** Enable / Disable the settings, save and stats actions if no game is loaded to prevent an error as these functions can only be used on a valid game.
|
||||
* **[UI]** Added missing icons for Tornado GR4, and Tornado IDS.
|
||||
|
||||
# 5.0.0
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ from game.theater import (
|
||||
SyriaTheater,
|
||||
MarianaIslandsTheater,
|
||||
)
|
||||
from game.version import CAMPAIGN_FORMAT_VERSION
|
||||
from game.version import CAMPAIGN_FORMAT_VERSION, SUPPORTED_CAMPAIGN_VERSION
|
||||
from .campaignairwingconfig import CampaignAirWingConfig
|
||||
from .mizcampaignloader import MizCampaignLoader
|
||||
from .. import persistency
|
||||
@@ -147,7 +147,7 @@ class Campaign:
|
||||
@property
|
||||
def is_from_future(self) -> bool:
|
||||
"""Returns True if this campaign is newer than the supported format."""
|
||||
return self.version > CAMPAIGN_FORMAT_VERSION
|
||||
return self.version > SUPPORTED_CAMPAIGN_VERSION
|
||||
|
||||
@property
|
||||
def is_compatible(self) -> bool:
|
||||
|
||||
@@ -25,7 +25,7 @@ from dcs.vehicles import AirDefence
|
||||
|
||||
TELARS = {
|
||||
AirDefence._2S6_Tunguska,
|
||||
AirDefence.SA_11_Buk_SR_9S18M1,
|
||||
AirDefence.SA_11_Buk_LN_9A310M1,
|
||||
AirDefence.Osa_9A33_ln,
|
||||
AirDefence.Tor_9A331,
|
||||
AirDefence.Roland_ADS,
|
||||
@@ -38,8 +38,10 @@ TRACK_RADARS = {
|
||||
AirDefence.Hawk_tr,
|
||||
AirDefence.Patriot_str,
|
||||
AirDefence.SNR_75V,
|
||||
AirDefence.RPC_5N62V,
|
||||
AirDefence.Rapier_fsa_blindfire_radar,
|
||||
AirDefence.HQ_7_STR_SP,
|
||||
AirDefence.NASAMS_Radar_MPQ64F1,
|
||||
}
|
||||
|
||||
LAUNCHER_TRACKER_PAIRS = {
|
||||
@@ -52,6 +54,9 @@ LAUNCHER_TRACKER_PAIRS = {
|
||||
AirDefence.S_75M_Volhov: AirDefence.SNR_75V,
|
||||
AirDefence.Rapier_fsa_launcher: AirDefence.Rapier_fsa_blindfire_radar,
|
||||
AirDefence.HQ_7_LN_SP: AirDefence.HQ_7_STR_SP,
|
||||
AirDefence.S_200_Launcher: AirDefence.RPC_5N62V,
|
||||
AirDefence.NASAMS_LN_B: AirDefence.NASAMS_Radar_MPQ64F1,
|
||||
AirDefence.NASAMS_LN_C: AirDefence.NASAMS_Radar_MPQ64F1,
|
||||
}
|
||||
|
||||
UNITS_WITH_RADAR = {
|
||||
@@ -80,6 +85,8 @@ UNITS_WITH_RADAR = {
|
||||
AirDefence.Roland_Radar,
|
||||
AirDefence.Snr_s_125_tr,
|
||||
AirDefence.SNR_75V,
|
||||
AirDefence.RLS_19J6,
|
||||
AirDefence.RPC_5N62V,
|
||||
AirDefence.Rapier_fsa_blindfire_radar,
|
||||
AirDefence.HQ_7_LN_SP,
|
||||
AirDefence.HQ_7_STR_SP,
|
||||
|
||||
@@ -52,8 +52,13 @@ class Weapon:
|
||||
|
||||
def __setstate__(self, state: dict[str, Any]) -> None:
|
||||
# Update any existing models with new data on load.
|
||||
updated = Weapon.with_clsid(state["clsid"])
|
||||
state.update(updated.__dict__)
|
||||
try:
|
||||
updated = Weapon.with_clsid(state["clsid"])
|
||||
state.update(updated.__dict__)
|
||||
except KeyError:
|
||||
logging.exception(
|
||||
f'CLSID {state["clsid"]} is not available anymore. This could potentially lead to some unexpected results when generating the next turn miz. To solve this issue it is recommended to update the loadout of all affected flights.'
|
||||
)
|
||||
self.__dict__.update(state)
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -47,17 +47,21 @@ from pydcs_extensions.f22a.f22a import F_22A
|
||||
from pydcs_extensions.hercules.hercules import Hercules
|
||||
from pydcs_extensions.jas39.jas39 import JAS39Gripen, JAS39Gripen_AG
|
||||
from pydcs_extensions.su57.su57 import Su_57
|
||||
from pydcs_extensions.uh60l.uh60l import UH_60L, KC130J
|
||||
|
||||
plane_map["A-4E-C"] = A_4E_C
|
||||
plane_map["F-22A"] = F_22A
|
||||
plane_map["Su-57"] = Su_57
|
||||
plane_map["Hercules"] = Hercules
|
||||
plane_map["KC130J"] = KC130J
|
||||
plane_map["JAS39Gripen"] = JAS39Gripen
|
||||
plane_map["JAS39Gripen_AG"] = JAS39Gripen_AG
|
||||
plane_map["VSN_F104G"] = VSN_F104G
|
||||
plane_map["VSN_F104S"] = VSN_F104S
|
||||
plane_map["VSN_F104S_AG"] = VSN_F104S_AG
|
||||
|
||||
helicopter_map["UH-60L"] = UH_60L
|
||||
|
||||
vehicle_map["FieldHL"] = frenchpack._FIELD_HIDE
|
||||
vehicle_map["HARRIERH"] = frenchpack._FIELD_HIDE_SMALL
|
||||
vehicle_map["SMOKESAM"] = frenchpack.SMOKE_SAM_IR
|
||||
|
||||
@@ -14,6 +14,7 @@ from dcs.unittype import FlyingType
|
||||
|
||||
from game.dcs.unittype import UnitType
|
||||
from game.radio.channels import (
|
||||
ApacheChannelNamer,
|
||||
ChannelNamer,
|
||||
RadioChannelAllocator,
|
||||
CommonRadioChannelAllocator,
|
||||
@@ -95,6 +96,7 @@ class RadioConfig:
|
||||
"tomcat": TomcatChannelNamer,
|
||||
"viggen": ViggenChannelNamer,
|
||||
"viper": ViperChannelNamer,
|
||||
"apache": ApacheChannelNamer,
|
||||
}[config.get("namer", "default")]
|
||||
|
||||
|
||||
|
||||
@@ -266,6 +266,9 @@ class Faction:
|
||||
self.remove_aircraft("A-4E-C")
|
||||
if not mod_settings.hercules:
|
||||
self.remove_aircraft("Hercules")
|
||||
if not mod_settings.uh_60l:
|
||||
self.remove_aircraft("UH-60L")
|
||||
self.remove_aircraft("KC130J")
|
||||
if not mod_settings.f22_raptor:
|
||||
self.remove_aircraft("F-22A")
|
||||
if not mod_settings.f104_starfighter:
|
||||
|
||||
13
game/game.py
13
game/game.py
@@ -248,7 +248,7 @@ class Game:
|
||||
naming.namegen = self.name_generator
|
||||
LuaPluginManager.load_settings(self.settings)
|
||||
ObjectiveDistanceCache.set_theater(self.theater)
|
||||
self.compute_conflicts_position()
|
||||
self.compute_unculled_zones()
|
||||
if not game_still_initializing:
|
||||
self.compute_threat_zones()
|
||||
|
||||
@@ -389,8 +389,6 @@ class Game:
|
||||
return self.process_win_loss(turn_state)
|
||||
|
||||
# Plan flights & combat for next turn
|
||||
with logged_duration("Computing conflict positions"):
|
||||
self.compute_conflicts_position()
|
||||
with logged_duration("Threat zone computation"):
|
||||
self.compute_threat_zones()
|
||||
|
||||
@@ -408,6 +406,10 @@ class Game:
|
||||
gplanner.plan_groundwar()
|
||||
self.ground_planners[cp.id] = gplanner
|
||||
|
||||
# Update cull zones
|
||||
with logged_duration("Computing culling positions"):
|
||||
self.compute_unculled_zones()
|
||||
|
||||
def message(self, title: str, text: str = "") -> None:
|
||||
self.informations.append(Information(title, text, turn=self.turn))
|
||||
|
||||
@@ -448,10 +450,9 @@ class Game:
|
||||
def navmesh_for(self, player: bool) -> NavMesh:
|
||||
return self.coalition_for(player).nav_mesh
|
||||
|
||||
def compute_conflicts_position(self) -> None:
|
||||
def compute_unculled_zones(self) -> None:
|
||||
"""
|
||||
Compute the current conflict center position(s), mainly used for culling calculation
|
||||
:return: List of points of interests
|
||||
Compute the current conflict position(s) used for culling calculation
|
||||
"""
|
||||
zones = []
|
||||
|
||||
|
||||
@@ -258,6 +258,27 @@ class MirageChannelNamer(ChannelNamer):
|
||||
return "mirage"
|
||||
|
||||
|
||||
class ApacheChannelNamer(ChannelNamer):
|
||||
"""Channel namer for the AH-64D Apache"""
|
||||
|
||||
@staticmethod
|
||||
def channel_name(radio_id: int, channel_id: int) -> str:
|
||||
# From the manual: Radio identifier (“VHF” for ARC-186, “UHF” for ARC-164,
|
||||
# “FM1” for first ARC-201D, “FM2” for second ARC-201D, or “HF” for ARC-220).
|
||||
radio_name = [
|
||||
"VHF", # ARC-186
|
||||
"UHF", # ARC-164
|
||||
"FM1", # first ARC-201D
|
||||
"FM2", # second ARC-201D
|
||||
"HF", # ARC-220
|
||||
][radio_id - 1]
|
||||
return f"{radio_name} Ch {channel_id}"
|
||||
|
||||
@classmethod
|
||||
def name(cls) -> str:
|
||||
return "apache"
|
||||
|
||||
|
||||
class TomcatChannelNamer(ChannelNamer):
|
||||
"""Channel namer for the F-14."""
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ def bounded_int_option(
|
||||
max: int,
|
||||
detail: Optional[str] = None,
|
||||
tooltip: Optional[str] = None,
|
||||
causes_expensive_game_update: bool = False,
|
||||
**kwargs: Any,
|
||||
) -> int:
|
||||
return field(
|
||||
@@ -29,7 +30,7 @@ def bounded_int_option(
|
||||
text,
|
||||
detail,
|
||||
tooltip,
|
||||
causes_expensive_game_update=False,
|
||||
causes_expensive_game_update,
|
||||
min=min,
|
||||
max=max,
|
||||
)
|
||||
|
||||
@@ -430,6 +430,7 @@ class Settings:
|
||||
default=100,
|
||||
min=10,
|
||||
max=10000,
|
||||
causes_expensive_game_update=True,
|
||||
)
|
||||
perf_do_not_cull_carrier: bool = boolean_option(
|
||||
"Do not cull carrier's surroundings",
|
||||
|
||||
@@ -340,7 +340,7 @@ class Squadron:
|
||||
)
|
||||
return
|
||||
|
||||
if self.expected_size_next_turn >= destination.unclaimed_parking():
|
||||
if self.expected_size_next_turn > destination.unclaimed_parking():
|
||||
raise RuntimeError(f"Not enough parking for {self} at {destination}.")
|
||||
if not destination.can_operate(self.aircraft):
|
||||
raise RuntimeError(f"{self} cannot operate at {destination}.")
|
||||
|
||||
@@ -325,8 +325,8 @@ class NevadaTheater(ConflictTheater):
|
||||
terrain = nevada.Nevada()
|
||||
overview_image = "nevada.gif"
|
||||
reference_points = (
|
||||
ReferencePoint(nevada.Mina_Airport_3Q0.position, Point(252, 295)),
|
||||
ReferencePoint(nevada.Laughlin_Airport.position, Point(844, 909)),
|
||||
ReferencePoint(nevada.Mina.position, Point(252, 295)),
|
||||
ReferencePoint(nevada.Laughlin.position, Point(844, 909)),
|
||||
)
|
||||
landmap = load_landmap(Path("resources/nevlandmap.p"))
|
||||
daytime_map = {
|
||||
|
||||
@@ -889,7 +889,12 @@ class Airfield(ControlPoint):
|
||||
# TODO: Allow harrier.
|
||||
# Needs ground spawns just like helos do, but also need to be able to
|
||||
# limit takeoff weight to ~20500 lbs or it won't be able to take off.
|
||||
return self.runway_is_operational()
|
||||
|
||||
# return false if aircraft is fixed wing and airport has no runways
|
||||
if not aircraft.helicopter and not self.airport.runways:
|
||||
return False
|
||||
else:
|
||||
return self.runway_is_operational()
|
||||
|
||||
def mission_types(self, for_player: bool) -> Iterator[FlightType]:
|
||||
from gen.flights.flight import FlightType
|
||||
|
||||
@@ -72,6 +72,7 @@ class ModSettings:
|
||||
f22_raptor: bool = False
|
||||
f104_starfighter: bool = False
|
||||
hercules: bool = False
|
||||
uh_60l: bool = False
|
||||
jas39_gripen: bool = False
|
||||
su57_felon: bool = False
|
||||
frenchpack: bool = False
|
||||
|
||||
@@ -176,7 +176,9 @@ class TheaterGroundObject(MissionTarget, Generic[GroupT]):
|
||||
return self._max_range_of_type(group, "detection_range")
|
||||
|
||||
def max_threat_range(self) -> Distance:
|
||||
return max(self.threat_range(g) for g in self.groups)
|
||||
return (
|
||||
max(self.threat_range(g) for g in self.groups) if self.groups else meters(0)
|
||||
)
|
||||
|
||||
def threat_range(self, group: GroupT, radar_only: bool = False) -> Distance:
|
||||
return self._max_range_of_type(group, "threat_range")
|
||||
@@ -527,7 +529,7 @@ class SamGroundObject(IadsGroundObject):
|
||||
max_tel_range = meters(0)
|
||||
for launcher in launchers:
|
||||
if LAUNCHER_TRACKER_PAIRS[launcher] in live_trs:
|
||||
max_tel_range = max(max_tel_range, meters(unit_type.threat_range))
|
||||
max_tel_range = max(max_tel_range, meters(launcher.threat_range))
|
||||
if radar_only:
|
||||
return max(max_tel_range, max_telar_range)
|
||||
else:
|
||||
|
||||
@@ -21,7 +21,7 @@ INHG_TO_HPA = 33.86389
|
||||
INHG_TO_MMHG = 25.400002776728
|
||||
|
||||
|
||||
@dataclass(frozen=True, order=True)
|
||||
@dataclass(frozen=True)
|
||||
class Distance:
|
||||
distance_in_meters: float
|
||||
|
||||
@@ -73,6 +73,18 @@ class Distance:
|
||||
def __bool__(self) -> bool:
|
||||
return not math.isclose(self.meters, 0.0)
|
||||
|
||||
def __lt__(self, other: Distance) -> bool:
|
||||
return self.meters < other.meters
|
||||
|
||||
def __le__(self, other: Distance) -> bool:
|
||||
return self.meters <= other.meters
|
||||
|
||||
def __gt__(self, other: Distance) -> bool:
|
||||
return self.meters > other.meters
|
||||
|
||||
def __ge__(self, other: Distance) -> bool:
|
||||
return self.meters >= other.meters
|
||||
|
||||
|
||||
def feet(value: float) -> Distance:
|
||||
return Distance.from_feet(value)
|
||||
|
||||
@@ -2,7 +2,7 @@ from pathlib import Path
|
||||
|
||||
|
||||
MAJOR_VERSION = 5
|
||||
MINOR_VERSION = 1
|
||||
MINOR_VERSION = 2
|
||||
MICRO_VERSION = 0
|
||||
|
||||
|
||||
@@ -124,3 +124,6 @@ VERSION = _build_version_string()
|
||||
#: * Campaign files can optionally define a start date with
|
||||
#: `recommended_start_date: YYYY-MM-DD`.
|
||||
CAMPAIGN_FORMAT_VERSION = (9, 1)
|
||||
|
||||
# Version 5.2.0 of DCS Liberation also supports Campaigns of Version 10.0
|
||||
SUPPORTED_CAMPAIGN_VERSION = (10, 0)
|
||||
|
||||
@@ -76,6 +76,7 @@ from game.theater.controlpoint import (
|
||||
Airfield,
|
||||
ControlPoint,
|
||||
ControlPointType,
|
||||
Fob,
|
||||
NavalControlPoint,
|
||||
OffMapSpawn,
|
||||
)
|
||||
@@ -231,7 +232,7 @@ class AircraftConflictGenerator:
|
||||
laser_code_registry: LaserCodeRegistry,
|
||||
unit_map: UnitMap,
|
||||
air_support: AirSupport,
|
||||
helipads: dict[ControlPoint, list[StaticGroup]],
|
||||
helipads: dict[ControlPoint, StaticGroup],
|
||||
) -> None:
|
||||
self.m = mission
|
||||
self.game = game
|
||||
@@ -576,9 +577,9 @@ class AircraftConflictGenerator:
|
||||
)
|
||||
|
||||
try:
|
||||
helipad = self.helipads[cp].pop()
|
||||
except IndexError as ex:
|
||||
raise RuntimeError(f"Not enough helipads available at {cp}") from ex
|
||||
helipad = self.helipads[cp]
|
||||
except IndexError:
|
||||
raise NoParkingSlotError
|
||||
|
||||
group = self._generate_at_group(
|
||||
name=name,
|
||||
@@ -589,21 +590,12 @@ class AircraftConflictGenerator:
|
||||
at=helipad,
|
||||
)
|
||||
|
||||
# Note : A bit dirty, need better support in pydcs
|
||||
group.points[0].action = PointAction.FromGroundArea
|
||||
group.points[0].type = "TakeOffGround"
|
||||
group.units[0].heading = helipad.units[0].heading
|
||||
if start_type != "Cold":
|
||||
group.points[0].action = PointAction.FromGroundAreaHot
|
||||
group.points[0].type = "TakeOffGroundHot"
|
||||
|
||||
group.points[0].type = "TakeOffParkingHot"
|
||||
for i in range(count - 1):
|
||||
try:
|
||||
helipad = self.helipads[cp].pop()
|
||||
group.units[1 + i].position = Point(helipad.x, helipad.y)
|
||||
group.units[1 + i].heading = helipad.units[0].heading
|
||||
except IndexError as ex:
|
||||
raise RuntimeError(f"Not enough helipads available at {cp}") from ex
|
||||
group.units[i].position = helipad.units[i].position
|
||||
group.units[i].heading = helipad.units[i].heading
|
||||
|
||||
return group
|
||||
|
||||
def _add_radio_waypoint(
|
||||
@@ -787,22 +779,20 @@ class AircraftConflictGenerator:
|
||||
start_type=flight.start_type,
|
||||
at=carrier_group,
|
||||
)
|
||||
else:
|
||||
# If the flight is an helicopter flight, then prioritize dedicated helipads
|
||||
if flight.unit_type.helicopter:
|
||||
return self._generate_at_cp_helipad(
|
||||
name=name,
|
||||
side=country,
|
||||
unit_type=flight.unit_type.dcs_unit_type,
|
||||
count=flight.count,
|
||||
start_type=flight.start_type,
|
||||
cp=cp,
|
||||
)
|
||||
|
||||
if not isinstance(cp, Airfield):
|
||||
elif isinstance(cp, Fob):
|
||||
if not flight.unit_type.helicopter:
|
||||
raise RuntimeError(
|
||||
f"Attempted to spawn at airfield for non-airfield {cp}"
|
||||
f"Cannot spawn fixed-wing aircraft at {cp} because it is a FOB"
|
||||
)
|
||||
return self._generate_at_cp_helipad(
|
||||
name=name,
|
||||
side=country,
|
||||
unit_type=flight.unit_type.dcs_unit_type,
|
||||
count=flight.count,
|
||||
start_type=flight.start_type,
|
||||
cp=cp,
|
||||
)
|
||||
elif isinstance(cp, Airfield):
|
||||
return self._generate_at_airport(
|
||||
name=name,
|
||||
side=country,
|
||||
@@ -811,6 +801,10 @@ class AircraftConflictGenerator:
|
||||
start_type=flight.start_type,
|
||||
airport=cp.airport,
|
||||
)
|
||||
else:
|
||||
raise NotImplementedError(
|
||||
f"Aircraft spawn behavior not implemented for {cp} ({cp.__class__})"
|
||||
)
|
||||
except Exception as e:
|
||||
# Generated when there is no place on Runway or on Parking Slots
|
||||
logging.error(e)
|
||||
|
||||
@@ -1058,20 +1058,20 @@ AIRFIELD_DATA = {
|
||||
"8": ("IGZP", MHz(108, 500)),
|
||||
},
|
||||
),
|
||||
# NTTR
|
||||
"Mina Airport 3Q0": AirfieldData(
|
||||
theater="NTTR",
|
||||
# Nevada
|
||||
"Mina": AirfieldData(
|
||||
theater="Nevada",
|
||||
elevation=4562,
|
||||
runway_length=4222,
|
||||
),
|
||||
"Tonopah Airport": AirfieldData(
|
||||
theater="NTTR",
|
||||
"Tonopah": AirfieldData(
|
||||
theater="Nevada",
|
||||
icao="KTPH",
|
||||
elevation=5394,
|
||||
runway_length=6715,
|
||||
),
|
||||
"Tonopah Test Range Airfield": AirfieldData(
|
||||
theater="NTTR",
|
||||
"Tonopah Test Range": AirfieldData(
|
||||
theater="Nevada",
|
||||
icao="KTNX",
|
||||
elevation=5534,
|
||||
runway_length=11633,
|
||||
@@ -1083,19 +1083,19 @@ AIRFIELD_DATA = {
|
||||
"14": ("I-RVP", MHz(108, 300)),
|
||||
},
|
||||
),
|
||||
"Beatty Airport": AirfieldData(
|
||||
theater="NTTR",
|
||||
"Beatty": AirfieldData(
|
||||
theater="Nevada",
|
||||
icao="KBTY",
|
||||
elevation=3173,
|
||||
runway_length=5380,
|
||||
),
|
||||
"Pahute Mesa Airstrip": AirfieldData(
|
||||
theater="NTTR",
|
||||
"Pahute Mesa": AirfieldData(
|
||||
theater="Nevada",
|
||||
elevation=5056,
|
||||
runway_length=5420,
|
||||
),
|
||||
"Groom Lake AFB": AirfieldData(
|
||||
theater="NTTR",
|
||||
"Groom Lake": AirfieldData(
|
||||
theater="Nevada",
|
||||
icao="KXTA",
|
||||
elevation=4494,
|
||||
runway_length=11008,
|
||||
@@ -1107,18 +1107,18 @@ AIRFIELD_DATA = {
|
||||
},
|
||||
),
|
||||
"Lincoln County": AirfieldData(
|
||||
theater="NTTR",
|
||||
theater="Nevada",
|
||||
elevation=4815,
|
||||
runway_length=4408,
|
||||
),
|
||||
"Mesquite": AirfieldData(
|
||||
theater="NTTR",
|
||||
theater="Nevada",
|
||||
icao="67L",
|
||||
elevation=1858,
|
||||
runway_length=4937,
|
||||
),
|
||||
"Creech AFB": AirfieldData(
|
||||
theater="NTTR",
|
||||
"Creech": AirfieldData(
|
||||
theater="Nevada",
|
||||
icao="KINS",
|
||||
elevation=3126,
|
||||
runway_length=6100,
|
||||
@@ -1130,7 +1130,7 @@ AIRFIELD_DATA = {
|
||||
},
|
||||
),
|
||||
"Echo Bay": AirfieldData(
|
||||
theater="NTTR",
|
||||
theater="Nevada",
|
||||
icao="OL9",
|
||||
elevation=3126,
|
||||
runway_length=6100,
|
||||
@@ -1138,8 +1138,8 @@ AIRFIELD_DATA = {
|
||||
tacan_callsign="INS",
|
||||
atc=AtcData(MHz(3, 825), MHz(118, 300), MHz(38, 550), MHz(360, 600)),
|
||||
),
|
||||
"Nellis AFB": AirfieldData(
|
||||
theater="NTTR",
|
||||
"Nellis": AirfieldData(
|
||||
theater="Nevada",
|
||||
icao="KLSV",
|
||||
elevation=1841,
|
||||
runway_length=9454,
|
||||
@@ -1151,14 +1151,14 @@ AIRFIELD_DATA = {
|
||||
},
|
||||
),
|
||||
"North Las Vegas": AirfieldData(
|
||||
theater="NTTR",
|
||||
theater="Nevada",
|
||||
icao="KVGT",
|
||||
elevation=2228,
|
||||
runway_length=4734,
|
||||
atc=AtcData(MHz(3, 775), MHz(125, 700), MHz(38, 450), MHz(360, 750)),
|
||||
),
|
||||
"McCarran International Airport": AirfieldData(
|
||||
theater="NTTR",
|
||||
"McCarran International": AirfieldData(
|
||||
theater="Nevada",
|
||||
icao="KLAS",
|
||||
elevation=2169,
|
||||
runway_length=10377,
|
||||
@@ -1169,26 +1169,26 @@ AIRFIELD_DATA = {
|
||||
"25": ("I-LAS", MHz(110, 300)),
|
||||
},
|
||||
),
|
||||
"Henderson Executive Airport": AirfieldData(
|
||||
theater="NTTR",
|
||||
"Henderson Executive": AirfieldData(
|
||||
theater="Nevada",
|
||||
icao="KHND",
|
||||
elevation=2491,
|
||||
runway_length=5999,
|
||||
atc=AtcData(MHz(3, 925), MHz(125, 100), MHz(38, 750), MHz(250, 100)),
|
||||
),
|
||||
"Boulder City Airport": AirfieldData(
|
||||
theater="NTTR",
|
||||
"Boulder City": AirfieldData(
|
||||
theater="Nevada",
|
||||
icao="KBVU",
|
||||
elevation=2121,
|
||||
runway_length=4612,
|
||||
),
|
||||
"Jean Airport": AirfieldData(
|
||||
theater="NTTR",
|
||||
"Jean": AirfieldData(
|
||||
theater="Nevada",
|
||||
elevation=2824,
|
||||
runway_length=4053,
|
||||
),
|
||||
"Laughlin Airport": AirfieldData(
|
||||
theater="NTTR",
|
||||
"Laughlin": AirfieldData(
|
||||
theater="Nevada",
|
||||
icao="KIFP",
|
||||
elevation=656,
|
||||
runway_length=7139,
|
||||
|
||||
@@ -6,6 +6,7 @@ from dcs.helicopters import (
|
||||
AH_1W,
|
||||
AH_64A,
|
||||
AH_64D,
|
||||
AH_64D_BLK_II,
|
||||
CH_47D,
|
||||
CH_53E,
|
||||
Ka_50,
|
||||
@@ -125,6 +126,8 @@ from pydcs_extensions.su57.su57 import Su_57
|
||||
# factions that also have F-4s should not.
|
||||
|
||||
# Used for CAP, Escort, and intercept if there is not a specialised aircraft available
|
||||
from pydcs_extensions.uh60l.uh60l import UH_60L, KC130J
|
||||
|
||||
CAP_CAPABLE = [
|
||||
Su_57,
|
||||
F_22A,
|
||||
@@ -208,6 +211,7 @@ CAS_CAPABLE = [
|
||||
MiG_27K,
|
||||
MiG_29A,
|
||||
MiG_21Bis,
|
||||
AH_64D_BLK_II,
|
||||
AH_64D,
|
||||
AH_64A,
|
||||
AH_1W,
|
||||
@@ -470,6 +474,7 @@ TRANSPORT_CAPABLE = [
|
||||
Yak_40,
|
||||
CH_53E,
|
||||
CH_47D,
|
||||
UH_60L,
|
||||
SH_60B,
|
||||
UH_60A,
|
||||
UH_1H,
|
||||
@@ -492,6 +497,7 @@ REFUELING_CAPABALE = [
|
||||
KC_135,
|
||||
KC135MPRS,
|
||||
IL_78M,
|
||||
KC130J,
|
||||
KC130,
|
||||
S_3B_Tanker,
|
||||
]
|
||||
|
||||
@@ -605,43 +605,56 @@ class HelipadGenerator:
|
||||
self.game = game
|
||||
self.radio_registry = radio_registry
|
||||
self.tacan_registry = tacan_registry
|
||||
self.helipads: list[StaticGroup] = []
|
||||
self.helipads: Optional[StaticGroup] = None
|
||||
|
||||
def generate(self) -> None:
|
||||
|
||||
# Note : Helipad are generated as neutral object in order not to interfer with capture triggers
|
||||
neutral_country = self.m.country(self.game.neutral_country.name)
|
||||
# This gets called for every control point, so we don't want to add an empty group (causes DCS mission editor to crash)
|
||||
if len(self.cp.helipads) == 0:
|
||||
return
|
||||
# Note: Helipad are generated as neutral object in order not to interfer with
|
||||
# capture triggers
|
||||
country = self.m.country(self.game.coalition_for(self.cp.captured).country_name)
|
||||
|
||||
for i, helipad in enumerate(self.cp.helipads):
|
||||
name = self.cp.name + "_helipad_" + str(i)
|
||||
logging.info("Generating helipad static : " + name)
|
||||
pad = InvisibleFARP(unit_id=self.m.next_unit_id(), name=name)
|
||||
pad.position = Point(helipad.x, helipad.y)
|
||||
pad.heading = helipad.heading.degrees
|
||||
sg = unitgroup.StaticGroup(self.m.next_group_id(), name)
|
||||
sg.add_unit(pad)
|
||||
sp = StaticPoint()
|
||||
sp.position = pad.position
|
||||
sg.add_point(sp)
|
||||
neutral_country.add_static_group(sg)
|
||||
|
||||
self.helipads.append(sg)
|
||||
|
||||
heading = helipad.heading.degrees
|
||||
name_i = self.cp.name + "_helipad" + "_" + str(i)
|
||||
if self.helipads is None:
|
||||
self.helipads = self.m.farp(
|
||||
self.m.country(self.game.neutral_country.name),
|
||||
name_i,
|
||||
helipad,
|
||||
farp_type="InvisibleFARP",
|
||||
)
|
||||
else:
|
||||
# Create a new Helipad Unit
|
||||
self.helipads.add_unit(InvisibleFARP(self.m.next_unit_id(), name_i))
|
||||
pad = self.helipads.units[-1]
|
||||
pad.position = helipad
|
||||
pad.heading = heading
|
||||
# Generate a FARP Ammo and Fuel stack for each pad
|
||||
self.m.static_group(
|
||||
country=country,
|
||||
name=(name + "_fuel"),
|
||||
name=(name_i + "_fuel"),
|
||||
_type=Fortification.FARP_Fuel_Depot,
|
||||
position=pad.position.point_from_heading(helipad.heading.degrees, 35),
|
||||
heading=pad.heading,
|
||||
position=helipad.point_from_heading(heading, 35),
|
||||
heading=heading,
|
||||
)
|
||||
self.m.static_group(
|
||||
country=country,
|
||||
name=(name + "_ammo"),
|
||||
name=(name_i + "_ammo"),
|
||||
_type=Fortification.FARP_Ammo_Dump_Coating,
|
||||
position=helipad.point_from_heading(heading, 35).point_from_heading(
|
||||
heading + 90, 10
|
||||
),
|
||||
heading=heading,
|
||||
)
|
||||
self.m.static_group(
|
||||
country=country,
|
||||
name=(name_i + "_ws"),
|
||||
_type=Fortification.Windsock,
|
||||
position=pad.position.point_from_heading(
|
||||
helipad.heading.degrees, 35
|
||||
).point_from_heading(helipad.heading.degrees + 90, 10),
|
||||
helipad.heading.degrees + 45, 35
|
||||
),
|
||||
heading=pad.heading,
|
||||
)
|
||||
|
||||
@@ -670,7 +683,7 @@ class GroundObjectsGenerator:
|
||||
self.unit_map = unit_map
|
||||
self.icls_alloc = iter(range(1, 21))
|
||||
self.runways: Dict[str, RunwayData] = {}
|
||||
self.helipads: dict[ControlPoint, list[StaticGroup]] = defaultdict(list)
|
||||
self.helipads: dict[ControlPoint, StaticGroup] = {}
|
||||
|
||||
def generate(self) -> None:
|
||||
for cp in self.game.theater.controlpoints:
|
||||
@@ -681,7 +694,8 @@ class GroundObjectsGenerator:
|
||||
self.m, cp, self.game, self.radio_registry, self.tacan_registry
|
||||
)
|
||||
helipad_gen.generate()
|
||||
self.helipads[cp] = helipad_gen.helipads
|
||||
if helipad_gen.helipads is not None:
|
||||
self.helipads[cp] = helipad_gen.helipads
|
||||
|
||||
for ground_object in cp.ground_objects:
|
||||
generator: GenericGroundObjectGenerator[Any]
|
||||
|
||||
@@ -63,13 +63,6 @@ class AllyWW2FlakGenerator(AirDefenseGroupGenerator):
|
||||
self.position.y + 20,
|
||||
Heading.random(),
|
||||
)
|
||||
self.add_unit(
|
||||
Unarmed.M4_Tractor,
|
||||
"LOG#2",
|
||||
self.position.x + 20,
|
||||
self.position.y,
|
||||
Heading.random(),
|
||||
)
|
||||
self.add_unit(
|
||||
Unarmed.Bedford_MWD,
|
||||
"LOG#3",
|
||||
|
||||
@@ -49,7 +49,7 @@ from gen.sam.sam_sa17 import SA17Generator
|
||||
from gen.sam.sam_sa19 import SA19Generator
|
||||
from gen.sam.sam_sa2 import SA2Generator
|
||||
from gen.sam.sam_sa3 import SA3Generator
|
||||
from gen.sam.sam_sa5 import SA5Generator
|
||||
from gen.sam.sam_sa5 import SA5Generator, SA5FlatFaceGenerator
|
||||
from gen.sam.sam_sa6 import SA6Generator
|
||||
from gen.sam.sam_sa8 import SA8Generator
|
||||
from gen.sam.sam_sa9 import SA9Generator
|
||||
@@ -79,6 +79,7 @@ SAM_MAP: Dict[str, Type[AirDefenseGroupGenerator]] = {
|
||||
"SA2Generator": SA2Generator,
|
||||
"SA3Generator": SA3Generator,
|
||||
"SA5Generator": SA5Generator,
|
||||
"SA5FlatFaceGenerator": SA5FlatFaceGenerator,
|
||||
"SA6Generator": SA6Generator,
|
||||
"SA8Generator": SA8Generator,
|
||||
"SA9Generator": SA9Generator,
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
from typing import Type
|
||||
|
||||
from dcs.unittype import VehicleType
|
||||
from dcs.vehicles import AirDefence, Unarmed
|
||||
|
||||
from game import Game
|
||||
from game.theater import SamGroundObject
|
||||
from gen.sam.airdefensegroupgenerator import (
|
||||
AirDefenseRange,
|
||||
AirDefenseGroupGenerator,
|
||||
@@ -8,15 +13,18 @@ from gen.sam.airdefensegroupgenerator import (
|
||||
|
||||
class SA5Generator(AirDefenseGroupGenerator):
|
||||
"""
|
||||
This generate a SA-5 group
|
||||
This generate a SA-5 group using the TinShield SR
|
||||
"""
|
||||
|
||||
name = "SA-5/S-200 Site"
|
||||
|
||||
def generate(self) -> None:
|
||||
def __init__(self, game: Game, ground_object: SamGroundObject):
|
||||
super().__init__(game, ground_object)
|
||||
self.sr: Type[VehicleType] = AirDefence.RLS_19J6
|
||||
|
||||
def generate(self) -> None:
|
||||
self.add_unit(
|
||||
AirDefence.RLS_19J6,
|
||||
self.sr,
|
||||
"SR",
|
||||
self.position.x,
|
||||
self.position.y,
|
||||
@@ -54,3 +62,14 @@ class SA5Generator(AirDefenseGroupGenerator):
|
||||
@classmethod
|
||||
def range(cls) -> AirDefenseRange:
|
||||
return AirDefenseRange.Long
|
||||
|
||||
|
||||
# TODO Replace this legacy handling once the Generators can be faction sensitive #1903
|
||||
class SA5FlatFaceGenerator(SA5Generator):
|
||||
"""
|
||||
This generate a SA-5 group using the P-19 FlatFace SR
|
||||
"""
|
||||
|
||||
def __init__(self, game: Game, ground_object: SamGroundObject):
|
||||
super().__init__(game, ground_object)
|
||||
self.sr: Type[VehicleType] = AirDefence.P_19_s_125_sr
|
||||
|
||||
@@ -27,13 +27,6 @@ class SA8Generator(AirDefenseGroupGenerator):
|
||||
position[1],
|
||||
position[2],
|
||||
)
|
||||
self.add_unit(
|
||||
AirDefence.SA_8_Osa_LD_9T217,
|
||||
"LD",
|
||||
self.position.x + 20,
|
||||
self.position.y,
|
||||
self.heading,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def range(cls) -> AirDefenseRange:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1500,10 +1500,6 @@ class VSN_F104G(PlaneType):
|
||||
4,
|
||||
Weapons.LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE,
|
||||
)
|
||||
BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M282__HEDP = (
|
||||
4,
|
||||
Weapons.BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M282__HEDP,
|
||||
)
|
||||
AIM_9M_Sidewinder_IR_AAM = (4, Weapons.AIM_9M_Sidewinder_IR_AAM)
|
||||
AIM_9L_Sidewinder_IR_AAM = (4, Weapons.AIM_9L_Sidewinder_IR_AAM)
|
||||
AIM_9B_Sidewinder_IR_AAM = (4, Weapons.AIM_9B_Sidewinder_IR_AAM)
|
||||
@@ -1576,10 +1572,6 @@ class VSN_F104G(PlaneType):
|
||||
8,
|
||||
Weapons.LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE,
|
||||
)
|
||||
BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M282__HEDP = (
|
||||
8,
|
||||
Weapons.BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M282__HEDP,
|
||||
)
|
||||
AIM_9M_Sidewinder_IR_AAM = (8, Weapons.AIM_9M_Sidewinder_IR_AAM)
|
||||
AIM_9L_Sidewinder_IR_AAM = (8, Weapons.AIM_9L_Sidewinder_IR_AAM)
|
||||
AIM_9B_Sidewinder_IR_AAM = (8, Weapons.AIM_9B_Sidewinder_IR_AAM)
|
||||
@@ -2348,10 +2340,6 @@ class VSN_F104S_AG(PlaneType):
|
||||
4,
|
||||
Weapons.LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE,
|
||||
)
|
||||
BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M282__HEDP = (
|
||||
4,
|
||||
Weapons.BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M282__HEDP,
|
||||
)
|
||||
AIM_9M_Sidewinder_IR_AAM = (4, Weapons.AIM_9M_Sidewinder_IR_AAM)
|
||||
AIM_9L_Sidewinder_IR_AAM = (4, Weapons.AIM_9L_Sidewinder_IR_AAM)
|
||||
AIM_9B_Sidewinder_IR_AAM = (4, Weapons.AIM_9B_Sidewinder_IR_AAM)
|
||||
@@ -2429,10 +2417,6 @@ class VSN_F104S_AG(PlaneType):
|
||||
8,
|
||||
Weapons.LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M151__HE,
|
||||
)
|
||||
BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M282__HEDP = (
|
||||
8,
|
||||
Weapons.BRU_33_with_2_x_LAU_61_pod___19_x_2_75_Hydra__UnGd_Rkts_M282__HEDP,
|
||||
)
|
||||
AIM_9M_Sidewinder_IR_AAM = (8, Weapons.AIM_9M_Sidewinder_IR_AAM)
|
||||
AIM_9B_Sidewinder_IR_AAM = (8, Weapons.AIM_9B_Sidewinder_IR_AAM)
|
||||
AIM_9L_Sidewinder_IR_AAM = (8, Weapons.AIM_9L_Sidewinder_IR_AAM)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6,6 +6,7 @@ from pydcs_extensions.highdigitsams import highdigitsams
|
||||
from pydcs_extensions.jas39.jas39 import JAS39Gripen, JAS39Gripen_AG
|
||||
from pydcs_extensions.su57.su57 import Su_57
|
||||
import pydcs_extensions.frenchpack.frenchpack as frenchpack
|
||||
from pydcs_extensions.uh60l.uh60l import UH_60L, KC130J
|
||||
|
||||
MODDED_AIRPLANES = [
|
||||
A_4E_C,
|
||||
@@ -15,9 +16,13 @@ MODDED_AIRPLANES = [
|
||||
VSN_F104S,
|
||||
VSN_F104S_AG,
|
||||
Hercules,
|
||||
KC130J,
|
||||
JAS39Gripen,
|
||||
JAS39Gripen_AG,
|
||||
]
|
||||
MODDED_HELICOPTERS = [
|
||||
UH_60L,
|
||||
]
|
||||
MODDED_VEHICLES = [
|
||||
frenchpack._FIELD_HIDE,
|
||||
frenchpack._FIELD_HIDE_SMALL,
|
||||
|
||||
1292
pydcs_extensions/uh60l/uh60l.py
Normal file
1292
pydcs_extensions/uh60l/uh60l.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -22,6 +22,7 @@ def init():
|
||||
global __dcs_saved_game_directory
|
||||
global __dcs_installation_directory
|
||||
global __last_save_file
|
||||
global __ignore_empty_install_directory
|
||||
|
||||
if PREFERENCES_PATH.exists():
|
||||
try:
|
||||
@@ -31,14 +32,19 @@ def init():
|
||||
__dcs_saved_game_directory = pref_data["saved_game_dir"]
|
||||
__dcs_installation_directory = pref_data["dcs_install_dir"]
|
||||
__last_save_file = pref_data.get("last_save_file", "")
|
||||
__ignore_empty_install_directory = pref_data.get(
|
||||
"ignore_empty_install_directory", False
|
||||
)
|
||||
is_first_start = False
|
||||
except KeyError:
|
||||
__dcs_saved_game_directory = ""
|
||||
__dcs_installation_directory = ""
|
||||
__last_save_file = ""
|
||||
__ignore_empty_install_directory = False
|
||||
is_first_start = True
|
||||
else:
|
||||
__last_save_file = ""
|
||||
__ignore_empty_install_directory = False
|
||||
try:
|
||||
__dcs_saved_game_directory = (
|
||||
dcs.installation.get_dcs_saved_games_directory()
|
||||
@@ -76,10 +82,12 @@ def save_config():
|
||||
global __dcs_saved_game_directory
|
||||
global __dcs_installation_directory
|
||||
global __last_save_file
|
||||
global __ignore_empty_install_directory
|
||||
pref_data = {
|
||||
"saved_game_dir": __dcs_saved_game_directory,
|
||||
"dcs_install_dir": __dcs_installation_directory,
|
||||
"last_save_file": __last_save_file,
|
||||
"ignore_empty_install_directory": __ignore_empty_install_directory,
|
||||
}
|
||||
PREFERENCES_PATH.parent.mkdir(exist_ok=True, parents=True)
|
||||
with PREFERENCES_PATH.open("w") as prefs:
|
||||
@@ -96,6 +104,16 @@ def get_saved_game_dir():
|
||||
return __dcs_saved_game_directory
|
||||
|
||||
|
||||
def ignore_empty_install_directory():
|
||||
global __ignore_empty_install_directory
|
||||
return __ignore_empty_install_directory
|
||||
|
||||
|
||||
def set_ignore_empty_install_directory(value: bool):
|
||||
global __ignore_empty_install_directory
|
||||
__ignore_empty_install_directory = value
|
||||
|
||||
|
||||
def get_last_save_file():
|
||||
global __last_save_file
|
||||
print(__last_save_file)
|
||||
|
||||
@@ -2,6 +2,7 @@ import argparse
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
@@ -9,7 +10,7 @@ from typing import Optional
|
||||
from PySide2 import QtWidgets
|
||||
from PySide2.QtCore import Qt
|
||||
from PySide2.QtGui import QPixmap
|
||||
from PySide2.QtWidgets import QApplication, QSplashScreen
|
||||
from PySide2.QtWidgets import QApplication, QSplashScreen, QCheckBox
|
||||
from dcs.payloads import PayloadDirectories
|
||||
|
||||
from game import Game, VERSION, persistency
|
||||
@@ -56,10 +57,15 @@ def inject_custom_payloads(user_path: Path) -> None:
|
||||
|
||||
|
||||
def run_ui(game: Optional[Game]) -> None:
|
||||
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1" # Potential fix for 4K screens
|
||||
os.environ["QT_ENABLE_HIGHDPI_SCALING"] = "1" # Potential fix for 4K screens
|
||||
QApplication.setHighDpiScaleFactorRoundingPolicy(
|
||||
Qt.HighDpiScaleFactorRoundingPolicy.PassThrough
|
||||
)
|
||||
app = QApplication(sys.argv)
|
||||
|
||||
app.setAttribute(Qt.AA_DisableWindowContextHelpButton)
|
||||
app.setAttribute(Qt.AA_EnableHighDpiScaling, True) # enable highdpi scaling
|
||||
app.setAttribute(Qt.AA_UseHighDpiPixmaps, True) # use highdpi icons
|
||||
|
||||
# init the theme and load the stylesheet based on the theme index
|
||||
liberation_theme.init()
|
||||
@@ -89,6 +95,9 @@ def run_ui(game: Optional[Game]) -> None:
|
||||
splash = QSplashScreen(pixmap)
|
||||
splash.show()
|
||||
|
||||
# Give enough time to read splash screen
|
||||
time.sleep(3)
|
||||
|
||||
# Once splash screen is up : load resources & setup stuff
|
||||
uiconstants.load_icons()
|
||||
uiconstants.load_event_icons()
|
||||
@@ -99,20 +108,29 @@ def run_ui(game: Optional[Game]) -> None:
|
||||
|
||||
# Show warning if no DCS Installation directory was set
|
||||
if liberation_install.get_dcs_install_directory() == "":
|
||||
QtWidgets.QMessageBox.warning(
|
||||
splash,
|
||||
"No DCS installation directory.",
|
||||
"The DCS Installation directory is not set correctly. "
|
||||
"This will prevent DCS Liberation to work properly as the MissionScripting "
|
||||
"file will not be modified."
|
||||
"<br/><br/>To solve this problem, you can set the Installation directory "
|
||||
"within the preferences menu. You can also manually edit or replace the "
|
||||
"following file:"
|
||||
"<br/><br/><strong><dcs_installation_directory>/Scripts/MissionScripting.lua</strong>"
|
||||
"<br/><br/>The easiest way to do it is to replace the original file with the file in dcs-liberation distribution (<dcs_liberation_installation>/resources/scripts/MissionScripting.lua)."
|
||||
"<br/><br/>You can find more information on how to manually change this file in the Liberation Wiki (Page: Dedicated Server Guide) on GitHub.</p>",
|
||||
QtWidgets.QMessageBox.StandardButton.Ok,
|
||||
logging.warning(
|
||||
"DCS Installation directory is empty. MissionScripting file will not be replaced!"
|
||||
)
|
||||
if not liberation_install.ignore_empty_install_directory():
|
||||
ignore_checkbox = QCheckBox("Do not show again")
|
||||
ignore_checkbox.stateChanged.connect(set_ignore_empty_install_directory)
|
||||
message_box = QtWidgets.QMessageBox(parent=splash)
|
||||
message_box.setIcon(QtWidgets.QMessageBox.Icon.Warning)
|
||||
message_box.setWindowTitle("No DCS installation directory.")
|
||||
message_box.setText(
|
||||
"The DCS Installation directory is not set correctly. "
|
||||
"This will prevent DCS Liberation to work properly as the MissionScripting "
|
||||
"file will not be modified."
|
||||
"<br/><br/>To solve this problem, you can set the Installation directory "
|
||||
"within the preferences menu. You can also manually edit or replace the "
|
||||
"following file:"
|
||||
"<br/><br/><strong><dcs_installation_directory>/Scripts/MissionScripting.lua</strong>"
|
||||
"<br/><br/>The easiest way to do it is to replace the original file with the file in dcs-liberation distribution (<dcs_liberation_installation>/resources/scripts/MissionScripting.lua)."
|
||||
"<br/><br/>You can find more information on how to manually change this file in the Liberation Wiki (Page: Dedicated Server Guide) on GitHub.</p>"
|
||||
)
|
||||
message_box.setDefaultButton(QtWidgets.QMessageBox.StandardButton.Ok)
|
||||
message_box.setCheckBox(ignore_checkbox)
|
||||
message_box.exec_()
|
||||
# Replace DCS Mission scripting file to allow DCS Liberation to work
|
||||
try:
|
||||
liberation_install.replace_mission_scripting_file()
|
||||
@@ -274,6 +292,11 @@ def create_game(
|
||||
return game
|
||||
|
||||
|
||||
def set_ignore_empty_install_directory(value: bool) -> None:
|
||||
liberation_install.set_ignore_empty_install_directory(value)
|
||||
liberation_install.save_config()
|
||||
|
||||
|
||||
def lint_all_weapon_data() -> None:
|
||||
for weapon in WeaponGroup.named("Unknown").weapons:
|
||||
logging.warning(f"No weapon data for {weapon}: {weapon.clsid}")
|
||||
@@ -294,6 +317,11 @@ def main():
|
||||
|
||||
logging.debug("Python version %s", sys.version)
|
||||
|
||||
if not str(Path(__file__)).isascii():
|
||||
logging.warning(
|
||||
"Installation path contains non-ASCII characters. This is known to cause problems."
|
||||
)
|
||||
|
||||
game: Optional[Game] = None
|
||||
|
||||
args = parse_args()
|
||||
|
||||
@@ -214,6 +214,7 @@ class AtoModel(QAbstractListModel):
|
||||
PackageRole = Qt.UserRole
|
||||
|
||||
client_slots_changed = Signal()
|
||||
packages_changed = Signal()
|
||||
|
||||
def __init__(self, game_model: GameModel, ato: AirTaskingOrder) -> None:
|
||||
super().__init__()
|
||||
@@ -245,6 +246,7 @@ class AtoModel(QAbstractListModel):
|
||||
self.endInsertRows()
|
||||
# noinspection PyUnresolvedReferences
|
||||
self.client_slots_changed.emit()
|
||||
self.on_packages_changed()
|
||||
|
||||
def delete_package_at_index(self, index: QModelIndex) -> None:
|
||||
"""Removes the package at the given index from the ATO."""
|
||||
@@ -263,6 +265,12 @@ class AtoModel(QAbstractListModel):
|
||||
self.endRemoveRows()
|
||||
# noinspection PyUnresolvedReferences
|
||||
self.client_slots_changed.emit()
|
||||
self.on_packages_changed()
|
||||
|
||||
def on_packages_changed(self) -> None:
|
||||
if self.game is not None:
|
||||
self.game.compute_unculled_zones()
|
||||
self.packages_changed.emit()
|
||||
|
||||
def package_at_index(self, index: QModelIndex) -> Package:
|
||||
"""Returns the package at the given index."""
|
||||
|
||||
@@ -34,6 +34,7 @@ def load_icons():
|
||||
ICONS["Github"] = QPixmap(
|
||||
"./resources/ui/misc/" + get_theme_icons() + "/github.png"
|
||||
)
|
||||
ICONS["Ukraine"] = QPixmap("./resources/ui/misc/ukraine.png")
|
||||
|
||||
ICONS["Control Points"] = QPixmap(
|
||||
"./resources/ui/misc/" + get_theme_icons() + "/circle.png"
|
||||
|
||||
@@ -1057,6 +1057,12 @@ class MapModel(QObject):
|
||||
GameUpdateSignal.get_instance().flight_selection_changed.connect(
|
||||
self.set_flight_selection
|
||||
)
|
||||
self.game_model.ato_model_for(True).packages_changed.connect(
|
||||
self.on_package_change
|
||||
)
|
||||
self.game_model.ato_model_for(False).packages_changed.connect(
|
||||
self.on_package_change
|
||||
)
|
||||
self.reset()
|
||||
|
||||
def clear(self) -> None:
|
||||
@@ -1291,6 +1297,9 @@ class MapModel(QObject):
|
||||
def mapZones(self) -> NavMeshJs:
|
||||
return self._map_zones
|
||||
|
||||
def on_package_change(self) -> None:
|
||||
self.reset_unculled_zones()
|
||||
|
||||
def reset_unculled_zones(self) -> None:
|
||||
self._unculled_zones = list(UnculledZone.each_from_game(self.game))
|
||||
self.unculledZonesChanged.emit()
|
||||
|
||||
@@ -155,6 +155,12 @@ class QLiberationWindow(QMainWindow):
|
||||
)
|
||||
)
|
||||
|
||||
self.ukraineAction = QAction("&Ukraine", self)
|
||||
self.ukraineAction.setIcon(CONST.ICONS["Ukraine"])
|
||||
self.ukraineAction.triggered.connect(
|
||||
lambda: webbrowser.open_new_tab("https://shdwp.github.io/ukraine/")
|
||||
)
|
||||
|
||||
self.openLogsAction = QAction("Show &logs", self)
|
||||
self.openLogsAction.triggered.connect(self.showLogsDialog)
|
||||
|
||||
@@ -192,6 +198,7 @@ class QLiberationWindow(QMainWindow):
|
||||
self.links_bar = self.addToolBar("Links")
|
||||
self.links_bar.addAction(self.openDiscordAction)
|
||||
self.links_bar.addAction(self.openGithubAction)
|
||||
self.links_bar.addAction(self.ukraineAction)
|
||||
|
||||
self.actions_bar = self.addToolBar("Actions")
|
||||
self.actions_bar.addAction(self.openSettingsAction)
|
||||
@@ -215,6 +222,7 @@ class QLiberationWindow(QMainWindow):
|
||||
help_menu = self.menu.addMenu("&Help")
|
||||
help_menu.addAction(self.openDiscordAction)
|
||||
help_menu.addAction(self.openGithubAction)
|
||||
help_menu.addAction(self.ukraineAction)
|
||||
help_menu.addAction(
|
||||
"&Releases",
|
||||
lambda: webbrowser.open_new_tab(
|
||||
@@ -360,6 +368,8 @@ class QLiberationWindow(QMainWindow):
|
||||
"<b>Ciribob </b> <i>for the JTACAutoLase.lua script</i><br/>"
|
||||
"<b>Walder </b> <i>for the Skynet-IADS script</i><br/>"
|
||||
"<b>Anubis Yinepu </b> <i>for the Hercules Cargo script</i><br/>"
|
||||
+ "<h4>Splash Screen :</h4>"
|
||||
+ "Artwork by Andriy Dankovych (CC BY-SA) [https://www.facebook.com/AndriyDankovych]"
|
||||
)
|
||||
about = QMessageBox()
|
||||
about.setWindowTitle("About DCS Liberation")
|
||||
|
||||
@@ -55,10 +55,10 @@ class FinancesLayout(QGridLayout):
|
||||
def add_total(self, game, income, player):
|
||||
self.add_row(
|
||||
middle=f"Income multiplier: {income.multiplier:.1f}",
|
||||
right=f"<b>{income.total}M</b>",
|
||||
right=f"<b>{income.total:.1f}M</b>",
|
||||
)
|
||||
budget = game.coalition_for(player).budget
|
||||
self.add_row(middle="Balance", right=f"<b>{budget}M</b>")
|
||||
self.add_row(middle="Balance", right=f"<b>{budget:.1f}M</b>")
|
||||
self.setRowStretch(next(self.row), 1)
|
||||
|
||||
def add_row(
|
||||
|
||||
@@ -40,6 +40,9 @@ class QFlightCreator(QDialog):
|
||||
self.custom_name_text = None
|
||||
self.country = self.game.blue.country_name
|
||||
|
||||
# Make dialog modal to prevent background windows to close unexpectedly.
|
||||
self.setModal(True)
|
||||
|
||||
self.setWindowTitle("Create flight")
|
||||
self.setWindowIcon(EVENT_ICONS["strike"])
|
||||
|
||||
|
||||
@@ -70,6 +70,8 @@ class NewGameWizard(QtWidgets.QWizard):
|
||||
if campaign is None:
|
||||
campaign = self.campaigns[0]
|
||||
|
||||
logging.info("New campaign selected: %s", campaign.name)
|
||||
|
||||
if self.field("usePreset"):
|
||||
start_date = db.TIME_PERIODS[
|
||||
list(db.TIME_PERIODS.keys())[self.field("timePeriod")]
|
||||
@@ -77,6 +79,7 @@ class NewGameWizard(QtWidgets.QWizard):
|
||||
else:
|
||||
start_date = self.theater_page.calendar.selectedDate().toPython()
|
||||
|
||||
logging.info("New campaign start date: %s", start_date.strftime("%m/%d/%Y"))
|
||||
settings = Settings(
|
||||
player_income_multiplier=self.field("player_income_multiplier") / 10,
|
||||
enemy_income_multiplier=self.field("enemy_income_multiplier") / 10,
|
||||
@@ -107,6 +110,7 @@ class NewGameWizard(QtWidgets.QWizard):
|
||||
f22_raptor=self.field("f22_raptor"),
|
||||
f104_starfighter=self.field("f104_starfighter"),
|
||||
hercules=self.field("hercules"),
|
||||
uh_60l=self.field("uh_60l"),
|
||||
jas39_gripen=self.field("jas39_gripen"),
|
||||
su57_felon=self.field("su57_felon"),
|
||||
frenchpack=self.field("frenchpack"),
|
||||
@@ -115,7 +119,14 @@ class NewGameWizard(QtWidgets.QWizard):
|
||||
|
||||
blue_faction = self.faction_selection_page.selected_blue_faction
|
||||
red_faction = self.faction_selection_page.selected_red_faction
|
||||
|
||||
logging.info("New campaign blue faction: %s", blue_faction.name)
|
||||
logging.info("New campaign red faction: %s", red_faction.name)
|
||||
|
||||
theater = campaign.load_theater()
|
||||
|
||||
logging.info("New campaign theater: %s", theater.terrain.name)
|
||||
|
||||
generator = GameGenerator(
|
||||
blue_faction,
|
||||
red_faction,
|
||||
@@ -563,6 +574,8 @@ class GeneratorOptions(QtWidgets.QWizardPage):
|
||||
self.registerField("a4_skyhawk", a4_skyhawk)
|
||||
hercules = QtWidgets.QCheckBox()
|
||||
self.registerField("hercules", hercules)
|
||||
uh_60l = QtWidgets.QCheckBox()
|
||||
self.registerField("uh_60l", uh_60l)
|
||||
f22_raptor = QtWidgets.QCheckBox()
|
||||
self.registerField("f22_raptor", f22_raptor)
|
||||
f104_starfighter = QtWidgets.QCheckBox()
|
||||
@@ -582,22 +595,38 @@ class GeneratorOptions(QtWidgets.QWizardPage):
|
||||
modHelpText.setAlignment(Qt.AlignCenter)
|
||||
|
||||
modLayout = QtWidgets.QGridLayout()
|
||||
modLayout.addWidget(QtWidgets.QLabel("A-4E Skyhawk"), 1, 0)
|
||||
modLayout.addWidget(a4_skyhawk, 1, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("F-22A Raptor"), 2, 0)
|
||||
modLayout.addWidget(f22_raptor, 2, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("F-104 Starfighter"), 3, 0)
|
||||
modLayout.addWidget(f104_starfighter, 3, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("C-130J-30 Super Hercules"), 4, 0)
|
||||
modLayout.addWidget(hercules, 4, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("JAS 39 Gripen"), 5, 0)
|
||||
modLayout.addWidget(jas39_gripen, 5, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("Su-57 Felon"), 6, 0)
|
||||
modLayout.addWidget(su57_felon, 6, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("Frenchpack"), 7, 0)
|
||||
modLayout.addWidget(frenchpack, 7, 1)
|
||||
modLayout.addWidget(QtWidgets.QLabel("High Digit SAMs"), 8, 0)
|
||||
modLayout.addWidget(high_digit_sams, 8, 1)
|
||||
modLayout_row = 1
|
||||
modLayout.addWidget(QtWidgets.QLabel("A-4E Skyhawk"), modLayout_row, 0)
|
||||
modLayout.addWidget(a4_skyhawk, modLayout_row, 1)
|
||||
modLayout_row += 1
|
||||
modLayout.addWidget(QtWidgets.QLabel("F-22A Raptor"), modLayout_row, 0)
|
||||
modLayout.addWidget(f22_raptor, modLayout_row, 1)
|
||||
modLayout_row += 1
|
||||
modLayout.addWidget(QtWidgets.QLabel("F-104 Starfighter"), modLayout_row, 0)
|
||||
modLayout.addWidget(f104_starfighter, modLayout_row, 1)
|
||||
modLayout_row += 1
|
||||
modLayout.addWidget(
|
||||
QtWidgets.QLabel("C-130J-30 Super Hercules"), modLayout_row, 0
|
||||
)
|
||||
modLayout.addWidget(hercules, modLayout_row, 1)
|
||||
modLayout_row += 1
|
||||
modLayout.addWidget(QtWidgets.QLabel("UH-60L Black Hawk"), modLayout_row, 0)
|
||||
modLayout.addWidget(uh_60l, modLayout_row, 1)
|
||||
modLayout_row += 1
|
||||
# Section break here for readability
|
||||
modLayout.addWidget(QtWidgets.QWidget(), modLayout_row, 0)
|
||||
modLayout_row += 1
|
||||
modLayout.addWidget(QtWidgets.QLabel("JAS 39 Gripen"), modLayout_row, 0)
|
||||
modLayout.addWidget(jas39_gripen, modLayout_row, 1)
|
||||
modLayout_row += 1
|
||||
modLayout.addWidget(QtWidgets.QLabel("Su-57 Felon"), modLayout_row, 0)
|
||||
modLayout.addWidget(su57_felon, modLayout_row, 1)
|
||||
modLayout_row += 1
|
||||
modLayout.addWidget(QtWidgets.QLabel("Frenchpack"), modLayout_row, 0)
|
||||
modLayout.addWidget(frenchpack, modLayout_row, 1)
|
||||
modLayout_row += 1
|
||||
modLayout.addWidget(QtWidgets.QLabel("High Digit SAMs"), modLayout_row, 0)
|
||||
modLayout.addWidget(high_digit_sams, modLayout_row, 1)
|
||||
modSettingsGroup.setLayout(modLayout)
|
||||
|
||||
mlayout = QVBoxLayout()
|
||||
|
||||
@@ -169,6 +169,8 @@ class AutoSettingsLayout(QGridLayout):
|
||||
) -> None:
|
||||
def on_changed(value: int) -> None:
|
||||
self.settings.__dict__[name] = value
|
||||
if description.causes_expensive_game_update:
|
||||
self.write_full_settings()
|
||||
|
||||
spinner = QSpinBox()
|
||||
spinner.setMinimum(description.min)
|
||||
@@ -354,7 +356,7 @@ class QSettingsWindow(QDialog):
|
||||
self.cheat_options.show_base_capture_cheat
|
||||
)
|
||||
|
||||
self.game.compute_conflicts_position()
|
||||
self.game.compute_unculled_zones()
|
||||
GameUpdateSignal.get_instance().updateGame(self.game)
|
||||
|
||||
def onSelectionChanged(self):
|
||||
|
||||
@@ -24,9 +24,9 @@ Pillow==8.3.2
|
||||
pluggy==0.13.1
|
||||
pre-commit==2.10.1
|
||||
py==1.10.0
|
||||
-e git://github.com/pydcs/dcs@92e3046d476781bd617a6c1abd6853cccf97d57c#egg=pydcs
|
||||
pyinstaller==4.3
|
||||
pyinstaller-hooks-contrib==2021.1
|
||||
-e git+https://github.com/dcs-liberation/dcs@6bcad19cdf71c892806b04790d379fc81f88c58f#egg=pydcs
|
||||
pyinstaller==4.9
|
||||
pyinstaller-hooks-contrib==2022.1
|
||||
pyparsing==2.4.7
|
||||
pyproj==3.0.1
|
||||
PySide2==5.15.2
|
||||
|
||||
BIN
resources/campaigns/Task Force Thunder.miz
Normal file
BIN
resources/campaigns/Task Force Thunder.miz
Normal file
Binary file not shown.
162
resources/campaigns/Task Force Thunder.yaml
Normal file
162
resources/campaigns/Task Force Thunder.yaml
Normal file
@@ -0,0 +1,162 @@
|
||||
---
|
||||
name: Syria - Task Force Thunder
|
||||
theater: Syria
|
||||
authors: Sith1144
|
||||
description: <p>A campaign based on the campaign from Combat Mission Shock Force. US forces attempt to bisect the country by advancing towards Homs from Iraq in the east and an amphibious landing near Tartus in the west. Recommended starting budge 3000-4000M for REDFOR, 2000-5000M for BLUFOR. Cannot be inverted. NOTE; the marine landing in the west does NOT have a workshop and cannot produce new units, nor does the first enemy airfield in the area. How many resources you pour into it is up to you.</p>
|
||||
recommended_player_faction: USA 2005
|
||||
recommended_enemy_faction: Syria 2011
|
||||
recommended_start_date: 2009-06-19
|
||||
miz: Task Force Thunder.miz
|
||||
performance: 3
|
||||
version: "9.1"
|
||||
squadrons:
|
||||
# Airspawn from Iraq
|
||||
Al Asad Airbase:
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-3A
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-15C Eagle
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- B-1B Lancer
|
||||
- B-52H Stratofortress
|
||||
- F-117A Nighthawk
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker MPRS
|
||||
#H3 airbase
|
||||
53:
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-15E Strike Eagle
|
||||
#H4 airbase
|
||||
12:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 3)
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 7)
|
||||
#Northern FOB
|
||||
Staging Point Alpha:
|
||||
- primary: CAS
|
||||
aircraft:
|
||||
- AH-64D Apache Longbow
|
||||
#Carrier is called Naval-1
|
||||
Naval-1:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- S-3B Tanker
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-2C Hawkeye
|
||||
#LHA is called Naval-2
|
||||
Naval-2:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AV-8B Harrier II Night Attack
|
||||
- primary: CAS
|
||||
aircraft:
|
||||
- AH-1W SuperCobra
|
||||
- UH-1H Iroquois
|
||||
# Al Qusayr - opposing the beach landing with old fighters (mig-23), CAS (su-17), helicopters (mi-24)
|
||||
3:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- MiG-23MLD Flogger-K
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24V Hind-E
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-17M4 Fitter-K
|
||||
# Tiyas - secondary base for good fighters (mig-25) and trainers (L-39)
|
||||
39:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-25PD Foxbat-E
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- L-39ZA Albatros
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-29S Fulcrum-C
|
||||
# Palmyra - forward base, helicopters (mi-24, mi-8), old fighters (mig-21) and cas (su-17)
|
||||
28:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- MiG-21bis Fishbed-N
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- Su-17M4 Fitter-K
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-17M4 Fitter-K
|
||||
- primary: Transport
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
# Shayrat - main base for support planes (A-50, transport, tanker), strike craft (su-24) and modern fighters (mig-29)
|
||||
36:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-29S Fulcrum-C
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-24M Fencer-D
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-76MD
|
||||
|
||||
# Defensive Line FARP for gazelles
|
||||
Defensive Line:
|
||||
- primary: CAS
|
||||
aircraft:
|
||||
- SA 342M Gazelle
|
||||
BIN
resources/campaigns/TblisiGap.miz
Normal file
BIN
resources/campaigns/TblisiGap.miz
Normal file
Binary file not shown.
86
resources/campaigns/TblisiGap.yaml
Normal file
86
resources/campaigns/TblisiGap.yaml
Normal file
@@ -0,0 +1,86 @@
|
||||
---
|
||||
name: Caucasus - The Tblisi Gap
|
||||
theater: Caucasus
|
||||
authors: Sith1144
|
||||
description: <p>A 1980 Cold-war-gone-hot campaign set in the hilly terrain between Tblisi and Kutaisi. Made for the Hind and Hip with a narrow front with lots of targets. Can also be played as Blufor Cold War vs GDR 1985 or as Blufor Modern vs a modern opfor faction. Recommended way to play is focusing on helicopters, with aggressive culling (50-60km is workable, maybe even lower)</p>
|
||||
recommended_player_faction: Russia 1975 (Mi-24P)
|
||||
recommended_enemy_faction: Germany 1990
|
||||
recommended_start_date: 1980-09-21
|
||||
miz: TblisiGap.miz
|
||||
performance: 2
|
||||
version: "9.1"
|
||||
squadrons:
|
||||
#Vaziani, blufor jet base
|
||||
31:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-23MLD Flogger-K
|
||||
- F-14A Tomcat (Block 135-GR Late)
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: TARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- MiG-21bis Fishbed-N
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- F-5E Tiger II
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-17M4 Fitter-K
|
||||
- AJS-37 Viggen
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
- A-10C Thunderbolt II (Suite 3)
|
||||
- A-4E Skyhawk
|
||||
- A-10A Thunderbolt II
|
||||
- primary: Refueling
|
||||
- primary: AEW&C
|
||||
#Tbilisi-Lochini, blue helicopter base
|
||||
29:
|
||||
- primary: CAS
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- AV-8B Harrier II Night Attack
|
||||
- Ka-50 Hokum
|
||||
- AH-64D Apache Longbow
|
||||
- primary: CAS
|
||||
aircraft:
|
||||
- Ka-50 Hokum
|
||||
- SA 342M Gazelle
|
||||
- Mi-24V Hind-E
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
- UH-1H Iroquois
|
||||
#frontline FARP, called "FARP Mayhem"
|
||||
FARP Mayhem:
|
||||
- primary: CAS
|
||||
aircraft:
|
||||
- AH-1W SuperCobra
|
||||
- AH-64D Apache Longbow
|
||||
- SA 342M Gazelle
|
||||
- Ka-50 Hokum
|
||||
- Mi-24V Hind-E
|
||||
#Kutaisi, primary opfor base
|
||||
25:
|
||||
- primary: BAI
|
||||
aircraft:
|
||||
- Tornado IDS
|
||||
- Su-17M4 Fitter-K
|
||||
- Su-24M Fencer-D
|
||||
- primary: BARCAP
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- F-4F Phantom II
|
||||
- F-5E Tiger II
|
||||
- MiG-23MLD Flogger-K
|
||||
- FC-1 Fierce Dragon
|
||||
- JF-17 Thunder
|
||||
- Su-27 Flanker-B
|
||||
#Senaki, secondary opfor base
|
||||
23:
|
||||
- primary: Transport
|
||||
- primary: AEW&C
|
||||
BIN
resources/campaigns/TheValleyOfRotary.miz
Normal file
BIN
resources/campaigns/TheValleyOfRotary.miz
Normal file
Binary file not shown.
65
resources/campaigns/TheValleyOfRotary.yaml
Normal file
65
resources/campaigns/TheValleyOfRotary.yaml
Normal file
@@ -0,0 +1,65 @@
|
||||
---
|
||||
name: Persian Gulf - Valley of Rotary
|
||||
theater: Persian Gulf
|
||||
authors: Sith1144
|
||||
description: <p>Helicopter counterinsurgency campaign set in Southern Iran</p>
|
||||
recommended_player_faction: Iran 2015
|
||||
recommended_enemy_faction: Insurgents (Hard)
|
||||
recommended_start_date: 2022-06-13
|
||||
miz: TheValleyOfRotary.miz
|
||||
performance: 2
|
||||
version: "9.1"
|
||||
squadrons:
|
||||
# Shiraz International, BLUFOR start
|
||||
19:
|
||||
- primary: CAS
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- AH-64D Apache Longbow
|
||||
- AH-1J SeaCobra
|
||||
- AH-1W SuperCobra
|
||||
- primary: CAS
|
||||
aircraft:
|
||||
- Mi-24V Hind-E
|
||||
- UH-1H Iroquois
|
||||
- A-4E Skyhawk
|
||||
- AV-8B Harrier II Night Attack
|
||||
- L-39ZA Albatros
|
||||
- C-101CC Aviojet
|
||||
- primary: BAI
|
||||
aircraft:
|
||||
- Ka-50 Hokum
|
||||
- SA 342M Gazelle
|
||||
- AH-64D Apache Longbow
|
||||
- Mi-28N Havoc
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- Mi-8MTV2 Hip
|
||||
- UH-1H Iroquois
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 3)
|
||||
- Su-25 Frogfoot
|
||||
- Su-25T Frogfoot
|
||||
- A-10A Thunderbolt II
|
||||
# Jowkan FARP, REDFOR frontline.
|
||||
Jowkan:
|
||||
- primary: CAS
|
||||
# Lar, REDFOR airbase + inverted start
|
||||
11:
|
||||
- primary: CAS
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- Mi-24V Hind-E
|
||||
- UH-1H Iroquois
|
||||
- A-4E Skyhawk
|
||||
- AV-8B Harrier II Night Attack
|
||||
- L-39ZA Albatros
|
||||
- C-101CC Aviojet
|
||||
# Mansurabad, inverted start frontline north
|
||||
Mansurabad:
|
||||
- primary: CAS
|
||||
# Bagh, inverted start frontline south
|
||||
Bagh:
|
||||
- primary: Transport
|
||||
Binary file not shown.
@@ -4,7 +4,7 @@ theater: Nevada
|
||||
authors: Starfire
|
||||
recommended_player_faction: USA 2005
|
||||
recommended_enemy_faction: Redfor (China) 2010
|
||||
description: <p>This is an asymmetrical Red Flag Exercise scenario for the NTTR comprising 4 control points. You start off in control of the two Tonopah airports, and will push south to capture Groom Lake and Nellis AFBs. Taking down Nellis AFB's IADS and striking their resource sites ASAP once Groom Lake has been captured is recommended to offset their substantial resource advantage.</p>
|
||||
description: <p>Welcome to Vegas Nerve, an asymmetrical Red Flag Exercise scenario. You are starting off in control of the two Tonopah airports, and will push south from there. For the duration of this exercise, Creech AFB has been cleared of all fixed wing aircraft and will function as a FARP for rotor ops. OPFOR has a substantial resource advantage and an extensive IADS. Reducing that resource advantage while degrading their IADS will be vital to a successful completion of this exercise. Good luck, Commander.</p>
|
||||
miz: exercise_vegas_nerve.miz
|
||||
performance: 1
|
||||
recommended_start_date: 2011-04-24
|
||||
@@ -12,12 +12,12 @@ version: "9.1"
|
||||
squadrons:
|
||||
# Tonopah Airport
|
||||
17:
|
||||
- primary: BARCAP
|
||||
- primary: TARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-15C Eagle
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: AEW&C
|
||||
@@ -42,12 +42,16 @@ squadrons:
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 7)
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AH-64D Apache Longbow
|
||||
- primary: DEAD
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
- primary: SEAD
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: BAI
|
||||
@@ -57,23 +61,31 @@ squadrons:
|
||||
# Groom Lake
|
||||
2:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- J-11A Flanker-L
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-34 Fullback
|
||||
# Creech
|
||||
Creech FARP:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# Nellis AFB
|
||||
4:
|
||||
- primary: DEAD
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- Su-30MKK Flanker-G
|
||||
- FC-1 Fierce Dragon
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- H-6J Badger
|
||||
# Boulder City Airport
|
||||
6:
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- KJ-2000
|
||||
|
||||
Binary file not shown.
@@ -4,8 +4,8 @@ theater: Syria
|
||||
authors: Fuzzle
|
||||
recommended_player_faction: Israel-USN 2005 (Allied Sword)
|
||||
recommended_enemy_faction: Syria-Lebanon 2005 (Allied Sword)
|
||||
description: <p>In this fictional scenario, a US/Israeli coalition must push north from the Israeli border, through Syria and Lebanon to Aleppo.</p><p><strong>Backstory:</strong> A Syrian-Lebanese joint force (with Russian materiel support) has attacked Israel, attmepting to cross the northern border. With the arrival of a US carrier group, Israel prepares its counterattack. The US Navy will handle the Beirut region's coastal arena, while the IAF will push through Damascus and the inland mountain ranges.</p>,
|
||||
version: "9.1"
|
||||
description: <p>In this fictional scenario, a US/Israeli coalition must push north from the Israeli border, through Syria and Lebanon to Aleppo.</p><p><strong>Backstory:</strong> A Syrian-Lebanese joint force (with Russian materiel support) has attacked Israel, attmepting to cross the northern border. With the arrival of a US carrier group, Israel prepares its counterattack. The US Navy will handle the Beirut region's coastal arena, while the IAF will push through Damascus and the inland mountain ranges.</p>
|
||||
version: "10.0"
|
||||
miz: operation_allied_sword.miz
|
||||
performance: 2
|
||||
recommended_start_date: 2004-07-17
|
||||
|
||||
Binary file not shown.
@@ -2,8 +2,8 @@
|
||||
name: Syria - Operation Blackball
|
||||
theater: Syria
|
||||
authors: Fuzzle
|
||||
description: <p>A lightweight fictional showcase of Cyprus for the Syria terrain. A US Navy force must deploy from a FOB and carrier group to push from the north-east down through the island. <strong>Note that the ground units purchased on turn zero must sustain you until you've taken the first hostile FOB. The starting point does not have a factory to simulate a Marine Expeditionary Force deploying from the carrier group.</strong></p><p><strong>Backstory:</strong> The world is at war. With the help of her eastern allies Russia has taken the Suez Canal and deployed a large naval force to the Mediterranean trapping a US carrier group near the Turkish-Syrian border. Now they must break out by taking Cyprus back.</p>
|
||||
version: "9.1"
|
||||
description: <p>A lightweight fictional showcase of Cyprus for the Syria terrain. A US Navy force must deploy from a FOB and carrier group to push from the north-east down through the island. <strong>Note that the ground units purchased on turn zero must sustain you until you've taken the first hostile FOB. The starting point does not have a factory to simulate a Marine Expeditionary Force deploying from the carrier group.</strong></p><p><strong>Backstory:</strong> The world is at war. With the help of her eastern allies Russia has taken the Suez Canal and deployed a large naval force to the Mediterranean, trapping a US carrier group near the Turkish-Syrian border. Now they must break out by taking Cyprus back.</p>
|
||||
version: "10.0"
|
||||
recommended_player_faction: US Navy 2005
|
||||
recommended_enemy_faction: Russia 2010
|
||||
miz: operation_blackball.miz
|
||||
@@ -17,13 +17,9 @@ squadrons:
|
||||
aircraft:
|
||||
- VF-142
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- VFA-106
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
aircraft:
|
||||
- VMFA-122
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- VAW-125
|
||||
|
||||
Binary file not shown.
@@ -4,7 +4,7 @@ theater: Syria
|
||||
authors: Starfire
|
||||
recommended_player_faction: Bluefor Modern
|
||||
recommended_enemy_faction: Iraq 1991
|
||||
description: <p>This is a semi-fictional what-if scenario for Operation Peace Spring, during which Turkish forces that crossed into Syria on an offensive against Kurdish militias were emboldened by early successes to continue pushing further southward. Attempts to broker a ceasefire have failed. Members of Operation Inherent Resolve have gathered at Ramat David Airbase in Israel to launch a counter-offensive.</p><p><strong>Note:</strong> The default faction is set as Iraq 1991 in order to provide an opponent with a wider variety of units. While Turkey 2005 would be the historical faction, you would be facing nothing in the air except F-4 Phantoms.</p>
|
||||
description: <p>This is a semi-fictional what-if scenario for Operation Peace Spring, during which Turkish forces that crossed into Syria on an offensive against Kurdish militias were emboldened by early successes to continue pushing further southward. Attempts to broker a ceasefire have failed. Members of Operation Inherent Resolve have gathered at Ramat David Airbase in Israel to launch a counter-offensive.</p><p><strong>Note:</strong> The default faction is set as Iraq 1991 in order to provide an opponent with a wider variety of units. While Turkey 2005 would be the historical faction (and has preset squadrons included), they only have two jets available (F-4 and F-16).</p>
|
||||
miz: operation_peace_spring.miz
|
||||
performance: 1
|
||||
recommended_start_date: 2019-12-23
|
||||
@@ -16,33 +16,19 @@ squadrons:
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-15C Eagle
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- primary: TARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- Mirage 2000C
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 7)
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: BAI
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- JF-17 Thunder
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- primary: BAI
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AV-8B Harrier II Night Attack
|
||||
@@ -50,19 +36,6 @@ squadrons:
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-15E Strike Eagle
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AJS-37 Viggen
|
||||
- F-117A Nighthawk
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- B-1B Lancer
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- B-52H Stratofortress
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-3A
|
||||
@@ -94,11 +67,6 @@ squadrons:
|
||||
aircraft:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- Su-24M Fencer-D
|
||||
- primary: Transport
|
||||
secondary: any
|
||||
aircraft:
|
||||
- UH-60A
|
||||
- Mi-8MTV2 Hip
|
||||
# Abu Al Duhur
|
||||
# 1:
|
||||
# Gaziantep
|
||||
@@ -116,11 +84,6 @@ squadrons:
|
||||
- F-16CM Fighting Falcon (Block 50)
|
||||
- MiG-29A Fulcrum-A
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-4E Phantom II
|
||||
- Tu-22M3 Backfire-C
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- F-4E Phantom II
|
||||
|
||||
Binary file not shown.
@@ -10,25 +10,15 @@ performance: 1
|
||||
recommended_start_date: 2008-08-08
|
||||
version: "9.1"
|
||||
squadrons:
|
||||
Blue CV:
|
||||
Blue CV-1:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- F-14A Tomcat (Block 135-GR Late)
|
||||
- primary: TARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-14B Tomcat
|
||||
- F-14A Tomcat (Block 135-GR Late)
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F/A-18C Hornet (Lot 20)
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- E-2C Hawkeye
|
||||
@@ -40,9 +30,6 @@ squadrons:
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AV-8B Harrier II Night Attack
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- SH-60B Seahawk
|
||||
From Incirlik:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
@@ -52,6 +39,10 @@ squadrons:
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A-10C Thunderbolt II (Suite 7)
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AH-64D Apache Longbow
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
@@ -66,9 +57,6 @@ squadrons:
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KC-135 Stratotanker
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- C-130
|
||||
#FARPs
|
||||
UNOMIG Sector HQ:
|
||||
- primary: CAS
|
||||
@@ -81,13 +69,13 @@ squadrons:
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
#Sukhumi-Babushara
|
||||
#20:
|
||||
#Sochi-Adler
|
||||
18:
|
||||
20:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- MiG-29S Fulcrum-C
|
||||
- MiG-29S Fulcrum-C
|
||||
#Sochi-Adler
|
||||
18:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
@@ -104,9 +92,6 @@ squadrons:
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-76MD
|
||||
Red CV:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
@@ -115,6 +100,5 @@ squadrons:
|
||||
# I am aware there is no Russian LHA. This is just for campaign inversion.
|
||||
Red LHA:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- AV-8B Harrier II Night Attack
|
||||
secondary: air-to-ground
|
||||
|
||||
|
||||
Binary file not shown.
@@ -3,7 +3,7 @@ name: Marianas - Pacific Repartee
|
||||
theater: MarianaIslands
|
||||
authors: Fuzzle
|
||||
description: <p>A naval campaign where a US carrier group must retake Guam, Saipan and the Marianas Islands from the Chinese. <strong>This is a purely offensive air campaign, with no frontline gameplay. Upon securing the area around a FOB, you may either ignore it, bomb it to dust or use the cheats to capture it.</strong></p><p><strong>Backstory:</strong> After an escalation in the South China Sea, the PLAN has taken the US by surprise and invaded Guam, setting up supporting positions throughout the Marianas island chain. With the rest of the US Navy engaged near Japan, a carrier task group must push through China's forces, assist a small Marine contingent holding out on Farallon de Pajaros and liberate Guam.</p>
|
||||
version: "9.1"
|
||||
version: "10.0"
|
||||
recommended_player_faction: US Navy 2005
|
||||
recommended_enemy_faction: China 2010
|
||||
miz: pacific_repartee.miz
|
||||
@@ -17,13 +17,9 @@ squadrons:
|
||||
aircraft:
|
||||
- VF-143
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- VMFA-251
|
||||
- primary: Strike
|
||||
secondary: any
|
||||
aircraft:
|
||||
- VMFA-122
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- VAW-125
|
||||
@@ -102,9 +98,9 @@ squadrons:
|
||||
- FC-1 Fierce Dragon
|
||||
# Tinian Intl
|
||||
3:
|
||||
- primary: AEW&C
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- KJ-2000
|
||||
- IL-78M
|
||||
# Andersen AFB
|
||||
6:
|
||||
- primary: TARCAP
|
||||
@@ -122,9 +118,6 @@ squadrons:
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-76MD
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
# Antonio B. Won Pat Intl
|
||||
4:
|
||||
- primary: TARCAP
|
||||
|
||||
BIN
resources/campaigns/scenic_inland.miz
Normal file
BIN
resources/campaigns/scenic_inland.miz
Normal file
Binary file not shown.
248
resources/campaigns/scenic_inland.yaml
Normal file
248
resources/campaigns/scenic_inland.yaml
Normal file
@@ -0,0 +1,248 @@
|
||||
---
|
||||
name: Persian Gulf - Scenic Route 2 - Dust To Dust
|
||||
theater: Persian Gulf
|
||||
authors: Fuzzle
|
||||
description: <p>A continuation of Scenic Route. A NATO coalition pushes inland along a protracted axis of advance. Built with helicopters/FOB-based gameplay in mind. <p><strong>Backstory:</strong> With Iran's coastal defences pacified and their forces pushed inland, a beleaguered US Navy is reinforced by a NATO coalition task force. The going will not be easy however; Iran has assembled the full might of its armoured and mechanized divisions alongside rotary support to defend their heartland. The conflict intensifies.</p>
|
||||
version: "10.0"
|
||||
advanced_iads: true
|
||||
recommended_player_faction: NATO OIF
|
||||
recommended_enemy_faction: Iran 2015
|
||||
miz: scenic_inland.miz
|
||||
performance: 2
|
||||
recommended_start_date: 2005-06-29
|
||||
squadrons:
|
||||
# Bandar Abbas Intl
|
||||
2:
|
||||
- primary: TARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- Escadron de chasse 1/30
|
||||
#French Mirage2000C
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- 77th FS
|
||||
#USAF F-16C
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- No. 12 Squadron
|
||||
#RAF Tornado GR.4
|
||||
- primary: Transport
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- 101st Combat Aviation Brigade
|
||||
#US Army UH-60
|
||||
# Havadarya
|
||||
9:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- 493rd FS
|
||||
#USAF F-15C
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- 81st FS
|
||||
#USAF A-10CI
|
||||
#BLUFOR CVN
|
||||
BLUFOR CVN:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- VF-143
|
||||
- primary: DEAD
|
||||
secondary: any
|
||||
aircraft:
|
||||
- VMFA-251
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- VAW-125
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- VS-35 (Tanker)
|
||||
# BLUFOR LHA
|
||||
BLUFOR LHA:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- VMA-223
|
||||
- primary: Transport
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- HMLA-169 (UH-1H)
|
||||
# BLUFOR Start FOB
|
||||
FOB Anguran:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- SA 342M Gazelle
|
||||
#French Gazelle
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Wolfpack, 1-82 ARB
|
||||
#US Army Apache AH-64D
|
||||
# OPFOR L1F1
|
||||
FOB Tang-e Dalan:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L1F2
|
||||
FOB Fars Border:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L1F2 split
|
||||
FOB Bikuyeh:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-28N Havoc
|
||||
# Lar
|
||||
11:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-21bis Fishbed-N
|
||||
# OPFOR L2F1
|
||||
FOB Mansurabad:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L2F2
|
||||
FOB Jahrom:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L2F3
|
||||
FOB Tower:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L2F3 split
|
||||
FOB Nouderan:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-28N Havoc
|
||||
# Shiraz Intl
|
||||
19:
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-4E Phantom II
|
||||
- primary: TARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-29A Fulcrum-A
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-22M4 Fitter-K
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
- primary: SEAD
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25T Frogfoot
|
||||
# OPFOR L3F1
|
||||
FOB Kherameh:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L3F2
|
||||
FOB Tashk:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L3F3
|
||||
FOB Chahak:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L3F4
|
||||
FOB Plainhold:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L3F4 split
|
||||
FOB Robat:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L3F5
|
||||
FOB Plainguard:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L3F6
|
||||
FOB Hasanabad:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L3F6 split
|
||||
FOB Najafabad:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-28N Havoc
|
||||
# OPFOR L3F7
|
||||
FOB Kabutarkhan:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# OPFOR L3F8
|
||||
FOB Sa'di:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# Kerman
|
||||
18:
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- A-50
|
||||
- primary: Refueling
|
||||
aircraft:
|
||||
- IL-78M
|
||||
- primary: Transport
|
||||
aircraft:
|
||||
- IL-78MD
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- F-14A Tomcat (Block 135-GR Late)
|
||||
- primary: TARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-29A Fulcrum-A
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-24MK Fencer-D
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
Binary file not shown.
@@ -3,7 +3,8 @@ name: Persian Gulf - Scenic Route
|
||||
theater: Persian Gulf
|
||||
authors: Fuzzle
|
||||
description: <p>A lightweight naval campaign involving a US Navy carrier group pushing across the coast of Iran. <strong>Note that the ground units purchased on turn zero must sustain you until you've taken the first hostile FOB. The starting point does not have a factory to simulate a Marine Expeditionary Force deploying from the carrier group.</strong></p><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 lone carrier group must pacify the southern coast of Iran and hold out until backup can arrive lest the US and her interests be ejected from the region permanently.</p>
|
||||
version: "9.1"
|
||||
version: "10.0"
|
||||
advanced_iads: true
|
||||
recommended_player_faction: US Navy 2005
|
||||
recommended_enemy_faction: Iran 2015
|
||||
miz: scenic_route.miz
|
||||
@@ -17,13 +18,9 @@ squadrons:
|
||||
aircraft:
|
||||
- VF-143
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- VFA-113
|
||||
- primary: BAI
|
||||
secondary: any
|
||||
aircraft:
|
||||
- VMFA-251
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- VAW-125
|
||||
|
||||
BIN
resources/campaigns/tripoint_hostility.miz
Normal file
BIN
resources/campaigns/tripoint_hostility.miz
Normal file
Binary file not shown.
142
resources/campaigns/tripoint_hostility.yaml
Normal file
142
resources/campaigns/tripoint_hostility.yaml
Normal file
@@ -0,0 +1,142 @@
|
||||
---
|
||||
name: Syria - Tripoint Hostility
|
||||
theater: Syria
|
||||
authors: Fuzzle
|
||||
description: <p>A joint US Army/Air Force force must push Iraqi aggressors back through Jordan and Syria to the border, then pacify Iraq's nearby airbases. This campaign showcases the southeastern expansion to the Syria terrain, and incentivizes heavy usage of rotary from FARPs.</p><p><strong>Backstory:</strong> In an alternate 2006, Iraq has seen a coup place a hardline national fundamentalist movement in power, who have ejected US forces from the country under threat from newfound Iranian allies. With their confidence unchecked, Iraq has invaded their Jordanian and Syrian neighbours to the west, pushing nearly to the Israeli border. To keep the region from falling to chaos, the US has redeployed a task force from Europe to defend Jordan and bring down Iraq's west-facing air power.</p>
|
||||
recommended_player_faction: USA 2005
|
||||
recommended_enemy_faction: Iraq 1991
|
||||
recommended_start_date: 2006-08-03
|
||||
miz: tripoint_hostility.miz
|
||||
performance: 2
|
||||
version: "10.0"
|
||||
squadrons:
|
||||
# Off-theatre forces
|
||||
From Turkey:
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- B-1B Lancer
|
||||
- primary: AEW&C
|
||||
aircraft:
|
||||
- 960th AAC Squadron
|
||||
#USAF E-3A
|
||||
# King Hussein Air College, BLUFOR start
|
||||
19:
|
||||
- primary: BARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- 493rd FS
|
||||
#USAF F-15C
|
||||
- primary: SEAD
|
||||
secondary: any
|
||||
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:
|
||||
- 101st Combat Aviation Brigade
|
||||
#US Army UH-60
|
||||
# FOB Tha'lah, BLUFOR 1st FOB north
|
||||
FOB Tha'lah:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- A Company, 1-227th ARB
|
||||
#US Army AH-64D
|
||||
# FOB Stalwart, first BLUFOR FOB south
|
||||
FOB Stalwart:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- C Company, 2-159th ARB
|
||||
#US Army AH-64D
|
||||
# FOB Qalea, first OPFOR FOB south
|
||||
FOB Qalea:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- SA 342M Gazelle
|
||||
# H4 Airbase, 1st OPFOR airfield south
|
||||
12:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- MiG-21bis Fishbed-N
|
||||
# FOB Eadla, 2nd OPFOR FOB south
|
||||
FOB Eadla:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# Ruwayshid, 2nd OPFOR airfield south
|
||||
57:
|
||||
- primary: BAI
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-22M4 Fitter-K
|
||||
# H3 Southwest, 3rd OPFOR airfield south
|
||||
55:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- MiG-29A Fulcrum-A
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-25 Frogfoot
|
||||
# H3 Airbase, 4th-last OPFOR airfield south
|
||||
53:
|
||||
- primary: TARCAP
|
||||
secondary: air-to-air
|
||||
aircraft:
|
||||
- MiG-25PD Foxbat-E
|
||||
- primary: Strike
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-24M Fencer-D
|
||||
# Khalkhalah, 1st OPFOR airfield north
|
||||
18:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- MiG-19P Farmer-B
|
||||
# FOB Dhirae, 1st OPFOR FOB north
|
||||
FOB Dhirae:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- SA 342M Gazelle
|
||||
# FOB Kataf, 2nd OPFOR FOB north
|
||||
FOB Kataf:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# At Tanf, 3rd OPFOR heliport north
|
||||
63:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- SA 342M Gazelle
|
||||
# FOB Qalb, 4th OPFOR FOB north
|
||||
FOB Qalb:
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Mi-24P Hind-F
|
||||
# H3 Northwest, 2nd OPFOR airfield north
|
||||
54:
|
||||
- primary: BARCAP
|
||||
secondary: any
|
||||
aircraft:
|
||||
- MiG-21bis Fishbed-N
|
||||
- primary: CAS
|
||||
secondary: air-to-ground
|
||||
aircraft:
|
||||
- Su-22M4 Fitter-K
|
||||
80
resources/customized_payloads/AH-64D_BLK_II.lua
Normal file
80
resources/customized_payloads/AH-64D_BLK_II.lua
Normal file
@@ -0,0 +1,80 @@
|
||||
local unitPayloads = {
|
||||
["name"] = "AH-64D_BLK_II",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{M261_M282}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{M261_M282}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["displayName"] = "Liberation BAI",
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{M261_M229}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{M261_M229}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||
["num"] = 2,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 31,
|
||||
},
|
||||
},
|
||||
},
|
||||
["unitType"] = "AH-64D_BLK_II",
|
||||
}
|
||||
return unitPayloads
|
||||
@@ -294,6 +294,66 @@ local unitPayloads = {
|
||||
[1] = 32,
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{E1F29B21-F291-4589-9FD8-3272EEC69506}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 11,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 13,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 14,
|
||||
},
|
||||
[11] = {
|
||||
["CLSID"] = "{BCE4E030-38E9-423E-98ED-24BE3DA87C32}",
|
||||
["num"] = 16,
|
||||
},
|
||||
[12] = {
|
||||
["CLSID"] = "{C8E06185-7CD6-4C90-959F-044679E90751}",
|
||||
["num"] = 19,
|
||||
},
|
||||
[13] = {
|
||||
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||
["num"] = 17,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
},
|
||||
["unitType"] = "F-15E",
|
||||
}
|
||||
|
||||
@@ -318,6 +318,54 @@ local unitPayloads = {
|
||||
["tasks"] = {
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
["name"] = "Liberation OCA/Runway",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{5CE2FF2A-645A-4197-B48D-8720AC69394F}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "ALQ_184",
|
||||
["num"] = 5,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{F376DBEE-4CAE-41BA-ADD9-B2910AC95DEC}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{AB8B8299-F1CC-4359-89B5-2172E0CF4A5A}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{5CE2FF2A-645A-4197-B48D-8720AC69394F}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{40EF17B7-F508-45de-8566-6FFECC0C1AB8}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{A111396E-D3E8-4b9c-8AC9-2432489304D5}",
|
||||
["num"] = 11,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 11,
|
||||
},
|
||||
},
|
||||
},
|
||||
["unitType"] = "F-16C_50",
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ local unitPayloads = {
|
||||
["name"] = "CAP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[2] = {
|
||||
@@ -18,27 +18,27 @@ local unitPayloads = {
|
||||
["num"] = 11,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "JAS39_Meteor",
|
||||
["CLSID"] = "{JAS39_Meteor}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "JAS39_Meteor",
|
||||
["CLSID"] = "{JAS39_Meteor}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "JAS39_Meteor",
|
||||
["CLSID"] = "{JAS39_Meteor}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "JAS39_Meteor",
|
||||
["CLSID"] = "{JAS39_Meteor}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "JAS39_TANK1100",
|
||||
["CLSID"] = "{JAS39_TANK1100}",
|
||||
["num"] = 4,
|
||||
},
|
||||
},
|
||||
|
||||
@@ -6,15 +6,15 @@ local unitPayloads = {
|
||||
["name"] = "ANTISHIP",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "JAS39_TANK1100",
|
||||
["CLSID"] = "{JAS39_TANK1100}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
@@ -26,19 +26,19 @@ local unitPayloads = {
|
||||
["num"] = 11,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "JAS39_RBS15AI",
|
||||
["CLSID"] = "{JAS39_RBS15AI}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "JAS39_RBS15AI",
|
||||
["CLSID"] = "{JAS39_RBS15AI}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "JAS39_RBS15AI",
|
||||
["CLSID"] = "{JAS39_RBS15AI}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "JAS39_RBS15AI",
|
||||
["CLSID"] = "{JAS39_RBS15AI}",
|
||||
["num"] = 3,
|
||||
},
|
||||
},
|
||||
@@ -51,15 +51,15 @@ local unitPayloads = {
|
||||
["name"] = "SEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "JAS39_TANK1100",
|
||||
["CLSID"] = "{JAS39_TANK1100}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
@@ -71,19 +71,19 @@ local unitPayloads = {
|
||||
["num"] = 11,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "JAS39_MAR-1",
|
||||
["CLSID"] = "{JAS39_MAR-1}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "JAS39_MAR-1",
|
||||
["CLSID"] = "{JAS39_MAR-1}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "JAS39_MAR-1",
|
||||
["CLSID"] = "{JAS39_MAR-1}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "JAS39_MAR-1",
|
||||
["CLSID"] = "{JAS39_MAR-1}",
|
||||
["num"] = 7,
|
||||
},
|
||||
},
|
||||
@@ -96,15 +96,15 @@ local unitPayloads = {
|
||||
["name"] = "DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "JAS39_TANK1100",
|
||||
["CLSID"] = "{JAS39_TANK1100}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
@@ -116,19 +116,19 @@ local unitPayloads = {
|
||||
["num"] = 11,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "JAS39_STORMSHADOW",
|
||||
["CLSID"] = "{JAS39_STORMSHADOW_ARM}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "JAS39_STORMSHADOW",
|
||||
["CLSID"] = "{JAS39_STORMSHADOW_ARM}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "JAS39_MAR-1",
|
||||
["CLSID"] = "{JAS39_MAR-1}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "JAS39_MAR-1",
|
||||
["CLSID"] = "{JAS39_MAR-1}",
|
||||
["num"] = 7,
|
||||
},
|
||||
},
|
||||
@@ -141,15 +141,15 @@ local unitPayloads = {
|
||||
["name"] = "CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "JAS39_TANK1100",
|
||||
["CLSID"] = "{JAS39_TANK1100}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
@@ -161,23 +161,23 @@ local unitPayloads = {
|
||||
["num"] = 11,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "JAS39_BRIMSTONE",
|
||||
["CLSID"] = "{JAS39_BRIMSTONE}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "JAS39_BRIMSTONE",
|
||||
["CLSID"] = "{JAS39_BRIMSTONE}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "JAS39_BRIMSTONE",
|
||||
["CLSID"] = "{JAS39_BRIMSTONE}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "JAS39_BRIMSTONE",
|
||||
["CLSID"] = "{JAS39_BRIMSTONE}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "JAS39_Litening",
|
||||
["CLSID"] = "{JAS39_Litening}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[11] = {
|
||||
@@ -194,15 +194,15 @@ local unitPayloads = {
|
||||
["name"] = "STRIKE",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "JAS39_TANK1100",
|
||||
["CLSID"] = "{JAS39_TANK1100}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
@@ -214,23 +214,23 @@ local unitPayloads = {
|
||||
["num"] = 11,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "JAS39_GBU31",
|
||||
["CLSID"] = "{JAS39_GBU31}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "JAS39_GBU31",
|
||||
["CLSID"] = "{JAS39_GBU31}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "JAS39_GBU49",
|
||||
["CLSID"] = "{JAS39_GBU49}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "JAS39_GBU49",
|
||||
["CLSID"] = "{JAS39_GBU49}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "JAS39_Litening",
|
||||
["CLSID"] = "{JAS39_Litening}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[11] = {
|
||||
@@ -247,15 +247,15 @@ local unitPayloads = {
|
||||
["name"] = "OCA",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "JAS39_IRIS-T",
|
||||
["CLSID"] = "{JAS39_IRIS-T}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "JAS39_TANK1100",
|
||||
["CLSID"] = "{JAS39_TANK1100}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[4] = {
|
||||
@@ -267,23 +267,23 @@ local unitPayloads = {
|
||||
["num"] = 11,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "JAS39_DWS39",
|
||||
["CLSID"] = "{JAS39_DWS39_TV}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "JAS39_DWS39",
|
||||
["CLSID"] = "{JAS39_DWS39_TV}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "JAS39_M70BHE",
|
||||
["CLSID"] = "{JAS39_M70BHE}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "JAS39_M70BHE",
|
||||
["CLSID"] = "{JAS39_M70BHE}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "JAS39_Litening",
|
||||
["CLSID"] = "{JAS39_Litening}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[11] = {
|
||||
|
||||
@@ -2,7 +2,8 @@ local unitPayloads = {
|
||||
["name"] = "Tornado GR4",
|
||||
["payloads"] = {
|
||||
[1] = {
|
||||
["name"] = "ANTISHIP",
|
||||
["displayName"] = "Liberation CAS",
|
||||
["name"] = "Liberation CAS",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{8C3F26A1-FA0F-11d5-9190-00A0249B6F00}",
|
||||
@@ -17,32 +18,41 @@ local unitPayloads = {
|
||||
["num"] = 10,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{1461CD18-429A-42A9-A21F-4C621ECD4573}",
|
||||
["num"] = 9,
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{1461CD18-429A-42A9-A21F-4C621ECD4573}",
|
||||
["num"] = 4,
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[7] = {
|
||||
[9] = {
|
||||
["CLSID"] = "{EF124821-F9BB-4314-A153-E0E2FE1162C4}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[8] = {
|
||||
[10] = {
|
||||
["CLSID"] = "{8C3F26A2-FA0F-11d5-9190-00A0249B6F00}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 30,
|
||||
[1] = 32,
|
||||
},
|
||||
},
|
||||
[2] = {
|
||||
["name"] = "STRIKE",
|
||||
["displayName"] = "Liberation Strike",
|
||||
["name"] = "Liberation Strike",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{8C3F26A1-FA0F-11d5-9190-00A0249B6F00}",
|
||||
@@ -65,32 +75,24 @@ local unitPayloads = {
|
||||
["num"] = 7,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["CLSID"] = "{A111396E-D3E8-4b9c-8AC9-2432489304D5}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[8] = {
|
||||
[7] = {
|
||||
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
[8] = {
|
||||
["CLSID"] = "{EF124821-F9BB-4314-A153-E0E2FE1162C4}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[10] = {
|
||||
[9] = {
|
||||
["CLSID"] = "{8C3F26A2-FA0F-11d5-9190-00A0249B6F00}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[11] = {
|
||||
["CLSID"] = "{0D33DDAE-524F-4A4E-B5B8-621754FE3ADE}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[12] = {
|
||||
["CLSID"] = "{0D33DDAE-524F-4A4E-B5B8-621754FE3ADE}",
|
||||
["num"] = 9,
|
||||
[10] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["num"] = 6,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
@@ -98,7 +100,8 @@ local unitPayloads = {
|
||||
},
|
||||
},
|
||||
[3] = {
|
||||
["name"] = "CAS",
|
||||
["displayName"] = "Liberation Anti-ship",
|
||||
["name"] = "Liberation Anti-ship",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{8C3F26A1-FA0F-11d5-9190-00A0249B6F00}",
|
||||
@@ -113,48 +116,33 @@ local unitPayloads = {
|
||||
["num"] = 10,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
[5] = {
|
||||
["CLSID"] = "{EF124821-F9BB-4314-A153-E0E2FE1162C4}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[10] = {
|
||||
[6] = {
|
||||
["CLSID"] = "{8C3F26A2-FA0F-11d5-9190-00A0249B6F00}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[11] = {
|
||||
["CLSID"] = "{0D33DDAE-524F-4A4E-B5B8-621754FE3ADE}",
|
||||
["num"] = 4,
|
||||
},
|
||||
[12] = {
|
||||
["CLSID"] = "{0D33DDAE-524F-4A4E-B5B8-621754FE3ADE}",
|
||||
[7] = {
|
||||
["CLSID"] = "{1461CD18-429A-42A9-A21F-4C621ECD4573}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{1461CD18-429A-42A9-A21F-4C621ECD4573}",
|
||||
["num"] = 4,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 32,
|
||||
},
|
||||
},
|
||||
[4] = {
|
||||
["name"] = "CAP",
|
||||
["displayName"] = "Liberation SEAD",
|
||||
["name"] = "Liberation SEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{8C3F26A1-FA0F-11d5-9190-00A0249B6F00}",
|
||||
@@ -165,11 +153,11 @@ local unitPayloads = {
|
||||
["num"] = 11,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||
["CLSID"] = "{E6747967-B1F0-4C77-977B-AB2E6EB0C102}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||
["CLSID"] = "{E6747967-B1F0-4C77-977B-AB2E6EB0C102}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[5] = {
|
||||
@@ -180,13 +168,71 @@ local unitPayloads = {
|
||||
["CLSID"] = "{8C3F26A2-FA0F-11d5-9190-00A0249B6F00}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{E6747967-B1F0-4C77-977B-AB2E6EB0C102}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{E6747967-B1F0-4C77-977B-AB2E6EB0C102}",
|
||||
["num"] = 4,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 17,
|
||||
[1] = 32,
|
||||
},
|
||||
},
|
||||
[5] = {
|
||||
["name"] = "SEAD",
|
||||
["displayName"] = "Liberation DEAD",
|
||||
["name"] = "Liberation DEAD",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{8C3F26A1-FA0F-11d5-9190-00A0249B6F00}",
|
||||
["num"] = 12,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{EF124821-F9BB-4314-A153-E0E2FE1162C4}",
|
||||
["num"] = 11,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{E6747967-B1F0-4C77-977B-AB2E6EB0C102}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{E6747967-B1F0-4C77-977B-AB2E6EB0C102}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{EF124821-F9BB-4314-A153-E0E2FE1162C4}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{8C3F26A2-FA0F-11d5-9190-00A0249B6F00}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{A111396E-D3E8-4b9c-8AC9-2432489304D5}",
|
||||
["num"] = 5,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 32,
|
||||
},
|
||||
},
|
||||
[6] = {
|
||||
["displayName"] = "Liberation BAI",
|
||||
["name"] = "Liberation BAI",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{8C3F26A1-FA0F-11d5-9190-00A0249B6F00}",
|
||||
@@ -201,19 +247,19 @@ local unitPayloads = {
|
||||
["num"] = 10,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{DB769D48-67D7-42ED-A2BE-108D566C8B1E}",
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[8] = {
|
||||
@@ -228,14 +274,96 @@ local unitPayloads = {
|
||||
["CLSID"] = "{8C3F26A2-FA0F-11d5-9190-00A0249B6F00}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[11] = {
|
||||
["CLSID"] = "{0D33DDAE-524F-4A4E-B5B8-621754FE3ADE}",
|
||||
["num"] = 4,
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 32,
|
||||
},
|
||||
},
|
||||
[7] = {
|
||||
["displayName"] = "Liberation OCA/Aircraft",
|
||||
["name"] = "Liberation OCA/Aircraft",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{8C3F26A1-FA0F-11d5-9190-00A0249B6F00}",
|
||||
["num"] = 12,
|
||||
},
|
||||
[12] = {
|
||||
["CLSID"] = "{0D33DDAE-524F-4A4E-B5B8-621754FE3ADE}",
|
||||
[2] = {
|
||||
["CLSID"] = "{EF124821-F9BB-4314-A153-E0E2FE1162C4}",
|
||||
["num"] = 11,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 8,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 7,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 6,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{08164777-5E9C-4B08-B48E-5AA7AFB246E2}",
|
||||
["num"] = 5,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{6CEB49FC-DED8-4DED-B053-E1F033FF72D3}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[9] = {
|
||||
["CLSID"] = "{EF124821-F9BB-4314-A153-E0E2FE1162C4}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[10] = {
|
||||
["CLSID"] = "{8C3F26A2-FA0F-11d5-9190-00A0249B6F00}",
|
||||
["num"] = 1,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 32,
|
||||
},
|
||||
},
|
||||
[8] = {
|
||||
["displayName"] = "Liberation SEAD Escort",
|
||||
["name"] = "Liberation SEAD Escort",
|
||||
["pylons"] = {
|
||||
[1] = {
|
||||
["CLSID"] = "{8C3F26A1-FA0F-11d5-9190-00A0249B6F00}",
|
||||
["num"] = 12,
|
||||
},
|
||||
[2] = {
|
||||
["CLSID"] = "{EF124821-F9BB-4314-A153-E0E2FE1162C4}",
|
||||
["num"] = 11,
|
||||
},
|
||||
[3] = {
|
||||
["CLSID"] = "{E6747967-B1F0-4C77-977B-AB2E6EB0C102}",
|
||||
["num"] = 10,
|
||||
},
|
||||
[4] = {
|
||||
["CLSID"] = "{E6747967-B1F0-4C77-977B-AB2E6EB0C102}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[5] = {
|
||||
["CLSID"] = "{EF124821-F9BB-4314-A153-E0E2FE1162C4}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[6] = {
|
||||
["CLSID"] = "{8C3F26A2-FA0F-11d5-9190-00A0249B6F00}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[7] = {
|
||||
["CLSID"] = "{E6747967-B1F0-4C77-977B-AB2E6EB0C102}",
|
||||
["num"] = 9,
|
||||
},
|
||||
[8] = {
|
||||
["CLSID"] = "{E6747967-B1F0-4C77-977B-AB2E6EB0C102}",
|
||||
["num"] = 4,
|
||||
},
|
||||
},
|
||||
["tasks"] = {
|
||||
[1] = 32,
|
||||
|
||||
42
resources/customized_payloads/UH-60L.lua
Normal file
42
resources/customized_payloads/UH-60L.lua
Normal file
@@ -0,0 +1,42 @@
|
||||
local unitPayloads =
|
||||
{
|
||||
["name"] = "UH-60L",
|
||||
["payloads"] =
|
||||
{
|
||||
[1] =
|
||||
{
|
||||
["name"] = "Liberation Ferry",
|
||||
["pylons"] =
|
||||
{
|
||||
[1] =
|
||||
{
|
||||
["CLSID"] = "{UH60_FUEL_TANK_230}",
|
||||
["num"] = 1,
|
||||
},
|
||||
[2] =
|
||||
{
|
||||
["CLSID"] = "{UH60_FUEL_TANK_230}",
|
||||
["num"] = 2,
|
||||
},
|
||||
[3] =
|
||||
{
|
||||
["CLSID"] = "{UH60_FUEL_TANK_230}",
|
||||
["num"] = 3,
|
||||
},
|
||||
[4] =
|
||||
{
|
||||
["CLSID"] = "{UH60_FUEL_TANK_230}",
|
||||
["num"] = 4,
|
||||
},
|
||||
},
|
||||
["tasks"] =
|
||||
{
|
||||
[1] = 35,
|
||||
[2] = 17,
|
||||
},
|
||||
},
|
||||
},
|
||||
["tasks"] = {},
|
||||
["unitType"] = "UH-60L",
|
||||
}
|
||||
return unitPayloads
|
||||
@@ -16,6 +16,7 @@
|
||||
"AV-8B Harrier II Night Attack",
|
||||
"AH-1W SuperCobra",
|
||||
"AH-64D Apache Longbow",
|
||||
"AH-64D Apache Longbow (AI)",
|
||||
"S-3B Viking",
|
||||
"SH-60B Seahawk",
|
||||
"UH-1H Iroquois"
|
||||
|
||||
@@ -101,5 +101,6 @@
|
||||
"OliverHazardPerryGroupGenerator"
|
||||
],
|
||||
"has_jtac": true,
|
||||
"jtac_unit": "MQ-9 Reaper"
|
||||
"jtac_unit": "MQ-9 Reaper",
|
||||
"unrestricted_satnav": true
|
||||
}
|
||||
109
resources/factions/NATO_OIF.json
Normal file
109
resources/factions/NATO_OIF.json
Normal file
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"country": "Combined Joint Task Forces Blue",
|
||||
"name": "NATO OIF",
|
||||
"authors": "Fuzzle",
|
||||
"description": "<p>A more modern NATO mixed faction reflecting the units involved in Operation Iraqi Freedom.</p>",
|
||||
"aircrafts": [
|
||||
"A-10C Thunderbolt II (Suite 3)",
|
||||
"AH-64D Apache Longbow",
|
||||
"AH-64D Apache Longbow (AI)",
|
||||
"AV-8B Harrier II Night Attack",
|
||||
"B-1B Lancer",
|
||||
"B-52H Stratofortress",
|
||||
"C-130",
|
||||
"C-130J-30 Super Hercules",
|
||||
"F-117A Nighthawk",
|
||||
"F-14A Tomcat (Block 135-GR Late)",
|
||||
"F-14B Tomcat",
|
||||
"F-15C Eagle",
|
||||
"F-15E Strike Eagle",
|
||||
"F-16CM Fighting Falcon (Block 50)",
|
||||
"F-22A Raptor",
|
||||
"F/A-18C Hornet (Lot 20)",
|
||||
"Mirage 2000C",
|
||||
"OH-58D Kiowa Warrior",
|
||||
"S-3B Viking",
|
||||
"SA 342L Gazelle",
|
||||
"SA 342M Gazelle",
|
||||
"SA 342M Gazelle Mistral",
|
||||
"Tornado GR4",
|
||||
"UH-1H Iroquois",
|
||||
"UH-60A",
|
||||
"UH-60L"
|
||||
],
|
||||
"awacs": [
|
||||
"E-2C Hawkeye",
|
||||
"E-3A"
|
||||
],
|
||||
"tankers": [
|
||||
"KC-130",
|
||||
"KC-130J",
|
||||
"KC-135 Stratotanker",
|
||||
"S-3B Tanker"
|
||||
],
|
||||
"frontline_units": [
|
||||
"FV4034 Challenger 2",
|
||||
"FV510 Warrior",
|
||||
"LAV-25",
|
||||
"M1043 HMMWV (M2 HMG)",
|
||||
"M1045 HMMWV (BGM-71 TOW)",
|
||||
"M1097 Heavy HMMWV Avenger",
|
||||
"M1134 Stryker ATGM (BGM-71 TOW)",
|
||||
"M1A2 Abrams",
|
||||
"M2A2 Bradley",
|
||||
"M6 Linebacker",
|
||||
"Marder 1A3",
|
||||
"VAB Mephisto"
|
||||
],
|
||||
"artillery_units": [
|
||||
"M109A6 Paladin",
|
||||
"M270 Multiple Launch Rocket System"
|
||||
],
|
||||
"logistics_units": [
|
||||
"Truck M818 6x6"
|
||||
],
|
||||
"infantry_units": [
|
||||
"Infantry M249",
|
||||
"Infantry M4",
|
||||
"MANPADS Stinger"
|
||||
],
|
||||
"air_defenses": [
|
||||
"AvengerGenerator",
|
||||
"ChaparralGenerator",
|
||||
"VulcanGenerator",
|
||||
"RolandGenerator",
|
||||
"HawkGenerator",
|
||||
"PatriotGenerator",
|
||||
"RapierGenerator"
|
||||
],
|
||||
"ewrs": [
|
||||
"PatriotEwrGenerator"
|
||||
],
|
||||
"aircraft_carrier": [
|
||||
"Stennis"
|
||||
],
|
||||
"helicopter_carrier": [
|
||||
"LHA_Tarawa"
|
||||
],
|
||||
"destroyers": [
|
||||
"USS_Arleigh_Burke_IIa"
|
||||
],
|
||||
"cruisers": [
|
||||
"TICONDEROG"
|
||||
],
|
||||
"requirements": {},
|
||||
"carrier_names": [
|
||||
"CVN-71 Theodore Roosevelt"
|
||||
],
|
||||
"helicopter_carrier_names": [
|
||||
"LHA-1 Tarawa",
|
||||
"LHA-4 Nassau"
|
||||
],
|
||||
"navy_generators": [
|
||||
"ArleighBurkeGroupGenerator",
|
||||
"OliverHazardPerryGroupGenerator"
|
||||
],
|
||||
"has_jtac": true,
|
||||
"jtac_unit": "MQ-9 Reaper",
|
||||
"unrestricted_satnav": true
|
||||
}
|
||||
@@ -8,6 +8,7 @@
|
||||
"A-10C Thunderbolt II (Suite 3)",
|
||||
"A-10C Thunderbolt II (Suite 7)",
|
||||
"AH-64D Apache Longbow",
|
||||
"AH-64D Apache Longbow (AI)",
|
||||
"AJS-37 Viggen",
|
||||
"AV-8B Harrier II Night Attack",
|
||||
"B-1B Lancer",
|
||||
@@ -71,7 +72,8 @@
|
||||
"air_defenses": [
|
||||
"AvengerGenerator",
|
||||
"HawkGenerator",
|
||||
"PatriotGenerator"
|
||||
"PatriotGenerator",
|
||||
"NasamCGenerator"
|
||||
],
|
||||
"ewrs": [
|
||||
"PatriotEwrGenerator"
|
||||
@@ -108,4 +110,4 @@
|
||||
"has_jtac": true,
|
||||
"jtac_unit": "MQ-9 Reaper",
|
||||
"unrestricted_satnav": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
],
|
||||
"aircrafts": [
|
||||
"Bf 109 K-4 Kurf\u00fcrst",
|
||||
"Fw 190 A-8 Anton",
|
||||
"Fw 190 D-9 Dora",
|
||||
"Ju 88 A-4"
|
||||
],
|
||||
"frontline_units": [
|
||||
@@ -48,4 +46,4 @@
|
||||
"has_jtac": false,
|
||||
"doctrine": "ww2",
|
||||
"building_set": "ww2germany"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
],
|
||||
"aircrafts": [
|
||||
"Bf 109 K-4 Kurf\u00fcrst",
|
||||
"Fw 190 A-8 Anton",
|
||||
"Fw 190 D-9 Dora",
|
||||
"Ju 88 A-4"
|
||||
],
|
||||
"frontline_units": [
|
||||
@@ -51,4 +49,4 @@
|
||||
"has_jtac": false,
|
||||
"doctrine": "ww2",
|
||||
"building_set": "ww2germany"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,11 +26,12 @@
|
||||
"M113",
|
||||
"M60A3 \"Patton\"",
|
||||
"ZSU-23-4 Shilka",
|
||||
"ZSU-57-2 'Sparka'",
|
||||
"ZU-23 on Ural-375"
|
||||
"ZU-23 on Ural-375",
|
||||
"ZSU-57-2 'Sparka'"
|
||||
],
|
||||
"artillery_units": [
|
||||
"2S1 Gvozdika",
|
||||
"M109A6 Paladin",
|
||||
"BM-21 Grad"
|
||||
],
|
||||
"logistics_units": [
|
||||
@@ -40,21 +41,21 @@
|
||||
"infantry_units": [
|
||||
"Infantry RPG",
|
||||
"Insurgent AK-74",
|
||||
"MANPADS SA-18 Igla-S \"Grouse\"",
|
||||
"Paratrooper AKS"
|
||||
"MANPADS SA-18 Igla \"Grouse\" Ins"
|
||||
],
|
||||
"air_defenses": [
|
||||
"HawkGenerator",
|
||||
"RapierGenerator",
|
||||
"SA2Generator",
|
||||
"ZSU57Generator",
|
||||
"ZSU23Generator",
|
||||
"ZU23Generator",
|
||||
"ZU23InsurgentGenerator",
|
||||
"ZU23UralInsurgentGenerator",
|
||||
"ZSU57Generator",
|
||||
"ColdWarFlakGenerator"
|
||||
],
|
||||
"ewrs": [
|
||||
"TallRackGenerator",
|
||||
"TinShieldGenerator"
|
||||
"FlatFaceGenerator",
|
||||
"HawkEwrGenerator"
|
||||
],
|
||||
"aircraft_carrier": [],
|
||||
"helicopter_carrier": [],
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
"frontline_units": [
|
||||
"Chieftain Mk.3",
|
||||
"BMP-1",
|
||||
"BMP-2",
|
||||
"BTR-80",
|
||||
"M113",
|
||||
"M60A3 \"Patton\"",
|
||||
@@ -38,7 +39,8 @@
|
||||
"ZSU-57-2 'Sparka'"
|
||||
],
|
||||
"artillery_units": [
|
||||
"2S19 Msta-S",
|
||||
"2S1 Gvozdika",
|
||||
"M109A6 Paladin",
|
||||
"BM-21 Grad"
|
||||
],
|
||||
"logistics_units": [
|
||||
@@ -46,28 +48,27 @@
|
||||
"Truck Ural-375"
|
||||
],
|
||||
"infantry_units": [
|
||||
"Infantry RPG",
|
||||
"Insurgent AK-74",
|
||||
"MANPADS SA-18 Igla-S \"Grouse\"",
|
||||
"Paratrooper AKS",
|
||||
"Paratrooper RPG-16"
|
||||
"MANPADS SA-18 Igla \"Grouse\" Ins"
|
||||
],
|
||||
"air_defenses": [
|
||||
"HawkGenerator",
|
||||
"RapierGenerator",
|
||||
"SA2Generator",
|
||||
"SA5Generator",
|
||||
"SA5FlatFaceGenerator",
|
||||
"SA6Generator",
|
||||
"SA11Generator",
|
||||
"SA15Generator",
|
||||
"SA17Generator",
|
||||
"VulcanGenerator",
|
||||
"ZSU23Generator",
|
||||
"ZU23Generator",
|
||||
"ZU23UralGenerator"
|
||||
"ZU23InsurgentGenerator",
|
||||
"ZU23UralInsurgentGenerator",
|
||||
"ZSU57Generator"
|
||||
],
|
||||
"ewrs": [
|
||||
"TallRackGenerator",
|
||||
"TinShieldGenerator"
|
||||
"FlatFaceGenerator",
|
||||
"HawkEwrGenerator"
|
||||
],
|
||||
"aircraft_carrier": [],
|
||||
"helicopter_carrier": [],
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
"aircrafts": [
|
||||
"AH-1W SuperCobra",
|
||||
"AH-64D Apache Longbow",
|
||||
"AH-64D Apache Longbow (AI)",
|
||||
"C-130",
|
||||
"C-130J-30 Super Hercules",
|
||||
"F-15C Eagle",
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
"aircrafts": [
|
||||
"A-10C Thunderbolt II (Suite 3)",
|
||||
"AH-64D Apache Longbow",
|
||||
"AH-64D Apache Longbow (AI)",
|
||||
"C-130",
|
||||
"C-130J-30 Super Hercules",
|
||||
"F-15C Eagle",
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
"aircrafts": [
|
||||
"AH-1W SuperCobra",
|
||||
"AH-64D Apache Longbow",
|
||||
"AH-64D Apache Longbow (AI)",
|
||||
"C-130",
|
||||
"C-130J-30 Super Hercules",
|
||||
"F-15J Eagle",
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
"RapierGenerator",
|
||||
"SA2Generator",
|
||||
"SA3Generator",
|
||||
"SA5Generator",
|
||||
"SA5FlatFaceGenerator",
|
||||
"SA6Generator",
|
||||
"SA8Generator",
|
||||
"SA9Generator",
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
"Paratrooper AKS"
|
||||
],
|
||||
"air_defenses": [
|
||||
"SA5Generator",
|
||||
"SA5FlatFaceGenerator",
|
||||
"SA6Generator",
|
||||
"SA8Generator",
|
||||
"ZSU23Generator",
|
||||
|
||||
@@ -14,7 +14,8 @@
|
||||
"F-4E Phantom II",
|
||||
"OH-58D Kiowa Warrior",
|
||||
"UH-1H Iroquois",
|
||||
"UH-60A"
|
||||
"UH-60A",
|
||||
"UH-60L"
|
||||
],
|
||||
"awacs": [
|
||||
"E-3A"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"description": "<p>UAR army in the 2000s.</p>",
|
||||
"aircrafts": [
|
||||
"AH-64D Apache Longbow",
|
||||
"AH-64D Apache Longbow (AI)",
|
||||
"C-130",
|
||||
"F-16CM Fighting Falcon (Block 50)",
|
||||
"Mirage 2000-5",
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"description": "<p>UAE army in the 2010s.</p>",
|
||||
"aircrafts": [
|
||||
"AH-64D Apache Longbow",
|
||||
"AH-64D Apache Longbow (AI)",
|
||||
"C-130",
|
||||
"C-130J-30 Super Hercules",
|
||||
"C-17A",
|
||||
@@ -12,7 +13,8 @@
|
||||
"F-16CM Fighting Falcon (Block 50)",
|
||||
"Mirage 2000-5",
|
||||
"Mirage 2000C",
|
||||
"UH-60A"
|
||||
"UH-60A",
|
||||
"UH-60L"
|
||||
],
|
||||
"awacs": [
|
||||
"E-3A"
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"A-10A Thunderbolt II",
|
||||
"A-10C Thunderbolt II (Suite 3)",
|
||||
"AH-64D Apache Longbow",
|
||||
"AH-64D Apache Longbow (AI)",
|
||||
"AV-8B Harrier II Night Attack",
|
||||
"B-1B Lancer",
|
||||
"B-52H Stratofortress",
|
||||
|
||||
@@ -26,7 +26,8 @@
|
||||
"S-3B Viking",
|
||||
"SH-60B Seahawk",
|
||||
"UH-1H Iroquois",
|
||||
"UH-60A"
|
||||
"UH-60A",
|
||||
"UH-60L"
|
||||
],
|
||||
"awacs": [
|
||||
"E-2C Hawkeye",
|
||||
@@ -34,6 +35,7 @@
|
||||
],
|
||||
"tankers": [
|
||||
"KC-130",
|
||||
"KC-130J",
|
||||
"KC-135 Stratotanker",
|
||||
"S-3B Tanker"
|
||||
],
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"A-10C Thunderbolt II (Suite 3)",
|
||||
"A-10C Thunderbolt II (Suite 7)",
|
||||
"AH-64D Apache Longbow",
|
||||
"AH-64D Apache Longbow (AI)",
|
||||
"AV-8B Harrier II Night Attack",
|
||||
"B-1B Lancer",
|
||||
"B-52H Stratofortress",
|
||||
@@ -28,7 +29,8 @@
|
||||
"S-3B Viking",
|
||||
"SH-60B Seahawk",
|
||||
"UH-1H Iroquois",
|
||||
"UH-60A"
|
||||
"UH-60A",
|
||||
"UH-60L"
|
||||
],
|
||||
"awacs": [
|
||||
"E-2C Hawkeye",
|
||||
@@ -36,6 +38,7 @@
|
||||
],
|
||||
"tankers": [
|
||||
"KC-130",
|
||||
"KC-130J",
|
||||
"KC-135 Stratotanker",
|
||||
"KC-135 Stratotanker MPRS",
|
||||
"S-3B Tanker"
|
||||
|
||||
12
resources/squadrons/AH-64D/A Company, 1-211th ARB.yaml
Normal file
12
resources/squadrons/AH-64D/A Company, 1-211th ARB.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
name: A Company, 1-211th ARB
|
||||
nickname: Air Pirates
|
||||
female_pilot_percentage: 10
|
||||
country: USA
|
||||
role: Attack Helicopter
|
||||
aircraft: AH-64D Apache Longbow
|
||||
livery: The Air Pirates 1-211th ARB
|
||||
mission_types:
|
||||
- CAS
|
||||
- BAI
|
||||
- OCA/Aircraft
|
||||
12
resources/squadrons/AH-64D/A Company, 1-227th ARB.yaml
Normal file
12
resources/squadrons/AH-64D/A Company, 1-227th ARB.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
name: A Company, 1-227th ARB
|
||||
nickname: Avengers
|
||||
female_pilot_percentage: 10
|
||||
country: USA
|
||||
role: Attack Helicopter
|
||||
aircraft: AH-64D Apache Longbow
|
||||
livery: Avengers 1-227th ARB
|
||||
mission_types:
|
||||
- CAS
|
||||
- BAI
|
||||
- OCA/Aircraft
|
||||
12
resources/squadrons/AH-64D/C Company, 2-159th ARB.yaml
Normal file
12
resources/squadrons/AH-64D/C Company, 2-159th ARB.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
name: C Company, 2-159th ARB
|
||||
nickname: Gunslingers
|
||||
female_pilot_percentage: 10
|
||||
country: USA
|
||||
role: Attack Helicopter
|
||||
aircraft: AH-64D Apache Longbow
|
||||
livery: Gunslingers 2-159th ARB
|
||||
mission_types:
|
||||
- CAS
|
||||
- BAI
|
||||
- OCA/Aircraft
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
name: 229th Aviation Battalion
|
||||
nickname: Serpents
|
||||
country: USA
|
||||
role: Attack Helicopter
|
||||
aircraft: AH-64D Apache Longbow
|
||||
livery: standard
|
||||
mission_types:
|
||||
- CAS
|
||||
- BAI
|
||||
- OCA/Aircraft
|
||||
12
resources/squadrons/AH-64D/Wolfpack, 1-82 ARB.yaml
Normal file
12
resources/squadrons/AH-64D/Wolfpack, 1-82 ARB.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
name: Wolfpack, 1-82 ARB
|
||||
nickname: Wolfpack
|
||||
female_pilot_percentage: 10
|
||||
country: USA
|
||||
role: Attack Helicopter
|
||||
aircraft: AH-64D Apache Longbow
|
||||
livery: Wolfpack 1-82 ARB
|
||||
mission_types:
|
||||
- CAS
|
||||
- BAI
|
||||
- OCA/Aircraft
|
||||
15
resources/squadrons/Tornado/RAF No12 Squadron.yaml
Normal file
15
resources/squadrons/Tornado/RAF No12 Squadron.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
name: No. 12 Squadron
|
||||
nickname: Shiny Twelve
|
||||
country: UK
|
||||
role: Strike Fighter
|
||||
aircraft: Tornado GR4
|
||||
livery: HAF_341_Arrow
|
||||
mission_types:
|
||||
- BAI
|
||||
- CAS
|
||||
- DEAD
|
||||
- OCA/Runway
|
||||
- SEAD
|
||||
- SEAD Escort
|
||||
- Strike
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
name: 101st Combat Aviation Brigade
|
||||
nickname: Bearcats
|
||||
country: USA
|
||||
role: Transport/Light Attack
|
||||
aircraft: UH-60A
|
||||
livery: standard
|
||||
mission_types:
|
||||
- CAS
|
||||
- OCA/Aircraft
|
||||
- Transport
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user