Compare commits

..

33 Commits

Author SHA1 Message Date
Dan Albert
5037a5c9d7 Bump version to 5.2.1. 2022-10-31 13:21:29 -07:00
Dan Albert
fb734d4f09 Note hold point fix in the changelog.
Fixes https://github.com/dcs-liberation/dcs_liberation/issues/2494.

(cherry picked from commit 73b7be0606)
2022-10-31 13:21:29 -07:00
Raffson
173b99f610 Fix for orbit's broken stop condition
(cherry picked from commit 7e7c920816d384001ac1dbf1bcbcf8ccaad4a093)
(cherry picked from commit 73ee2ba4c0)
2022-10-31 13:21:29 -07:00
RndName
a87fa119aa Set unrestricted_satnav for NATO factions
cherry-pick from f7f565477c
2022-03-26 17:11:43 +01:00
MetalStormGhost
eb8859ebea Don't reject exact fits when transferring squadrons.
cherry-pick from a024be6b1d
2022-03-26 15:39:40 +01:00
RndName
7e54c8dea7 Update changelog for 5.2.0 2022-03-26 13:19:12 +01:00
RndName
e86bd4fa14 Capaign update: Task Force Thunder
Submission by sith1144

cherry-pick from 6a6df8936e
2022-03-26 13:15:27 +01:00
RndName
178ae3774e Support campaign version 10.0 for Liberation 5.2.0
- add a new const to the version.py to allow future campaign version to be backwards compatible
- Version 10.0 was only about orientation of ground objects which does not break the compatibility so we can give support for this specific version
2022-03-26 12:47:02 +01:00
RndName
1988836c61 Campaign updates & submission by Fuzzle
- new campaign: Tripoint Hostility
- updated other campaings and set 10.0 compat

Submission by sgtfuzzle17

cherry-pick from
7b0676025b
9050e705ff
d30701c1bb
2022-03-26 12:23:58 +01:00
RndName
e0ba2609b1 Update pyinstaller dependency to match develop 2022-03-25 10:14:52 +01:00
Benjamin Fischer
72050df5ff Make Apache LHA capable.
cherry-pick from 8eb97136b0
2022-03-25 09:19:29 +01:00
Benjamin Fischer
28c775af60 Fix can_operate for airfields without runways.
cherry-pick from e9c5cac20c
2022-03-25 09:19:18 +01:00
RndName
3d5f94db1f Support for the AH-64D radios
- Support for the AH-64D radios
- Mention missing Radio preset support for AH-64D

cherry-pick from 437fdd6d12
2022-03-23 17:18:21 +01:00
RndName
c93695ac36 Update pydcs to fix issues with syria map updates 2022-03-22 13:18:20 +01:00
RndName
0b33b0f9fb Update pydcs to fix save-compat issues
fixes #2103
2022-03-22 11:53:08 +01:00
Starfire13
e043e6073e Peace Spring, Vectron's Claw, Vegas Nerve updates.
cherry-pick from 46e220cecc
2022-03-21 21:37:32 +01:00
Dan Albert
c7d764da85 Scenic Route II update.
cherry-pick from 123a44fefc
2022-03-21 10:07:25 +01:00
Dan Albert
367a7f9829 Add Apache squadrons.
cherry-pick from b683246647
2022-03-21 10:06:07 +01:00
Dan Albert
4a99b59a38 Fix helicopters at airfields breaking generation.
Helipads at airfields don't work well right now because they are not
counted as additional parking, but we should still allow them to take
off from the airfield parking.

Follow up work would be to fix the parking problem and allow adding
helipads to airfields, or maybe to just "ground" start helicopters at
airfields so they take off from parking rather than the runway.

cherry-pick from 2499276b2a
2022-03-21 00:06:34 +01:00
RndName
9b125a644e Update Changelog 2022-03-20 21:10:57 +01:00
bbirchnz
5a037d8b75 Add windsocks to FARPs
cherry-pick from 39152eab3c
2022-03-20 20:52:52 +01:00
MetalStormGhost
30ac898aa9 Updated the Community A-4E-C mod support to version 2.0.0
cherry-pick from 11328ea241
2022-03-20 20:48:09 +01:00
MetalStormGhost
74fb390dcd Commit JAS-39-C support update for v1.8.0-beta again 2022-03-20 20:48:09 +01:00
RndName
6f0119731b Fix heli spawn & farp helipad creation
cherry-pick from
ad0d3412fb
6f8c30ec81
c88fa6d2af
a53812c0fb
2022-03-20 20:48:04 +01:00
Ben Birch
a6e1dc14c3 Add all helipads to single group per FARP allowing take off from parking behavour
cherry-pick from a70a951192 with adoptions
2022-03-20 20:23:55 +01:00
RndName
d23b1fbb2c Temporary Workaround for weapon save compat
Adds a temporary workaround for save game loading when weapon data got removed and can not be updated anymore.

This can lead to some unexpected behaviour especially when generating the next turn miz as pydcs will most likely crash. This could be solved by just changing the loadout (not tested yet)
2022-03-20 19:49:58 +01:00
RndName
26f3bf5827 Fix for removed units
Latest dcs data exports have some units removed which were used in two generators.
2022-03-20 13:54:54 +01:00
RndName
48945c1ce9 Update pydcs to develop-5.2 fork 2022-03-20 13:46:15 +01:00
RndName
a75a3af13d Add support for the flyable Apache. 2022-03-20 13:40:50 +01:00
Dan Albert
a88cd60f31 Update pydcs. 2022-03-20 13:40:37 +01:00
RndName
86b204883a Revert "Add support for AH-64D_BLK_II as PyDCS Extension"
This reverts commit 7d65e55665.
2022-03-20 13:28:29 +01:00
walterroach
4d2289ece9 Add Starfire's loadouts for AH-64D_BLK_II 2022-03-18 13:02:12 -05:00
RndName
7d65e55665 Add support for AH-64D_BLK_II as PyDCS Extension
The new human flyable Apache will be handled like a mod in 5.X to be save compat and to prevent switching to the newest version of pydcs. There will no checkbox on the newgame wizard like with other mods as it can be used by everyone.

- exported the AH-64D_BLK_II and the weapon data from the latest open beta
- added the needed ressources
- maked the AH-64D_BLK_II as flyable
2022-03-18 10:25:09 +01:00
59 changed files with 1890 additions and 913 deletions

View File

@@ -1,17 +1,29 @@
# 5.2.1
## Fixes
* **[Mission Generation]** Work around DCS 2.8 bug preventing the AI from leaving their hold point.
# 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
* **[Campaign]** Vegas Nerve campaign update
* **[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
@@ -30,7 +42,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.

View File

@@ -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:

View File

@@ -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

View File

@@ -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")]

View File

@@ -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."""

View File

@@ -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}.")

View File

@@ -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

View File

@@ -3,7 +3,7 @@ from pathlib import Path
MAJOR_VERSION = 5
MINOR_VERSION = 2
MICRO_VERSION = 0
MICRO_VERSION = 1
def _build_version_string() -> str:
@@ -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)

View File

@@ -9,7 +9,7 @@ from functools import cached_property
from typing import Any, Dict, Iterable, List, Optional, TYPE_CHECKING, Type, Union
from dcs import helicopters
from dcs.action import AITaskPush, ActivateGroup
from dcs.action import AITaskPush, ActivateGroup, SetFlag
from dcs.condition import CoalitionHasAirdrome, TimeAfter
from dcs.country import Country
from dcs.flyingunit import FlyingUnit
@@ -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)
@@ -1496,6 +1490,24 @@ class DefaultWaypointBuilder(PydcsWaypointBuilder):
pass
def create_stop_orbit_trigger(
orbit: ControlledTask, package: Package, mission: Mission, stop_after: int
) -> None:
orbit.stop_if_user_flag(id(package), True)
orbits = [
x
for x in mission.triggerrules.triggers
if x.comment == f"StopOrbit{id(package)}"
]
if not any(orbits):
stop_trigger = TriggerOnce(Event.NoEvent, f"StopOrbit{id(package)}")
stop_condition = TimeAfter(stop_after)
stop_action = SetFlag(id(package))
stop_trigger.add_condition(stop_condition)
stop_trigger.add_action(stop_action)
mission.triggerrules.triggers.append(stop_trigger)
class HoldPointBuilder(PydcsWaypointBuilder):
def build(self) -> MovingPoint:
waypoint = super().build()
@@ -1512,7 +1524,11 @@ class HoldPointBuilder(PydcsWaypointBuilder):
return waypoint
push_time = self.flight.flight_plan.push_time
self.waypoint.departure_time = push_time
loiter.stop_after_time(int(push_time.total_seconds()))
stop_after = int(push_time.total_seconds())
loiter.stop_after_time(stop_after)
# What follows is some code to cope with the broken 'stop after time' condition
create_stop_orbit_trigger(loiter, self.package, self.mission, stop_after)
# end of hotfix
waypoint.add_task(loiter)
return waypoint
@@ -1881,7 +1897,11 @@ class RaceTrackBuilder(PydcsWaypointBuilder):
racetrack = ControlledTask(orbit)
self.set_waypoint_tot(waypoint, flight_plan.patrol_start_time)
racetrack.stop_after_time(int(flight_plan.patrol_end_time.total_seconds()))
stop_after = int(flight_plan.patrol_end_time.total_seconds())
racetrack.stop_after_time(stop_after)
# What follows is some code to cope with the broken 'stop after time' condition
create_stop_orbit_trigger(racetrack, self.package, self.mission, stop_after)
# end of hotfix
waypoint.add_task(racetrack)
return waypoint

View File

@@ -6,6 +6,7 @@ from dcs.helicopters import (
AH_1W,
AH_64A,
AH_64D,
AH_64D_BLK_II,
CH_47D,
CH_53E,
Ka_50,
@@ -210,6 +211,7 @@ CAS_CAPABLE = [
MiG_27K,
MiG_29A,
MiG_21Bis,
AH_64D_BLK_II,
AH_64D,
AH_64A,
AH_1W,

View File

@@ -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]

View File

@@ -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",

View File

@@ -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

View File

@@ -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

View File

@@ -24,9 +24,9 @@ Pillow==8.3.2
pluggy==0.13.1
pre-commit==2.10.1
py==1.10.0
-e git+https://github.com/pydcs/dcs@5d1f581b260fdc6091744ab927a58cdee586e681#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

View File

@@ -10,153 +10,153 @@ miz: Task Force Thunder.miz
performance: 3
version: "9.1"
squadrons:
# Airspawn from Iraq
Al Asad Airbase:
# Airspawn from Iraq
Al Asad Airbase:
- primary: AEW&C
aircraft:
- E-3A
- E-3A
- primary: BARCAP
secondary: air-to-air
aircraft:
- F-15C Eagle
- F-15C Eagle
- primary: Strike
secondary: air-to-ground
aircraft:
- B-1B Lancer
- B-52H Stratofortress
- F-117A Nighthawk
- primary: CAS
secondary: air-to-ground
- B-1B Lancer
- B-52H Stratofortress
- F-117A Nighthawk
- primary: Refueling
aircraft:
- A-10C Thunderbolt II (Suite 7)
- KC-135 Stratotanker MPRS
#H3 airbase
53:
- primary: SEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
aircraft:
- F-16CM Fighting Falcon (Block 50)
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
- F-16CM Fighting Falcon (Block 50)
- primary: BAI
secondary: air-to-ground
aircraft: F-15E Strike Eagle
- primary: Refueling
aircraft:
- KC-135 Stratotanker MPRS
#H4 airbase
12:
- primary: BARCAP
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
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 3)
#Northern FOB
Staging Point Alpha:
- 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:
aircraft:
- AH-64D Apache Longbow
#Carrier is called Naval-1
Naval-1:
- primary: BARCAP
secondary: air-to-air
aircraft:
- F-14B Tomcat
- F-14B Tomcat
- primary: BARCAP
secondary: air-to-air
aircraft:
- F-14B Tomcat
- F-14B Tomcat
- primary: Strike
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
- F/A-18C Hornet (Lot 20)
- primary: SEAD
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
- F/A-18C Hornet (Lot 20)
- primary: Refueling
aircraft:
- S-3B Tanker
- S-3B Tanker
- primary: AEW&C
aircraft:
- E-2C Hawkeye
#LHA is called Naval-2
Naval-2:
- E-2C Hawkeye
#LHA is called Naval-2
Naval-2:
- primary: CAS
secondary: air-to-ground
aircraft:
- AV-8B Harrier II Night Attack
- AV-8B Harrier II Night Attack
- primary: CAS
aircraft:
- AH-1W SuperCobra
# Al Qusayr - opposing the beach landing with old fighters (mig-23), CAS (su-17), helicopters (mi-24)
3:
- 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
- MiG-23MLD Flogger-K
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24V Hind-E
- 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:
- 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
- MiG-25PD Foxbat-E
- primary: Strike
secondary: air-to-ground
aircraft:
- L-39ZA Albatros
- 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:
- 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
- MiG-21bis Fishbed-N
- primary: CAS
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
- Su-17M4 Fitter-K
- Mi-24P Hind-F
- Su-17M4 Fitter-K
- primary: CAS
secondary: air-to-ground
aircraft:
- Su-17M4 Fitter-K
- 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:
- 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
- MiG-29S Fulcrum-C
- primary: Strike
secondary: air-to-ground
aircraft:
- Su-24M Fencer-D
- Su-24M Fencer-D
- primary: Refueling
aircraft:
- IL-78M
- IL-78M
- primary: Transport
aircraft:
- IL-76MD
# Defensive Line FARP for gazelles
Defensive Line:
- IL-76MD
# Defensive Line FARP for gazelles
Defensive Line:
- primary: CAS
aircraft:
- SA 342M Gazelle
- SA 342M Gazelle

View File

@@ -4,7 +4,7 @@ theater: Nevada
authors: Starfire
recommended_player_faction: USA 2005
recommended_enemy_faction: Redfor (China) 2010
description: <p>Welcome to Vegas Nerve, an asymmetrical Red Flag Exercise scenario. You start 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. OPFOR has a substantial resource advantage and reducing that advantage will be key to your success. Good luck, Commander.</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
@@ -46,11 +46,11 @@ squadrons:
secondary: air-to-ground
aircraft:
- AH-64D Apache Longbow
- primary: SEAD
- primary: DEAD
secondary: air-to-ground
aircraft:
- F/A-18C Hornet (Lot 20)
- primary: DEAD
- primary: SEAD
secondary: air-to-ground
aircraft:
- F-16CM Fighting Falcon (Block 50)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -3,7 +3,7 @@ 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: "9.1"
version: "10.0"
advanced_iads: true
recommended_player_faction: NATO OIF
recommended_enemy_faction: Iran 2015
@@ -51,7 +51,7 @@ squadrons:
secondary: air-to-air
aircraft:
- VF-143
- primary: TARCAP
- primary: DEAD
secondary: any
aircraft:
- VMFA-251
@@ -81,7 +81,7 @@ squadrons:
- primary: CAS
secondary: air-to-ground
aircraft:
- 229th Aviation Battalion
- Wolfpack, 1-82 ARB
#US Army Apache AH-64D
# OPFOR L1F1
FOB Tang-e Dalan:

Binary file not shown.

View File

@@ -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

Binary file not shown.

View 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

View 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

View File

@@ -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,
},
},

View File

@@ -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] = {

View File

@@ -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"

View File

@@ -101,5 +101,6 @@
"OliverHazardPerryGroupGenerator"
],
"has_jtac": true,
"jtac_unit": "MQ-9 Reaper"
"jtac_unit": "MQ-9 Reaper",
"unrestricted_satnav": true
}

View File

@@ -6,6 +6,7 @@
"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",
@@ -103,5 +104,6 @@
"OliverHazardPerryGroupGenerator"
],
"has_jtac": true,
"jtac_unit": "MQ-9 Reaper"
"jtac_unit": "MQ-9 Reaper",
"unrestricted_satnav": true
}

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View 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

View 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

View 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

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,4 +1,5 @@
always_keeps_gun: true
lha_capable: true
description: The legendary 'Apache' is an US twin-turboshaft attack helicopter for
a crew of two. It features a nose-mounted sensor suite for target acquisition and
night vision systems. It is armed with a 30 mm (1.18 in) M230 chain gun carried
@@ -15,4 +16,4 @@ origin: USA
price: 20
role: Attack
variants:
AH-64D Apache Longbow: {}
AH-64D Apache Longbow (AI): {}

View File

@@ -0,0 +1,32 @@
always_keeps_gun: true
lha_capable: true
description: The legendary 'Apache' is an US twin-turboshaft attack helicopter for
a crew of two. It features a nose-mounted sensor suite for target acquisition and
night vision systems. It is armed with a 30 mm (1.18 in) M230 chain gun carried
between the main landing gear, under the aircraft's forward fuselage, and four hardpoints
mounted on stub-wing pylons for carrying armament and stores, typically a mixture
of AGM-114 Hellfire missiles and Hydra 70 rocket pods. The AH-64 has significant
systems redundancy to improve combat survivability. American AH-64s have served
in conflicts in Panama, the Persian Gulf, Kosovo, Afghanistan, and Iraq. Israel
used the Apache in its military conflicts in Lebanon and the Gaza Strip. British
and Dutch Apaches have seen deployments in wars in Afghanistan and Iraq.
introduced: 2003
manufacturer: Boeing
origin: USA
price: 20
role: Attack
variants:
AH-64D Apache Longbow: {}
radios:
# DCS uses the 2nd Radio AN/ARC-164 (UHF) as the main intra flight for the Apache
# so we use this Radio for Intra and Inter Flight for now
# The radio frequencies set in the mission editor are in the current state of Early
# access not used for radio presets. Only the flight frequency is used. Any other
# frequency has to be entered manually atm.
intra_flight: AN/ARC-164
inter_flight: AN/ARC-164
channels:
type: common
namer: apache
intra_flight_radio_index: 2
inter_flight_radio_index: 2