diff --git a/src/core/cheats.h b/src/core/cheats.h index ac731e3a3..d010bb22c 100644 --- a/src/core/cheats.h +++ b/src/core/cheats.h @@ -107,6 +107,9 @@ public: ALWAYS_INLINE u32 GetCodeCount() const { return static_cast(m_codes.size()); } ALWAYS_INLINE bool IsCodeEnabled(u32 index) const { return m_codes[index].enabled; } + ALWAYS_INLINE bool GetMasterEnable() const { return m_master_enable; } + ALWAYS_INLINE void SetMasterEnable(bool enable) { m_master_enable = enable; } + const CheatCode* FindCode(const char* name) const; const CheatCode* FindCode(const char* group, const char* name) const; @@ -144,6 +147,7 @@ public: private: std::vector m_codes; + bool m_master_enable = true; }; class MemoryScan diff --git a/src/frontend-common/common_host_interface.cpp b/src/frontend-common/common_host_interface.cpp index 0b0e3c3bd..6361690b3 100644 --- a/src/frontend-common/common_host_interface.cpp +++ b/src/frontend-common/common_host_interface.cpp @@ -964,6 +964,25 @@ void CommonHostInterface::DoFrameStep() PauseSystem(false); } +void CommonHostInterface::DoToggleCheats() +{ + if (System::IsShutdown()) + return; + + CheatList* cl = System::GetCheatList(); + if (!cl) + { + AddOSDMessage(TranslateStdString("OSDMessage", "No cheats are loaded."), 10.0f); + return; + } + + cl->SetMasterEnable(!cl->GetMasterEnable()); + AddFormattedOSDMessage(10.0f, + cl->GetMasterEnable() ? TranslateString("OSDMessage", "%u cheats are now active.") : + TranslateString("OSDMessage", "%u cheats are now inactive."), + cl->GetEnabledCodeCount()); +} + std::optional CommonHostInterface::GetHostKeyCode(const std::string_view key_code) const { @@ -1449,6 +1468,12 @@ void CommonHostInterface::RegisterGeneralHotkeys() PauseSystem(!System::IsPaused()); }); + RegisterHotkey(StaticString(TRANSLATABLE("Hotkeys", "General")), StaticString("ToggleCheats"), + StaticString(TRANSLATABLE("Hotkeys", "Toggle Cheats")), [this](bool pressed) { + if (pressed) + DoToggleCheats(); + }); + RegisterHotkey(StaticString(TRANSLATABLE("Hotkeys", "General")), StaticString("PowerOff"), StaticString(TRANSLATABLE("Hotkeys", "Power Off System")), [this](bool pressed) { if (pressed && System::IsValid()) @@ -1490,9 +1515,7 @@ void CommonHostInterface::RegisterGeneralHotkeys() RegisterHotkey(StaticString(TRANSLATABLE("Hotkeys", "General")), StaticString("FrameStep"), StaticString(TRANSLATABLE("Hotkeys", "Frame Step")), [this](bool pressed) { if (pressed) - { DoFrameStep(); - } }); } diff --git a/src/frontend-common/common_host_interface.h b/src/frontend-common/common_host_interface.h index b138b7b34..2f1f695fc 100644 --- a/src/frontend-common/common_host_interface.h +++ b/src/frontend-common/common_host_interface.h @@ -331,6 +331,7 @@ protected: void DrawOSDMessages(); void DrawDebugWindows(); void DoFrameStep(); + void DoToggleCheats(); std::unique_ptr m_game_list;