diff --git a/changelog.md b/changelog.md index 4829eff8..ac96120e 100644 --- a/changelog.md +++ b/changelog.md @@ -12,6 +12,7 @@ Saves from 2.3 are not compatible with 2.4. * **[Campaign AI]** Reserve aircraft will be ordered if needed to prioritize next turn's CAP/CAS over offensive missions. * **[Campaign AI]** Multiple rounds of CAP will be planned (roughly 90 minutes of coverage). Default starting budget has increased to account for the increased need for aircraft. * **[Mission Generator]** Multiple groups are created for complex SAM sites (SAMs with additional point defense or SHORADS), improving Skynet behavior. +* **[Cheat Menu]** Added ability to toggle frontline advance/retreat cheats. * **[Skynet]** Updated to 2.0.1. * **[Skynet]** Point defenses are now configured to remain on to protect the site they accompany. * **[Balance]** Opfor now gains income using the same rules as the player, significantly increasing their income relative to the player for most campaigns. diff --git a/game/settings.py b/game/settings.py index 5c6f1a4b..565eae80 100644 --- a/game/settings.py +++ b/game/settings.py @@ -49,6 +49,7 @@ class Settings: # Cheating show_red_ato: bool = False + enable_frontline_cheats: bool = False never_delay_player_flights: bool = False diff --git a/qt_ui/widgets/map/QFrontLine.py b/qt_ui/widgets/map/QFrontLine.py index 2ca71953..9f99ab13 100644 --- a/qt_ui/widgets/map/QFrontLine.py +++ b/qt_ui/widgets/map/QFrontLine.py @@ -58,13 +58,14 @@ class QFrontLine(QGraphicsLineItem): new_package_action.triggered.connect(self.open_new_package_dialog) menu.addAction(new_package_action) - cheat_forward = QAction(f"CHEAT: Advance Frontline") - cheat_forward.triggered.connect(self.cheat_forward) - menu.addAction(cheat_forward) + if self.game_model.game.settings.enable_frontline_cheats: + cheat_forward = QAction(f"CHEAT: Advance Frontline") + cheat_forward.triggered.connect(self.cheat_forward) + menu.addAction(cheat_forward) - cheat_backward = QAction(f"CHEAT: Retreat Frontline") - cheat_backward.triggered.connect(self.cheat_backward) - menu.addAction(cheat_backward) + cheat_backward = QAction(f"CHEAT: Retreat Frontline") + cheat_backward.triggered.connect(self.cheat_backward) + menu.addAction(cheat_backward) menu.exec_(event.screenPos()) diff --git a/qt_ui/windows/settings/QSettingsWindow.py b/qt_ui/windows/settings/QSettingsWindow.py index cd6deb4b..4cf426a3 100644 --- a/qt_ui/windows/settings/QSettingsWindow.py +++ b/qt_ui/windows/settings/QSettingsWindow.py @@ -39,13 +39,24 @@ class CheatSettingsBox(QGroupBox): self.red_ato_checkbox = QCheckBox() self.red_ato_checkbox.setChecked(game.settings.show_red_ato) self.red_ato_checkbox.toggled.connect(apply_settings) + + self.frontline_cheat_checkbox = QCheckBox() + self.frontline_cheat_checkbox.setChecked(game.settings.enable_frontline_cheats) + self.frontline_cheat_checkbox.toggled.connect(apply_settings) + self.red_ato = QLabeledWidget("Show Red ATO:", self.red_ato_checkbox) - self.main_layout.addLayout(self.red_ato) + self.main_layout.addLayout(self.red_ato) + self.frontline_cheat = QLabeledWidget("Enable Frontline Cheats:", self.frontline_cheat_checkbox) + self.main_layout.addLayout(self.frontline_cheat) @property def show_red_ato(self) -> bool: return self.red_ato_checkbox.isChecked() + @property + def show_frontline_cheat(self) -> bool: + return self.frontline_cheat_checkbox.isChecked() + class QSettingsWindow(QDialog): @@ -447,7 +458,7 @@ class QSettingsWindow(QDialog): btn = QPushButton("Cheat " + str(amount) + "M") btn.setProperty("style", "btn-danger") btn.clicked.connect(self.cheatLambda(amount)) - self.moneyCheatBoxLayout.addWidget(btn, i/2, i%2) + self.moneyCheatBoxLayout.addWidget(btn, i/2, i%2) self.cheatLayout.addWidget(self.moneyCheatBox, stretch=1) def cheatLambda(self, amount): @@ -491,6 +502,7 @@ class QSettingsWindow(QDialog): self.game.settings.perf_do_not_cull_carrier = self.culling_do_not_cull_carrier.isChecked() self.game.settings.show_red_ato = self.cheat_options.show_red_ato + self.game.settings.enable_frontline_cheats = self.cheat_options.show_frontline_cheat self.game.compute_conflicts_position() GameUpdateSignal.get_instance().updateGame(self.game)