mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Compare commits
16 Commits
develop-10
...
update_rea
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef8eeeb1f1 | ||
|
|
e42a7b9a59 | ||
|
|
24c9ca5d12 | ||
|
|
678dd58e7d | ||
|
|
d6879040ad | ||
|
|
d0be4b6a29 | ||
|
|
0d71372377 | ||
|
|
86de5df21e | ||
|
|
d1daa0521c | ||
|
|
ffa88688dc | ||
|
|
5ecaeca910 | ||
|
|
e1d443b697 | ||
|
|
5af4e56f30 | ||
|
|
5b858886c0 | ||
|
|
c695e7724a | ||
|
|
2fb22e4e17 |
2
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
2
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@@ -31,7 +31,7 @@ body:
|
|||||||
If the bug was found in a development build, select "Development build"
|
If the bug was found in a development build, select "Development build"
|
||||||
and provide a link to the build in the field below.
|
and provide a link to the build in the field below.
|
||||||
options:
|
options:
|
||||||
- 9.0.0
|
- 10.0.0
|
||||||
- Development build
|
- Development build
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
2
.github/ISSUE_TEMPLATE/new-game-bug.yml
vendored
2
.github/ISSUE_TEMPLATE/new-game-bug.yml
vendored
@@ -39,7 +39,7 @@ body:
|
|||||||
If the bug was found in a development build, select "Development build"
|
If the bug was found in a development build, select "Development build"
|
||||||
and provide a link to the build in the field below.
|
and provide a link to the build in the field below.
|
||||||
options:
|
options:
|
||||||
- 9.0.0
|
- 10.0.0
|
||||||
- Development build
|
- Development build
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
(Github Readme Banner and Splash screen Artwork by Andriy Dankovych, CC BY-SA 4.0)
|
(Github Readme Banner and Splash screen Artwork by Andriy Dankovych, CC BY-SA 4.0)
|
||||||
|
|
||||||
[](https://patreon.com/khopa)
|
[](https://patreon.com/dcsliberation)
|
||||||
|
|
||||||
[](https://github.com/dcs-liberation/dcs_liberation/releases)
|
[](https://github.com/dcs-liberation/dcs_liberation/releases)
|
||||||
|
|
||||||
|
|||||||
10
changelog.md
10
changelog.md
@@ -1,3 +1,13 @@
|
|||||||
|
# 11.0.0
|
||||||
|
|
||||||
|
Saves from 10.x are not compatible with 11.0.0.
|
||||||
|
|
||||||
|
## Features/Improvements
|
||||||
|
|
||||||
|
* **[Engine]** Support for DCS 2.9.3.51704 Open Beta.
|
||||||
|
|
||||||
|
## Fixes
|
||||||
|
|
||||||
# 10.0.0
|
# 10.0.0
|
||||||
|
|
||||||
Saves from 9.x are not compatible with 10.0.0.
|
Saves from 9.x are not compatible with 10.0.0.
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
project = "DCS Liberation"
|
project = "DCS Liberation"
|
||||||
copyright = "2023, DCS Liberation Team"
|
copyright = "2023, DCS Liberation Team"
|
||||||
author = "DCS Liberation Team"
|
author = "DCS Liberation Team"
|
||||||
release = "10.0.0"
|
release = "11.0.0"
|
||||||
|
|
||||||
# -- General configuration ---------------------------------------------------
|
# -- General configuration ---------------------------------------------------
|
||||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ class Builder(IBuilder[AirAssaultFlightPlan, AirAssaultLayout]):
|
|||||||
raise PlanningError("Air assault is only usable by helicopters")
|
raise PlanningError("Air assault is only usable by helicopters")
|
||||||
assert self.package.waypoints is not None
|
assert self.package.waypoints is not None
|
||||||
|
|
||||||
altitude = feet(1500) if self.flight.is_helo else self.doctrine.ingress_altitude
|
altitude = self.doctrine.helicopter.air_assault_nav_altitude
|
||||||
altitude_is_agl = self.flight.is_helo
|
altitude_is_agl = self.flight.is_helo
|
||||||
|
|
||||||
builder = WaypointBuilder(self.flight, self.coalition)
|
builder = WaypointBuilder(self.flight, self.coalition)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class BarCapFlightPlan(PatrollingFlightPlan[PatrollingLayout]):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def patrol_duration(self) -> timedelta:
|
def patrol_duration(self) -> timedelta:
|
||||||
return self.flight.coalition.doctrine.cap_duration
|
return self.flight.coalition.doctrine.cap.duration
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def patrol_speed(self) -> Speed:
|
def patrol_speed(self) -> Speed:
|
||||||
@@ -29,7 +29,7 @@ class BarCapFlightPlan(PatrollingFlightPlan[PatrollingLayout]):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def engagement_distance(self) -> Distance:
|
def engagement_distance(self) -> Distance:
|
||||||
return self.flight.coalition.doctrine.cap_engagement_range
|
return self.flight.coalition.doctrine.cap.engagement_range
|
||||||
|
|
||||||
|
|
||||||
class Builder(CapBuilder[BarCapFlightPlan, PatrollingLayout]):
|
class Builder(CapBuilder[BarCapFlightPlan, PatrollingLayout]):
|
||||||
@@ -44,8 +44,8 @@ class Builder(CapBuilder[BarCapFlightPlan, PatrollingLayout]):
|
|||||||
preferred_alt = self.flight.unit_type.preferred_patrol_altitude
|
preferred_alt = self.flight.unit_type.preferred_patrol_altitude
|
||||||
randomized_alt = preferred_alt + feet(random.randint(-2, 1) * 1000)
|
randomized_alt = preferred_alt + feet(random.randint(-2, 1) * 1000)
|
||||||
patrol_alt = max(
|
patrol_alt = max(
|
||||||
self.doctrine.min_patrol_altitude,
|
self.doctrine.cap.min_patrol_altitude,
|
||||||
min(self.doctrine.max_patrol_altitude, randomized_alt),
|
min(self.doctrine.cap.max_patrol_altitude, randomized_alt),
|
||||||
)
|
)
|
||||||
|
|
||||||
builder = WaypointBuilder(self.flight, self.coalition)
|
builder = WaypointBuilder(self.flight, self.coalition)
|
||||||
|
|||||||
@@ -90,10 +90,10 @@ class CapBuilder(IBuilder[FlightPlanT, LayoutT], ABC):
|
|||||||
# buffer.
|
# buffer.
|
||||||
distance_to_no_fly = (
|
distance_to_no_fly = (
|
||||||
meters(position.distance(self.threat_zones.all))
|
meters(position.distance(self.threat_zones.all))
|
||||||
- self.doctrine.cap_engagement_range
|
- self.doctrine.cap.engagement_range
|
||||||
- nautical_miles(5)
|
- nautical_miles(5)
|
||||||
)
|
)
|
||||||
max_track_length = self.doctrine.cap_max_track_length
|
max_track_length = self.doctrine.cap.max_track_length
|
||||||
else:
|
else:
|
||||||
# Other race tracks (TARCAPs, currently) just try to keep some
|
# Other race tracks (TARCAPs, currently) just try to keep some
|
||||||
# distance from the nearest enemy airbase, but since they are by
|
# distance from the nearest enemy airbase, but since they are by
|
||||||
@@ -108,15 +108,15 @@ class CapBuilder(IBuilder[FlightPlanT, LayoutT], ABC):
|
|||||||
distance_to_no_fly = distance_to_airfield - min_distance_from_enemy
|
distance_to_no_fly = distance_to_airfield - min_distance_from_enemy
|
||||||
|
|
||||||
# TARCAPs fly short racetracks because they need to react faster.
|
# TARCAPs fly short racetracks because they need to react faster.
|
||||||
max_track_length = self.doctrine.cap_min_track_length + 0.3 * (
|
max_track_length = self.doctrine.cap.min_track_length + 0.3 * (
|
||||||
self.doctrine.cap_max_track_length - self.doctrine.cap_min_track_length
|
self.doctrine.cap.max_track_length - self.doctrine.cap.min_track_length
|
||||||
)
|
)
|
||||||
|
|
||||||
min_cap_distance = min(
|
min_cap_distance = min(
|
||||||
self.doctrine.cap_min_distance_from_cp, distance_to_no_fly
|
self.doctrine.cap.min_distance_from_cp, distance_to_no_fly
|
||||||
)
|
)
|
||||||
max_cap_distance = min(
|
max_cap_distance = min(
|
||||||
self.doctrine.cap_max_distance_from_cp, distance_to_no_fly
|
self.doctrine.cap.max_distance_from_cp, distance_to_no_fly
|
||||||
)
|
)
|
||||||
|
|
||||||
end = location.position.point_from_heading(
|
end = location.position.point_from_heading(
|
||||||
@@ -125,7 +125,7 @@ class CapBuilder(IBuilder[FlightPlanT, LayoutT], ABC):
|
|||||||
)
|
)
|
||||||
|
|
||||||
track_length = random.randint(
|
track_length = random.randint(
|
||||||
int(self.doctrine.cap_min_track_length.meters),
|
int(self.doctrine.cap.min_track_length.meters),
|
||||||
int(max_track_length.meters),
|
int(max_track_length.meters),
|
||||||
)
|
)
|
||||||
start = end.point_from_heading(heading.opposite.degrees, track_length)
|
start = end.point_from_heading(heading.opposite.degrees, track_length)
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class CasFlightPlan(PatrollingFlightPlan[CasLayout], UiZoneDisplay):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def patrol_duration(self) -> timedelta:
|
def patrol_duration(self) -> timedelta:
|
||||||
return self.flight.coalition.doctrine.cas_duration
|
return self.flight.coalition.doctrine.cas.duration
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def patrol_speed(self) -> Speed:
|
def patrol_speed(self) -> Speed:
|
||||||
@@ -96,7 +96,7 @@ class Builder(IBuilder[CasFlightPlan, CasLayout]):
|
|||||||
builder = WaypointBuilder(self.flight, self.coalition)
|
builder = WaypointBuilder(self.flight, self.coalition)
|
||||||
|
|
||||||
is_helo = self.flight.unit_type.dcs_unit_type.helicopter
|
is_helo = self.flight.unit_type.dcs_unit_type.helicopter
|
||||||
patrol_altitude = self.doctrine.ingress_altitude if not is_helo else meters(50)
|
patrol_altitude = self.doctrine.resolve_combat_altitude(is_helo)
|
||||||
use_agl_patrol_altitude = is_helo
|
use_agl_patrol_altitude = is_helo
|
||||||
|
|
||||||
ip_solver = IpSolver(
|
ip_solver = IpSolver(
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class Builder(FormationAttackBuilder[EscortFlightPlan, FormationAttackLayout]):
|
|||||||
departure=builder.takeoff(self.flight.departure),
|
departure=builder.takeoff(self.flight.departure),
|
||||||
hold=hold,
|
hold=hold,
|
||||||
nav_to=builder.nav_path(
|
nav_to=builder.nav_path(
|
||||||
hold.position, join.position, self.doctrine.ingress_altitude
|
hold.position, join.position, self.doctrine.combat_altitude
|
||||||
),
|
),
|
||||||
join=join,
|
join=join,
|
||||||
ingress=ingress,
|
ingress=ingress,
|
||||||
@@ -43,7 +43,7 @@ class Builder(FormationAttackBuilder[EscortFlightPlan, FormationAttackLayout]):
|
|||||||
nav_from=builder.nav_path(
|
nav_from=builder.nav_path(
|
||||||
refuel.position,
|
refuel.position,
|
||||||
self.flight.arrival.position,
|
self.flight.arrival.position,
|
||||||
self.doctrine.ingress_altitude,
|
self.doctrine.combat_altitude,
|
||||||
),
|
),
|
||||||
arrival=builder.land(self.flight.arrival),
|
arrival=builder.land(self.flight.arrival),
|
||||||
divert=builder.divert(self.flight.divert),
|
divert=builder.divert(self.flight.divert),
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ class FormationAttackBuilder(IBuilder[FlightPlanT, LayoutT], ABC):
|
|||||||
departure=builder.takeoff(self.flight.departure),
|
departure=builder.takeoff(self.flight.departure),
|
||||||
hold=hold,
|
hold=hold,
|
||||||
nav_to=builder.nav_path(
|
nav_to=builder.nav_path(
|
||||||
hold.position, join.position, self.doctrine.ingress_altitude
|
hold.position, join.position, self.doctrine.combat_altitude
|
||||||
),
|
),
|
||||||
join=join,
|
join=join,
|
||||||
ingress=ingress,
|
ingress=ingress,
|
||||||
@@ -173,7 +173,7 @@ class FormationAttackBuilder(IBuilder[FlightPlanT, LayoutT], ABC):
|
|||||||
nav_from=builder.nav_path(
|
nav_from=builder.nav_path(
|
||||||
refuel.position,
|
refuel.position,
|
||||||
self.flight.arrival.position,
|
self.flight.arrival.position,
|
||||||
self.doctrine.ingress_altitude,
|
self.doctrine.combat_altitude,
|
||||||
),
|
),
|
||||||
arrival=builder.land(self.flight.arrival),
|
arrival=builder.land(self.flight.arrival),
|
||||||
divert=builder.divert(self.flight.divert),
|
divert=builder.divert(self.flight.divert),
|
||||||
|
|||||||
@@ -114,11 +114,11 @@ class Builder(IBuilder[SweepFlightPlan, SweepLayout]):
|
|||||||
self.package.waypoints.join.heading_between_point(target)
|
self.package.waypoints.join.heading_between_point(target)
|
||||||
)
|
)
|
||||||
start_pos = target.point_from_heading(
|
start_pos = target.point_from_heading(
|
||||||
heading.degrees, -self.doctrine.sweep_distance.meters
|
heading.degrees, -self.doctrine.sweep.distance.meters
|
||||||
)
|
)
|
||||||
|
|
||||||
builder = WaypointBuilder(self.flight, self.coalition)
|
builder = WaypointBuilder(self.flight, self.coalition)
|
||||||
start, end = builder.sweep(start_pos, target, self.doctrine.ingress_altitude)
|
start, end = builder.sweep(start_pos, target, self.doctrine.combat_altitude)
|
||||||
|
|
||||||
hold = builder.hold(self._hold_point())
|
hold = builder.hold(self._hold_point())
|
||||||
|
|
||||||
@@ -126,12 +126,12 @@ class Builder(IBuilder[SweepFlightPlan, SweepLayout]):
|
|||||||
departure=builder.takeoff(self.flight.departure),
|
departure=builder.takeoff(self.flight.departure),
|
||||||
hold=hold,
|
hold=hold,
|
||||||
nav_to=builder.nav_path(
|
nav_to=builder.nav_path(
|
||||||
hold.position, start.position, self.doctrine.ingress_altitude
|
hold.position, start.position, self.doctrine.combat_altitude
|
||||||
),
|
),
|
||||||
nav_from=builder.nav_path(
|
nav_from=builder.nav_path(
|
||||||
end.position,
|
end.position,
|
||||||
self.flight.arrival.position,
|
self.flight.arrival.position,
|
||||||
self.doctrine.ingress_altitude,
|
self.doctrine.combat_altitude,
|
||||||
),
|
),
|
||||||
sweep_start=start,
|
sweep_start=start,
|
||||||
sweep_end=end,
|
sweep_end=end,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class TarCapFlightPlan(PatrollingFlightPlan[TarCapLayout]):
|
|||||||
# flights in the package that have requested escort. If the package
|
# flights in the package that have requested escort. If the package
|
||||||
# requests an escort the CAP self.flight will remain on station for the
|
# requests an escort the CAP self.flight will remain on station for the
|
||||||
# duration of the escorted mission, or until it is winchester/bingo.
|
# duration of the escorted mission, or until it is winchester/bingo.
|
||||||
return self.flight.coalition.doctrine.cap_duration
|
return self.flight.coalition.doctrine.cap.duration
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def patrol_speed(self) -> Speed:
|
def patrol_speed(self) -> Speed:
|
||||||
@@ -50,7 +50,7 @@ class TarCapFlightPlan(PatrollingFlightPlan[TarCapLayout]):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def engagement_distance(self) -> Distance:
|
def engagement_distance(self) -> Distance:
|
||||||
return self.flight.coalition.doctrine.cap_engagement_range
|
return self.flight.coalition.doctrine.cap.engagement_range
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def builder_type() -> Type[Builder]:
|
def builder_type() -> Type[Builder]:
|
||||||
@@ -90,8 +90,8 @@ class Builder(CapBuilder[TarCapFlightPlan, TarCapLayout]):
|
|||||||
preferred_alt = self.flight.unit_type.preferred_patrol_altitude
|
preferred_alt = self.flight.unit_type.preferred_patrol_altitude
|
||||||
randomized_alt = preferred_alt + feet(random.randint(-2, 1) * 1000)
|
randomized_alt = preferred_alt + feet(random.randint(-2, 1) * 1000)
|
||||||
patrol_alt = max(
|
patrol_alt = max(
|
||||||
self.doctrine.min_patrol_altitude,
|
self.doctrine.cap.min_patrol_altitude,
|
||||||
min(self.doctrine.max_patrol_altitude, randomized_alt),
|
min(self.doctrine.cap.max_patrol_altitude, randomized_alt),
|
||||||
)
|
)
|
||||||
|
|
||||||
builder = WaypointBuilder(self.flight, self.coalition)
|
builder = WaypointBuilder(self.flight, self.coalition)
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ class WaypointBuilder:
|
|||||||
"NAV",
|
"NAV",
|
||||||
FlightWaypointType.NAV,
|
FlightWaypointType.NAV,
|
||||||
position,
|
position,
|
||||||
meters(500) if self.is_helo else self.doctrine.rendezvous_altitude,
|
self.doctrine.resolve_rendezvous_altitude(self.is_helo),
|
||||||
description="Enter theater",
|
description="Enter theater",
|
||||||
pretty_name="Enter theater",
|
pretty_name="Enter theater",
|
||||||
)
|
)
|
||||||
@@ -99,7 +99,7 @@ class WaypointBuilder:
|
|||||||
"NAV",
|
"NAV",
|
||||||
FlightWaypointType.NAV,
|
FlightWaypointType.NAV,
|
||||||
position,
|
position,
|
||||||
meters(500) if self.is_helo else self.doctrine.rendezvous_altitude,
|
self.doctrine.resolve_rendezvous_altitude(self.is_helo),
|
||||||
description="Exit theater",
|
description="Exit theater",
|
||||||
pretty_name="Exit theater",
|
pretty_name="Exit theater",
|
||||||
)
|
)
|
||||||
@@ -127,10 +127,7 @@ class WaypointBuilder:
|
|||||||
position = divert.position
|
position = divert.position
|
||||||
altitude_type: AltitudeReference
|
altitude_type: AltitudeReference
|
||||||
if isinstance(divert, OffMapSpawn):
|
if isinstance(divert, OffMapSpawn):
|
||||||
if self.is_helo:
|
altitude = self.doctrine.resolve_rendezvous_altitude(self.is_helo)
|
||||||
altitude = meters(500)
|
|
||||||
else:
|
|
||||||
altitude = self.doctrine.rendezvous_altitude
|
|
||||||
altitude_type = "BARO"
|
altitude_type = "BARO"
|
||||||
else:
|
else:
|
||||||
altitude = meters(0)
|
altitude = meters(0)
|
||||||
@@ -168,10 +165,7 @@ class WaypointBuilder:
|
|||||||
"HOLD",
|
"HOLD",
|
||||||
FlightWaypointType.LOITER,
|
FlightWaypointType.LOITER,
|
||||||
position,
|
position,
|
||||||
# Bug: DCS only accepts MSL altitudes for the orbit task and 500 meters is
|
self.doctrine.resolve_rendezvous_altitude(self.is_helo),
|
||||||
# below the ground for most if not all of NTTR (and lots of places in other
|
|
||||||
# maps).
|
|
||||||
meters(500) if self.is_helo else self.doctrine.rendezvous_altitude,
|
|
||||||
alt_type,
|
alt_type,
|
||||||
description="Wait until push time",
|
description="Wait until push time",
|
||||||
pretty_name="Hold",
|
pretty_name="Hold",
|
||||||
@@ -186,7 +180,7 @@ class WaypointBuilder:
|
|||||||
"JOIN",
|
"JOIN",
|
||||||
FlightWaypointType.JOIN,
|
FlightWaypointType.JOIN,
|
||||||
position,
|
position,
|
||||||
meters(80) if self.is_helo else self.doctrine.ingress_altitude,
|
self.doctrine.resolve_combat_altitude(self.is_helo),
|
||||||
alt_type,
|
alt_type,
|
||||||
description="Rendezvous with package",
|
description="Rendezvous with package",
|
||||||
pretty_name="Join",
|
pretty_name="Join",
|
||||||
@@ -201,7 +195,7 @@ class WaypointBuilder:
|
|||||||
"REFUEL",
|
"REFUEL",
|
||||||
FlightWaypointType.REFUEL,
|
FlightWaypointType.REFUEL,
|
||||||
position,
|
position,
|
||||||
meters(80) if self.is_helo else self.doctrine.ingress_altitude,
|
self.doctrine.resolve_combat_altitude(self.is_helo),
|
||||||
alt_type,
|
alt_type,
|
||||||
description="Refuel from tanker",
|
description="Refuel from tanker",
|
||||||
pretty_name="Refuel",
|
pretty_name="Refuel",
|
||||||
@@ -229,7 +223,7 @@ class WaypointBuilder:
|
|||||||
"SPLIT",
|
"SPLIT",
|
||||||
FlightWaypointType.SPLIT,
|
FlightWaypointType.SPLIT,
|
||||||
position,
|
position,
|
||||||
meters(80) if self.is_helo else self.doctrine.ingress_altitude,
|
self.doctrine.resolve_combat_altitude(self.is_helo),
|
||||||
alt_type,
|
alt_type,
|
||||||
description="Depart from package",
|
description="Depart from package",
|
||||||
pretty_name="Split",
|
pretty_name="Split",
|
||||||
@@ -249,7 +243,7 @@ class WaypointBuilder:
|
|||||||
"INGRESS",
|
"INGRESS",
|
||||||
ingress_type,
|
ingress_type,
|
||||||
position,
|
position,
|
||||||
meters(60) if self.is_helo else self.doctrine.ingress_altitude,
|
self.doctrine.resolve_combat_altitude(self.is_helo),
|
||||||
alt_type,
|
alt_type,
|
||||||
description=f"INGRESS on {objective.name}",
|
description=f"INGRESS on {objective.name}",
|
||||||
pretty_name=f"INGRESS on {objective.name}",
|
pretty_name=f"INGRESS on {objective.name}",
|
||||||
@@ -294,7 +288,7 @@ class WaypointBuilder:
|
|||||||
f"SEAD on {target.name}",
|
f"SEAD on {target.name}",
|
||||||
target,
|
target,
|
||||||
flyover=True,
|
flyover=True,
|
||||||
altitude=self.doctrine.ingress_altitude,
|
altitude=self.doctrine.combat_altitude,
|
||||||
alt_type="BARO",
|
alt_type="BARO",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -484,7 +478,7 @@ class WaypointBuilder:
|
|||||||
"TARGET",
|
"TARGET",
|
||||||
FlightWaypointType.TARGET_GROUP_LOC,
|
FlightWaypointType.TARGET_GROUP_LOC,
|
||||||
target.position,
|
target.position,
|
||||||
meters(60) if self.is_helo else self.doctrine.ingress_altitude,
|
self.doctrine.resolve_combat_altitude(self.is_helo),
|
||||||
alt_type,
|
alt_type,
|
||||||
description="Escort the package",
|
description="Escort the package",
|
||||||
pretty_name="Target area",
|
pretty_name="Target area",
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ class TheaterState(WorldState["TheaterState"]):
|
|||||||
# Plan enough rounds of CAP that the target has coverage over the expected
|
# Plan enough rounds of CAP that the target has coverage over the expected
|
||||||
# mission duration.
|
# mission duration.
|
||||||
mission_duration = game.settings.desired_player_mission_duration.total_seconds()
|
mission_duration = game.settings.desired_player_mission_duration.total_seconds()
|
||||||
barcap_duration = coalition.doctrine.cap_duration.total_seconds()
|
barcap_duration = coalition.doctrine.cap.duration.total_seconds()
|
||||||
barcap_rounds = math.ceil(mission_duration / barcap_duration)
|
barcap_rounds = math.ceil(mission_duration / barcap_duration)
|
||||||
|
|
||||||
refueling_targets: list[MissionTarget] = []
|
refueling_targets: list[MissionTarget] = []
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import yaml
|
import yaml
|
||||||
from typing import ClassVar
|
from typing import Any, ClassVar
|
||||||
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
@@ -32,18 +32,94 @@ class GroundUnitProcurementRatios:
|
|||||||
return GroundUnitProcurementRatios(r)
|
return GroundUnitProcurementRatios(r)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Helicopter:
|
||||||
|
#: The altitude used for combat section of a flight, overrides the base combat_altitude parameter for helos
|
||||||
|
combat_altitude: Distance
|
||||||
|
|
||||||
|
#: The altitude used for forming up a pacakge. Overrides the base rendezvous_altitude parameter for helos
|
||||||
|
rendezvous_altitude: Distance
|
||||||
|
|
||||||
|
#: Altitude of the nav points (cruise section) of air assault missions.
|
||||||
|
air_assault_nav_altitude: Distance
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_dict(data: dict[str, Any]) -> Helicopter:
|
||||||
|
return Helicopter(
|
||||||
|
combat_altitude=feet(data["combat_altitude_ft_agl"]),
|
||||||
|
rendezvous_altitude=feet(data["rendezvous_altitude_ft_agl"]),
|
||||||
|
air_assault_nav_altitude=feet(data["air_assault_nav_altitude_ft_agl"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Cas:
|
||||||
|
#: The duration that CAP flights will remain on-station.
|
||||||
|
duration: timedelta
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_dict(data: dict[str, Any]) -> Cas:
|
||||||
|
return Cas(duration=timedelta(minutes=data["duration_minutes"]))
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Sweep:
|
||||||
|
#: Length of the sweep / patrol leg
|
||||||
|
distance: Distance
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_dict(data: dict[str, Any]) -> Sweep:
|
||||||
|
return Sweep(
|
||||||
|
distance=nautical_miles(data["distance_nm"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Cap:
|
||||||
|
#: The duration that CAP flights will remain on-station.
|
||||||
|
duration: timedelta
|
||||||
|
|
||||||
|
#: The minimum length of the CAP race track.
|
||||||
|
min_track_length: Distance
|
||||||
|
|
||||||
|
#: The maximum length of the CAP race track.
|
||||||
|
max_track_length: Distance
|
||||||
|
|
||||||
|
#: The minimum distance between the defended position and the *end* of the
|
||||||
|
#: CAP race track.
|
||||||
|
min_distance_from_cp: Distance
|
||||||
|
|
||||||
|
#: The maximum distance between the defended position and the *end* of the
|
||||||
|
#: CAP race track.
|
||||||
|
max_distance_from_cp: Distance
|
||||||
|
|
||||||
|
#: The engagement range of CAP flights. Any enemy aircraft within this range
|
||||||
|
#: of the CAP's current position will be engaged by the CAP.
|
||||||
|
engagement_range: Distance
|
||||||
|
|
||||||
|
#: Defines the range of altitudes CAP racetracks are planned at.
|
||||||
|
min_patrol_altitude: Distance
|
||||||
|
max_patrol_altitude: Distance
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_dict(data: dict[str, Any]) -> Cap:
|
||||||
|
return Cap(
|
||||||
|
duration=timedelta(minutes=data["duration_minutes"]),
|
||||||
|
min_track_length=nautical_miles(data["min_track_length_nm"]),
|
||||||
|
max_track_length=nautical_miles(data["max_track_length_nm"]),
|
||||||
|
min_distance_from_cp=nautical_miles(data["min_distance_from_cp_nm"]),
|
||||||
|
max_distance_from_cp=nautical_miles(data["max_distance_from_cp_nm"]),
|
||||||
|
engagement_range=nautical_miles(data["engagement_range_nm"]),
|
||||||
|
min_patrol_altitude=feet(data["min_patrol_altitude_ft_msl"]),
|
||||||
|
max_patrol_altitude=feet(data["max_patrol_altitude_ft_msl"]),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
class Doctrine:
|
class Doctrine:
|
||||||
|
#: Name of the doctrine, used to assign a doctrine in a faction.
|
||||||
name: str
|
name: str
|
||||||
|
|
||||||
cas: bool
|
|
||||||
cap: bool
|
|
||||||
sead: bool
|
|
||||||
strike: bool
|
|
||||||
antiship: bool
|
|
||||||
|
|
||||||
rendezvous_altitude: Distance
|
|
||||||
|
|
||||||
#: The minimum distance between the departure airfield and the hold point.
|
#: The minimum distance between the departure airfield and the hold point.
|
||||||
hold_distance: Distance
|
hold_distance: Distance
|
||||||
|
|
||||||
@@ -62,42 +138,40 @@ class Doctrine:
|
|||||||
#: target.
|
#: target.
|
||||||
min_ingress_distance: Distance
|
min_ingress_distance: Distance
|
||||||
|
|
||||||
ingress_altitude: Distance
|
#: The altitude used for combat section of a flight.
|
||||||
|
combat_altitude: Distance
|
||||||
|
|
||||||
min_patrol_altitude: Distance
|
#: The altitude used for forming up a pacakge.
|
||||||
max_patrol_altitude: Distance
|
rendezvous_altitude: Distance
|
||||||
pattern_altitude: Distance
|
|
||||||
|
|
||||||
#: The duration that CAP flights will remain on-station.
|
|
||||||
cap_duration: timedelta
|
|
||||||
|
|
||||||
#: The minimum length of the CAP race track.
|
|
||||||
cap_min_track_length: Distance
|
|
||||||
|
|
||||||
#: The maximum length of the CAP race track.
|
|
||||||
cap_max_track_length: Distance
|
|
||||||
|
|
||||||
#: The minimum distance between the defended position and the *end* of the
|
|
||||||
#: CAP race track.
|
|
||||||
cap_min_distance_from_cp: Distance
|
|
||||||
|
|
||||||
#: The maximum distance between the defended position and the *end* of the
|
|
||||||
#: CAP race track.
|
|
||||||
cap_max_distance_from_cp: Distance
|
|
||||||
|
|
||||||
#: The engagement range of CAP flights. Any enemy aircraft within this range
|
|
||||||
#: of the CAP's current position will be engaged by the CAP.
|
|
||||||
cap_engagement_range: Distance
|
|
||||||
|
|
||||||
cas_duration: timedelta
|
|
||||||
|
|
||||||
sweep_distance: Distance
|
|
||||||
|
|
||||||
|
#: Defines prioritization of ground unit purchases.
|
||||||
ground_unit_procurement_ratios: GroundUnitProcurementRatios
|
ground_unit_procurement_ratios: GroundUnitProcurementRatios
|
||||||
|
|
||||||
|
#: Helicopter specific doctrines.
|
||||||
|
helicopter: Helicopter
|
||||||
|
|
||||||
|
#: Doctrine for CAS missions.
|
||||||
|
cas: Cas
|
||||||
|
|
||||||
|
#: Doctrine for CAP missions.
|
||||||
|
cap: Cap
|
||||||
|
|
||||||
|
#: Doctrine for Fighter Sweep missions.
|
||||||
|
sweep: Sweep
|
||||||
|
|
||||||
_by_name: ClassVar[dict[str, Doctrine]] = {}
|
_by_name: ClassVar[dict[str, Doctrine]] = {}
|
||||||
_loaded: ClassVar[bool] = False
|
_loaded: ClassVar[bool] = False
|
||||||
|
|
||||||
|
def resolve_combat_altitude(self, is_helo: bool = False) -> Distance:
|
||||||
|
if is_helo:
|
||||||
|
return self.helicopter.combat_altitude
|
||||||
|
return self.combat_altitude
|
||||||
|
|
||||||
|
def resolve_rendezvous_altitude(self, is_helo: bool = False) -> Distance:
|
||||||
|
if is_helo:
|
||||||
|
return self.helicopter.rendezvous_altitude
|
||||||
|
return self.rendezvous_altitude
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def register(cls, doctrine: Doctrine) -> None:
|
def register(cls, doctrine: Doctrine) -> None:
|
||||||
if doctrine.name in cls._by_name:
|
if doctrine.name in cls._by_name:
|
||||||
@@ -127,11 +201,6 @@ class Doctrine:
|
|||||||
cls.register(
|
cls.register(
|
||||||
Doctrine(
|
Doctrine(
|
||||||
name=data["name"],
|
name=data["name"],
|
||||||
cap=data["cap"],
|
|
||||||
cas=data["cas"],
|
|
||||||
sead=data["sead"],
|
|
||||||
strike=data["strike"],
|
|
||||||
antiship=data["antiship"],
|
|
||||||
rendezvous_altitude=feet(data["rendezvous_altitude_ft_msl"]),
|
rendezvous_altitude=feet(data["rendezvous_altitude_ft_msl"]),
|
||||||
hold_distance=nautical_miles(data["hold_distance_nm"]),
|
hold_distance=nautical_miles(data["hold_distance_nm"]),
|
||||||
push_distance=nautical_miles(data["push_distance_nm"]),
|
push_distance=nautical_miles(data["push_distance_nm"]),
|
||||||
@@ -142,31 +211,14 @@ class Doctrine:
|
|||||||
min_ingress_distance=nautical_miles(
|
min_ingress_distance=nautical_miles(
|
||||||
data["min_ingress_distance_nm"]
|
data["min_ingress_distance_nm"]
|
||||||
),
|
),
|
||||||
ingress_altitude=feet(data["ingress_altitude_ft_msl"]),
|
combat_altitude=feet(data["combat_altitude_ft_msl"]),
|
||||||
min_patrol_altitude=feet(data["min_patrol_altitude_ft_msl"]),
|
|
||||||
max_patrol_altitude=feet(data["max_patrol_altitude_ft_msl"]),
|
|
||||||
pattern_altitude=feet(data["pattern_altitude_ft_msl"]),
|
|
||||||
cap_duration=timedelta(minutes=data["cap_duration_minutes"]),
|
|
||||||
cap_min_track_length=nautical_miles(
|
|
||||||
data["cap_min_track_length_nm"]
|
|
||||||
),
|
|
||||||
cap_max_track_length=nautical_miles(
|
|
||||||
data["cap_max_track_length_nm"]
|
|
||||||
),
|
|
||||||
cap_min_distance_from_cp=nautical_miles(
|
|
||||||
data["cap_min_distance_from_cp_nm"]
|
|
||||||
),
|
|
||||||
cap_max_distance_from_cp=nautical_miles(
|
|
||||||
data["cap_max_distance_from_cp_nm"]
|
|
||||||
),
|
|
||||||
cap_engagement_range=nautical_miles(
|
|
||||||
data["cap_engagement_range_nm"]
|
|
||||||
),
|
|
||||||
cas_duration=timedelta(minutes=data["cas_duration_minutes"]),
|
|
||||||
sweep_distance=nautical_miles(data["sweep_distance_nm"]),
|
|
||||||
ground_unit_procurement_ratios=GroundUnitProcurementRatios.from_dict(
|
ground_unit_procurement_ratios=GroundUnitProcurementRatios.from_dict(
|
||||||
data["ground_unit_procurement_ratios"]
|
data["ground_unit_procurement_ratios"]
|
||||||
),
|
),
|
||||||
|
helicopter=Helicopter.from_dict(data["helicopter"]),
|
||||||
|
cas=Cas.from_dict(data["cas"]),
|
||||||
|
cap=Cap.from_dict(data["cap"]),
|
||||||
|
sweep=Sweep.from_dict(data["sweep"]),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
cls._loaded = True
|
cls._loaded = True
|
||||||
|
|||||||
@@ -517,6 +517,7 @@ class AircraftType(UnitType[Type[FlyingType]]):
|
|||||||
LaserCodeConfig.from_yaml(d) for d in data.get("laser_codes", [])
|
LaserCodeConfig.from_yaml(d) for d in data.get("laser_codes", [])
|
||||||
],
|
],
|
||||||
use_f15e_waypoint_names=data.get("use_f15e_waypoint_names", False),
|
use_f15e_waypoint_names=data.get("use_f15e_waypoint_names", False),
|
||||||
|
hit_points=data.get("hit_points", 1),
|
||||||
)
|
)
|
||||||
|
|
||||||
def __hash__(self) -> int:
|
def __hash__(self) -> int:
|
||||||
|
|||||||
@@ -133,4 +133,5 @@ class GroundUnitType(UnitType[Type[VehicleType]]):
|
|||||||
data.get("skynet_properties", {})
|
data.get("skynet_properties", {})
|
||||||
),
|
),
|
||||||
reversed_heading=data.get("reversed_heading", False),
|
reversed_heading=data.get("reversed_heading", False),
|
||||||
|
hit_points=data.get("hit_points", 1),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -79,4 +79,5 @@ class ShipUnitType(UnitType[Type[ShipType]]):
|
|||||||
manufacturer=data.get("manufacturer", "No data."),
|
manufacturer=data.get("manufacturer", "No data."),
|
||||||
role=data.get("role", "No data."),
|
role=data.get("role", "No data."),
|
||||||
price=data["price"],
|
price=data["price"],
|
||||||
|
hit_points=data.get("hit_points", 1),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ class UnitType(ABC, Generic[DcsUnitTypeT]):
|
|||||||
role: str
|
role: str
|
||||||
price: int
|
price: int
|
||||||
unit_class: UnitClass
|
unit_class: UnitClass
|
||||||
|
hit_points: int
|
||||||
|
|
||||||
_loaded: ClassVar[bool] = False
|
_loaded: ClassVar[bool] = False
|
||||||
|
|
||||||
|
|||||||
@@ -300,6 +300,8 @@ class Faction:
|
|||||||
self.remove_aircraft("Su-57")
|
self.remove_aircraft("Su-57")
|
||||||
if not mod_settings.ov10a_bronco:
|
if not mod_settings.ov10a_bronco:
|
||||||
self.remove_aircraft("Bronco-OV-10A")
|
self.remove_aircraft("Bronco-OV-10A")
|
||||||
|
if not mod_settings.superhornet:
|
||||||
|
self.remove_aircraft("Super-Hornet")
|
||||||
# frenchpack
|
# frenchpack
|
||||||
if not mod_settings.frenchpack:
|
if not mod_settings.frenchpack:
|
||||||
self.remove_vehicle("AMX10RCR")
|
self.remove_vehicle("AMX10RCR")
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ class ModSettings:
|
|||||||
frenchpack: bool = False
|
frenchpack: bool = False
|
||||||
high_digit_sams: bool = False
|
high_digit_sams: bool = False
|
||||||
ov10a_bronco: bool = False
|
ov10a_bronco: bool = False
|
||||||
|
superhornet: bool = False
|
||||||
|
|
||||||
def save_player_settings(self) -> None:
|
def save_player_settings(self) -> None:
|
||||||
"""Saves the player's global settings to the user directory."""
|
"""Saves the player's global settings to the user directory."""
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ class ThreatZones:
|
|||||||
cls, doctrine: Doctrine, control_point: ControlPoint
|
cls, doctrine: Doctrine, control_point: ControlPoint
|
||||||
) -> Distance:
|
) -> Distance:
|
||||||
cap_threat_range = (
|
cap_threat_range = (
|
||||||
doctrine.cap_max_distance_from_cp + doctrine.cap_engagement_range
|
doctrine.cap.max_distance_from_cp + doctrine.cap.engagement_range
|
||||||
)
|
)
|
||||||
opposing_airfield = cls.closest_enemy_airbase(
|
opposing_airfield = cls.closest_enemy_airbase(
|
||||||
control_point, cap_threat_range * 2
|
control_point, cap_threat_range * 2
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
MAJOR_VERSION = 10
|
MAJOR_VERSION = 11
|
||||||
MINOR_VERSION = 0
|
MINOR_VERSION = 0
|
||||||
MICRO_VERSION = 0
|
MICRO_VERSION = 0
|
||||||
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))
|
||||||
|
|||||||
@@ -204,6 +204,7 @@ class NewGameWizard(QtWidgets.QWizard):
|
|||||||
ov10a_bronco=self.field("ov10a_bronco"),
|
ov10a_bronco=self.field("ov10a_bronco"),
|
||||||
frenchpack=self.field("frenchpack"),
|
frenchpack=self.field("frenchpack"),
|
||||||
high_digit_sams=self.field("high_digit_sams"),
|
high_digit_sams=self.field("high_digit_sams"),
|
||||||
|
superhornet=self.field("superhornet"),
|
||||||
)
|
)
|
||||||
mod_settings.save_player_settings()
|
mod_settings.save_player_settings()
|
||||||
|
|
||||||
@@ -826,6 +827,10 @@ class GeneratorOptions(QtWidgets.QWizardPage):
|
|||||||
high_digit_sams.setChecked(mod_settings.high_digit_sams)
|
high_digit_sams.setChecked(mod_settings.high_digit_sams)
|
||||||
self.registerField("high_digit_sams", high_digit_sams)
|
self.registerField("high_digit_sams", high_digit_sams)
|
||||||
|
|
||||||
|
superhornet = QtWidgets.QCheckBox()
|
||||||
|
superhornet.setChecked(mod_settings.superhornet)
|
||||||
|
self.registerField("superhornet", superhornet)
|
||||||
|
|
||||||
modHelpText = QtWidgets.QLabel(
|
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>"
|
"<p>Select the mods you have installed. If your chosen factions support them, you'll be able to use these mods in your campaign.</p>"
|
||||||
)
|
)
|
||||||
@@ -877,6 +882,11 @@ class GeneratorOptions(QtWidgets.QWizardPage):
|
|||||||
modLayout.addWidget(QtWidgets.QLabel("High Digit SAMs"), modLayout_row, 0)
|
modLayout.addWidget(QtWidgets.QLabel("High Digit SAMs"), modLayout_row, 0)
|
||||||
modLayout.addWidget(high_digit_sams, modLayout_row, 1)
|
modLayout.addWidget(high_digit_sams, modLayout_row, 1)
|
||||||
modSettingsGroup.setLayout(modLayout)
|
modSettingsGroup.setLayout(modLayout)
|
||||||
|
modLayout_row += 1
|
||||||
|
modLayout.addWidget(QtWidgets.QLabel("Super Hornet"), modLayout_row, 0)
|
||||||
|
modLayout.addWidget(superhornet, modLayout_row, 1)
|
||||||
|
modSettingsGroup.setLayout(modLayout)
|
||||||
|
modLayout_row += 1
|
||||||
|
|
||||||
mlayout = QVBoxLayout()
|
mlayout = QVBoxLayout()
|
||||||
mlayout.addWidget(generatorSettingsGroup)
|
mlayout.addWidget(generatorSettingsGroup)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ httptools==0.6.1
|
|||||||
identify==2.5.32
|
identify==2.5.32
|
||||||
idna==3.6
|
idna==3.6
|
||||||
iniconfig==2.0.0
|
iniconfig==2.0.0
|
||||||
Jinja2==3.1.2
|
Jinja2==3.1.3
|
||||||
MarkupSafe==2.1.3
|
MarkupSafe==2.1.3
|
||||||
mypy==1.7.1
|
mypy==1.7.1
|
||||||
mypy-extensions==1.0.0
|
mypy-extensions==1.0.0
|
||||||
@@ -29,14 +29,14 @@ numpy==1.26.2
|
|||||||
packaging==23.2
|
packaging==23.2
|
||||||
pathspec==0.11.2
|
pathspec==0.11.2
|
||||||
pefile==2023.2.7
|
pefile==2023.2.7
|
||||||
Pillow==10.0.1
|
Pillow==10.2.0
|
||||||
platformdirs==4.0.0
|
platformdirs==4.0.0
|
||||||
pluggy==1.3.0
|
pluggy==1.3.0
|
||||||
pre-commit==3.5.0
|
pre-commit==3.5.0
|
||||||
pydantic==2.5.2
|
pydantic==2.5.2
|
||||||
pydantic-settings==2.1.0
|
pydantic-settings==2.1.0
|
||||||
pydantic_core==2.14.5
|
pydantic_core==2.14.5
|
||||||
pydcs @ git+https://github.com/pydcs/dcs@1092fc419d3f879e8e7951b25e15d8b7c9938627
|
pydcs @ git+https://github.com/pydcs/dcs@7eeec23ea428846ebbbd0ea4c746f8eafea04e0d
|
||||||
pyinstaller==5.13.1
|
pyinstaller==5.13.1
|
||||||
pyinstaller-hooks-contrib==2023.6
|
pyinstaller-hooks-contrib==2023.6
|
||||||
pyproj==3.6.1
|
pyproj==3.6.1
|
||||||
|
|||||||
@@ -46,6 +46,11 @@ squadrons:
|
|||||||
size: 8
|
size: 8
|
||||||
# Hatzerim (141)
|
# Hatzerim (141)
|
||||||
7:
|
7:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- A-10C Thunderbolt II (Suite 7)
|
||||||
|
size: 6
|
||||||
- primary: Escort
|
- primary: Escort
|
||||||
secondary: any
|
secondary: any
|
||||||
aircraft:
|
aircraft:
|
||||||
@@ -85,20 +90,15 @@ squadrons:
|
|||||||
- UH-60A
|
- UH-60A
|
||||||
size: 4
|
size: 4
|
||||||
# Nevatim (106)
|
# Nevatim (106)
|
||||||
8:
|
# 8:
|
||||||
- primary: AEW&C
|
# - primary: AEW&C
|
||||||
aircraft:
|
# aircraft:
|
||||||
- E-3A
|
# - E-3A
|
||||||
size: 2
|
# size: 2
|
||||||
- primary: Refueling
|
# - primary: Refueling
|
||||||
aircraft:
|
# aircraft:
|
||||||
- KC-135 Stratotanker
|
# - KC-135 Stratotanker
|
||||||
size: 2
|
# size: 2
|
||||||
- primary: CAS
|
|
||||||
secondary: air-to-ground
|
|
||||||
aircraft:
|
|
||||||
- A-10C Thunderbolt II (Suite 7)
|
|
||||||
size: 8
|
|
||||||
# Melez (30)
|
# Melez (30)
|
||||||
5:
|
5:
|
||||||
- primary: CAS
|
- primary: CAS
|
||||||
|
|||||||
Binary file not shown.
@@ -29,7 +29,7 @@ performance: 1
|
|||||||
recommended_start_date: 2008-08-08
|
recommended_start_date: 2008-08-08
|
||||||
version: "11.0"
|
version: "11.0"
|
||||||
control_points:
|
control_points:
|
||||||
From Incirlik:
|
Squadrons from Incirlik:
|
||||||
ferry_only: true
|
ferry_only: true
|
||||||
squadrons:
|
squadrons:
|
||||||
Blue CV-1:
|
Blue CV-1:
|
||||||
@@ -68,17 +68,17 @@ squadrons:
|
|||||||
aircraft:
|
aircraft:
|
||||||
- AV-8B Harrier II Night Attack
|
- AV-8B Harrier II Night Attack
|
||||||
size: 20
|
size: 20
|
||||||
From Incirlik:
|
Squadrons from Incirlik:
|
||||||
- primary: CAS
|
- primary: CAS
|
||||||
secondary: air-to-ground
|
secondary: air-to-ground
|
||||||
aircraft:
|
aircraft:
|
||||||
- AH-64D Apache Longbow
|
- AH-64D Apache Longbow
|
||||||
size: 8
|
size: 4
|
||||||
- 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)
|
||||||
size: 8
|
size: 6
|
||||||
- primary: DEAD
|
- primary: DEAD
|
||||||
secondary: any
|
secondary: any
|
||||||
aircraft:
|
aircraft:
|
||||||
@@ -93,6 +93,18 @@ squadrons:
|
|||||||
aircraft:
|
aircraft:
|
||||||
- KC-135 Stratotanker
|
- KC-135 Stratotanker
|
||||||
size: 1
|
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
|
#FARPs
|
||||||
UNOMIG Sector HQ:
|
UNOMIG Sector HQ:
|
||||||
- primary: Transport
|
- primary: Transport
|
||||||
@@ -105,7 +117,7 @@ squadrons:
|
|||||||
secondary: any
|
secondary: any
|
||||||
aircraft:
|
aircraft:
|
||||||
- Mi-24P Hind-F
|
- Mi-24P Hind-F
|
||||||
size: 8
|
size: 4
|
||||||
#Sukhumi-Babushara
|
#Sukhumi-Babushara
|
||||||
20:
|
20:
|
||||||
- primary: TARCAP
|
- primary: TARCAP
|
||||||
@@ -135,6 +147,13 @@ squadrons:
|
|||||||
aircraft:
|
aircraft:
|
||||||
- Su-34 Fullback
|
- Su-34 Fullback
|
||||||
size: 20
|
size: 20
|
||||||
|
#Maykop-Khanskaya
|
||||||
|
16:
|
||||||
|
- primary: Anti-ship
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Tu-22M3 Backfire-C
|
||||||
|
size: 20
|
||||||
#Anapa-Vityazevo
|
#Anapa-Vityazevo
|
||||||
12:
|
12:
|
||||||
- primary: Strike
|
- primary: Strike
|
||||||
@@ -147,9 +166,4 @@ squadrons:
|
|||||||
secondary: any
|
secondary: any
|
||||||
aircraft:
|
aircraft:
|
||||||
- SU-33 Flanker-D
|
- SU-33 Flanker-D
|
||||||
size: 18
|
size: 16
|
||||||
#I am aware there is no Russian LHA. This is just for campaign inversion.
|
|
||||||
Red LHA:
|
|
||||||
- primary: BAI
|
|
||||||
secondary: air-to-ground
|
|
||||||
size: 20
|
|
||||||
@@ -49,7 +49,7 @@ squadrons:
|
|||||||
- primary: BAI
|
- primary: BAI
|
||||||
secondary: air-to-ground
|
secondary: air-to-ground
|
||||||
aircraft:
|
aircraft:
|
||||||
- 81st FS
|
- A-10C Thunderbolt II (Suite 7)
|
||||||
size: 10
|
size: 10
|
||||||
#USAF A-10CI
|
#USAF A-10CI
|
||||||
#BLUFOR CVN
|
#BLUFOR CVN
|
||||||
|
|||||||
BIN
resources/campaigns/scenic_merge.miz
Normal file
BIN
resources/campaigns/scenic_merge.miz
Normal file
Binary file not shown.
387
resources/campaigns/scenic_merge.yaml
Normal file
387
resources/campaigns/scenic_merge.yaml
Normal file
@@ -0,0 +1,387 @@
|
|||||||
|
---
|
||||||
|
name: Persian Gulf - Scenic Route Merged
|
||||||
|
theater: Persian Gulf
|
||||||
|
authors: Fuzzle, merged by tmz42
|
||||||
|
description: <p>A merge of the two Scenic Route campaigns. <p><strong>Backstory:</strong> Iran has declared war on all US forces in the Gulf resulting in all local allies withdrawing their support for American troops. A carrier group, aided by USAF units stationed on the south bank must pacify Iran's coastal defences and push inland. Iran has assembled the full might of its air and ground divisions to defend their heartland.</p>
|
||||||
|
version: "11.0"
|
||||||
|
advanced_iads: true
|
||||||
|
recommended_player_faction: USA 2005
|
||||||
|
recommended_enemy_faction: Iran 2015
|
||||||
|
miz: scenic_merge.miz
|
||||||
|
performance: 3
|
||||||
|
recommended_start_date: 2005-06-29
|
||||||
|
recommended_player_money: 2000
|
||||||
|
recommended_enemy_money: 1000
|
||||||
|
recommended_player_income_multiplier: 1.5
|
||||||
|
recommended_enemy_income_multiplier: 0.7
|
||||||
|
squadrons:
|
||||||
|
#BLUFOR CVN
|
||||||
|
Naval-3:
|
||||||
|
# Pukin' Dogs F-14
|
||||||
|
- primary: BARCAP
|
||||||
|
secondary: air-to-air
|
||||||
|
aircraft:
|
||||||
|
- VF-143
|
||||||
|
size: 14
|
||||||
|
# Golden Dragons F/A-18
|
||||||
|
- primary: SEAD
|
||||||
|
secondary: any
|
||||||
|
aircraft:
|
||||||
|
- VFA-192
|
||||||
|
size: 12
|
||||||
|
# Thunderbolts F/A-18C
|
||||||
|
- primary: DEAD
|
||||||
|
secondary: any
|
||||||
|
aircraft:
|
||||||
|
- VMFA-251
|
||||||
|
size: 12
|
||||||
|
# Hawkeye
|
||||||
|
- primary: AEW&C
|
||||||
|
aircraft:
|
||||||
|
- VAW-125
|
||||||
|
size: 2
|
||||||
|
# S-3 Tankers
|
||||||
|
- primary: Refueling
|
||||||
|
aircraft:
|
||||||
|
- VS-35 (Tanker)
|
||||||
|
size: 4
|
||||||
|
# BLUFOR LHA
|
||||||
|
Naval-4:
|
||||||
|
- primary: BAI
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- VMA-223
|
||||||
|
size: 12
|
||||||
|
- primary: Transport
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- HMLA-169 (UH-1H)
|
||||||
|
size: 8
|
||||||
|
# Al-Dhafra AFB
|
||||||
|
4:
|
||||||
|
#USAF F-16C Gamblers
|
||||||
|
- primary: SEAD
|
||||||
|
secondary: any
|
||||||
|
aircraft:
|
||||||
|
- 77th FS
|
||||||
|
size: 12
|
||||||
|
- primary: Strike
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- B-1B Lancer
|
||||||
|
size: 6
|
||||||
|
- primary: Refueling
|
||||||
|
size: 2
|
||||||
|
aircraft:
|
||||||
|
- 18th Air Refueling Squadron
|
||||||
|
- primary: Transport
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- HMLA-169 (UH-1H)
|
||||||
|
size: 4
|
||||||
|
- primary: AEW&C
|
||||||
|
aircraft:
|
||||||
|
- E-3
|
||||||
|
size: 2
|
||||||
|
- primary: BARCAP
|
||||||
|
secondary: any
|
||||||
|
aircraft:
|
||||||
|
- 493rd FS
|
||||||
|
#USAF F-15C
|
||||||
|
# Al-Minhab AFB
|
||||||
|
12:
|
||||||
|
- primary: Transport
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- 101st Combat Aviation Brigade
|
||||||
|
#US Army UH-60
|
||||||
|
size: 6
|
||||||
|
- primary: SEAD
|
||||||
|
secondary: any
|
||||||
|
aircraft:
|
||||||
|
- 480th FS
|
||||||
|
#USAF F-16C
|
||||||
|
- primary: Strike
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
|
# Strike Eagle (Chiefs?)
|
||||||
|
- primary: BAI
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- A-10C Thunderbolt II (Suite 7)
|
||||||
|
#USAF A-10CII
|
||||||
|
- primary: Transport
|
||||||
|
aircraft:
|
||||||
|
- C-130
|
||||||
|
size: 8
|
||||||
|
# Kish Intl
|
||||||
|
24:
|
||||||
|
- primary: AEW&C
|
||||||
|
aircraft:
|
||||||
|
- A-50
|
||||||
|
size: 1
|
||||||
|
- primary: BARCAP
|
||||||
|
secondary: any
|
||||||
|
aircraft:
|
||||||
|
- F-14A Tomcat (Block 135-GR Late)
|
||||||
|
size: 12
|
||||||
|
- primary: Strike
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Su-24MK Fencer-D
|
||||||
|
size: 12
|
||||||
|
# Havadarya
|
||||||
|
9:
|
||||||
|
- primary: BARCAP
|
||||||
|
secondary: any
|
||||||
|
aircraft:
|
||||||
|
- F-4E Phantom II
|
||||||
|
size: 6
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Su-25 Frogfoot
|
||||||
|
size: 6
|
||||||
|
# Bandar Abbas Intl
|
||||||
|
2:
|
||||||
|
- primary: TARCAP
|
||||||
|
secondary: any
|
||||||
|
aircraft:
|
||||||
|
- F-5E Tiger II
|
||||||
|
size: 6
|
||||||
|
- primary: BARCAP
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- MiG-29A Fulcrum-A
|
||||||
|
size: 6
|
||||||
|
- primary: Strike
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Su-24MK
|
||||||
|
size: 6
|
||||||
|
# OPFOR First FOB
|
||||||
|
FOB Seerik:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24V Hind-E
|
||||||
|
size: 2
|
||||||
|
# OPFOR Second FOB
|
||||||
|
FOB Kohnehshahr:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24V Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR Third FOB
|
||||||
|
FOB Khvosh:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-28N Havoc
|
||||||
|
size: 2
|
||||||
|
# OPFOR Last FOB
|
||||||
|
FOB Charak:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-28N Havoc
|
||||||
|
size: 2
|
||||||
|
# BLUFOR Start FOB
|
||||||
|
FOB Anguran:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24V Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L1F1
|
||||||
|
FOB Tang-e Dalan:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L1F2
|
||||||
|
FOB Fars Border:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L1F2 split
|
||||||
|
FOB Bikuyeh:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-28N Havoc
|
||||||
|
size: 2
|
||||||
|
# Lar
|
||||||
|
11:
|
||||||
|
- primary: BARCAP
|
||||||
|
secondary: air-to-air
|
||||||
|
aircraft:
|
||||||
|
- MiG-21bis Fishbed-N
|
||||||
|
size: 4
|
||||||
|
# OPFOR L2F1
|
||||||
|
FOB Mansurabad:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L2F2
|
||||||
|
FOB Jahrom:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L2F3
|
||||||
|
FOB Tower:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L2F3 split
|
||||||
|
FOB Nouderan:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-28N Havoc
|
||||||
|
size: 2
|
||||||
|
# Shiraz Intl
|
||||||
|
19:
|
||||||
|
- primary: AEW&C
|
||||||
|
aircraft:
|
||||||
|
- A-50
|
||||||
|
size: 2
|
||||||
|
- primary: Refueling
|
||||||
|
aircraft:
|
||||||
|
- IL-78M
|
||||||
|
size: 2
|
||||||
|
- primary: TARCAP
|
||||||
|
secondary: air-to-air
|
||||||
|
aircraft:
|
||||||
|
- MiG-29A Fulcrum-A
|
||||||
|
size: 12
|
||||||
|
- primary: Strike
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Su-22M4 Fitter-K
|
||||||
|
size: 6
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 4
|
||||||
|
- primary: SEAD
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Su-25T Frogfoot
|
||||||
|
size: 6
|
||||||
|
# OPFOR L3F1
|
||||||
|
FOB Kherameh:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L3F2
|
||||||
|
FOB Tashk:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L3F3
|
||||||
|
FOB Chahak:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L3F4
|
||||||
|
FOB Plainhold:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L3F4 split
|
||||||
|
FOB Robat:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L3F5
|
||||||
|
FOB Plainguard:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L3F6
|
||||||
|
FOB Hasanabad:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L3F6 split
|
||||||
|
FOB Najafabad:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-28N Havoc
|
||||||
|
size: 2
|
||||||
|
# OPFOR L3F7
|
||||||
|
FOB Kabutarkhan:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# OPFOR L3F8
|
||||||
|
FOB Sa'di:
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
|
# Kerman
|
||||||
|
18:
|
||||||
|
- primary: AEW&C
|
||||||
|
aircraft:
|
||||||
|
- A-50
|
||||||
|
size: 2
|
||||||
|
- primary: Refueling
|
||||||
|
aircraft:
|
||||||
|
- IL-78M
|
||||||
|
size: 2
|
||||||
|
- primary: Transport
|
||||||
|
aircraft:
|
||||||
|
- IL-78MD
|
||||||
|
size: 2
|
||||||
|
- primary: BARCAP
|
||||||
|
secondary: any
|
||||||
|
aircraft:
|
||||||
|
- F-14A Tomcat (Block 135-GR Late)
|
||||||
|
size: 12
|
||||||
|
- primary: TARCAP
|
||||||
|
secondary: air-to-air
|
||||||
|
aircraft:
|
||||||
|
- MiG-29A Fulcrum-A
|
||||||
|
size: 12
|
||||||
|
- primary: Strike
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Su-24MK Fencer-D
|
||||||
|
size: 6
|
||||||
|
- primary: CAS
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- Mi-24P Hind-F
|
||||||
|
size: 2
|
||||||
Binary file not shown.
@@ -13,9 +13,6 @@ recommended_player_money: 900
|
|||||||
recommended_enemy_money: 1200
|
recommended_enemy_money: 1200
|
||||||
recommended_player_income_multiplier: 1.0
|
recommended_player_income_multiplier: 1.0
|
||||||
recommended_enemy_income_multiplier: 0.6
|
recommended_enemy_income_multiplier: 0.6
|
||||||
control_points:
|
|
||||||
From Turkey:
|
|
||||||
ferry_only: true
|
|
||||||
squadrons:
|
squadrons:
|
||||||
#BLUFOR CVN
|
#BLUFOR CVN
|
||||||
Naval-1:
|
Naval-1:
|
||||||
@@ -62,8 +59,8 @@ squadrons:
|
|||||||
aircraft:
|
aircraft:
|
||||||
- HMLA-169 (AH-1W)
|
- HMLA-169 (AH-1W)
|
||||||
size: 6
|
size: 6
|
||||||
# Off-theatre forces
|
# Incirlik
|
||||||
From Turkey:
|
16:
|
||||||
- primary: Strike
|
- primary: Strike
|
||||||
secondary: air-to-ground
|
secondary: air-to-ground
|
||||||
aircraft:
|
aircraft:
|
||||||
@@ -73,8 +70,25 @@ squadrons:
|
|||||||
- 960th AAC Squadron
|
- 960th AAC Squadron
|
||||||
#USAF E-3A
|
#USAF E-3A
|
||||||
size: 2
|
size: 2
|
||||||
|
- primary: Strike
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- F-15E Strike Eagle (Suite 4+)
|
||||||
|
size: 12
|
||||||
|
- primary: SEAD
|
||||||
|
secondary: any
|
||||||
|
aircraft:
|
||||||
|
- 77th FS
|
||||||
|
#USAF F-16C
|
||||||
|
size: 12
|
||||||
# King Hussein Air College, BLUFOR start
|
# King Hussein Air College, BLUFOR start
|
||||||
19:
|
19:
|
||||||
|
- primary: BAI
|
||||||
|
secondary: air-to-ground
|
||||||
|
aircraft:
|
||||||
|
- A-10C Thunderbolt II (Suite 7)
|
||||||
|
#USAF A-10CII
|
||||||
|
size: 8
|
||||||
- primary: BARCAP
|
- primary: BARCAP
|
||||||
secondary: air-to-air
|
secondary: air-to-air
|
||||||
aircraft:
|
aircraft:
|
||||||
@@ -85,11 +99,6 @@ squadrons:
|
|||||||
aircraft:
|
aircraft:
|
||||||
- 23rd FS
|
- 23rd FS
|
||||||
#USAF F-16C
|
#USAF F-16C
|
||||||
- primary: BAI
|
|
||||||
secondary: air-to-ground
|
|
||||||
aircraft:
|
|
||||||
- 81st FS
|
|
||||||
#USAF A-10CII
|
|
||||||
- primary: Transport
|
- primary: Transport
|
||||||
secondary: air-to-ground
|
secondary: air-to-ground
|
||||||
aircraft:
|
aircraft:
|
||||||
|
|||||||
@@ -2,30 +2,6 @@ local unitPayloads = {
|
|||||||
["name"] = "AH-64D_BLK_II",
|
["name"] = "AH-64D_BLK_II",
|
||||||
["payloads"] = {
|
["payloads"] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
["name"] = "Liberation CAS",
|
|
||||||
["pylons"] = {
|
|
||||||
[1] = {
|
|
||||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
|
||||||
["num"] = 3,
|
|
||||||
},
|
|
||||||
[2] = {
|
|
||||||
["CLSID"] = "{M299_4xAGM_114L}",
|
|
||||||
["num"] = 4,
|
|
||||||
},
|
|
||||||
[3] = {
|
|
||||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
|
||||||
["num"] = 2,
|
|
||||||
},
|
|
||||||
[4] = {
|
|
||||||
["CLSID"] = "{M299_4xAGM_114L}",
|
|
||||||
["num"] = 1,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
["tasks"] = {
|
|
||||||
[1] = 31,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
[2] = {
|
|
||||||
["displayName"] = "Liberation BAI",
|
["displayName"] = "Liberation BAI",
|
||||||
["name"] = "Liberation BAI",
|
["name"] = "Liberation BAI",
|
||||||
["pylons"] = {
|
["pylons"] = {
|
||||||
@@ -45,12 +21,72 @@ local unitPayloads = {
|
|||||||
["CLSID"] = "{M299_4xAGM_114L}",
|
["CLSID"] = "{M299_4xAGM_114L}",
|
||||||
["num"] = 1,
|
["num"] = 1,
|
||||||
},
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{AN_APG_78}",
|
||||||
|
["num"] = 6,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 31,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["name"] = "Liberation OCA/Aircraft",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||||
|
["num"] = 2,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{M261_M229}",
|
||||||
|
["num"] = 4,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{M261_M229}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{AN_APG_78}",
|
||||||
|
["num"] = 6,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
[1] = 31,
|
[1] = 31,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
[3] = {
|
[3] = {
|
||||||
|
["name"] = "Liberation CAS",
|
||||||
|
["pylons"] = {
|
||||||
|
[1] = {
|
||||||
|
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||||
|
["num"] = 3,
|
||||||
|
},
|
||||||
|
[2] = {
|
||||||
|
["CLSID"] = "{M299_4xAGM_114L}",
|
||||||
|
["num"] = 4,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
|
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||||
|
["num"] = 2,
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
|
["CLSID"] = "{M299_4xAGM_114L}",
|
||||||
|
["num"] = 1,
|
||||||
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{AN_APG_78}",
|
||||||
|
["num"] = 6,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
["tasks"] = {
|
||||||
|
[1] = 31,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[4] = {
|
||||||
["displayName"] = "Liberation DEAD",
|
["displayName"] = "Liberation DEAD",
|
||||||
["name"] = "Liberation DEAD",
|
["name"] = "Liberation DEAD",
|
||||||
["pylons"] = {
|
["pylons"] = {
|
||||||
@@ -70,30 +106,39 @@ local unitPayloads = {
|
|||||||
["CLSID"] = "{M299_4xAGM_114L}",
|
["CLSID"] = "{M299_4xAGM_114L}",
|
||||||
["num"] = 1,
|
["num"] = 1,
|
||||||
},
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{AN_APG_78}",
|
||||||
|
["num"] = 6,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
[1] = 31,
|
[1] = 31,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
[4] = {
|
[5] = {
|
||||||
["name"] = "Liberation OCA/Aircraft",
|
["displayName"] = "Liberation Escort",
|
||||||
|
["name"] = "Liberation Escort",
|
||||||
["pylons"] = {
|
["pylons"] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||||
["num"] = 3,
|
["num"] = 3,
|
||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
|
["CLSID"] = "{M299_4xAGM_114L}",
|
||||||
|
["num"] = 4,
|
||||||
|
},
|
||||||
|
[3] = {
|
||||||
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
["CLSID"] = "{88D18A5E-99C8-4B04-B40B-1C02F2018B6E}",
|
||||||
["num"] = 2,
|
["num"] = 2,
|
||||||
},
|
},
|
||||||
[3] = {
|
|
||||||
["CLSID"] = "{M261_M229}",
|
|
||||||
["num"] = 4,
|
|
||||||
},
|
|
||||||
[4] = {
|
[4] = {
|
||||||
["CLSID"] = "{M261_M229}",
|
["CLSID"] = "{M299_4xAGM_114L}",
|
||||||
["num"] = 1,
|
["num"] = 1,
|
||||||
},
|
},
|
||||||
|
[5] = {
|
||||||
|
["CLSID"] = "{AN_APG_78}",
|
||||||
|
["num"] = 6,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
[1] = 31,
|
[1] = 31,
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ local unitPayloads = {
|
|||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
[3] = {
|
[3] = {
|
||||||
["CLSID"] = "{FAS}",
|
["CLSID"] = "{FAS}",
|
||||||
["num"] = 5,
|
["num"] = 3,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
@@ -30,11 +30,11 @@ local unitPayloads = {
|
|||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
[3] = {
|
[3] = {
|
||||||
["CLSID"] = "{FAS}",
|
["CLSID"] = "{FAS}",
|
||||||
["num"] = 5,
|
["num"] = 3,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
@@ -50,11 +50,11 @@ local unitPayloads = {
|
|||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
[3] = {
|
[3] = {
|
||||||
["CLSID"] = "{FAS}",
|
["CLSID"] = "{FAS}",
|
||||||
["num"] = 5,
|
["num"] = 3,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
@@ -70,11 +70,11 @@ local unitPayloads = {
|
|||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
[3] = {
|
[3] = {
|
||||||
["CLSID"] = "{FAS}",
|
["CLSID"] = "{FAS}",
|
||||||
["num"] = 5,
|
["num"] = 3,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
@@ -90,11 +90,11 @@ local unitPayloads = {
|
|||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
[3] = {
|
[3] = {
|
||||||
["CLSID"] = "{FAS}",
|
["CLSID"] = "{FAS}",
|
||||||
["num"] = 5,
|
["num"] = 3,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
|
|||||||
@@ -5,28 +5,20 @@ local unitPayloads = {
|
|||||||
["name"] = "CAS",
|
["name"] = "CAS",
|
||||||
["pylons"] = {
|
["pylons"] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
["CLSID"] = "{HOT3D}",
|
["CLSID"] = "{HOT3_R2_M}",
|
||||||
["num"] = 1,
|
["num"] = 1,
|
||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
["CLSID"] = "{HOT3G}",
|
["CLSID"] = "{HOT3_L2_M}",
|
||||||
["num"] = 2,
|
["num"] = 2,
|
||||||
},
|
},
|
||||||
[3] = {
|
[3] = {
|
||||||
["CLSID"] = "{HOT3D}",
|
["CLSID"] = "{FAS}",
|
||||||
["num"] = 3,
|
["num"] = 3,
|
||||||
},
|
},
|
||||||
[4] = {
|
[4] = {
|
||||||
["CLSID"] = "{HOT3G}",
|
|
||||||
["num"] = 4,
|
|
||||||
},
|
|
||||||
[5] = {
|
|
||||||
["CLSID"] = "{FAS}",
|
|
||||||
["num"] = 5,
|
|
||||||
},
|
|
||||||
[6] = {
|
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
@@ -37,28 +29,20 @@ local unitPayloads = {
|
|||||||
["name"] = "CAP",
|
["name"] = "CAP",
|
||||||
["pylons"] = {
|
["pylons"] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
["CLSID"] = "{HOT3D}",
|
["CLSID"] = "{HOT3_R2_M}",
|
||||||
["num"] = 1,
|
["num"] = 1,
|
||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
["CLSID"] = "{HOT3G}",
|
["CLSID"] = "{HOT3_L2_M}",
|
||||||
["num"] = 2,
|
["num"] = 2,
|
||||||
},
|
},
|
||||||
[3] = {
|
[3] = {
|
||||||
["CLSID"] = "{HOT3D}",
|
["CLSID"] = "{FAS}",
|
||||||
["num"] = 3,
|
["num"] = 3,
|
||||||
},
|
},
|
||||||
[4] = {
|
[4] = {
|
||||||
["CLSID"] = "{HOT3G}",
|
|
||||||
["num"] = 4,
|
|
||||||
},
|
|
||||||
[5] = {
|
|
||||||
["CLSID"] = "{FAS}",
|
|
||||||
["num"] = 5,
|
|
||||||
},
|
|
||||||
[6] = {
|
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
@@ -69,28 +53,20 @@ local unitPayloads = {
|
|||||||
["name"] = "STRIKE",
|
["name"] = "STRIKE",
|
||||||
["pylons"] = {
|
["pylons"] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
["CLSID"] = "{HOT3D}",
|
["CLSID"] = "{HOT3_R2_M}",
|
||||||
["num"] = 1,
|
["num"] = 1,
|
||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
["CLSID"] = "{HOT3G}",
|
["CLSID"] = "{HOT3_L2_M}",
|
||||||
["num"] = 2,
|
["num"] = 2,
|
||||||
},
|
},
|
||||||
[3] = {
|
[3] = {
|
||||||
["CLSID"] = "{HOT3D}",
|
["CLSID"] = "{FAS}",
|
||||||
["num"] = 3,
|
["num"] = 3,
|
||||||
},
|
},
|
||||||
[4] = {
|
[4] = {
|
||||||
["CLSID"] = "{HOT3G}",
|
|
||||||
["num"] = 4,
|
|
||||||
},
|
|
||||||
[5] = {
|
|
||||||
["CLSID"] = "{FAS}",
|
|
||||||
["num"] = 5,
|
|
||||||
},
|
|
||||||
[6] = {
|
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
@@ -101,28 +77,20 @@ local unitPayloads = {
|
|||||||
["name"] = "SEAD",
|
["name"] = "SEAD",
|
||||||
["pylons"] = {
|
["pylons"] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
["CLSID"] = "{HOT3D}",
|
["CLSID"] = "{HOT3_R2_M}",
|
||||||
["num"] = 1,
|
["num"] = 1,
|
||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
["CLSID"] = "{HOT3G}",
|
["CLSID"] = "{HOT3_L2_M}",
|
||||||
["num"] = 2,
|
["num"] = 2,
|
||||||
},
|
},
|
||||||
[3] = {
|
[3] = {
|
||||||
["CLSID"] = "{HOT3D}",
|
["CLSID"] = "{FAS}",
|
||||||
["num"] = 3,
|
["num"] = 3,
|
||||||
},
|
},
|
||||||
[4] = {
|
[4] = {
|
||||||
["CLSID"] = "{HOT3G}",
|
|
||||||
["num"] = 4,
|
|
||||||
},
|
|
||||||
[5] = {
|
|
||||||
["CLSID"] = "{FAS}",
|
|
||||||
["num"] = 5,
|
|
||||||
},
|
|
||||||
[6] = {
|
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
@@ -133,28 +101,20 @@ local unitPayloads = {
|
|||||||
["name"] = "ANTISHIP",
|
["name"] = "ANTISHIP",
|
||||||
["pylons"] = {
|
["pylons"] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
["CLSID"] = "{HOT3D}",
|
["CLSID"] = "{HOT3_R2_M}",
|
||||||
["num"] = 1,
|
["num"] = 1,
|
||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
["CLSID"] = "{HOT3G}",
|
["CLSID"] = "{HOT3_L2_M}",
|
||||||
["num"] = 2,
|
["num"] = 2,
|
||||||
},
|
},
|
||||||
[3] = {
|
[3] = {
|
||||||
["CLSID"] = "{HOT3D}",
|
["CLSID"] = "{FAS}",
|
||||||
["num"] = 3,
|
["num"] = 3,
|
||||||
},
|
},
|
||||||
[4] = {
|
[4] = {
|
||||||
["CLSID"] = "{HOT3G}",
|
|
||||||
["num"] = 4,
|
|
||||||
},
|
|
||||||
[5] = {
|
|
||||||
["CLSID"] = "{FAS}",
|
|
||||||
["num"] = 5,
|
|
||||||
},
|
|
||||||
[6] = {
|
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ local unitPayloads = {
|
|||||||
["pylons"] = {
|
["pylons"] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
@@ -19,7 +19,7 @@ local unitPayloads = {
|
|||||||
["pylons"] = {
|
["pylons"] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
["CLSID"] = "{IR_Deflector}",
|
["CLSID"] = "{IR_Deflector}",
|
||||||
["num"] = 6,
|
["num"] = 4,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
["tasks"] = {
|
["tasks"] = {
|
||||||
|
|||||||
@@ -1,27 +1,24 @@
|
|||||||
name: coldwar
|
name: coldwar
|
||||||
cap: true
|
|
||||||
cas: true
|
|
||||||
sead: true
|
|
||||||
strike: true
|
|
||||||
antiship: true
|
|
||||||
rendezvous_altitude_ft_msl: 22000
|
|
||||||
hold_distance_nm: 15
|
hold_distance_nm: 15
|
||||||
push_distance_nm: 10
|
push_distance_nm: 10
|
||||||
join_distance_nm: 10
|
join_distance_nm: 10
|
||||||
max_ingress_distance_nm: 30
|
max_ingress_distance_nm: 30
|
||||||
min_ingress_distance_nm: 10
|
min_ingress_distance_nm: 10
|
||||||
ingress_altitude_ft_msl: 18000
|
rendezvous_altitude_ft_msl: 22000
|
||||||
min_patrol_altitude_ft_msl: 10000
|
combat_altitude_ft_msl: 18000
|
||||||
max_patrol_altitude_ft_msl: 24000
|
cap:
|
||||||
pattern_altitude_ft_msl: 5000
|
duration_minutes: 30
|
||||||
cap_duration_minutes: 30
|
min_track_length_nm: 12
|
||||||
cap_min_track_length_nm: 12
|
max_track_length_nm: 24
|
||||||
cap_max_track_length_nm: 24
|
min_distance_from_cp_nm: 8
|
||||||
cap_min_distance_from_cp_nm: 8
|
max_distance_from_cp_nm: 25
|
||||||
cap_max_distance_from_cp_nm: 25
|
engagement_range_nm: 35
|
||||||
cap_engagement_range_nm: 35
|
min_patrol_altitude_ft_msl: 10000
|
||||||
cas_duration_minutes: 30
|
max_patrol_altitude_ft_msl: 24000
|
||||||
sweep_distance_nm: 40
|
cas:
|
||||||
|
duration_minutes: 30
|
||||||
|
sweep:
|
||||||
|
distance_nm: 40
|
||||||
ground_unit_procurement_ratios:
|
ground_unit_procurement_ratios:
|
||||||
Tank: 4
|
Tank: 4
|
||||||
ATGM: 2
|
ATGM: 2
|
||||||
@@ -30,3 +27,8 @@ ground_unit_procurement_ratios:
|
|||||||
Artillery: 1
|
Artillery: 1
|
||||||
SHORAD: 2
|
SHORAD: 2
|
||||||
Recon: 1
|
Recon: 1
|
||||||
|
helicopter:
|
||||||
|
combat_altitude_ft_agl: 200
|
||||||
|
rendezvous_altitude_ft_agl: 1500
|
||||||
|
air_assault_nav_altitude_ft_agl: 1500
|
||||||
|
|
||||||
|
|||||||
@@ -1,27 +1,24 @@
|
|||||||
name: modern
|
name: modern
|
||||||
cap: true
|
|
||||||
cas: true
|
|
||||||
sead: true
|
|
||||||
strike: true
|
|
||||||
antiship: true
|
|
||||||
rendezvous_altitude_ft_msl: 25000
|
|
||||||
hold_distance_nm: 25
|
hold_distance_nm: 25
|
||||||
push_distance_nm: 20
|
push_distance_nm: 20
|
||||||
join_distance_nm: 20
|
join_distance_nm: 20
|
||||||
max_ingress_distance_nm: 45
|
max_ingress_distance_nm: 45
|
||||||
min_ingress_distance_nm: 10
|
min_ingress_distance_nm: 10
|
||||||
ingress_altitude_ft_msl: 20000
|
rendezvous_altitude_ft_msl: 25000
|
||||||
min_patrol_altitude_ft_msl: 15000
|
combat_altitude_ft_msl: 20000
|
||||||
max_patrol_altitude_ft_msl: 33000
|
cap:
|
||||||
pattern_altitude_ft_msl: 5000
|
duration_minutes: 30
|
||||||
cap_duration_minutes: 30
|
min_track_length_nm: 15
|
||||||
cap_min_track_length_nm: 15
|
max_track_length_nm: 40
|
||||||
cap_max_track_length_nm: 40
|
min_distance_from_cp_nm: 10
|
||||||
cap_min_distance_from_cp_nm: 10
|
max_distance_from_cp_nm: 40
|
||||||
cap_max_distance_from_cp_nm: 40
|
engagement_range_nm: 50
|
||||||
cap_engagement_range_nm: 50
|
min_patrol_altitude_ft_msl: 15000
|
||||||
cas_duration_minutes: 30
|
max_patrol_altitude_ft_msl: 33000
|
||||||
sweep_distance_nm: 60
|
cas:
|
||||||
|
duration_minutes: 30
|
||||||
|
sweep:
|
||||||
|
distance_nm: 60
|
||||||
ground_unit_procurement_ratios:
|
ground_unit_procurement_ratios:
|
||||||
Tank: 3
|
Tank: 3
|
||||||
ATGM: 2
|
ATGM: 2
|
||||||
@@ -30,3 +27,7 @@ ground_unit_procurement_ratios:
|
|||||||
Artillery: 1
|
Artillery: 1
|
||||||
SHORAD: 2
|
SHORAD: 2
|
||||||
Recon: 1
|
Recon: 1
|
||||||
|
helicopter:
|
||||||
|
combat_altitude_ft_agl: 200
|
||||||
|
rendezvous_altitude_ft_agl: 1500
|
||||||
|
air_assault_nav_altitude_ft_agl: 1500
|
||||||
|
|||||||
@@ -1,27 +1,24 @@
|
|||||||
name: ww2
|
name: ww2
|
||||||
cap: true
|
|
||||||
cas: true
|
|
||||||
sead: false
|
|
||||||
strike: true
|
|
||||||
antiship: true
|
|
||||||
hold_distance_nm: 10
|
hold_distance_nm: 10
|
||||||
push_distance_nm: 5
|
push_distance_nm: 5
|
||||||
join_distance_nm: 5
|
join_distance_nm: 5
|
||||||
rendezvous_altitude_ft_msl: 10000
|
|
||||||
max_ingress_distance_nm: 7
|
max_ingress_distance_nm: 7
|
||||||
min_ingress_distance_nm: 5
|
min_ingress_distance_nm: 5
|
||||||
ingress_altitude_ft_msl: 8000
|
rendezvous_altitude_ft_msl: 10000
|
||||||
min_patrol_altitude_ft_msl: 4000
|
combat_altitude_ft_msl: 8000
|
||||||
max_patrol_altitude_ft_msl: 15000
|
cap:
|
||||||
pattern_altitude_ft_msl: 5000
|
duration_minutes: 30
|
||||||
cap_duration_minutes: 30
|
min_track_length_nm: 8
|
||||||
cap_min_track_length_nm: 8
|
max_track_length_nm: 18
|
||||||
cap_max_track_length_nm: 18
|
min_distance_from_cp_nm: 0
|
||||||
cap_min_distance_from_cp_nm: 0
|
max_distance_from_cp_nm: 5
|
||||||
cap_max_distance_from_cp_nm: 5
|
engagement_range_nm: 20
|
||||||
cap_engagement_range_nm: 20
|
min_patrol_altitude_ft_msl: 4000
|
||||||
cas_duration_minutes: 30
|
max_patrol_altitude_ft_msl: 15000
|
||||||
sweep_distance_nm: 10
|
cas:
|
||||||
|
duration_minutes: 30
|
||||||
|
sweep:
|
||||||
|
distance_nm: 10
|
||||||
ground_unit_procurement_ratios:
|
ground_unit_procurement_ratios:
|
||||||
Tank: 3
|
Tank: 3
|
||||||
ATGM: 3
|
ATGM: 3
|
||||||
@@ -29,3 +26,7 @@ ground_unit_procurement_ratios:
|
|||||||
Artillery: 1
|
Artillery: 1
|
||||||
SHORAD: 3
|
SHORAD: 3
|
||||||
Recon: 1
|
Recon: 1
|
||||||
|
helicopter:
|
||||||
|
combat_altitude_ft_agl: 200
|
||||||
|
rendezvous_altitude_ft_agl: 1500
|
||||||
|
air_assault_nav_altitude_ft_agl: 1500
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ aircrafts:
|
|||||||
- F/A-18C Hornet (Lot 20)
|
- F/A-18C Hornet (Lot 20)
|
||||||
- SH-60B Seahawk
|
- SH-60B Seahawk
|
||||||
- UH-1H Iroquois
|
- UH-1H Iroquois
|
||||||
|
- F/A-18E Super Hornet
|
||||||
|
- F/A-18F Super Hornet
|
||||||
|
- EA-18G Growler
|
||||||
awacs:
|
awacs:
|
||||||
- E-3A
|
- E-3A
|
||||||
tankers:
|
tankers:
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ aircrafts:
|
|||||||
- S-3B Viking
|
- S-3B Viking
|
||||||
- SH-60B Seahawk
|
- SH-60B Seahawk
|
||||||
- UH-1H Iroquois
|
- UH-1H Iroquois
|
||||||
|
- F/A-18E Super Hornet
|
||||||
|
- F/A-18F Super Hornet
|
||||||
|
- EA-18G Growler
|
||||||
awacs:
|
awacs:
|
||||||
- E-2C Hawkeye
|
- E-2C Hawkeye
|
||||||
tankers:
|
tankers:
|
||||||
|
|||||||
BIN
resources/ui/units/aircrafts/banners/EA-18G.jpg
Normal file
BIN
resources/ui/units/aircrafts/banners/EA-18G.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 989 KiB |
BIN
resources/ui/units/aircrafts/banners/FA-18E.jpeg
Normal file
BIN
resources/ui/units/aircrafts/banners/FA-18E.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
BIN
resources/ui/units/aircrafts/banners/FA-18F.jpeg
Normal file
BIN
resources/ui/units/aircrafts/banners/FA-18F.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 226 KiB |
BIN
resources/ui/units/aircrafts/icons/EA-18G_24.png
Normal file
BIN
resources/ui/units/aircrafts/icons/EA-18G_24.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
BIN
resources/ui/units/aircrafts/icons/FA-18E_24.png
Normal file
BIN
resources/ui/units/aircrafts/icons/FA-18E_24.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.5 KiB |
BIN
resources/ui/units/aircrafts/icons/FA-18F_24.png
Normal file
BIN
resources/ui/units/aircrafts/icons/FA-18F_24.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.8 KiB |
@@ -20,3 +20,4 @@ tasks:
|
|||||||
BAI: 680
|
BAI: 680
|
||||||
CAS: 680
|
CAS: 680
|
||||||
OCA/Aircraft: 680
|
OCA/Aircraft: 680
|
||||||
|
hit_points: 32
|
||||||
|
|||||||
@@ -30,3 +30,4 @@ tasks:
|
|||||||
OCA/Aircraft: 820
|
OCA/Aircraft: 820
|
||||||
OCA/Runway: 380
|
OCA/Runway: 380
|
||||||
Strike: 380
|
Strike: 380
|
||||||
|
hit_points: 32
|
||||||
|
|||||||
@@ -34,3 +34,4 @@ tasks:
|
|||||||
OCA/Aircraft: 830
|
OCA/Aircraft: 830
|
||||||
OCA/Runway: 390
|
OCA/Runway: 390
|
||||||
Strike: 390
|
Strike: 390
|
||||||
|
hit_points: 32
|
||||||
|
|||||||
@@ -24,3 +24,4 @@ tasks:
|
|||||||
OCA/Aircraft: 160
|
OCA/Aircraft: 160
|
||||||
OCA/Runway: 140
|
OCA/Runway: 140
|
||||||
Strike: 140
|
Strike: 140
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -8,3 +8,4 @@ variants:
|
|||||||
A-50: null
|
A-50: null
|
||||||
tasks:
|
tasks:
|
||||||
AEW&C: 10
|
AEW&C: 10
|
||||||
|
hit_points: 60
|
||||||
|
|||||||
@@ -23,3 +23,4 @@ tasks:
|
|||||||
BAI: 480
|
BAI: 480
|
||||||
CAS: 480
|
CAS: 480
|
||||||
OCA/Aircraft: 480
|
OCA/Aircraft: 480
|
||||||
|
hit_points: 14
|
||||||
|
|||||||
@@ -24,3 +24,4 @@ tasks:
|
|||||||
BAI: 490
|
BAI: 490
|
||||||
CAS: 490
|
CAS: 490
|
||||||
OCA/Aircraft: 490
|
OCA/Aircraft: 490
|
||||||
|
hit_points: 14
|
||||||
|
|||||||
@@ -25,3 +25,4 @@ tasks:
|
|||||||
BAI: 500
|
BAI: 500
|
||||||
CAS: 500
|
CAS: 500
|
||||||
OCA/Aircraft: 500
|
OCA/Aircraft: 500
|
||||||
|
hit_points: 14
|
||||||
|
|||||||
@@ -40,5 +40,4 @@ tasks:
|
|||||||
CAS: 510
|
CAS: 510
|
||||||
DEAD: 115
|
DEAD: 115
|
||||||
OCA/Aircraft: 510
|
OCA/Aircraft: 510
|
||||||
default_overrides:
|
hit_points: 20
|
||||||
FCR_RFI_removed: false
|
|
||||||
|
|||||||
@@ -43,3 +43,4 @@ tasks:
|
|||||||
OCA/Aircraft: 620
|
OCA/Aircraft: 620
|
||||||
OCA/Runway: 620
|
OCA/Runway: 620
|
||||||
Strike: 630
|
Strike: 630
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -63,3 +63,4 @@ tasks:
|
|||||||
SEAD: 70
|
SEAD: 70
|
||||||
SEAD Escort: 70
|
SEAD Escort: 70
|
||||||
Strike: 590
|
Strike: 590
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -5,3 +5,4 @@ variants:
|
|||||||
An-26B: null
|
An-26B: null
|
||||||
tasks:
|
tasks:
|
||||||
Transport: 110
|
Transport: 110
|
||||||
|
hit_points: 45
|
||||||
|
|||||||
@@ -3,3 +3,4 @@ price: 15
|
|||||||
variants:
|
variants:
|
||||||
An-30M: null
|
An-30M: null
|
||||||
tasks: {}
|
tasks: {}
|
||||||
|
hit_points: 45
|
||||||
|
|||||||
@@ -23,3 +23,4 @@ variants:
|
|||||||
tasks:
|
tasks:
|
||||||
OCA/Runway: 150
|
OCA/Runway: 150
|
||||||
Strike: 150
|
Strike: 150
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -23,3 +23,4 @@ tasks:
|
|||||||
OCA/Aircraft: 670
|
OCA/Aircraft: 670
|
||||||
OCA/Runway: 670
|
OCA/Runway: 670
|
||||||
Strike: 700
|
Strike: 700
|
||||||
|
hit_points: 60
|
||||||
|
|||||||
@@ -17,3 +17,4 @@ tasks:
|
|||||||
DEAD: 210
|
DEAD: 210
|
||||||
OCA/Runway: 660
|
OCA/Runway: 660
|
||||||
Strike: 690
|
Strike: 690
|
||||||
|
hit_points: 60
|
||||||
|
|||||||
@@ -34,3 +34,4 @@ tasks:
|
|||||||
OCA/Runway: 20
|
OCA/Runway: 20
|
||||||
Strike: 20
|
Strike: 20
|
||||||
TARCAP: 60
|
TARCAP: 60
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -30,3 +30,4 @@ tasks:
|
|||||||
OCA/Runway: 170
|
OCA/Runway: 170
|
||||||
Strike: 170
|
Strike: 170
|
||||||
TARCAP: 130
|
TARCAP: 130
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -5,3 +5,4 @@ variants:
|
|||||||
C-130: null
|
C-130: null
|
||||||
tasks:
|
tasks:
|
||||||
Transport: 130
|
Transport: 130
|
||||||
|
hit_points: 45
|
||||||
|
|||||||
@@ -5,3 +5,4 @@ variants:
|
|||||||
C-17A: null
|
C-17A: null
|
||||||
tasks:
|
tasks:
|
||||||
Transport: 150
|
Transport: 150
|
||||||
|
hit_points: 45
|
||||||
|
|||||||
@@ -13,3 +13,4 @@ variants:
|
|||||||
C-47 Dakota: null
|
C-47 Dakota: null
|
||||||
tasks:
|
tasks:
|
||||||
Transport: 90
|
Transport: 90
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -10,3 +10,4 @@ variants:
|
|||||||
tasks:
|
tasks:
|
||||||
Air Assault: 90
|
Air Assault: 90
|
||||||
Transport: 70
|
Transport: 70
|
||||||
|
hit_points: 20
|
||||||
|
|||||||
@@ -10,3 +10,4 @@ variants:
|
|||||||
tasks:
|
tasks:
|
||||||
Air Assault: 100
|
Air Assault: 100
|
||||||
Transport: 80
|
Transport: 80
|
||||||
|
hit_points: 20
|
||||||
|
|||||||
@@ -16,3 +16,4 @@ variants:
|
|||||||
E-2D Advanced Hawkeye: {}
|
E-2D Advanced Hawkeye: {}
|
||||||
tasks:
|
tasks:
|
||||||
AEW&C: 20
|
AEW&C: 20
|
||||||
|
hit_points: 25
|
||||||
|
|||||||
@@ -8,3 +8,4 @@ variants:
|
|||||||
E-3A: null
|
E-3A: null
|
||||||
tasks:
|
tasks:
|
||||||
AEW&C: 30
|
AEW&C: 30
|
||||||
|
hit_points: 60
|
||||||
|
|||||||
47
resources/units/aircraft/EA-18G_growler.yaml
Normal file
47
resources/units/aircraft/EA-18G_growler.yaml
Normal 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
|
||||||
@@ -20,3 +20,4 @@ variants:
|
|||||||
tasks:
|
tasks:
|
||||||
Strike: 710
|
Strike: 710
|
||||||
has_built_in_target_pod: true
|
has_built_in_target_pod: true
|
||||||
|
hit_points: 20
|
||||||
|
|||||||
@@ -59,3 +59,4 @@ tasks:
|
|||||||
SEAD Escort: 90
|
SEAD Escort: 90
|
||||||
Strike: 550
|
Strike: 550
|
||||||
TARCAP: 520
|
TARCAP: 520
|
||||||
|
hit_points: 20
|
||||||
|
|||||||
@@ -59,3 +59,4 @@ tasks:
|
|||||||
SEAD Escort: 100
|
SEAD Escort: 100
|
||||||
Strike: 560
|
Strike: 560
|
||||||
TARCAP: 530
|
TARCAP: 530
|
||||||
|
hit_points: 20
|
||||||
|
|||||||
@@ -18,3 +18,4 @@ tasks:
|
|||||||
Fighter sweep: 540
|
Fighter sweep: 540
|
||||||
Intercept: 540
|
Intercept: 540
|
||||||
TARCAP: 540
|
TARCAP: 540
|
||||||
|
hit_points: 20
|
||||||
|
|||||||
@@ -25,3 +25,4 @@ tasks:
|
|||||||
Strike: 640
|
Strike: 640
|
||||||
TARCAP: 240
|
TARCAP: 240
|
||||||
has_built_in_target_pod: true
|
has_built_in_target_pod: true
|
||||||
|
hit_points: 20
|
||||||
|
|||||||
@@ -51,3 +51,4 @@ laser_codes:
|
|||||||
- property:
|
- property:
|
||||||
id: Sta8LaserCode
|
id: Sta8LaserCode
|
||||||
digits: 3
|
digits: 3
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -16,3 +16,4 @@ tasks:
|
|||||||
OCA/Runway: 570
|
OCA/Runway: 570
|
||||||
Strike: 570
|
Strike: 570
|
||||||
TARCAP: 420
|
TARCAP: 420
|
||||||
|
hit_points: 14
|
||||||
|
|||||||
@@ -78,3 +78,4 @@ laser_codes:
|
|||||||
digit: 1
|
digit: 1
|
||||||
- id: LaserCode1
|
- id: LaserCode1
|
||||||
digit: 0
|
digit: 0
|
||||||
|
hit_points: 20
|
||||||
|
|||||||
@@ -33,3 +33,4 @@ tasks:
|
|||||||
SEAD Escort: 120
|
SEAD Escort: 120
|
||||||
Strike: 400
|
Strike: 400
|
||||||
TARCAP: 410
|
TARCAP: 410
|
||||||
|
hit_points: 20
|
||||||
|
|||||||
@@ -48,3 +48,4 @@ tasks:
|
|||||||
OCA/Runway: 190
|
OCA/Runway: 190
|
||||||
Strike: 200
|
Strike: 200
|
||||||
TARCAP: 200
|
TARCAP: 200
|
||||||
|
hit_points: 16
|
||||||
|
|||||||
@@ -26,3 +26,4 @@ tasks:
|
|||||||
OCA/Runway: 180
|
OCA/Runway: 180
|
||||||
Strike: 190
|
Strike: 190
|
||||||
TARCAP: 150
|
TARCAP: 150
|
||||||
|
hit_points: 15
|
||||||
|
|||||||
@@ -68,3 +68,4 @@ tasks:
|
|||||||
SEAD Escort: 160
|
SEAD Escort: 160
|
||||||
Strike: 600
|
Strike: 600
|
||||||
TARCAP: 450
|
TARCAP: 450
|
||||||
|
hit_points: 20
|
||||||
|
|||||||
0
resources/units/aircraft/FA-18E_super-hornet.yaml
Normal file
0
resources/units/aircraft/FA-18E_super-hornet.yaml
Normal file
0
resources/units/aircraft/FA-18F_super-hornet.yaml
Normal file
0
resources/units/aircraft/FA-18F_super-hornet.yaml
Normal file
@@ -44,3 +44,4 @@ tasks:
|
|||||||
OCA/Runway: 0
|
OCA/Runway: 0
|
||||||
Strike: 0
|
Strike: 0
|
||||||
TARCAP: 40
|
TARCAP: 40
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -33,3 +33,4 @@ tasks:
|
|||||||
OCA/Runway: 10
|
OCA/Runway: 10
|
||||||
Strike: 10
|
Strike: 10
|
||||||
TARCAP: 50
|
TARCAP: 50
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -24,3 +24,4 @@ tasks:
|
|||||||
OCA/Aircraft: 380
|
OCA/Aircraft: 380
|
||||||
OCA/Runway: 640
|
OCA/Runway: 640
|
||||||
Strike: 650
|
Strike: 650
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -28,3 +28,4 @@ tasks:
|
|||||||
Intercept: 0
|
Intercept: 0
|
||||||
OCA/Aircraft: 60
|
OCA/Aircraft: 60
|
||||||
TARCAP: 0
|
TARCAP: 0
|
||||||
|
hit_points: 15
|
||||||
|
|||||||
@@ -4,3 +4,4 @@ variants:
|
|||||||
IL-76MD: null
|
IL-76MD: null
|
||||||
tasks:
|
tasks:
|
||||||
Transport: 120
|
Transport: 120
|
||||||
|
hit_points: 60
|
||||||
|
|||||||
@@ -9,3 +9,4 @@ variants:
|
|||||||
IL-78M: null
|
IL-78M: null
|
||||||
tasks:
|
tasks:
|
||||||
Refueling: 30
|
Refueling: 30
|
||||||
|
hit_points: 60
|
||||||
|
|||||||
@@ -18,3 +18,4 @@ tasks:
|
|||||||
Fighter sweep: 500
|
Fighter sweep: 500
|
||||||
Intercept: 500
|
Intercept: 500
|
||||||
TARCAP: 500
|
TARCAP: 500
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -53,3 +53,4 @@ tasks:
|
|||||||
SEAD Escort: 180
|
SEAD Escort: 180
|
||||||
Strike: 580
|
Strike: 580
|
||||||
TARCAP: 440
|
TARCAP: 440
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -27,3 +27,4 @@ tasks:
|
|||||||
OCA/Aircraft: 150
|
OCA/Aircraft: 150
|
||||||
OCA/Runway: 130
|
OCA/Runway: 130
|
||||||
Strike: 130
|
Strike: 130
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
@@ -17,3 +17,4 @@ variants:
|
|||||||
KC-135 Stratotanker: {}
|
KC-135 Stratotanker: {}
|
||||||
tasks:
|
tasks:
|
||||||
Refueling: 50
|
Refueling: 50
|
||||||
|
hit_points: 60
|
||||||
|
|||||||
@@ -15,3 +15,4 @@ variants:
|
|||||||
KC-130: {}
|
KC-130: {}
|
||||||
tasks:
|
tasks:
|
||||||
Refueling: 10
|
Refueling: 10
|
||||||
|
hit_points: 18
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user