Compare commits

..

1 Commits

Author SHA1 Message Date
zhexu14
ef8eeeb1f1 Update README.md due to changes in URLs 2024-03-05 21:45:23 +11:00
62 changed files with 538 additions and 3587 deletions

View File

@@ -4,16 +4,10 @@ Saves from 10.x are not compatible with 11.0.0.
## Features/Improvements
* **[Engine]** Support for DCS 2.9.3.51704.
* **[Campaign]** Improved tracking of parked aircraft deaths. Parked aircraft are now considered dead once sufficient damage is done, meaning guns, rockets and AGMs are viable weapons for OCA/Aircraft missions. Previously Liberation relied on DCS death tracking which required parked aircraft to be hit with more powerful weapons e.g. 2000lb bombs as they were uncontrolled.
* **[Campaign]** Track damage to theater ground objects across turns. Damage can accumulate across turns leading to death of the unit. This behavior only applies to SAMs, ships and other units that appear on the Liberation map. Frontline units and buildings are not tracked (yet).
* **[Mods]** F/A-18 E/F/G Super Hornet mod (v2.2.5) support added.
* **[Engine]** Support for DCS 2.9.3.51704 Open Beta.
## Fixes
* **[Mission Generation]** When planning anti-ship missions against carriers or LHAs, target escorts (if present) if the carrier/LHA is sunk.
* **[UI]** Identify that a carrier or LHA is sunk instead of "damaged".
# 10.0.0
Saves from 9.x are not compatible with 10.0.0.

View File

@@ -9883,9 +9883,9 @@
"dev": true
},
"node_modules/follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
"funding": [
{
"type": "individual",
@@ -11161,9 +11161,9 @@
}
},
"node_modules/ip": {
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz",
"integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==",
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
"integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
"dev": true
},
"node_modules/ipaddr.js": {
@@ -28743,9 +28743,9 @@
"dev": true
},
"follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
},
"for-each": {
"version": "0.3.3",
@@ -29680,9 +29680,9 @@
}
},
"ip": {
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz",
"integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==",
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
"integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
"dev": true
},
"ipaddr.js": {

View File

@@ -1,5 +1,5 @@
from __future__ import annotations
from abc import ABC
import itertools
import logging
from collections import defaultdict
@@ -9,9 +9,7 @@ from typing import (
Dict,
Iterator,
List,
Optional,
TYPE_CHECKING,
TypeVar,
Union,
)
from uuid import UUID
@@ -23,10 +21,8 @@ from game.theater import Airfield, ControlPoint
if TYPE_CHECKING:
from game import Game
from game.ato.flight import Flight
from game.dcs.unittype import UnitType
from game.sim.simulationresults import SimulationResults
from game.transfers import CargoShip
from game.theater import TheaterUnit
from game.unitmap import (
AirliftUnits,
ConvoyUnit,
@@ -94,103 +90,6 @@ class BaseCaptureEvent:
captured_by_player: bool
@dataclass
class UnitHitpointUpdate(ABC):
unit: Any
hit_points: int
@classmethod
def from_json(
cls, data: dict[str, Any], unit_map: UnitMap
) -> Optional[UnitHitpointUpdate]:
raise NotImplementedError()
def is_dead(self) -> bool:
# Use hit_points > 1 to indicate unit is alive, rather than >=1 (DCS logic) to account for uncontrolled units which often have a
# health floor of 1
if self.hit_points > 1:
return False
return True
def is_friendly(self, to_player: bool) -> bool:
raise NotImplementedError()
@dataclass
class FlyingUnitHitPointUpdate(UnitHitpointUpdate):
unit: FlyingUnit
@classmethod
def from_json(
cls, data: dict[str, Any], unit_map: UnitMap
) -> Optional[FlyingUnitHitPointUpdate]:
unit = unit_map.flight(data["name"])
if unit is None:
return None
return cls(unit, int(float(data["hit_points"])))
def is_friendly(self, to_player: bool) -> bool:
if to_player:
return self.unit.flight.departure.captured
return not self.unit.flight.departure.captured
@dataclass
class TheaterUnitHitPointUpdate(UnitHitpointUpdate):
unit: TheaterUnitMapping
@classmethod
def from_json(
cls, data: dict[str, Any], unit_map: UnitMap
) -> Optional[TheaterUnitHitPointUpdate]:
unit = unit_map.theater_units(data["name"])
if unit is None:
return None
if unit.theater_unit.unit_type is None:
logging.debug(
f"Ground unit {data['name']} does not have a valid unit type."
)
return None
if unit.theater_unit.hit_points is None:
logging.debug(f"Ground unit {data['name']} does not have hit_points set.")
return None
sim_hit_points = int(
float(data["hit_points"])
) # Hit points out of the sim i.e. new unit hit points - damage in this turn
previous_turn_hit_points = (
unit.theater_unit.hit_points
) # Hit points at the end of the previous turn
full_health_hit_points = (
unit.theater_unit.unit_type.hit_points
) # Hit points of a new unit
# Hit points left after damage this turn is subtracted from hit points at the end of the previous turn
new_hit_points = previous_turn_hit_points - (
full_health_hit_points - sim_hit_points
)
return cls(unit, new_hit_points)
def is_dead(self) -> bool:
# Some TheaterUnits can start with low health of around 1, make sure we don't always kill them off.
if (
self.unit.theater_unit.unit_type is not None
and self.unit.theater_unit.unit_type.hit_points is not None
and self.unit.theater_unit.unit_type.hit_points <= 1
):
return False
return super().is_dead()
def is_friendly(self, to_player: bool) -> bool:
return self.unit.theater_unit.ground_object.is_friendly(to_player)
def commit(self) -> None:
self.unit.theater_unit.hit_points = self.hit_points
@dataclass(frozen=True)
class StateData:
#: True if the mission ended. If False, the mission exited abnormally.
@@ -209,10 +108,6 @@ class StateData:
#: Mangled names of bases that were captured during the mission.
base_capture_events: List[str]
# List of descriptions of damage done to units. Each list element is a dict like the following
# {"name": "<damaged unit name>", "hit_points": <hit points as float>}
unit_hit_point_updates: List[dict[str, Any]]
@classmethod
def from_json(cls, data: Dict[str, Any], unit_map: UnitMap) -> StateData:
def clean_unit_list(unit_list: List[Any]) -> List[str]:
@@ -252,7 +147,6 @@ class StateData:
killed_ground_units=killed_ground_units,
destroyed_statics=data["destroyed_objects_positions"],
base_capture_events=data["base_capture_events"],
unit_hit_point_updates=data["unit_hit_point_updates"],
)
@@ -390,19 +284,6 @@ class Debriefing:
player_losses.append(aircraft)
else:
enemy_losses.append(aircraft)
for unit_data in self.state_data.unit_hit_point_updates:
damaged_unit = FlyingUnitHitPointUpdate.from_json(unit_data, self.unit_map)
if damaged_unit is None:
continue
if damaged_unit.is_dead():
# If unit already killed, nothing to do.
if unit_data["name"] in self.state_data.killed_aircraft:
continue
if damaged_unit.is_friendly(to_player=True):
player_losses.append(damaged_unit.unit)
else:
enemy_losses.append(damaged_unit.unit)
return AirLosses(player_losses, enemy_losses)
def dead_ground_units(self) -> GroundLosses:
@@ -475,29 +356,8 @@ class Debriefing:
losses.enemy_airlifts.append(airlift_unit)
continue
for unit_data in self.state_data.unit_hit_point_updates:
damaged_unit = TheaterUnitHitPointUpdate.from_json(unit_data, self.unit_map)
if damaged_unit is None:
continue
if damaged_unit.is_dead():
if unit_data["name"] in self.state_data.killed_ground_units:
continue
if damaged_unit.is_friendly(to_player=True):
losses.player_ground_objects.append(damaged_unit.unit)
else:
losses.enemy_ground_objects.append(damaged_unit.unit)
return losses
def unit_hit_point_update_events(self) -> List[TheaterUnitHitPointUpdate]:
damaged_units = []
for unit_data in self.state_data.unit_hit_point_updates:
unit = TheaterUnitHitPointUpdate.from_json(unit_data, self.unit_map)
if unit is None:
continue
damaged_units.append(unit)
return damaged_units
def base_capture_events(self) -> List[BaseCaptureEvent]:
"""Keeps only the last instance of a base capture event for each base ID."""
blue_coalition_id = 2

View File

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

View File

@@ -20,14 +20,8 @@ class AntiShipIngressBuilder(PydcsWaypointBuilder):
group_names.append(target.name)
elif isinstance(target, NavalControlPoint):
carrier_name = target.get_carrier_group_name()
if carrier_name and self.mission.find_group(
carrier_name
): # Found a carrier, target it.
if carrier_name:
group_names.append(carrier_name)
else: # Could not find carrier/LHA, indicating it was sunk. Target other groups if present e.g. escorts.
for ground_object in target.ground_objects:
for group in ground_object.groups:
group_names.append(group.group_name)
else:
logging.error(
"Unexpected target type for anti-ship mission: %s",

View File

@@ -34,7 +34,6 @@ class MissionResultsProcessor:
self.commit_damaged_runways(debriefing)
self.commit_captures(debriefing, events)
self.commit_front_line_battle_impact(debriefing, events)
self.commit_unit_damage(debriefing)
self.record_carcasses(debriefing)
def commit_air_losses(self, debriefing: Debriefing) -> None:
@@ -308,14 +307,6 @@ class MissionResultsProcessor:
f"{enemy_cp.name}. {status_msg}",
)
@staticmethod
def commit_unit_damage(debriefing: Debriefing) -> None:
for damaged_unit in debriefing.unit_hit_point_update_events():
logging.info(
f"{damaged_unit.unit.theater_unit.name} damaged, setting hit points to {damaged_unit.hit_points}"
)
damaged_unit.commit()
def redeploy_units(self, cp: ControlPoint) -> None:
""" "
Auto redeploy units to newly captured base

View File

@@ -1283,10 +1283,7 @@ class NavalControlPoint(ControlPoint, ABC):
return RunwayStatus(damaged=not self.runway_is_operational())
def describe_runway_status(self) -> str:
if self.runway_is_operational():
return f"Flight deck {self.runway_status.describe()}"
# Special handling for not operational carriers/LHAs
return f"Sunk"
return f"Flight deck {self.runway_status.describe()}"
@property
def runway_can_be_repaired(self) -> bool:

View File

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

View File

@@ -35,8 +35,6 @@ class TheaterUnit:
position: PointWithHeading
# The parent ground object
ground_object: TheaterGroundObject
# Number of hit points the unit has
hit_points: Optional[int] = None
# State of the unit, dead or alive
alive: bool = True
@@ -44,17 +42,13 @@ class TheaterUnit:
def from_template(
id: int, dcs_type: Type[DcsUnitType], t: LayoutUnit, go: TheaterGroundObject
) -> TheaterUnit:
unit = TheaterUnit(
return TheaterUnit(
id,
t.name,
dcs_type,
PointWithHeading.from_point(t.position, Heading.from_degrees(t.heading)),
go,
)
# if the TheaterUnit represents a GroundUnitType or ShipUnitType, initialize health to full hit points
if unit.unit_type is not None:
unit.hit_points = unit.unit_type.hit_points
return unit
@property
def unit_type(self) -> Optional[UnitType[Any]]:
@@ -76,12 +70,14 @@ class TheaterUnit:
@property
def display_name(self) -> str:
dead_label = " [DEAD]" if not self.alive else ""
unit_label = self.unit_type or self.type.name or self.name
return f"{str(self.id).zfill(4)} | {unit_label}{self._status_label()}"
return f"{str(self.id).zfill(4)} | {unit_label}{dead_label}"
@property
def short_name(self) -> str:
return f"<b>{self.type.id[0:18]}</b> {self._status_label()}"
dead_label = " [DEAD]" if not self.alive else ""
return f"<b>{self.type.id[0:18]}</b> {dead_label}"
@property
def is_static(self) -> bool:
@@ -121,18 +117,6 @@ class TheaterUnit:
unit_range = getattr(self.type, "threat_range", None)
return meters(unit_range if unit_range is not None and self.alive else 0)
def _status_label(self) -> str:
if not self.alive:
return " [DEAD]"
if self.unit_type is None:
return ""
if self.hit_points is None:
return ""
if self.unit_type.hit_points == self.hit_points:
return ""
damage_percentage = 100 - int(100 * self.hit_points / self.unit_type.hit_points)
return f" [DAMAGED {damage_percentage}%]"
class SceneryUnit(TheaterUnit):
"""Special TheaterUnit for handling scenery ground objects"""

View File

@@ -9,7 +9,6 @@ from .jas39 import *
from .ov10a import *
from .su57 import *
from .uh60l import *
from .fa18efg import *
def load_mods() -> None:

View File

@@ -1 +0,0 @@
from .fa18efg import *

File diff suppressed because it is too large Load Diff

View File

@@ -493,7 +493,6 @@ class QLiberationWindow(QMainWindow):
"ColonelAkirNakesh",
"Nosajthedevil",
"kivipe",
"Chilli935",
]
text = (
"<h3>DCS Liberation "

View File

@@ -204,7 +204,7 @@ class NewGameWizard(QtWidgets.QWizard):
ov10a_bronco=self.field("ov10a_bronco"),
frenchpack=self.field("frenchpack"),
high_digit_sams=self.field("high_digit_sams"),
fa18efg=self.field("fa18efg"),
superhornet=self.field("superhornet"),
)
mod_settings.save_player_settings()
@@ -827,9 +827,9 @@ class GeneratorOptions(QtWidgets.QWizardPage):
high_digit_sams.setChecked(mod_settings.high_digit_sams)
self.registerField("high_digit_sams", high_digit_sams)
fa18efg = QtWidgets.QCheckBox()
fa18efg.setChecked(mod_settings.fa18efg)
self.registerField("fa18efg", fa18efg)
superhornet = QtWidgets.QCheckBox()
superhornet.setChecked(mod_settings.superhornet)
self.registerField("superhornet", superhornet)
modHelpText = QtWidgets.QLabel(
"<p>Select the mods you have installed. If your chosen factions support them, you'll be able to use these mods in your campaign.</p>"
@@ -883,10 +883,8 @@ class GeneratorOptions(QtWidgets.QWizardPage):
modLayout.addWidget(high_digit_sams, modLayout_row, 1)
modSettingsGroup.setLayout(modLayout)
modLayout_row += 1
modLayout.addWidget(
QtWidgets.QLabel("F/A-18EFG Super Hornet (version 2.2.5)"), modLayout_row, 0
)
modLayout.addWidget(fa18efg, modLayout_row, 1)
modLayout.addWidget(QtWidgets.QLabel("Super Hornet"), modLayout_row, 0)
modLayout.addWidget(superhornet, modLayout_row, 1)
modSettingsGroup.setLayout(modLayout)
modLayout_row += 1

View File

@@ -3,7 +3,7 @@ annotated-types==0.6.0
anyio==3.7.1
asgiref==3.7.2
attrs==23.1.0
black==24.3.0
black==23.11.0
certifi==2023.11.17
cfgv==3.4.0
click==8.1.7
@@ -12,7 +12,7 @@ coverage==7.3.2
distlib==0.3.7
exceptiongroup==1.2.0
Faker==20.1.0
fastapi==0.109.1
fastapi==0.104.1
filelock==3.13.1
future==0.18.3
h11==0.14.0
@@ -36,7 +36,7 @@ pre-commit==3.5.0
pydantic==2.5.2
pydantic-settings==2.1.0
pydantic_core==2.14.5
pydcs @ git+https://github.com/zhexu14/dcs@bb41fa849e718fee1b97d5d7a7c2e417f78de3d8
pydcs @ git+https://github.com/pydcs/dcs@7eeec23ea428846ebbbd0ea4c746f8eafea04e0d
pyinstaller==5.13.1
pyinstaller-hooks-contrib==2023.6
pyproj==3.6.1
@@ -54,7 +54,7 @@ shapely==2.0.2
shiboken6==6.4.1
six==1.16.0
sniffio==1.3.0
starlette==0.35.1
starlette==0.27.0
tabulate==0.9.0
tomli==2.0.1
types-Jinja2==2.11.9

View File

@@ -6,29 +6,29 @@ recommended_player_faction: USA 2005
recommended_enemy_faction: Private Military Company - Russian (Hard)
description:
<p><strong>Note:</strong> This campaign was designed for helicopters.</p><p>
Set against the rugged and windswept backdrop of the Falkland Islands,
this fictional campaign scenario unfolds with a dramatic dawn sneak attack
on RAF Mount Pleasant Airbase. Orchestrated by a Russia-backed private
military company, the deadly offensive with helicopter gunships and ground troops
has left the airbase's runways in ruins and its defences obliterated. This brutal
incursion resulted in significant casualties among the RAF personnel, with many
killed or wounded in the unexpected onslaught. The carrier HMS Queen Elizabeth and
its task force are on their way to evacuate the survivors and retake Mount Pleasant.
Set against the rugged and windswept backdrop of the Falkland Islands,
this fictional campaign scenario unfolds with a dramatic dawn sneak attack
on RAF Mount Pleasant Airbase. Orchestrated by a Russia-backed private
military company, the deadly offensive with helicopter gunships and ground troops
has left the airbase's runways in ruins and its defences obliterated. This brutal
incursion resulted in significant casualties among the RAF personnel, with many
killed or wounded in the unexpected onslaught. The carrier HMS Queen Elizabeth and
its task force are on their way to evacuate the survivors and retake Mount Pleasant.
However, they are eight days away at full steam.</p><p>
Amidst this chaos, a beacon of hope emerges in the heart of the Falklands. At Port
Stanley, a small detachment of US military personnel, including helicopter pilots
and armor units, find themselves inadvertently thrust into the fray. Originally at
Port Stanley for some R&R following a training exercise, these soldiers now face
an unexpected and urgent call to action. Their mission is daunting but clear - to
prevent the capture of Port Stanley and liberate East Falkland from the clutches
Amidst this chaos, a beacon of hope emerges in the heart of the Falklands. At Port
Stanley, a small detachment of US military personnel, including helicopter pilots
and armor units, find themselves inadvertently thrust into the fray. Originally at
Port Stanley for some R&R following a training exercise, these soldiers now face
an unexpected and urgent call to action. Their mission is daunting but clear - to
prevent the capture of Port Stanley and liberate East Falkland from the clutches
of the PMC forces.</p><p>
This small group must strategically destroy the PMC forces deployed around the treacherous
valley lying between Wickham Heights and the Onion Ranges, an area ominously known
as No Man's Land. Their plan involves a daring assault to destroy the enemy's
helicopter gunships stationed at San Carlos FOB. Following this, they aim to force
the PMC ground forces into a strategic retreat southward, along the 1.6 mile wide
isthmus into Lafonia. This offensive is designed to create a defensible position
at Goose Green on the narrow isthmus, which can be held against a numerically
This small group must strategically push the PMC forces back through the treacherous
valley lying between Wickham Heights and the Onion Ranges, an area ominously known
as No Man's Land. Their plan involves a daring assault to destroy the enemy's
helicopter gunships stationed at San Carlos FOB. Following this, they aim to force
the PMC ground forces into a strategic retreat southward, along the 1.6 mile wide
isthmus into Lafonia. This calculated offensive is designed to create a defensible
position at Goose Green on the narrow isthmus, which can be held against a numerically
superior force until the arrival of Big Lizzie.</p>
miz: battle_for_no_mans_land.miz
performance: 1
@@ -38,12 +38,12 @@ squadrons:
#Port Stanley
1:
- primary: DEAD
secondary: any
secondary: air-to-ground
aircraft:
- AH-64D Apache Longbow
size: 6
- primary: BAI
secondary: any
secondary: air-to-ground
aircraft:
- AH-64D Apache Longbow
size: 6
@@ -56,15 +56,14 @@ squadrons:
#San Carlos FOB
3:
- primary: BAI
secondary: any
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 6
#Goose Green
24:
- primary: DEAD
secondary: any
secondary: air-to-ground
aircraft:
- Ka-50 Hokum III
- Ka-50 Hokum (Blackshark 3)
size: 6
size: 6

View File

@@ -1,174 +1,155 @@
---
name: Sinai - Exercise Bright Star
theater: Sinai
authors: Starfire
recommended_player_faction: Bluefor Modern
recommended_enemy_faction: Egypt 2000
description:
<p>For over four decades, the United States and Egypt have conducted a series
of biannual joint military exercises known as Bright Star. As the
geopolitical landscape has transformed, so too has the scope and scale of
Exercise Bright Star. The exercise has grown over the years to incorporate
a wide array of international participants. The 2025 iteration of
Exercise Bright Star features eight participating nations alongside
fourteen observer nations.</p><p>
For the 2025 exercises, the United States, along with a select contingent
from the exercise coalition, will take on the role of a hypothetical
adversarial nation, dubbed Orangeland. This scenario is designed to
simulate a mock invasion against Cairo, and presents a valuable
opportunity for participating nations to refine their joint operational
capabilities and improve logistical and tactical interoperability</p><p>
A historic addition to Exercise Bright Star 2025 is the participation of
Israel as an observer nation. This marks a significant milestone, given
the complex historical relations in the region, and symbolises a step
forward in regional collaboration and military diplomacy. Israel's role,
hosting the aggressor faction of the exercise coalition at its airfields,
not only demonstrates the broadening scope of the exercise but also highlights
the value of fostering an environment of mutual cooperation and shared
security objectives.</p>
miz: exercise_bright_star.miz
performance: 1
recommended_start_date: 2025-09-01
version: "11.0"
squadrons:
Blue CV-1:
- primary: SEAD
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
size: 24
- primary: AEW&C
aircraft:
- E-2D Advanced Hawkeye
size: 2
- primary: Refueling
aircraft:
- S-3B Tanker
size: 4
Bombers from RAF Fairford:
- primary: Anti-ship
secondary: air-to-ground
aircraft:
- B-52H Stratofortress
size: 8
- primary: Strike
secondary: air-to-ground
aircraft:
- B-1B Lancer
size: 8
# Hatzerim (141)
7:
- primary: CAS
secondary: air-to-ground
aircraft:
- A-10C Thunderbolt II (Suite 7)
size: 6
- primary: Escort
secondary: any
aircraft:
- F-15C Eagle
size: 20
- primary: OCA/Runway
secondary: any
aircraft:
- F-15E Strike Eagle (Suite 4+)
size: 16
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 20
- primary: BAI
secondary: any
aircraft:
- JF-17 Thunder
size: 16
- primary: BARCAP
secondary: any
aircraft:
- Mirage 2000C
size: 12
# Kedem
12:
- primary: Transport
secondary: any
aircraft:
- CH-47D
size: 20
- primary: BAI
secondary: any
aircraft:
- AH-64D Apache Longbow
size: 8
- primary: Air Assault
secondary: any
aircraft:
- UH-60L
- UH-60A
size: 4
# Nevatim (106)
# Nevatim temporarilly disabled because airfield is borked
# 8:
# - primary: AEW&C
# aircraft:
# - E-3A
# size: 2
# - primary: Refueling
# aircraft:
# - KC-135 Stratotanker
# size: 2
# Melez (30)
5:
- primary: CAS
secondary: any
aircraft:
- Ka-50 Hokum III
- Ka-50 Hokum (Blackshark 3)
size: 4
- primary: BAI
secondary: any
aircraft:
- Mirage 2000C
size: 12
- primary: Escort
secondary: any
aircraft:
- MiG-21bis Fishbed-N
size: 12
# Wadi al Jandali (72)
13:
- primary: AEW&C
aircraft:
- E-2C Hawkeye
size: 2
- primary: SEAD
secondary: any
aircraft:
- F-4E Phantom II
size: 20
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 20
- primary: Air Assault
secondary: any
aircraft:
- Mi-24P Hind-F
size: 4
- primary: OCA/Aircraft
secondary: any
aircraft:
- SA 342L Gazelle
size: 4
# Cairo West (95)
18:
- primary: Transport
aircraft:
- C-130
size: 8
- primary: BARCAP
secondary: air-to-air
aircraft:
- MiG-29S Fulcrum-C
---
name: Sinai - Exercise Bright Star
theater: Sinai
authors: Starfire
recommended_player_faction: Bluefor Modern
recommended_enemy_faction: Egypt 2000s
description:
<p>For over 4 decades, the United States and Egypt have run a series of
biannual joint military exercises called Bright Star. Over the years, the
number of participating countries has grown substantially. Exercise Bright
Star 2025 boasts 8 participant nations and 14 observer nations. The United
States and a portion of the exercise coalition will play the part of a
fictional hostile nation dubbed Orangeland, staging a mock invasion against
Cairo. Israel, having for the first time accepted the invitation to observe,
is hosting the aggressor faction of the exercise coalition at its
airfields.</p>
miz: exercise_bright_star.miz
performance: 1
recommended_start_date: 2025-09-01
version: "11.0"
squadrons:
Blue CV-1:
- primary: SEAD
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
size: 24
- primary: AEW&C
aircraft:
- E-2D Advanced Hawkeye
size: 2
- primary: Refueling
aircraft:
- S-3B Tanker
size: 4
Bombers from RAF Fairford:
- primary: Anti-ship
secondary: air-to-ground
aircraft:
- B-52H Stratofortress
size: 8
- primary: Strike
secondary: air-to-ground
aircraft:
- B-1B Lancer
size: 8
# Hatzerim (141)
7:
- primary: CAS
secondary: air-to-ground
aircraft:
- A-10C Thunderbolt II (Suite 7)
size: 6
- primary: Escort
secondary: any
aircraft:
- F-15C Eagle
size: 20
- primary: OCA/Runway
secondary: any
aircraft:
- F-15E Strike Eagle (Suite 4+)
size: 16
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 20
- primary: BAI
secondary: any
aircraft:
- JF-17 Thunder
size: 16
- primary: BARCAP
secondary: any
aircraft:
- Mirage 2000C
size: 12
# Kedem
12:
- primary: Transport
secondary: any
aircraft:
- CH-47D
size: 20
- primary: Air Assault
secondary: any
aircraft:
- UH-60L
- UH-60A
size: 4
# Nevatim (106)
# 8:
# - primary: AEW&C
# aircraft:
# - E-3A
# size: 2
# - primary: Refueling
# aircraft:
# - KC-135 Stratotanker
# size: 2
# Melez (30)
5:
- primary: CAS
secondary: air-to-ground
aircraft:
- Ka-50 Hokum (Blackshark 3)
size: 4
- primary: BAI
secondary: any
aircraft:
- Mirage 2000C
size: 12
- primary: Escort
secondary: any
aircraft:
- MiG-21bis Fishbed-N
size: 12
# Wadi al Jandali (72)
13:
- primary: AEW&C
aircraft:
- E-2C Hawkeye
size: 2
- primary: SEAD
secondary: any
aircraft:
- F-4E Phantom II
size: 20
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 20
- primary: Air Assault
secondary: any
aircraft:
- Mi-24P Hind-F
size: 4
- primary: OCA/Aircraft
secondary: any
aircraft:
- SA 342L Gazelle
size: 4
# Cairo West (95)
18:
- primary: Transport
aircraft:
- C-130
size: 8
- primary: BARCAP
secondary: air-to-air
aircraft:
- MiG-29S Fulcrum-C
size: 20

View File

@@ -53,7 +53,7 @@ squadrons:
- A-10C Thunderbolt II (Suite 7)
size: 8
- primary: CAS
secondary: any
secondary: air-to-ground
aircraft:
- AH-64D Apache Longbow
size: 10
@@ -86,15 +86,14 @@ squadrons:
- Su-25T Frogfoot
size: 20
# Creech
1:
Creech FARP:
- primary: CAS
secondary: any
secondary: air-to-ground
aircraft:
- Ka-50 Hokum III
- Ka-50 Hokum (Blackshark 3)
size: 8
- primary: Air Assault
secondary: any
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 4

View File

@@ -2,7 +2,65 @@
name: Normandy - The Final Countdown II
theater: Normandy
authors: Starfire
recommended_player_faction: D-Day Allied Forces 1944 and 1990
recommended_player_faction:
country: Combined Joint Task Forces Blue
name: D-Day Allied Forces 1944 and 1990
authors: Starfire
description: <p>Faction for Final Countdown II</p>
locales:
- en_US
aircrafts:
- Boston Mk.III
- Fortress Mk.III
- Mustang Mk.IV (Late)
- Spitfire LF Mk IX
- Thunderbolt Mk.II (Late)
- MosquitoFBMkVI
- F-14B Tomcat
- F/A-18C Hornet (Lot 20)
- S-3B Viking
- UH-60L
- UH-60A
awacs:
- E-2C Hawkeye
tankers:
- S-3B Tanker
frontline_units:
- A17 Light Tank Mk VII Tetrarch
- A22 Infantry Tank MK IV Churchill VII
- A27L Cruiser Tank MK VIII Centaur IV
- A27M Cruiser Tank MK VIII Cromwell IV
- Daimler Armoured Car Mk I
- M2A1 Half-Track
- QF 40 mm Mark III
- Sherman Firefly VC
- Sherman III
artillery_units:
- M12 Gun Motor Carriage
logistics_units:
- Truck Bedford
- Truck GMC "Jimmy" 6x6 Truck
infantry_units:
- Infantry M1 Garand
naval_units:
- DDG Arleigh Burke IIa
- CG Ticonderoga
- CVN-74 John C. Stennis
missiles: []
air_defense_units:
- Bofors 40 mm Gun
preset_groups:
- Ally Flak
requirements:
WW2 Asset Pack: https://www.digitalcombatsimulator.com/en/products/other/wwii_assets_pack/
carrier_names:
- CVN-71 Theodore Roosevelt
has_jtac: true
jtac_unit: MQ-9 Reaper
unrestricted_satnav: true
doctrine: ww2
building_set: ww2ally
cargo_ship: LST Mk.II
recommended_enemy_faction: Germany 1944
description:
<p>While enroute to the Persian Gulf for Operation Desert Shield, the USS
@@ -133,4 +191,4 @@ squadrons:
secondary: any
aircraft:
- Fw 190 A-8 Anton
size: 20
size: 20

View File

@@ -8,10 +8,10 @@ description:
<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
construct a beryllium bomb at the secret Omega 13 production facility in
Ushuaia for use in its ongoing conflict with Chile. United States military
Ushaia 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 is up to the Marines to launch an assault upon Ushuaia from an LHA
in order to disable the bomb production facility. Fortunately, Ushuaia is
up north, it 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 the SoW are trying to avoid unwanted attention.</p>
miz: grabthars_hammer.miz
performance: 2
@@ -35,11 +35,6 @@ squadrons:
aircraft:
- F-15C Eagle
size: 8
- primary: CAS
secondary: any
aircraft:
- AH-64D Apache Longbow
size: 8
- primary: Refueling
aircraft:
- KC-135 Stratotanker
@@ -62,7 +57,7 @@ squadrons:
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
size: 40
size: 20
- primary: DEAD
secondary: air-to-ground
aircraft:
@@ -147,15 +142,14 @@ squadrons:
#Ushuaia
7:
- primary: CAS
secondary: any
secondary: air-to-ground
aircraft:
- Ka-50 Hokum III
- Ka-50 Hokum (Blackshark 3)
size: 8
#Ushuaia Helo Port
8:
- primary: Air Assault
secondary: any
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 8

View File

@@ -48,7 +48,7 @@ squadrons:
#Tarawa Class LHA
Blue-LHA:
- primary: DEAD
secondary: any
secondary: air-to-ground
aircraft:
- AH-64D Apache Longbow
size: 12
@@ -72,7 +72,7 @@ squadrons:
#Akrotiri
44:
- primary: BAI
secondary: any
secondary: air-to-ground
aircraft:
- AH-1W SuperCobra
size: 4
@@ -81,8 +81,8 @@ squadrons:
aircraft:
- OH-58D Kiowa Warrior
size: 4
- primary: Transport
secondary: any
- primary: Air Assault
secondary: air-to-ground
aircraft:
- UH-60A
size: 4
@@ -95,7 +95,6 @@ squadrons:
#Ercan
49:
- primary: Transport
secondary: any
aircraft:
- CH-47D
size: 6

View File

@@ -100,7 +100,7 @@ squadrons:
#Qeshm Island (12)
13:
- primary: Air Assault
secondary: any
secondary: air-to-ground
aircraft:
- Mi-24P Hind-F
size: 12

View File

@@ -80,7 +80,7 @@ squadrons:
- F-16CM Fighting Falcon (Block 50)
size: 28
- primary: CAS
secondary: any
secondary: air-to-ground
aircraft:
- AH-64D Apache Longbow
size: 4
@@ -93,13 +93,13 @@ squadrons:
- H-6J Badger
size: 16
- primary: BAI
secondary: any
secondary: air-to-ground
aircraft:
- AH-1W SuperCobra
- Su-25 Frogfoot
size: 16
- primary: CAS
secondary: any
secondary: air-to-ground
aircraft:
- OH-58D Kiowa Warrior
- Mi-24P Hind-F

View File

@@ -1,156 +1,169 @@
---
name: Caucasus - Operation Vectron's Claw
theater: Caucasus
authors: Starfire
recommended_player_faction: USA 2005
recommended_enemy_faction: Russia 2010
description:
<p><strong>Background</strong> - The United Nations Observer Mission in Georgia (UNOMIG) has been actively monitoring the ceasefire agreement between Georgia and its breakaway region of Abkhazia. Recent developments have escalated tensions in the area, leading to a precarious situation for UN observers and affiliated personnel.
</p><p><strong>Current Situation</strong> - UNOMIG observers, along with a contingent of international troops, have found themselves isolated due to the intervention of Russian forces supporting the separatist ambitions of Abkhazia. The UNOMIG headquarters located in Sukhumi has fallen into enemy hands. A smaller group based at the Zugdidi Sector Headquarters now faces the daunting task of navigating to safety with the aid of offshore naval air support.
</p><p><strong>Objective</strong> - The immediate goal is to orchestrate a strategic withdrawal of UN forces to the coastline, leveraging support from US naval aircraft positioned offshore. The critical mission objective is the rapid recapture of Sukhumi. This action is essential to enable the landing of friendly ground forces and the ferrying in of land-based sqwuadrons from Incirlik.
</p><p><strong>Operational Constraints</strong> - It is crucial to note that reinforcement of ground units will not be possible until Sukhumi is successfully recaptured. This recapture can either be performed using existing UN personnel and ground vehicles, or via heliborne assault troop insertion.
</p><p><strong>Assets & Support</strong> - Available assets include two Huey helicopters for close air support. Commanders may opt to initiate the operation with light vehicles, such as Humvees, employing breakthrough tactics to avoid direct confrontations with enemy forces. Alternatively, the use of heavier ground units is an option for commanders seeking a more conventional combat engagement. Upon the recapture of Sukhumi, additional squadrons from Incirlik, Turkey, will become operational.
</p><p><strong>Secondary Objective</strong> - Consider prioritising the capture of the Batumi airfield, located to the south, for its strategic value as a forward operating base. Commanders should be aware of the inherent risks, as the airfield is relatively small and lacks air defence systems, posing a significant threat to any stationed aircraft.</p>
miz: operation_vectrons_claw.miz
performance: 1
recommended_start_date: 2008-08-08
version: "11.0"
control_points:
Squadrons from Incirlik:
ferry_only: true
squadrons:
Blue CV-1:
- primary: BARCAP
secondary: any
aircraft:
- F-14B Tomcat
size: 16
- primary: SEAD
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
size: 60
- primary: CAS
secondary: air-to-ground
aircraft:
- S-3B Viking
size: 8
- primary: AEW&C
aircraft:
- E-2C Hawkeye
size: 2
- primary: Refueling
aircraft:
- S-3B Tanker
size: 2
- primary: Air Assault
secondary: any
aircraft:
- UH-60L
- UH-60A
size: 2
Blue LHA:
- primary: BAI
secondary: air-to-ground
aircraft:
- AV-8B Harrier II Night Attack
size: 20
Squadrons from Incirlik:
- primary: CAS
secondary: any
aircraft:
- AH-64D Apache Longbow
size: 4
- primary: CAS
secondary: air-to-ground
aircraft:
- A-10C Thunderbolt II (Suite 7)
size: 6
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 16
- primary: BAI
secondary: any
aircraft:
- F-15E Strike Eagle (Suite 4+)
size: 8
- primary: Refueling
aircraft:
- KC-135 Stratotanker
size: 1
Bombers from RAF Fairford:
- primary: Anti-ship
secondary: air-to-ground
aircraft:
- B-52H Stratofortress
size: 4
Bombers from Base Aérea de Morón:
- primary: OCA/Runway
secondary: air-to-ground
aircraft:
- B-1B Lancer
size: 4
#FARPs
UNOMIG Sector HQ:
- primary: Transport
secondary: any
aircraft:
- UH-1H Iroquois
size: 2
Dzhugba:
- primary: CAS
secondary: any
aircraft:
- Mi-24P Hind-F
size: 4
#Sukhumi-Babushara
20:
- primary: TARCAP
secondary: air-to-air
aircraft:
- MiG-29S Fulcrum-C
size: 8
- primary: BAI
secondary: air-to-ground
aircraft:
- Su-25T Frogfoot
size: 12
#Sochi-Adler
18:
- primary: Escort
secondary: air-to-air
aircraft:
- Su-27 Flanker-B
size: 8
- primary: SEAD
secondary: air-to-ground
aircraft:
- Su-24M Fencer-D
size: 20
- primary: DEAD
secondary: air-to-ground
aircraft:
- Su-34 Fullback
size: 20
#Maykop-Khanskaya
16:
- primary: Strike
secondary: air-to-ground
aircraft:
- Tu-22M3 Backfire-C
size: 20
#Anapa-Vityazevo
12:
- primary: Strike
secondary: air-to-ground
aircraft:
- Tu-95MS Bear-H
size: 16
Red CV:
- primary: BARCAP
secondary: any
aircraft:
- SU-33 Flanker-D
---
name: Caucasus - Operation Vectron's Claw
theater: Caucasus
authors: Starfire
recommended_player_faction: USA 2005
recommended_enemy_faction: Russia 2010
description:
<p>United Nations Observer Mission in Georgia (UNOMIG) observers stationed in
Georgia to monitor the ceasefire between Georgia and Abkhazia have been cut
off from friendly forces by Russian troops backing the separatist state. The
UNOMIG HQ at Sukhumi has been taken, and a small contingent of observers and
troops at the Zugdidi Sector HQ will have to make a run for the coast,
supported by offshore US naval aircraft. The contingent is aware that their
best shot at survival is to swiftly retake Sukhumi before Russian forces have
a chance to dig in, so that friendly ground forces can land and reinforce
them.</p><p><strong>Note:</strong> Ground unit purchase will not be available
past Turn 0 until Sukhumi is retaken, so it is imperative you reach Sukhumi
with at least one surviving ground unit to capture it. Two Hueys are available
at Zugdidi for some close air support. The player can either play the first
leg of the scenario as an evacuation with a couple of light vehicles (e.g.
Humvees) set on breakthrough (modifying waypoints in the mission editor so
they are not charging head-on into enemy ground forces is suggested), or
purchase heavier ground units if they wish to experience a more traditional
frontline ground war. Once Sukhumi has been captured, squadrons based in
Incirlik Turkey can be ferried in via the "From Incirlik" off-map spawn
point.</p>
miz: operation_vectrons_claw.miz
performance: 1
recommended_start_date: 2008-08-08
version: "11.0"
control_points:
Squadrons from Incirlik:
ferry_only: true
squadrons:
Blue CV-1:
- primary: BARCAP
secondary: any
aircraft:
- F-14B Tomcat
size: 16
- primary: SEAD
secondary: any
aircraft:
- F/A-18C Hornet (Lot 20)
size: 60
- primary: CAS
secondary: air-to-ground
aircraft:
- S-3B Viking
size: 8
- primary: AEW&C
aircraft:
- E-2C Hawkeye
size: 2
- primary: Refueling
aircraft:
- S-3B Tanker
size: 2
- primary: Air Assault
secondary: any
aircraft:
- UH-60L
- UH-60A
size: 2
Blue LHA:
- primary: BAI
secondary: air-to-ground
aircraft:
- AV-8B Harrier II Night Attack
size: 20
Squadrons from Incirlik:
- primary: CAS
secondary: air-to-ground
aircraft:
- AH-64D Apache Longbow
size: 4
- primary: CAS
secondary: air-to-ground
aircraft:
- A-10C Thunderbolt II (Suite 7)
size: 6
- primary: DEAD
secondary: any
aircraft:
- F-16CM Fighting Falcon (Block 50)
size: 16
- primary: BAI
secondary: any
aircraft:
- F-15E Strike Eagle (Suite 4+)
size: 8
- primary: Refueling
aircraft:
- KC-135 Stratotanker
size: 1
Bombers from RAF Fairford:
- primary: Anti-ship
secondary: air-to-ground
aircraft:
- B-52H Stratofortress
size: 4
Bombers from Base Aérea de Morón:
- primary: OCA/Runway
secondary: air-to-ground
aircraft:
- B-1B Lancer
size: 4
#FARPs
UNOMIG Sector HQ:
- primary: Transport
secondary: any
aircraft:
- UH-1H Iroquois
size: 2
Dzhugba:
- primary: CAS
secondary: any
aircraft:
- Mi-24P Hind-F
size: 4
#Sukhumi-Babushara
20:
- primary: TARCAP
secondary: air-to-air
aircraft:
- MiG-29S Fulcrum-C
size: 8
- primary: BAI
secondary: air-to-ground
aircraft:
- Su-25T Frogfoot
size: 12
#Sochi-Adler
18:
- primary: Escort
secondary: air-to-air
aircraft:
- Su-27 Flanker-B
size: 8
- primary: SEAD
secondary: air-to-ground
aircraft:
- Su-24M Fencer-D
size: 20
- primary: DEAD
secondary: air-to-ground
aircraft:
- Su-34 Fullback
size: 20
#Maykop-Khanskaya
16:
- primary: Anti-ship
secondary: air-to-ground
aircraft:
- Tu-22M3 Backfire-C
size: 20
#Anapa-Vityazevo
12:
- primary: Strike
secondary: air-to-ground
aircraft:
- Tu-95MS Bear-H
size: 16
Red CV:
- primary: BARCAP
secondary: any
aircraft:
- SU-33 Flanker-D
size: 16

View File

@@ -5,27 +5,23 @@ authors: Starfire
recommended_player_faction: USA 1970
recommended_enemy_faction: NVA 1970
description:
<p>Operation Velvet Thunder is a high-intensity training exercise designed to
prepare fresh troops for the challenges they will face in Vietnam. The dense
jungle and rugged terrain of the Mariana Islands will provide a realistic
backdrop, allowing our forces to hone essential skills in jungle warfare,
unconventional tactics, and counterinsurgency operations. There are multiple
checkpoints scattered across the area of operations that will have to be
captured by Air Assault. Due to the limited size and availability of LZs, it
<p>Operation Velvet Thunder is a high-intensity training exercise designed to
prepare fresh troops for the challenges they will face in Vietnam. The dense
jungle and rugged terrain of the Mariana Islands will provide a realistic
backdrop, allowing our forces to hone essential skills in jungle warfare,
unconventional tactics, and counterinsurgency operations. There are multiple
checkpoints scattered across the area of operations that will have to be
captured by Air Assault. Due to the limited size and availability of LZs, it
is vital to pay close attention to where you designate troop drop off zones.
</p><p><strong>Note:</strong> This campaign is intended to be played with the
A-4 Skyhawk and OV-10a aircraft mods active. The C-101CC has also been included
as a stand-in for the Cessna A-37 Dragonfly in order to provide a CAS platform
of roughly equivalent combat capability. This campaign will be updated to use
</p><p><strong>Note:</strong> This campaign is intended to be played with the
A-4 Skyhawk and OV-10a aircraft mods active. The C-101CC has also been included
as a stand-in for the Cessna A-37 Dragonfly in order to provide a CAS platform
of roughly equivalent combat capability. This campaign will be updated to use
Heatblur's F-4 Phantom II once it is in early access.</p>
miz: operation_velvet_thunder.miz
performance: 1
recommended_start_date: 1970-11-29
version: "11.0"
settings:
a4_skyhawk: true
f4bc_phantom: true
ov10a_bronco: true
squadrons:
#Andersen AFB
6:
@@ -47,9 +43,8 @@ squadrons:
- primary: SEAD
secondary: any
aircraft:
- F-4C Phantom II
- F-4E Phantom II
size: 8
size: 16
- primary: Strike
secondary: any
aircraft:
@@ -96,4 +91,4 @@ squadrons:
secondary: any
aircraft:
- MiG-21bis Fishbed-N
size: 8
size: 8

View File

@@ -90,13 +90,6 @@
"hertz": 343000,
"channel": null
},
"world_13": {
"name": "GHI",
"callsign": "GHI",
"beacon_type": 5,
"hertz": 113800000,
"channel": 85
},
"airfield2_0": {
"name": "",
"callsign": "IADA",
@@ -153,20 +146,6 @@
"hertz": 365000,
"channel": null
},
"airfield67_0": {
"name": "",
"callsign": "IAMN",
"beacon_type": 13,
"hertz": 109500000,
"channel": null
},
"airfield67_1": {
"name": "",
"callsign": "IAMN",
"beacon_type": 14,
"hertz": 109500000,
"channel": null
},
"airfield6_0": {
"name": "KALDE",
"callsign": "KAD",
@@ -254,8 +233,8 @@
"airfield7_4": {
"name": "DAMASCUS",
"callsign": "DAL",
"beacon_type": 9,
"hertz": 342000,
"beacon_type": 10,
"hertz": 342000000,
"channel": null
},
"airfield7_5": {
@@ -338,8 +317,8 @@
"airfield41_1": {
"name": "ALANYA/GAZIPASA",
"callsign": "GZP",
"beacon_type": 3,
"hertz": 114200000,
"beacon_type": 2,
"hertz": 0,
"channel": 89
},
"airfield41_2": {
@@ -426,20 +405,6 @@
"hertz": 111700000,
"channel": null
},
"airfield65_0": {
"name": "",
"callsign": "",
"beacon_type": 14,
"hertz": 109100000,
"channel": null
},
"airfield65_1": {
"name": "",
"callsign": "",
"beacon_type": 13,
"hertz": 109100000,
"channel": null
},
"airfield47_0": {
"name": "",
"callsign": "ILC",
@@ -503,34 +468,6 @@
"hertz": 358000,
"channel": null
},
"airfield68_0": {
"name": "",
"callsign": "",
"beacon_type": 13,
"hertz": 112910000,
"channel": null
},
"airfield68_1": {
"name": "",
"callsign": "",
"beacon_type": 13,
"hertz": 112900000,
"channel": null
},
"airfield68_2": {
"name": "",
"callsign": "",
"beacon_type": 14,
"hertz": 112910000,
"channel": null
},
"airfield68_3": {
"name": "",
"callsign": "",
"beacon_type": 14,
"hertz": 112900000,
"channel": null
},
"airfield27_0": {
"name": "ALEPPO",
"callsign": "ALE",
@@ -608,27 +545,6 @@
"hertz": null,
"channel": 79
},
"airfield64_0": {
"name": "PrinceHussein",
"callsign": "ABC",
"beacon_type": 4,
"hertz": 0,
"channel": 106
},
"airfield64_1": {
"name": "",
"callsign": "ABC",
"beacon_type": 13,
"hertz": 111400000,
"channel": null
},
"airfield64_2": {
"name": "",
"callsign": "ABC",
"beacon_type": 14,
"hertz": 111400000,
"channel": null
},
"airfield30_0": {
"name": "RAMATDAVID",
"callsign": "RMD",
@@ -664,20 +580,6 @@
"hertz": 115300000,
"channel": null
},
"airfield58_0": {
"name": "Sanliurfa",
"callsign": "GAP",
"beacon_type": 3,
"hertz": 113200000,
"channel": 79
},
"airfield58_1": {
"name": "Sanliurfa",
"callsign": "GAP",
"beacon_type": 9,
"hertz": 391000,
"channel": null
},
"airfield40_0": {
"name": "Cheka",
"callsign": "CAK",

View File

@@ -1,15 +1,19 @@
---
country: Australia
name: Australia 2005
authors: 'Khopa, SpaceEnthusiast'
description: >-
<p>The Australian army in 2005.</p><p>Some units might not be accurate, but
were picked to represent at best this army.</p>
authors: Khopa, SpaceEnthusiast
description:
<p>The Australian army in 2005.</p><p>Some units might not be accurate,
but were picked to represent at best this army.</p>
aircrafts:
- AH-1W SuperCobra
- C-130J-30 Super Hercules
- F/A-18C Hornet (Lot 20)
- SH-60B Seahawk
- UH-1H Iroquois
- F/A-18E Super Hornet
- F/A-18F Super Hornet
- EA-18G Growler
awacs:
- E-3A
tankers:
@@ -38,7 +42,7 @@ missiles: []
air_defense_units:
- SAM Hawk SR (AN/MPQ-50)
requirements:
C-130J-30 Super Hercules Mod by Anubis: 'https://forums.eagle.ru/topic/252075-dcs-super-hercules-mod-by-anubis/'
C-130J-30 Super Hercules Mod by Anubis: https://forums.eagle.ru/topic/252075-dcs-super-hercules-mod-by-anubis/
carrier_names: []
helicopter_carrier_names:
- HMAS Canberra

View File

@@ -1,54 +0,0 @@
country: Australia
name: Australia 2009
authors: 'Khopa, SpaceEnthusiast, Chilli'
description: >-
<p>The Australian army in 2005.</p><p>Some units might not be accurate, but
were picked to represent at best this army.</p>
aircrafts:
- AH-1W SuperCobra
- C-130J-30 Super Hercules
- F/A-18C Hornet (Lot 20)
- F/A-18F Super Hornet
- EA-18G Growler
- SH-60B Seahawk
- UH-1H Iroquois
awacs:
- E-3A
tankers:
- KC-130
- KC-135 Stratotanker
frontline_units:
- FV510 Warrior
- LAV-25
- Leopard 1A3
- M113
- M1A2 Abrams
artillery_units: []
logistics_units:
- Truck M818 6x6
infantry_units:
- Infantry M249
- Infantry M4
- MANPADS Stinger
preset_groups:
- Hawk
- Rapier
naval_units:
- DDG Arleigh Burke IIa
- LHA-1 Tarawa
missiles: []
air_defense_units:
- SAM Hawk SR (AN/MPQ-50)
requirements:
C-130J-30 Super Hercules Mod by Anubis: 'https://forums.eagle.ru/topic/252075-dcs-super-hercules-mod-by-anubis/'
carrier_names: []
helicopter_carrier_names:
- HMAS Canberra
- HMAS Adelaide
has_jtac: true
jtac_unit: MQ-9 Reaper
liveries_overrides:
F/A-18C Hornet (Lot 20):
- Australian 75th Squadron
- Australian 77th Squadron
unrestricted_satnav: true

View File

@@ -1,6 +1,6 @@
---
country: Egypt
name: Egypt 2000
name: Egypt 2000s
authors: Starfire
description: <p>Egyptian military in the 21st century.</p>
locales:

View File

@@ -1,3 +1,4 @@
---
country: USA
name: US Navy 2005
authors: Fuzzle
@@ -7,13 +8,14 @@ locales:
aircrafts:
- F-14B Tomcat
- F/A-18C Hornet (Lot 20)
- F/A-18E Super Hornet
- F/A-18F Super Hornet
- AV-8B Harrier II Night Attack
- AH-1W SuperCobra
- S-3B Viking
- SH-60B Seahawk
- UH-1H Iroquois
- F/A-18E Super Hornet
- F/A-18F Super Hornet
- EA-18G Growler
awacs:
- E-2C Hawkeye
tankers:

View File

@@ -1,76 +0,0 @@
country: USA
name: US Navy 2009
authors: Fuzzle, Chili
description: <p>A modern representation of the US Navy/Marine Corps.</p>
locales:
- en_US
aircrafts:
- F/A-18C Hornet (Lot 20)
- F/A-18E Super Hornet
- F/A-18F Super Hornet
- EA-18G Growler
- AV-8B Harrier II Night Attack
- AH-1W SuperCobra
- S-3B Viking
- SH-60B Seahawk
- UH-1H Iroquois
awacs:
- E-2C Hawkeye
tankers:
- S-3B Tanker
frontline_units:
- M113
- M1043 HMMWV (M2 HMG)
- M1045 HMMWV (BGM-71 TOW)
- M1A2 Abrams
- LAV-25
- M163 Vulcan Air Defense System
artillery_units:
- M270 Multiple Launch Rocket System
logistics_units:
- Truck M818 6x6
infantry_units:
- Infantry M4
- Infantry M249
- MANPADS Stinger
preset_groups:
- Hawk
- Patriot
naval_units:
- FFG Oliver Hazard Perry
- DDG Arleigh Burke IIa
- CG Ticonderoga
- LHA-1 Tarawa
- CVN-74 John C. Stennis
missiles: []
air_defense_units:
- SAM Hawk SR (AN/MPQ-50)
- M163 Vulcan Air Defense System
- M48 Chaparral
requirements: {}
carrier_names:
- CVN-71 Theodore Roosevelt
- CVN-72 Abraham Lincoln
- CVN-73 George Washington
- CVN-74 John C. Stennis
- CVN-75 Harry S. Truman
helicopter_carrier_names:
- LHA-1 Tarawa
- LHA-2 Saipan
- LHA-3 Belleau Wood
- LHA-4 Nassau
- LHA-5 Peleliu
has_jtac: true
jtac_unit: MQ-9 Reaper
doctrine: modern
liveries_overrides:
F-14B Tomcat:
- VF-142 Ghostriders
F/A-18C Hornet (Lot 20):
- VMFA-251 high visibility
AV-8B Harrier II Night Attack:
- VMAT-542
AH-1W SuperCobra:
- Marines
UH-1H Iroquois:
- US NAVY

View File

@@ -11,7 +11,6 @@ kill_events = {} -- killed units will be added via S_EVENT_KILL
base_capture_events = {}
destroyed_objects_positions = {} -- will be added via S_EVENT_DEAD event
killed_ground_units = {} -- keep track of static ground object deaths
unit_hit_point_updates = {} -- stores updates to unit hit points, triggered by S_EVENT_HIT
mission_ended = false
local function ends_with(str, ending)
@@ -42,7 +41,6 @@ function write_state()
["mission_ended"] = mission_ended,
["destroyed_objects_positions"] = destroyed_objects_positions,
["killed_ground_units"] = killed_ground_units,
["unit_hit_point_updates"] = unit_hit_point_updates,
}
if not json then
local message = string.format("Unable to save DCS Liberation state to %s, JSON library is not loaded !", _debriefing_file_location)
@@ -148,14 +146,6 @@ write_state_error_handling = function()
mist.scheduleFunction(write_state_error_handling, {}, timer.getTime() + WRITESTATE_SCHEDULE_IN_SECONDS)
end
function update_hit_points(event)
local update = {}
update.name = event.target:getName()
update.hit_points = event.target:getLife()
unit_hit_point_updates[#unit_hit_point_updates + 1] = update
write_state()
end
activeWeapons = {}
local function onEvent(event)
if event.id == world.event.S_EVENT_CRASH and event.initiator then
@@ -185,15 +175,6 @@ local function onEvent(event)
destroyed_objects_positions[#destroyed_objects_positions + 1] = destruction
write_state()
end
if event.id == world.event.S_EVENT_HIT then
target_category = event.target:getCategory()
if target_category == Object.Category.UNIT then
-- check on the health of the target 1 second after as the life value is sometimes not updated
-- at the time of the event
timer.scheduleFunction(update_hit_points, event, timer.getTime() + 1)
end
end
if event.id == world.event.S_EVENT_MISSION_END then
mission_ended = true

View File

@@ -1 +0,0 @@
../../submodules/dcs/dcs

1
resources/tools/dcs Symbolic link
View File

@@ -0,0 +1 @@
../../submodules/dcs/dcs

View File

@@ -80,14 +80,6 @@ def beacons_from_terrain(dcs_path: Path, path: Path) -> Iterable[tuple[str, Beac
)
)
lua.execute(
textwrap.dedent(
"""
function math.pow(x,y) return x^y end
"""
)
)
bind_gettext = lua.eval(
textwrap.dedent(
"""\

Binary file not shown.

After

Width:  |  Height:  |  Size: 989 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -1,42 +0,0 @@
carrier_capable: true
description:
"The Boeing EA-18G Growler is an American carrier-based electronic warfare aircraft,
a specialized version of the two-seat F/A-18F Super Hornet. The EA-18G replaced the
Northrop Grumman EA-6B Prowlers in service with the United States Navy."
introduced: 1999
manufacturer: McDonnell Douglas
origin: USA
price: 25
role: Carrier-based Multirole Fighter
fuel:
# Parking A1 to RWY 32 at Akrotiri.
taxi: 170
# AB takeoff to 350/0.85, reduce to MIL and maintain 350 to 25k ft.
climb_ppm: 44.25
# 0.85 mach for 100NM.
cruise_ppm: 22.1
# ~0.9 mach for 100NM. Occasional AB use.
combat_ppm: 27.5
min_safe: 2000
variants:
EA-18G Growler: {}
radios:
intra_flight: AN/ARC-210
inter_flight: AN/ARC-210
channels:
type: common
# DCS will clobber channel 1 of the first radio compatible with the flight's
# assigned frequency. Since the F/A-18's two radios are both AN/ARC-210s,
# radio 1 will be compatible regardless of which frequency is assigned, so
# we must use radio 1 for the intra-flight radio.
intra_flight_radio_index: 1
inter_flight_radio_index: 2
utc_kneeboard: true
# default_overrides:
# HelmetMountedDevice: 1
# InnerBoard: 0
# OuterBoard: 0
tasks:
DEAD: 500
SEAD: 600
hit_points: 20

View File

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

View File

@@ -1,78 +0,0 @@
carrier_capable: true
description:
"The F/A-18E Super Hornet is a single-seat, twin engine, carrier-capable, multirole
fighter aircraft. The Super Hornets are larger and more advanced derivatives of the
McDonnell Douglas F/A-18C and D Hornets, also known as legacy Hornets.
The Super Hornet is equipped with a large suite of sensors that includes a radar, targeting
pod, and a helmet mounted sight. In addition to its internal 20mm cannon, the Super Hornet
can be armed with a large assortment of unguided bombs and rockets, laser and GPS-guided
bombs, air-to-surface missiles of all sorts, and both radar and infrared-guided
air-to-air missiles.
The Super Hornet is also known for its extreme, slow-speed maneuverability in a dogfight.
Although incredibly deadly, the Super Hornet is also a very easy aircraft to fly."
introduced: 1999
manufacturer: McDonnell Douglas
origin: USA
price: 25
role: Carrier-based Multirole Fighter
fuel:
# Parking A1 to RWY 32 at Akrotiri.
taxi: 170
# AB takeoff to 350/0.85, reduce to MIL and maintain 350 to 25k ft.
climb_ppm: 44.25
# 0.85 mach for 100NM.
cruise_ppm: 22.1
# ~0.9 mach for 100NM. Occasional AB use.
combat_ppm: 27.5
min_safe: 2000
variants:
F/A-18E Super Hornet: {}
radios:
intra_flight: AN/ARC-210
inter_flight: AN/ARC-210
channels:
type: common
# DCS will clobber channel 1 of the first radio compatible with the flight's
# assigned frequency. Since the F/A-18's two radios are both AN/ARC-210s,
# radio 1 will be compatible regardless of which frequency is assigned, so
# we must use radio 1 for the intra-flight radio.
intra_flight_radio_index: 1
inter_flight_radio_index: 2
utc_kneeboard: true
# default_overrides:
# HelmetMountedDevice: 1
# InnerBoard: 0
# OuterBoard: 0
tasks:
Anti-ship: 150
BAI: 740
BARCAP: 450
CAS: 740
DEAD: 440
Escort: 450
Fighter sweep: 450
Intercept: 450
OCA/Aircraft: 740
OCA/Runway: 600
SEAD: 430
SEAD Escort: 430
Strike: 600
TARCAP: 450
weapon_injections: # AGM-154B only works for AI
2:
- "{AGM-154B}"
- "{BRU57_2*AGM-154B}"
3:
- "{AGM-154B}"
- "{BRU57_2*AGM-154B}"
7:
- "{AGM-154B}"
- "{BRU57_2*AGM-154B}"
8:
- "{AGM-154B}"
- "{BRU57_2*AGM-154B}"
hit_points: 20

View File

@@ -1,78 +0,0 @@
carrier_capable: true
description:
"The F/A-18F Super Hornet is a tandem-seat, twin engine, carrier-capable, multirole
fighter aircraft. The Super Hornets are larger and more advanced derivatives of the
McDonnell Douglas F/A-18C and D Hornets, also known as legacy Hornets.
The Super Hornet is equipped with a large suite of sensors that includes a radar, targeting
pod, and a helmet mounted sight. In addition to its internal 20mm cannon, the Super Hornet
can be armed with a large assortment of unguided bombs and rockets, laser and GPS-guided
bombs, air-to-surface missiles of all sorts, and both radar and infrared-guided
air-to-air missiles.
The Super Hornet is also known for its extreme, slow-speed maneuverability in a dogfight.
Although incredibly deadly, the Super Hornet is also a very easy aircraft to fly."
introduced: 2006
manufacturer: Boeing
origin: USA
price: 25
role: Carrier-based Multirole Fighter
fuel:
# Parking A1 to RWY 32 at Akrotiri.
taxi: 170
# AB takeoff to 350/0.85, reduce to MIL and maintain 350 to 25k ft.
climb_ppm: 44.25
# 0.85 mach for 100NM.
cruise_ppm: 22.1
# ~0.9 mach for 100NM. Occasional AB use.
combat_ppm: 27.5
min_safe: 2000
variants:
F/A-18F Super Hornet: {}
radios:
intra_flight: AN/ARC-210
inter_flight: AN/ARC-210
channels:
type: common
# DCS will clobber channel 1 of the first radio compatible with the flight's
# assigned frequency. Since the F/A-18's two radios are both AN/ARC-210s,
# radio 1 will be compatible regardless of which frequency is assigned, so
# we must use radio 1 for the intra-flight radio.
intra_flight_radio_index: 1
inter_flight_radio_index: 2
utc_kneeboard: true
# default_overrides:
# HelmetMountedDevice: 1
# InnerBoard: 0
# OuterBoard: 0
tasks:
Anti-ship: 150
BAI: 740
BARCAP: 450
CAS: 740
DEAD: 440
Escort: 450
Fighter sweep: 450
Intercept: 450
OCA/Aircraft: 740
OCA/Runway: 600
SEAD: 430
SEAD Escort: 430
Strike: 600
TARCAP: 450
weapon_injections: # AGM-154B only works for AI
2:
- "{AGM-154B}"
- "{BRU57_2*AGM-154B}"
3:
- "{AGM-154B}"
- "{BRU57_2*AGM-154B}"
7:
- "{AGM-154B}"
- "{BRU57_2*AGM-154B}"
8:
- "{AGM-154B}"
- "{BRU57_2*AGM-154B}"
hit_points: 20