diff --git a/changelog.md b/changelog.md index 365a6610..ef259872 100644 --- a/changelog.md +++ b/changelog.md @@ -45,6 +45,7 @@ * **[Modding]** Support for Bandit's cloud presets mod (v15) * **[UX]** Reduce size of save-file by loading landmap data on the fly, which also implies no new campaign needs to be started to benefit from an updated landmap * **[New Game Wizard]** Ability to save an edited faction during new game creation +* **[Options]** New option to make AI helicopters prefer vertical takeoff and landing ## Fixes * **[UI/UX]** A-10A flights can be edited again diff --git a/game/missiongenerator/aircraft/aircraftbehavior.py b/game/missiongenerator/aircraft/aircraftbehavior.py index 9cdf6933..6329998d 100644 --- a/game/missiongenerator/aircraft/aircraftbehavior.py +++ b/game/missiongenerator/aircraft/aircraftbehavior.py @@ -30,6 +30,7 @@ from dcs.task import ( OptNoReportWaypointPass, OptRadioUsageContact, OptRadioSilence, + OptVerticalTakeoffLanding, Tanker, RecoveryTanker, ActivateBeaconCommand, @@ -114,6 +115,7 @@ class AircraftBehavior: mission_uses_gun: bool = True, rtb_on_bingo: bool = True, ai_unlimited_fuel: Optional[bool] = None, + ai_vertical_takoff_landing: Optional[bool] = None, ) -> None: group.points[0].tasks.clear() if ai_unlimited_fuel is None: @@ -121,6 +123,11 @@ class AircraftBehavior: flight.squadron.coalition.game.settings.ai_unlimited_fuel ) + if ai_vertical_takoff_landing is None: + ai_vertical_takoff_landing = ( + flight.squadron.coalition.game.settings.ai_vertical_takoff_landing + ) + # at IP, insert waypoint to orient aircraft in correct direction layout = flight.flight_plan.layout at_ip_or_combat = flight.state.is_at_ip or flight.state.in_combat @@ -150,6 +157,9 @@ class AircraftBehavior: if rtb_winchester is not None: group.points[0].tasks.append(OptRTBOnOutOfAmmo(rtb_winchester)) + if ai_vertical_takoff_landing and flight.is_helo: + group.points[0].tasks.append(OptVerticalTakeoffLanding(True)) + # Confiscate the bullets of AI missions that do not rely on the gun. There is no # "all but gun" RTB winchester option, so air to ground missions with mixed # weapon types will insist on using all of their bullets after running out of diff --git a/game/settings/settings.py b/game/settings/settings.py index d9c97ed9..cfc231e4 100644 --- a/game/settings/settings.py +++ b/game/settings/settings.py @@ -332,6 +332,13 @@ class Settings: default=False, detail="AI will jettison their fuel tanks as soon as they're empty.", ) + ai_vertical_takoff_landing: bool = boolean_option( + "AI helicopters use vertical takeoff and landing", + page=CAMPAIGN_DOCTRINE_PAGE, + section=GENERAL_SECTION, + default=False, + detail="AI will use vertical takeoff and landing instead of combat takeoff and landing.", + ) max_plane_altitude_offset: int = bounded_int_option( "Maximum randomized altitude offset (x1000 ft) for airplanes.", page=CAMPAIGN_DOCTRINE_PAGE, diff --git a/requirements.txt b/requirements.txt index fa971783..06388171 100644 --- a/requirements.txt +++ b/requirements.txt @@ -33,7 +33,7 @@ pluggy==1.5.0 pre-commit==3.7.1 pydantic==2.7.4 pydantic-settings==2.3.3 -pydcs @ git+https://github.com/dcs-retribution/pydcs@a5292f2d1803ba13dd83d6b024837d8eb44fd702 +pydcs @ git+https://github.com/dcs-retribution/pydcs@aa892f0da70586febfe8046bcd92cae4eae70964 pyinstaller==5.13.2 pyinstaller-hooks-contrib==2024.0 pyparsing==3.1.2