diff --git a/game/event/event.py b/game/event/event.py
index 2f9b67ca..a3aaeb96 100644
--- a/game/event/event.py
+++ b/game/event/event.py
@@ -120,10 +120,13 @@ class Event:
self.game.red_ato, debriefing.air_losses, for_player=False
)
- @staticmethod
- def commit_air_losses(debriefing: Debriefing) -> None:
+ def commit_air_losses(self, debriefing: Debriefing) -> None:
for loss in debriefing.air_losses.losses:
- loss.pilot.alive = False
+ if (
+ not loss.pilot.player
+ or not self.game.settings.invulnerable_player_pilots
+ ):
+ loss.pilot.alive = False
aircraft = loss.flight.unit_type
cp = loss.flight.departure
available = cp.base.total_units_of_type(aircraft)
diff --git a/game/settings.py b/game/settings.py
index c853b513..2b53f8dd 100644
--- a/game/settings.py
+++ b/game/settings.py
@@ -36,6 +36,7 @@ class Settings:
restrict_weapons_by_date: bool = False
disable_legacy_aewc: bool = False
generate_dark_kneeboard: bool = False
+ invulnerable_player_pilots: bool = True
# Performance oriented
perf_red_alert_state: bool = True
diff --git a/qt_ui/windows/settings/QSettingsWindow.py b/qt_ui/windows/settings/QSettingsWindow.py
index e16f45ae..9701e5c2 100644
--- a/qt_ui/windows/settings/QSettingsWindow.py
+++ b/qt_ui/windows/settings/QSettingsWindow.py
@@ -92,7 +92,7 @@ class StartTypeComboBox(QComboBox):
class QSettingsWindow(QDialog):
def __init__(self, game: Game):
- super(QSettingsWindow, self).__init__()
+ super().__init__()
self.game = game
self.pluginsPage = None
@@ -285,6 +285,23 @@ class QSettingsWindow(QDialog):
self.ext_views.setChecked(self.game.settings.external_views_allowed)
self.ext_views.toggled.connect(self.applySettings)
+ def set_invulnerable_player_pilots(checked: bool) -> None:
+ self.game.settings.invulnerable_player_pilots = checked
+
+ invulnerable_player_pilots_label = QLabel(
+ "Player pilots cannot be killed
"
+ "Aircraft are vulnerable, but the player's pilot will be
"
+ "returned to the squadron at the end of the mission"
+ )
+
+ invulnerable_player_pilots_checkbox = QCheckBox()
+ invulnerable_player_pilots_checkbox.setChecked(
+ self.game.settings.invulnerable_player_pilots
+ )
+ invulnerable_player_pilots_checkbox.toggled.connect(
+ set_invulnerable_player_pilots
+ )
+
self.aiDifficultyLayout.addWidget(QLabel("Player coalition skill"), 0, 0)
self.aiDifficultyLayout.addWidget(
self.playerCoalitionSkill, 0, 1, Qt.AlignRight
@@ -295,6 +312,10 @@ class QSettingsWindow(QDialog):
self.aiDifficultyLayout.addWidget(self.enemyAASkill, 2, 1, Qt.AlignRight)
self.aiDifficultyLayout.addLayout(self.player_income, 3, 0)
self.aiDifficultyLayout.addLayout(self.enemy_income, 4, 0)
+ self.aiDifficultyLayout.addWidget(invulnerable_player_pilots_label, 5, 0)
+ self.aiDifficultyLayout.addWidget(
+ invulnerable_player_pilots_checkbox, 5, 1, Qt.AlignRight
+ )
self.aiDifficultySettings.setLayout(self.aiDifficultyLayout)
self.difficultyLayout.addWidget(self.aiDifficultySettings)