Compare commits

...

7 Commits

Author SHA1 Message Date
Raffson
801e9efe8c Fix heli spawn/landing at FOB/FARP
Fixes https://github.com/dcs-liberation/dcs_liberation/issues/2719.

(cherry picked from commit 34de855b8f889b72406c101d0cea385988e24bf9)
(cherry picked from commit b41ef0ab13)
2023-02-05 14:41:47 -08:00
Dan Albert
5708fe625b Don't generate runway data for heliports.
Fixes https://github.com/dcs-liberation/dcs_liberation/issues/2710.

(cherry picked from commit c33a0d5deb)
2023-02-05 14:41:47 -08:00
Dan Albert
1dda0c9497 Pin version of black used in GHA.
Black rolls out style changes every year, and using "stable" means that
the check run on PRs might start formatting differently than we do
locally, or require a reformat of the codebase to make a PR submittable.

Pin to the version that we've been using. We should update to 23 at some
point, but we want to do that deliberately.

(cherry picked from commit 937bacacb7)
2023-02-05 12:15:50 -08:00
Dan Albert
56d7641251 Fix line endings.
(cherry-picked from commit e8824e5d03)
2023-02-05 12:15:50 -08:00
Dan Albert
938d6b4bdf Fix invalid tanker planning.
All three refueling missions share a common task type and differentiate
their behavior based on the type and allegiance of the package target.
This means that if the theater commander identifies a carrier as the
best location for a theater refueling task, a recovery tanker will be
planned by mistake.

If this happens on a sunken carrier, mission generation will fail
because a recovery tanker cannot be generated for a sunken carrier.

Fix the crash and the misplanned theater tanker by preventing the
commander from choosing fleet control points as refueling targets.

Fixes https://github.com/dcs-liberation/dcs_liberation/issues/2693.

(cherry picked from commit eea98b01f6)
2023-01-28 14:05:57 -08:00
Dan Albert
5caf07f476 Fix unit ID of the KS-19.
It seems like this unit has never worked because of the unit ID
mismatch.

Fixes https://github.com/dcs-liberation/dcs_liberation/issues/2701.

(cherry picked from commit 0df268f331)
2023-01-28 12:10:38 -08:00
Dan Albert
d1d4fde6a3 Update game version to 6.1.1. 2023-01-28 12:10:38 -08:00
14 changed files with 483 additions and 447 deletions

View File

@@ -11,6 +11,7 @@ jobs:
- uses: actions/setup-python@v2 - uses: actions/setup-python@v2
- uses: psf/black@stable - uses: psf/black@stable
with: with:
version: ~=22.12
src: "." src: "."
options: "--check" options: "--check"

View File

@@ -1,3 +1,12 @@
# 6.1.1
## Fixes
* **[Data]** Fixed unit ID for the KS-19 AAA. KS-19 would not previously generate correctly in missions. A new game is required for this fix to take effect.
* **[Flight Planning]** Automatic flight planning will no longer accidentally plan a recovery tanker instead of a theater refueling package. This fixes a potential crash during mission generation when opfor plans a refueling task at a sunk carrier. You'll need to skip the current turn to force opfor to replan their flights to get the fix.
* **[Mission Generation]** Using heliports (airports without any runways) will no longer cause mission generation to fail.
* **[Mission Generation]** Prevent helicopters from spawning into collisions at FARPs when more than one flight uses the same FARP.
# 6.1.0 # 6.1.0
Saves from 6.0.0 are compatible with 6.1.0 Saves from 6.0.0 are compatible with 6.1.0

View File

@@ -5,6 +5,7 @@ import operator
from collections.abc import Iterable, Iterator from collections.abc import Iterable, Iterator
from typing import TYPE_CHECKING, TypeVar from typing import TYPE_CHECKING, TypeVar
from game.ato.closestairfields import ClosestAirfields, ObjectiveDistanceCache
from game.theater import ( from game.theater import (
Airfield, Airfield,
ControlPoint, ControlPoint,
@@ -15,12 +16,11 @@ from game.theater import (
) )
from game.theater.theatergroundobject import ( from game.theater.theatergroundobject import (
BuildingGroundObject, BuildingGroundObject,
IadsBuildingGroundObject,
IadsGroundObject, IadsGroundObject,
NavalGroundObject, NavalGroundObject,
IadsBuildingGroundObject,
) )
from game.utils import meters, nautical_miles from game.utils import meters, nautical_miles
from game.ato.closestairfields import ClosestAirfields, ObjectiveDistanceCache
if TYPE_CHECKING: if TYPE_CHECKING:
from game import Game from game import Game
@@ -209,22 +209,20 @@ class ObjectiveFinder:
raise RuntimeError("Found no friendly control points. You probably lost.") raise RuntimeError("Found no friendly control points. You probably lost.")
return farthest return farthest
def closest_friendly_control_point(self) -> ControlPoint: def preferred_theater_refueling_control_point(self) -> ControlPoint | None:
"""Finds the friendly control point that is closest to any threats.""" """Finds the friendly control point that is closest to any threats."""
threat_zones = self.game.threat_zone_for(not self.is_player) threat_zones = self.game.threat_zone_for(not self.is_player)
closest = None closest = None
min_distance = meters(math.inf) min_distance = meters(math.inf)
for cp in self.friendly_control_points(): for cp in self.friendly_control_points():
if isinstance(cp, OffMapSpawn): if isinstance(cp, OffMapSpawn) or cp.is_fleet:
continue continue
distance = threat_zones.distance_to_threat(cp.position) distance = threat_zones.distance_to_threat(cp.position)
if distance < min_distance: if distance < min_distance:
closest = cp closest = cp
min_distance = distance min_distance = distance
if closest is None:
raise RuntimeError("Found no friendly control points. You probably lost.")
return closest return closest
def enemy_control_points(self) -> Iterator[ControlPoint]: def enemy_control_points(self) -> Iterator[ControlPoint]:

View File

@@ -153,6 +153,11 @@ class TheaterState(WorldState["TheaterState"]):
barcap_duration = coalition.doctrine.cap_duration.total_seconds() barcap_duration = coalition.doctrine.cap_duration.total_seconds()
barcap_rounds = math.ceil(mission_duration / barcap_duration) barcap_rounds = math.ceil(mission_duration / barcap_duration)
refueling_targets: list[MissionTarget] = []
theater_refuling_point = finder.preferred_theater_refueling_control_point()
if theater_refuling_point is not None:
refueling_targets.append(theater_refuling_point)
return TheaterState( return TheaterState(
context=context, context=context,
barcaps_needed={ barcaps_needed={
@@ -162,7 +167,7 @@ class TheaterState(WorldState["TheaterState"]):
front_line_stances={f: None for f in finder.front_lines()}, front_line_stances={f: None for f in finder.front_lines()},
vulnerable_front_lines=list(finder.front_lines()), vulnerable_front_lines=list(finder.front_lines()),
aewc_targets=[finder.farthest_friendly_control_point()], aewc_targets=[finder.farthest_friendly_control_point()],
refueling_targets=[finder.closest_friendly_control_point()], refueling_targets=refueling_targets,
enemy_air_defenses=list(finder.enemy_air_defenses()), enemy_air_defenses=list(finder.enemy_air_defenses()),
threatening_air_defenses=[], threatening_air_defenses=[],
detecting_air_defenses=[], detecting_air_defenses=[],

View File

@@ -26,6 +26,7 @@ from game.settings import Settings
from game.theater.controlpoint import ( from game.theater.controlpoint import (
Airfield, Airfield,
ControlPoint, ControlPoint,
Fob,
) )
from game.unitmap import UnitMap from game.unitmap import UnitMap
from .aircraftpainter import AircraftPainter from .aircraftpainter import AircraftPainter
@@ -180,4 +181,12 @@ class AircraftGenerator:
self.unit_map, self.unit_map,
).configure() ).configure()
) )
wpt = group.waypoint("LANDING")
if flight.is_helo and isinstance(flight.arrival, Fob) and wpt:
hpad = self.helipads[flight.arrival].units.pop(0)
wpt.helipad_id = hpad.id
wpt.link_unit = hpad.id
self.helipads[flight.arrival].units.append(hpad)
return group return group

View File

@@ -230,16 +230,22 @@ class FlightGroupSpawner:
def _generate_at_cp_helipad(self, name: str, cp: ControlPoint) -> FlyingGroup[Any]: def _generate_at_cp_helipad(self, name: str, cp: ControlPoint) -> FlyingGroup[Any]:
try: try:
helipad = self.helipads[cp] helipad = self.helipads[cp]
except IndexError as ex: except IndexError:
raise NoParkingSlotError() raise NoParkingSlotError()
group = self._generate_at_group(name, helipad) group = self._generate_at_group(name, helipad)
if self.start_type is not StartType.COLD: if self.start_type is StartType.WARM:
group.points[0].type = "TakeOffParkingHot" group.points[0].type = "TakeOffParkingHot"
hpad = helipad.units[0]
for i in range(self.flight.count): for i in range(self.flight.count):
group.units[i].position = helipad.units[i].position group.units[i].position = hpad.position
group.units[i].heading = helipad.units[i].heading group.units[i].heading = hpad.heading
# pydcs has just `parking_id = None`, so mypy thinks str is invalid. Ought
# to fix pydcs, but that's not the kind of change we want to pull into the
# 6.1 branch, and frankly we should probably just improve pydcs's handling
# of FARPs instead.
group.units[i].parking_id = str(i + 1) # type: ignore
return group return group
def dcs_start_type(self) -> DcsStartType: def dcs_start_type(self) -> DcsStartType:

View File

@@ -31,10 +31,11 @@ class RecoveryTankerBuilder(PydcsWaypointBuilder):
for key, value in theater_objects.items(): for key, value in theater_objects.items():
# Check name and position in case there are multiple of same carrier. # Check name and position in case there are multiple of same carrier.
if name in key and value.theater_unit.position == carrier_position: if name in key and value.theater_unit.position == carrier_position:
theater_mapping = value return value.dcs_group_id
break raise RuntimeError(
assert theater_mapping is not None f"Could not find a carrier in the mission matching {name} at "
return theater_mapping.dcs_group_id f"({carrier_position.x}, {carrier_position.y})"
)
def configure_tanker_tacan(self, waypoint: MovingPoint) -> None: def configure_tanker_tacan(self, waypoint: MovingPoint) -> None:

View File

@@ -878,6 +878,11 @@ class ControlPoint(MissionTarget, SidcDescribable, ABC):
) -> RunwayData: ) -> RunwayData:
... ...
def stub_runway_data(self) -> RunwayData:
return RunwayData(
self.full_name, runway_heading=Heading.from_degrees(0), runway_name=""
)
@property @property
def airdrome_id_for_landing(self) -> Optional[int]: def airdrome_id_for_landing(self) -> Optional[int]:
return None return None
@@ -1134,6 +1139,14 @@ class Airfield(ControlPoint):
conditions: Conditions, conditions: Conditions,
dynamic_runways: Dict[str, RunwayData], dynamic_runways: Dict[str, RunwayData],
) -> RunwayData: ) -> RunwayData:
if not self.airport.runways:
# Some airfields are heliports and don't have any runways. This isn't really
# the best fix, since we should still try to generate partial data for TACAN
# beacons, but it'll do for a bug fix, and the proper fix probably involves
# making heliports their own CP type.
# https://github.com/dcs-liberation/dcs_liberation/issues/2710
return self.stub_runway_data()
assigner = RunwayAssigner(conditions) assigner = RunwayAssigner(conditions)
return assigner.get_preferred_runway(theater, self.airport) return assigner.get_preferred_runway(theater, self.airport)
@@ -1269,8 +1282,6 @@ class Carrier(NavalControlPoint):
return SymbolSet.SEA_SURFACE, SeaSurfaceEntity.CARRIER return SymbolSet.SEA_SURFACE, SeaSurfaceEntity.CARRIER
def mission_types(self, for_player: bool) -> Iterator[FlightType]: def mission_types(self, for_player: bool) -> Iterator[FlightType]:
from game.ato import FlightType
yield from super().mission_types(for_player) yield from super().mission_types(for_player)
if self.is_friendly(for_player): if self.is_friendly(for_player):
yield from [ yield from [
@@ -1375,9 +1386,7 @@ class OffMapSpawn(ControlPoint):
dynamic_runways: Dict[str, RunwayData], dynamic_runways: Dict[str, RunwayData],
) -> RunwayData: ) -> RunwayData:
logging.warning("TODO: Off map spawns have no runways.") logging.warning("TODO: Off map spawns have no runways.")
return RunwayData( return self.stub_runway_data()
self.full_name, runway_heading=Heading.from_degrees(0), runway_name=""
)
@property @property
def runway_status(self) -> RunwayStatus: def runway_status(self) -> RunwayStatus:
@@ -1419,9 +1428,7 @@ class Fob(ControlPoint):
dynamic_runways: Dict[str, RunwayData], dynamic_runways: Dict[str, RunwayData],
) -> RunwayData: ) -> RunwayData:
logging.warning("TODO: FOBs have no runways.") logging.warning("TODO: FOBs have no runways.")
return RunwayData( return self.stub_runway_data()
self.full_name, runway_heading=Heading.from_degrees(0), runway_name=""
)
@property @property
def runway_status(self) -> RunwayStatus: def runway_status(self) -> RunwayStatus:

View File

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

View File

@@ -1,101 +1,101 @@
--- ---
name: Nevada - Exercise Vegas Nerve name: Nevada - Exercise Vegas Nerve
theater: Nevada theater: Nevada
authors: Starfire authors: Starfire
recommended_player_faction: USA 2005 recommended_player_faction: USA 2005
recommended_enemy_faction: Redfor (China) 2010 recommended_enemy_faction: Redfor (China) 2010
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> 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 miz: exercise_vegas_nerve.miz
performance: 1 performance: 1
recommended_start_date: 2011-02-24 recommended_start_date: 2011-02-24
version: "10.5" version: "10.5"
squadrons: squadrons:
# Tonopah Airport # Tonopah Airport
17: 17:
- primary: TARCAP - primary: TARCAP
secondary: air-to-air secondary: air-to-air
aircraft: aircraft:
- F-15C Eagle - F-15C Eagle
- primary: BARCAP - primary: BARCAP
secondary: any secondary: any
aircraft: aircraft:
- F-14B Tomcat - F-14B Tomcat
- primary: AEW&C - primary: AEW&C
aircraft: aircraft:
- E-3A - E-3A
- primary: Refueling - primary: Refueling
aircraft: aircraft:
- KC-135 Stratotanker - KC-135 Stratotanker
- primary: Refueling - primary: Refueling
aircraft: aircraft:
- KC-135 Stratotanker MPRS - KC-135 Stratotanker MPRS
- primary: Transport - primary: Transport
aircraft: aircraft:
- C-130 - C-130
- primary: Strike - primary: Strike
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- F-15E Strike Eagle - F-15E Strike Eagle
# Tonopah Test Range # Tonopah Test Range
18: 18:
- primary: CAS - primary: CAS
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- A-10C Thunderbolt II (Suite 7) - A-10C Thunderbolt II (Suite 7)
- primary: CAS - primary: CAS
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- AH-64D Apache Longbow - AH-64D Apache Longbow
- primary: DEAD - primary: DEAD
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- F/A-18C Hornet (Lot 20) - F/A-18C Hornet (Lot 20)
- primary: SEAD - primary: SEAD
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- F-16CM Fighting Falcon (Block 50) - F-16CM Fighting Falcon (Block 50)
- primary: BAI - primary: BAI
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- AV-8B Harrier II Night Attack - AV-8B Harrier II Night Attack
- primary: Air Assault - primary: Air Assault
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- UH-1H Iroquois - UH-1H Iroquois
# Groom Lake # Groom Lake
2: 2:
- primary: BARCAP - primary: BARCAP
secondary: air-to-air secondary: air-to-air
aircraft: aircraft:
- J-11A Flanker-L - J-11A Flanker-L
- primary: BAI - primary: BAI
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- Su-34 Fullback - Su-34 Fullback
# Creech # Creech
Creech FARP: Creech FARP:
- primary: CAS - primary: CAS
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- Ka-50 Hokum - Ka-50 Hokum
# Nellis AFB # Nellis AFB
4: 4:
- primary: SEAD - primary: SEAD
secondary: any secondary: any
aircraft: aircraft:
- FC-1 Fierce Dragon - FC-1 Fierce Dragon
- primary: Strike - primary: Strike
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- H-6J Badger - H-6J Badger
# Boulder City Airport # Boulder City Airport
6: 6:
- primary: AEW&C - primary: AEW&C
aircraft: aircraft:
- KJ-2000 - KJ-2000
- primary: Refueling - primary: Refueling
aircraft: aircraft:
- IL-78M - IL-78M
- primary: Transport - primary: Transport
aircraft: aircraft:
- IL-76MD - IL-76MD

View File

@@ -1,110 +1,110 @@
--- ---
name: Falklands - Operation Grabthar's Hammer name: Falklands - Operation Grabthar's Hammer
theater: Falklands theater: Falklands
authors: Starfire authors: Starfire
recommended_player_faction: USA 2005 recommended_player_faction: USA 2005
recommended_enemy_faction: Russia 1990 recommended_enemy_faction: Russia 1990
description: description:
<p>An Argentinean extremist group has contracted the Sons of Warvan (SoW), an <p>An Argentinean extremist group has contracted the Sons of Warvan (SoW), an
unusually well-equipped PMC with close ties to the Russian government, to unusually well-equipped PMC with close ties to the Russian government, to
construct a beryllium bomb at the secret Omega 13 production facility in Ushaia construct a beryllium bomb at the secret Omega 13 production facility in Ushaia
for use in its ongoing conflict with Chile. United States military forces have for use in its ongoing conflict with Chile. United States military forces have
established a foothold at San Julian. While the SoW are distracted up north, it established a foothold at San Julian. While the SoW are distracted up north, it
is up to the Marines to launch an assault upon Ushaia from an LHA in order to is up to the Marines to launch an assault upon Ushaia from an LHA in order to
disable the bomb production facility. Fortunately, Ushaia is lightly defended as disable the bomb production facility. Fortunately, Ushaia is lightly defended as
the SoW are trying to avoid unwanted attention.</p> the SoW are trying to avoid unwanted attention.</p>
miz: grabthars_hammer.miz miz: grabthars_hammer.miz
performance: 2 performance: 2
recommended_start_date: 2000-07-13 recommended_start_date: 2000-07-13
version: "10.5" version: "10.5"
squadrons: squadrons:
#Mount Pleasant #Mount Pleasant
2: 2:
- primary: TARCAP - primary: TARCAP
secondary: air-to-air secondary: air-to-air
aircraft: aircraft:
- F-15C Eagle - F-15C Eagle
- primary: BAI - primary: BAI
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- F-15E Strike Eagle - F-15E Strike Eagle
- primary: CAS - primary: CAS
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- A-10C Thunderbolt II (Suite 7) - A-10C Thunderbolt II (Suite 7)
- primary: Strike - primary: Strike
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- B-1B Lancer - B-1B Lancer
- primary: Refueling - primary: Refueling
aircraft: aircraft:
- KC-135 Stratotanker - KC-135 Stratotanker
#San Julian #San Julian
11: 11:
- primary: DEAD - primary: DEAD
secondary: any secondary: any
aircraft: aircraft:
- F-16CM Fighting Falcon (Block 50) - F-16CM Fighting Falcon (Block 50)
#El Calafate #El Calafate
14: 14:
- primary: CAS - primary: CAS
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- Su-25T Frogfoot - Su-25T Frogfoot
#Rio Gallegros #Rio Gallegros
5: 5:
- primary: BARCAP - primary: BARCAP
secondary: any secondary: any
aircraft: aircraft:
- Su-27 Flanker-B - Su-27 Flanker-B
#Punta Arenas #Punta Arenas
9: 9:
- primary: BAI - primary: BAI
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- Su-24M Fencer-D - Su-24M Fencer-D
- primary: Strike - primary: Strike
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- Tu-22M3 Backfire-C - Tu-22M3 Backfire-C
#Ushuaia #Ushuaia
7: 7:
- primary: Transport - primary: Transport
aircraft: aircraft:
- IL-76MD - IL-76MD
#Ushuaia Helo Port #Ushuaia Helo Port
8: 8:
- primary: BAI - primary: BAI
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- Mi-24P Hind-F - Mi-24P Hind-F
#Blue CV #Blue CV
Blue-CV: Blue-CV:
- primary: BARCAP - primary: BARCAP
secondary: any secondary: any
aircraft: aircraft:
- F-14B Tomcat - F-14B Tomcat
- primary: SEAD - primary: SEAD
secondary: any secondary: any
aircraft: aircraft:
- F/A-18C Hornet (Lot 20) - F/A-18C Hornet (Lot 20)
- primary: AEW&C - primary: AEW&C
aircraft: aircraft:
- E-2C Hawkeye - E-2C Hawkeye
- primary: Refueling - primary: Refueling
aircraft: aircraft:
- S-3B Tanker - S-3B Tanker
# Blue LHA # Blue LHA
Blue-LHA: Blue-LHA:
- primary: DEAD - primary: DEAD
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- AV-8B Harrier II Night Attack - AV-8B Harrier II Night Attack
- primary: Air Assault - primary: Air Assault
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- UH-1H Iroquois - UH-1H Iroquois
- primary: CAS - primary: CAS
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- AH-64D Apache Longbow - AH-64D Apache Longbow

View File

@@ -1,111 +1,111 @@
--- ---
name: Syria - Operation Peace Spring name: Syria - Operation Peace Spring
theater: Syria theater: Syria
authors: Starfire authors: Starfire
recommended_player_faction: Bluefor Modern recommended_player_faction: Bluefor Modern
recommended_enemy_faction: Iraq 1991 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 (and has preset squadrons included), they only have two jets available (F-4 and F-16).</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 miz: operation_peace_spring.miz
performance: 1 performance: 1
recommended_start_date: 2019-12-23 recommended_start_date: 2019-12-23
version: "10.5" version: "10.5"
squadrons: squadrons:
# Ramat David # Ramat David
30: 30:
- primary: BARCAP - primary: BARCAP
secondary: air-to-air secondary: air-to-air
aircraft: aircraft:
- F-15C Eagle - F-15C Eagle
- primary: CAS - primary: CAS
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- A-10C Thunderbolt II (Suite 7) - A-10C Thunderbolt II (Suite 7)
- primary: CAS - primary: CAS
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- AH-64D Apache Longbow - AH-64D Apache Longbow
- primary: SEAD - primary: SEAD
secondary: any secondary: any
aircraft: aircraft:
- F/A-18C Hornet (Lot 20) - F/A-18C Hornet (Lot 20)
- primary: DEAD - primary: DEAD
secondary: any secondary: any
aircraft: aircraft:
- F-16CM Fighting Falcon (Block 50) - F-16CM Fighting Falcon (Block 50)
- primary: BAI - primary: BAI
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- AV-8B Harrier II Night Attack - AV-8B Harrier II Night Attack
- primary: Strike - primary: Strike
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- F-15E Strike Eagle - F-15E Strike Eagle
- primary: Air Assault - primary: Air Assault
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- UH-1H Iroquois - UH-1H Iroquois
- primary: AEW&C - primary: AEW&C
aircraft: aircraft:
- E-3A - E-3A
- primary: Refueling - primary: Refueling
aircraft: aircraft:
- KC-135 Stratotanker - KC-135 Stratotanker
- primary: Refueling - primary: Refueling
aircraft: aircraft:
- KC-135 Stratotanker MPRS - KC-135 Stratotanker MPRS
- primary: Transport - primary: Transport
aircraft: aircraft:
- C-130 - C-130
# Damascus # Damascus
7: 7:
- primary: BARCAP - primary: BARCAP
secondary: any secondary: any
aircraft: aircraft:
- F-4E Phantom II - F-4E Phantom II
- MiG-21bis Fishbed-N - MiG-21bis Fishbed-N
- primary: CAS - primary: CAS
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- AH-1W SuperCobra - AH-1W SuperCobra
- Su-25 Frogfoot - Su-25 Frogfoot
# Tiyas # Tiyas
39: 39:
- primary: SEAD - primary: SEAD
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- F-16CM Fighting Falcon (Block 50) - F-16CM Fighting Falcon (Block 50)
- Su-24M Fencer-D - Su-24M Fencer-D
# Abu Al Duhur # Abu Al Duhur
# 1: # 1:
# Gaziantep # Gaziantep
11: 11:
- primary: CAS - primary: CAS
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- OH-58D Kiowa Warrior - OH-58D Kiowa Warrior
- Mi-24P Hind-F - Mi-24P Hind-F
# Incirlik # Incirlik
16: 16:
- primary: TARCAP - primary: TARCAP
secondary: any secondary: any
aircraft: aircraft:
- F-16CM Fighting Falcon (Block 50) - F-16CM Fighting Falcon (Block 50)
- MiG-29A Fulcrum-A - MiG-29A Fulcrum-A
- primary: Strike - primary: Strike
secondary: air-to-ground secondary: air-to-ground
aircraft: aircraft:
- F-4E Phantom II - F-4E Phantom II
- H-6J Badger - H-6J Badger
- primary: AEW&C - primary: AEW&C
aircraft: aircraft:
- E-3A - E-3A
- A-50 - A-50
- primary: Refueling - primary: Refueling
aircraft: aircraft:
- KC-135 Stratotanker - KC-135 Stratotanker
- IL-78M - IL-78M
- primary: Transport - primary: Transport
aircraft: aircraft:
- C-130 - C-130
- IL-76MD - IL-76MD

View File

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