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)