From d2a7de277596eb3820daba330e2010b8d9aac224 Mon Sep 17 00:00:00 2001 From: MetalStormGhost <89945461+MetalStormGhost@users.noreply.github.com> Date: Sun, 1 Jan 2023 16:21:08 +0200 Subject: [PATCH] Add new option in settings: OPFOR autoplanner aggressiveness (#61) "Threatened" threshold based on a suggestion from FinCenturion. (#61) --- changelog.md | 1 + game/commander/tasks/packageplanningtask.py | 11 ++++++++++- game/settings/settings.py | 13 +++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 92a62138..e8f62566 100644 --- a/changelog.md +++ b/changelog.md @@ -3,6 +3,7 @@ ## Features/Improvements * **[Mission Generation]** Given a CAS flight was planned, delay ground force attack until first CAS flight is on station * **[Mission Generation]** Add option to switch ATFLIR to LITENING automatically for ground based F-18C flights +* **[Mission Generation]** Add option to configure OPFOR autoplanner aggressiveness and have the AI take risks and plan missions against defended targets * **[Cheat Menu]** Option to instantly transfer squadrons across bases. * **[UI]** Add selectable units in faction overview during campaign generation. * **[UI]** Add button to rename pilots in Air Wing's Squadron dialog. diff --git a/game/commander/tasks/packageplanningtask.py b/game/commander/tasks/packageplanningtask.py index 906db4c5..d24492a8 100644 --- a/game/commander/tasks/packageplanningtask.py +++ b/game/commander/tasks/packageplanningtask.py @@ -5,6 +5,7 @@ import operator from abc import abstractmethod from dataclasses import dataclass, field from enum import IntEnum, auto, unique +import random from typing import Generic, Iterator, Optional, TYPE_CHECKING, TypeVar, Union from game.ato.flighttype import FlightType @@ -170,7 +171,15 @@ class PackagePlanningTask(TheaterCommanderTask, Generic[MissionTargetT]): if not ignore_iads: for iads_threat in self.iter_iads_threats(state): - threatened = True + # Only consider blue faction flights threatened. + # Red might still plan missions into hostile territory, + # depending on the aggressiveness setting. + if ( + state.context.coalition.player + or random.randint(1, 100) + > state.context.coalition.game.settings.opfor_autoplanner_aggressiveness + ): + threatened = True if iads_threat not in state.threatening_air_defenses: state.threatening_air_defenses.append(iads_threat) return not threatened diff --git a/game/settings/settings.py b/game/settings/settings.py index 33f8dd88..9b326ebb 100644 --- a/game/settings/settings.py +++ b/game/settings/settings.py @@ -395,6 +395,19 @@ class Settings: min=1, max=100, ) + opfor_autoplanner_aggressiveness: int = bounded_int_option( + "OPFOR autoplanner aggressiveness (%)", + page=MISSION_GENERATOR_PAGE, + section=GAMEPLAY_SECTION, + default=20, + min=0, + max=100, + detail=( + "Chance (larger number -> higher chance) that the OPFOR AI " + "autoplanner will take risks and plan flights against targets " + "within threatened airspace." + ), + ) # Performance perf_smoke_gen: bool = boolean_option(