diff --git a/changelog.md b/changelog.md index 0eb51ba0..d919e094 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,17 @@ +# 2.3.1 + +## Features/Improvements +* **[UX]** Added a warning message when the player is attempting to buy more planes at an already full airbase. +* **[Campaigns]** Migrated Syria full map to new format. (Thanks to Hawkmoon) +* **[Faction]** Added NATO desert Storm faction (Thanks to Hawkmoon) + +## Fixes: +* **[AI]** CAP flights will engage enemies again. +* **[Campaigns]** Fixed a missing path on the Caucasus Full Map campaign + # 2.3.0 -# Features/Improvements +## Features/Improvements * **[Campaign Map]** Overhauled the campaign model * **[Campaign Map]** Possible to add FOB as control points * **[Campaign Map]** Added off-map spawn locations @@ -36,7 +47,7 @@ # 2.2.1 -# Features/Improvements +## Features/Improvements * **[Factions]** Added factions : Georgia 2008, USN 1985, France 2005 Frenchpack by HerrTom * **[Factions]** Added map Persian Gulf full by Plob * **[Flight Planner]** Player flights with start delays under ten minutes will spawn immediately. diff --git a/game/version.py b/game/version.py index 5955ac0a..69a9f185 100644 --- a/game/version.py +++ b/game/version.py @@ -2,7 +2,7 @@ from pathlib import Path def _build_version_string() -> str: - components = ["2.3.0"] + components = ["2.3.1"] build_number_path = Path("resources/buildnumber") if build_number_path.exists(): with build_number_path.open("r") as build_number_file: diff --git a/gen/aircraft.py b/gen/aircraft.py index 6b24f90b..e51b0f2e 100644 --- a/gen/aircraft.py +++ b/gen/aircraft.py @@ -1756,15 +1756,11 @@ class RaceTrackBuilder(PydcsWaypointBuilder): f"{flight_plan_type} does not define a patrol.") return waypoint - racetrack = ControlledTask(OrbitAction( - altitude=waypoint.alt, - pattern=OrbitAction.OrbitPattern.RaceTrack - )) - self.set_waypoint_tot( - waypoint, self.flight.flight_plan.patrol_start_time) - racetrack.stop_after_time( - int(self.flight.flight_plan.patrol_end_time.total_seconds())) - waypoint.add_task(racetrack) + # NB: It's important that the engage task comes before the orbit task. + # Though they're on the same waypoint, if the orbit task comes first it + # is their first priority and they will not engage any targets because + # they're fully focused on orbiting. If the STE task is first, they will + # engage targets if available and orbit if they find nothing to shoot. # TODO: Move the properties of this task into the flight plan? # CAP is the only current user of this so it's not a big deal, but might @@ -1775,6 +1771,16 @@ class RaceTrackBuilder(PydcsWaypointBuilder): waypoint.tasks.append(EngageTargets(max_distance=nm_to_meter(50), targets=[Targets.All.Air])) + racetrack = ControlledTask(OrbitAction( + altitude=waypoint.alt, + pattern=OrbitAction.OrbitPattern.RaceTrack + )) + self.set_waypoint_tot( + waypoint, self.flight.flight_plan.patrol_start_time) + racetrack.stop_after_time( + int(self.flight.flight_plan.patrol_end_time.total_seconds())) + waypoint.add_task(racetrack) + return waypoint diff --git a/qt_ui/windows/QLiberationWindow.py b/qt_ui/windows/QLiberationWindow.py index 7c731c93..fbce72c1 100644 --- a/qt_ui/windows/QLiberationWindow.py +++ b/qt_ui/windows/QLiberationWindow.py @@ -284,7 +284,7 @@ class QLiberationWindow(QMainWindow): "
DCS Liberation was originally developed by shdwp, DCS Liberation 2.0 is a partial rewrite based on this work by Khopa." \ "
Full map of Syria
Note: This scenario is heavy on performance, enabling \"culling\" in settings is highly recommended.
", - "player_points": [ - { - "type": "airbase", - "id": "Ramat David", - "size": 1000, - "importance": 1.4 - }, - { - "type": "carrier", - "id": 1001, - "x": -151000, - "y": -106000, - "captured_invert": true - }, - { - "type": "lha", - "id": 1002, - "x": -131000, - "y": -161000, - "captured_invert": true - } - ], - "enemy_points": [ - { - "type": "airbase", - "id": "King Hussein Air College", - "size": 1000, - "importance": 1.4 - }, - { - "type": "airbase", - "id": "Khalkhalah", - "size": 1000, - "importance": 1.2 - }, - { - "type": "airbase", - "id": "Al-Dumayr", - "size": 1000, - "importance": 1.2 - }, - { - "type": "airbase", - "id": "Al Qusayr", - "size": 1000, - "importance": 1 - }, - { - "type": "airbase", - "id": "Rene Mouawad", - "size": 1000, - "importance": 1.4 - }, - { - "type": "airbase", - "id": "Hama", - "size": 1000, - "importance": 1 - }, - { - "type": "airbase", - "id": "Bassel Al-Assad", - "size": 1000, - "importance": 1.4 - }, - { - "type": "airbase", - "id": "Palmyra", - "size": 1000, - "importance": 1 - }, - { - "type": "airbase", - "id": "Tabqa", - "size": 1000, - "importance": 1 - }, - { - "type": "airbase", - "id": "Jirah", - "size": 1000, - "importance": 1 - }, - { - "type": "airbase", - "id": "Aleppo", - "size": 1000, - "importance": 1.2 - }, - { - "type": "airbase", - "id": "Minakh", - "size": 1000, - "importance": 1 - }, - { - "type": "airbase", - "id": "Hatay", - "size": 1000, - "importance": 1.4 - }, - { - "type": "airbase", - "id": "Incirlik", - "size": 1000, - "importance": 1.4, - "captured_invert": true - } - ], - "links": [ - [ - "King Hussein Air College", - "Ramat David" - ], - [ - "Khalkhalah", - "King Hussein Air College" - ], - [ - "Al-Dumayr", - "Khalkhalah" - ], - [ - "Al Qusayr", - "Al-Dumayr" - ], - [ - "Al Qusayr", - "Hama" - ], - [ - "Al Qusayr", - "Palmyra" - ], - [ - "Al Qusayr", - "Rene Mouawad" - ], - [ - "Bassel Al-Assad", - "Rene Mouawad" - ], - [ - "Aleppo", - "Hama" - ], - [ - "Bassel Al-Assad", - "Hama" - ], - [ - "Bassel Al-Assad", - "Hatay" - ], - [ - "Palmyra", - "Tabqa" - ], - [ - "Jirah", - "Tabqa" - ], - [ - "Aleppo", - "Jirah" - ], - [ - "Aleppo", - "Minakh" - ], - [ - "Hatay", - "Minakh" - ], - [ - "Incirlik", - "Minakh" - ] - ] -} \ No newline at end of file diff --git a/resources/campaigns/syria_full_map_remastered.json b/resources/campaigns/syria_full_map_remastered.json new file mode 100644 index 00000000..d0df2b54 --- /dev/null +++ b/resources/campaigns/syria_full_map_remastered.json @@ -0,0 +1,7 @@ +{ + "name": "Syria - Full Map", + "theater": "Syria", + "authors": "Hawkmoon", + "description": "Full map of Syria
Note:For a better early game experience is suggested to give the AI an high amount of starting money This scenario is heavy on performance, enabling \"culling\" in settings is highly recommended.
", + "miz": "syria_full_map_remastered.miz" +} \ No newline at end of file diff --git a/resources/campaigns/syria_full_map_remastered.miz b/resources/campaigns/syria_full_map_remastered.miz new file mode 100644 index 00000000..b6102536 Binary files /dev/null and b/resources/campaigns/syria_full_map_remastered.miz differ diff --git a/resources/factions/NATO_Desert_Storm.json b/resources/factions/NATO_Desert_Storm.json new file mode 100644 index 00000000..d983c89f --- /dev/null +++ b/resources/factions/NATO_Desert_Storm.json @@ -0,0 +1,100 @@ +{ + "country": "Combined Joint Task Forces Blue", + "name": "NATO Desert Storm", + "authors": "Hawkmoon", + "description": "A faction to recreate the actual unit lineup during Desert Storm as closely as possible
", + "aircrafts": [ + "F_15C", + "F_14A", + "F_15E", + "F_16C_50", + "FA_18C_hornet", + "A_10A", + "AV8BNA", + "UH_1H", + "AH_64A", + "B_52H", + "B_1B", + "Tornado_IDS", + "F_111F", + "F_4E", + "F_117A", + "M_2000C", + "S_3B", + "SA342M", + "SA342L", + "SA342Mistral", + "OH_58D" + ], + "awacs": [ + "E_3A", + "E_2C" + ], + "tankers": [ + "KC_135", + "KC135MPRS" + ], + "frontline_units": [ + "MBT_M1A2_Abrams", + "ATGM_M1134_Stryker", + "IFV_M2A2_Bradley", + "APC_M1126_Stryker_ICV", + "IFV_LAV_25", + "APC_M1043_HMMWV_Armament", + "ATGM_M1045_HMMWV_TOW", + "TPz_Fuchs", + "IFV_MCV_80", + "MBT_Challenger_II", + "MBT_M60A3_Patton", + "SPG_M1128_Stryker_MGS" + ], + "artillery_units": [ + "MLRS_M270", + "SPH_M109_Paladin" + ], + "logistics_units": [ + "Transport_M818" + ], + "infantry_units": [ + "Infantry_M4", + "Soldier_M249", + "Stinger_MANPADS" + ], + "air_defenses": [ + "AvengerGenerator", + "ChaparralGenerator", + "VulcanGenerator", + "RolandGenerator", + "HawkGenerator", + "PatriotGenerator", + "RapierGenerator" + ], + "ewrs": [ + "PatriotEwrGenerator" + ], + "aircraft_carrier": [ + "CVN_74_John_C__Stennis" + ], + "helicopter_carrier": [ + "LHA_1_Tarawa" + ], + "destroyers": [ + "OliverHazardPerryGroupGenerator" + ], + "cruisers": [ + "Ticonderoga_class" + ], + "requirements": {}, + "carrier_names": [ + "CVN-71 Theodore Roosevelt" + ], + "helicopter_carrier_names": [ + "LHA-1 Tarawa", + "LHA-4 Nassau" + ], + "navy_generators": [ + "OliverHazardPerryGroupGenerator" + ], + "has_jtac": true, + "jtac_unit": "MQ_9_Reaper" +}