From a5c39608d7560d4b78890cd83ad9e8200049d1e3 Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Fri, 27 Jun 2025 17:05:22 +0200 Subject: [PATCH 1/3] Added fallback to open options menu directly. --- .../Code/GameEngine/Source/Common/Recorder.cpp | 14 ++++++++++---- .../Code/GameEngine/Source/Common/Recorder.cpp | 14 ++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/Generals/Code/GameEngine/Source/Common/Recorder.cpp b/Generals/Code/GameEngine/Source/Common/Recorder.cpp index a1fa13adab..7f8e1655c0 100644 --- a/Generals/Code/GameEngine/Source/Common/Recorder.cpp +++ b/Generals/Code/GameEngine/Source/Common/Recorder.cpp @@ -1079,10 +1079,16 @@ void RecorderClass::handleCRCMessage(UnsignedInt newCRC, Int playerIndex, Bool f printf("CRC Mismatch in Frame %d\n", mismatchFrame); // TheSuperHackers @tweak Pause the game on mismatch. - Bool pause = TRUE; - Bool pauseMusic = FALSE; - Bool pauseInput = FALSE; - TheGameLogic->setGamePaused(pause, pauseMusic, pauseInput); + if (TheMouse->getVisibility()) + { + Bool pause = TRUE; + Bool pauseMusic = FALSE; + Bool pauseInput = FALSE; + TheGameLogic->setGamePaused(pause, pauseMusic, pauseInput); + } else { + // Open menu if mouse is hidden by a script (and keyboard input is probably ignored). + TheMessageStream->appendMessage(GameMessage::MSG_META_OPTIONS); + } } return; } diff --git a/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp b/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp index 8261cbbe7f..b19c183b94 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp @@ -1082,10 +1082,16 @@ void RecorderClass::handleCRCMessage(UnsignedInt newCRC, Int playerIndex, Bool f printf("CRC Mismatch in Frame %d\n", mismatchFrame); // TheSuperHackers @tweak Pause the game on mismatch. - Bool pause = TRUE; - Bool pauseMusic = FALSE; - Bool pauseInput = FALSE; - TheGameLogic->setGamePaused(pause, pauseMusic, pauseInput); + if (TheMouse->getVisibility()) + { + Bool pause = TRUE; + Bool pauseMusic = FALSE; + Bool pauseInput = FALSE; + TheGameLogic->setGamePaused(pause, pauseMusic, pauseInput); + } else { + // Open menu if mouse is hidden by a script (and keyboard input is probably ignored). + TheMessageStream->appendMessage(GameMessage::MSG_META_OPTIONS); + } } return; } From da6230880f17cfccd4c1fb0416d19f7104de86d5 Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Sun, 29 Jun 2025 00:31:59 +0200 Subject: [PATCH 2/3] Reverted changed in RecorderClass::handleCRCMessage. --- .../Code/GameEngine/Source/Common/Recorder.cpp | 14 ++++---------- .../Code/GameEngine/Source/Common/Recorder.cpp | 14 ++++---------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/Generals/Code/GameEngine/Source/Common/Recorder.cpp b/Generals/Code/GameEngine/Source/Common/Recorder.cpp index 7f8e1655c0..a1fa13adab 100644 --- a/Generals/Code/GameEngine/Source/Common/Recorder.cpp +++ b/Generals/Code/GameEngine/Source/Common/Recorder.cpp @@ -1079,16 +1079,10 @@ void RecorderClass::handleCRCMessage(UnsignedInt newCRC, Int playerIndex, Bool f printf("CRC Mismatch in Frame %d\n", mismatchFrame); // TheSuperHackers @tweak Pause the game on mismatch. - if (TheMouse->getVisibility()) - { - Bool pause = TRUE; - Bool pauseMusic = FALSE; - Bool pauseInput = FALSE; - TheGameLogic->setGamePaused(pause, pauseMusic, pauseInput); - } else { - // Open menu if mouse is hidden by a script (and keyboard input is probably ignored). - TheMessageStream->appendMessage(GameMessage::MSG_META_OPTIONS); - } + Bool pause = TRUE; + Bool pauseMusic = FALSE; + Bool pauseInput = FALSE; + TheGameLogic->setGamePaused(pause, pauseMusic, pauseInput); } return; } diff --git a/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp b/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp index b19c183b94..8261cbbe7f 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp @@ -1082,16 +1082,10 @@ void RecorderClass::handleCRCMessage(UnsignedInt newCRC, Int playerIndex, Bool f printf("CRC Mismatch in Frame %d\n", mismatchFrame); // TheSuperHackers @tweak Pause the game on mismatch. - if (TheMouse->getVisibility()) - { - Bool pause = TRUE; - Bool pauseMusic = FALSE; - Bool pauseInput = FALSE; - TheGameLogic->setGamePaused(pause, pauseMusic, pauseInput); - } else { - // Open menu if mouse is hidden by a script (and keyboard input is probably ignored). - TheMessageStream->appendMessage(GameMessage::MSG_META_OPTIONS); - } + Bool pause = TRUE; + Bool pauseMusic = FALSE; + Bool pauseInput = FALSE; + TheGameLogic->setGamePaused(pause, pauseMusic, pauseInput); } return; } From 5e1729d0e50be6cff44f38dfebc95805e5a0cd72 Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Sun, 29 Jun 2025 00:33:41 +0200 Subject: [PATCH 3/3] Added logic to unblock keyboard input. --- Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp | 3 +++ .../Code/GameEngine/Source/GameLogic/System/GameLogic.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index e90f56366b..e59aa0d3cc 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -3779,6 +3779,9 @@ void GameLogic::pauseGameMusic(Bool paused) // ------------------------------------------------------------------------------------------------ void GameLogic::pauseGameInput(Bool paused) { + // unblock keyboard input if blocked by scripts + TheWindowManager->winSetFocus(NULL); + if(m_pauseInput == paused) return; diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index 7c3b1e3dcf..21d11a6b98 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -4346,6 +4346,9 @@ void GameLogic::pauseGameMusic(Bool paused) // ------------------------------------------------------------------------------------------------ void GameLogic::pauseGameInput(Bool paused) { + // unblock keyboard input if blocked by scripts + TheWindowManager->winSetFocus(NULL); + if(m_pauseInput == paused) return;