From e16e890471c446cf5e113ed390cba08e36f0b15f Mon Sep 17 00:00:00 2001 From: stm <14291421+stephanmeesters@users.noreply.github.com> Date: Tue, 16 Dec 2025 18:13:17 +0100 Subject: [PATCH 1/3] bugfix: Camera edge scroll broken after loading a savegame from ingame menu --- Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp | 2 ++ .../Code/GameEngine/Source/GameLogic/System/GameLogic.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index 03b6cfda0f..b23df8a52c 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -495,6 +495,8 @@ void GameLogic::reset( void ) TheWaterTransparency = (WaterTransparencySetting*) wt->deleteOverrides(); m_rankPointsToAddAtGameStart = 0; + + TheMouse->onGamePaused(FALSE); } static Object * placeObjectAtPosition(Int slotNum, AsciiString objectTemplateName, Coord3D& pos, Player *pPlayer, diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index a6001e2206..d6fcde4f51 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -512,6 +512,8 @@ void GameLogic::reset( void ) TheWeatherSetting = (WeatherSetting*) ws->deleteOverrides(); m_rankPointsToAddAtGameStart = 0; + + TheMouse->onGamePaused(FALSE); } static Object * placeObjectAtPosition(Int slotNum, AsciiString objectTemplateName, Coord3D& pos, Player *pPlayer, From 6b3f28c478a7470471d27fb0bb1c5bd88154ffb8 Mon Sep 17 00:00:00 2001 From: stm <14291421+stephanmeesters@users.noreply.github.com> Date: Wed, 17 Dec 2025 21:28:16 +0100 Subject: [PATCH 2/3] refactor: Use setGamePaused in reset and init --- .../Source/GameLogic/System/GameLogic.cpp | 20 ++++++------------- .../Source/GameLogic/System/GameLogic.cpp | 20 ++++++------------- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index b23df8a52c..643f978872 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -401,14 +401,11 @@ void GameLogic::init( void ) //ThePlayerList->setLocalPlayer(0); m_CRC = 0; - m_pauseFrame = 0; - m_gamePaused = FALSE; - m_pauseSound = FALSE; - m_pauseMusic = FALSE; - m_pauseInput = FALSE; + m_logicTimeScaleEnabledMemory = FALSE; m_inputEnabledMemory = TRUE; m_mouseVisibleMemory = TRUE; - m_logicTimeScaleEnabledMemory = FALSE; + setGamePaused(FALSE); + m_pauseFrame = 0; for(Int i = 0; i < MAX_SLOTS; ++i) { @@ -444,14 +441,11 @@ void GameLogic::reset( void ) m_objHash.reserve(OBJ_HASH_SIZE); #endif - m_pauseFrame = 0; - m_gamePaused = FALSE; - m_pauseSound = FALSE; - m_pauseMusic = FALSE; - m_pauseInput = FALSE; + m_logicTimeScaleEnabledMemory = FALSE; m_inputEnabledMemory = TRUE; m_mouseVisibleMemory = TRUE; - m_logicTimeScaleEnabledMemory = FALSE; + setGamePaused(FALSE); + m_pauseFrame = 0; setFPMode(); @@ -495,8 +489,6 @@ void GameLogic::reset( void ) TheWaterTransparency = (WaterTransparencySetting*) wt->deleteOverrides(); m_rankPointsToAddAtGameStart = 0; - - TheMouse->onGamePaused(FALSE); } static Object * placeObjectAtPosition(Int slotNum, AsciiString objectTemplateName, Coord3D& pos, Player *pPlayer, diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index d6fcde4f51..3ae96ea9ae 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -416,14 +416,11 @@ void GameLogic::init( void ) //ThePlayerList->setLocalPlayer(0); m_CRC = 0; - m_pauseFrame = 0; - m_gamePaused = FALSE; - m_pauseSound = FALSE; - m_pauseMusic = FALSE; - m_pauseInput = FALSE; + m_logicTimeScaleEnabledMemory = FALSE; m_inputEnabledMemory = TRUE; m_mouseVisibleMemory = TRUE; - m_logicTimeScaleEnabledMemory = FALSE; + setGamePaused(FALSE); + m_pauseFrame = 0; for(Int i = 0; i < MAX_SLOTS; ++i) { @@ -457,14 +454,11 @@ void GameLogic::reset( void ) m_objVector.clear(); m_objVector.resize(OBJ_HASH_SIZE, NULL); - m_pauseFrame = 0; - m_gamePaused = FALSE; - m_pauseSound = FALSE; - m_pauseMusic = FALSE; - m_pauseInput = FALSE; + m_logicTimeScaleEnabledMemory = FALSE; m_inputEnabledMemory = TRUE; m_mouseVisibleMemory = TRUE; - m_logicTimeScaleEnabledMemory = FALSE; + setGamePaused(FALSE); + m_pauseFrame = 0; setFPMode(); @@ -512,8 +506,6 @@ void GameLogic::reset( void ) TheWeatherSetting = (WeatherSetting*) ws->deleteOverrides(); m_rankPointsToAddAtGameStart = 0; - - TheMouse->onGamePaused(FALSE); } static Object * placeObjectAtPosition(Int slotNum, AsciiString objectTemplateName, Coord3D& pos, Player *pPlayer, From 474d1da41c4dceab44cf9202b48f51e222e624f8 Mon Sep 17 00:00:00 2001 From: stm <14291421+stephanmeesters@users.noreply.github.com> Date: Thu, 18 Dec 2025 12:45:14 +0100 Subject: [PATCH 3/3] refactor: Dedup by calling reset in the init of GameLogic --- .../Source/GameLogic/System/GameLogic.cpp | 26 +-------------- .../Source/GameLogic/System/GameLogic.cpp | 33 +------------------ 2 files changed, 2 insertions(+), 57 deletions(-) diff --git a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index 643f978872..f082c7af6e 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -370,9 +370,6 @@ void GameLogic::init( void ) setFPMode(); - /// @todo Clear object and destroy lists - setDefaults( FALSE ); - // create the partition manager ThePartitionManager = NEW PartitionManager; ThePartitionManager->init(); @@ -400,29 +397,8 @@ void GameLogic::init( void ) //DEBUG_ASSERTCRASH(ThePlayerList, ("null ThePlayerList")); //ThePlayerList->setLocalPlayer(0); - m_CRC = 0; - m_logicTimeScaleEnabledMemory = FALSE; - m_inputEnabledMemory = TRUE; - m_mouseVisibleMemory = TRUE; - setGamePaused(FALSE); - m_pauseFrame = 0; - - for(Int i = 0; i < MAX_SLOTS; ++i) - { - m_progressComplete[i] = FALSE; - m_progressCompleteTimeout[i] = 0; - } - m_forceGameStartByTimeOut = FALSE; - - m_isScoringEnabled = TRUE; - m_showBehindBuildingMarkers = TRUE; - m_drawIconUI = TRUE; - m_showDynamicLOD = TRUE; - m_scriptHulkMaxLifetimeOverride = -1; - + reset(); m_isInUpdate = FALSE; - - m_rankPointsToAddAtGameStart = 0; } //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index 3ae96ea9ae..36cadb399c 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -338,7 +338,6 @@ void GameLogic::destroyAllObjectsImmediate() // ------------------------------------------------------------------------------------------------ GameLogic::~GameLogic() { - // clear any object TOC we might have m_objectTOC.clear(); @@ -382,18 +381,13 @@ GameLogic::~GameLogic() // ------------------------------------------------------------------------------------------------ void GameLogic::init( void ) { - setFPMode(); - /// @todo Clear object and destroy lists - setDefaults( FALSE ); - // create the partition manager ThePartitionManager = NEW PartitionManager; ThePartitionManager->init(); ThePartitionManager->setName("ThePartitionManager"); - // Create system for holding deleted objects that are // still in the partition manager because player has a fogged // view of them. @@ -411,33 +405,8 @@ void GameLogic::init( void ) TheScriptEngine->init(); TheScriptEngine->setName("TheScriptEngine"); - // create a team for the player - //DEBUG_ASSERTCRASH(ThePlayerList, ("null ThePlayerList")); - //ThePlayerList->setLocalPlayer(0); - - m_CRC = 0; - m_logicTimeScaleEnabledMemory = FALSE; - m_inputEnabledMemory = TRUE; - m_mouseVisibleMemory = TRUE; - setGamePaused(FALSE); - m_pauseFrame = 0; - - for(Int i = 0; i < MAX_SLOTS; ++i) - { - m_progressComplete[i] = FALSE; - m_progressCompleteTimeout[i] = 0; - } - m_forceGameStartByTimeOut = FALSE; - - m_isScoringEnabled = TRUE; - m_showBehindBuildingMarkers = TRUE; - m_drawIconUI = TRUE; - m_showDynamicLOD = TRUE; - m_scriptHulkMaxLifetimeOverride = -1; - + reset(); m_isInUpdate = FALSE; - - m_rankPointsToAddAtGameStart = 0; } //-------------------------------------------------------------------------------------------------