diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/QuitMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/QuitMenu.cpp index 58e2183df2..abfadfffb5 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/QuitMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/QuitMenu.cpp @@ -200,6 +200,11 @@ static void restartMissionMenu() Int gameMode = TheGameLogic->getGameMode(); AsciiString mapName = TheGlobalData->m_mapName; + // TheSuperHackers @bugfix Caball009 07/02/2026 Reuse the previous seed value for the new skirmish match to prevent mismatches. + // Campaign, challenge, and skirmish single-player scenarios all use GAME_SINGLE_PLAYER and are expected to use 0 as seed value. + DEBUG_ASSERTCRASH((TheSkirmishGameInfo != nullptr) == (gameMode == GAME_SKIRMISH), ("Unexpected game mode on map / mission restart")); + const UnsignedInt seed = (TheSkirmishGameInfo) ? TheSkirmishGameInfo->getSeed() : 0; + // // if the map name was from a save game it will have "Save/" at the front of it, // we want to go back to the original pristine map string for the map name when restarting @@ -238,11 +243,8 @@ static void restartMissionMenu() TheScriptEngine->getGlobalDifficulty(), rankPointsStartedWith) ); - //if (TheGlobalData->m_fixedSeed >= 0) - //InitRandom(TheGlobalData->m_fixedSeed); - InitRandom(0); - //else - // InitGameLogicRandom(GameClientRandomValue(0, INT_MAX - 1)); + + InitRandom(seed); } //TheTransitionHandler->remove("QuitFull"); //KRISMORNESS ADD //quitMenuLayout = nullptr; //KRISMORNESS ADD diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/SkirmishGameOptionsMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/SkirmishGameOptionsMenu.cpp index a72d2c2999..4d1376bbfe 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/SkirmishGameOptionsMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/SkirmishGameOptionsMenu.cpp @@ -432,7 +432,6 @@ void reallyDoStart( void ) TheWritableGlobalData->m_mapName = TheSkirmishGameInfo->getMap(); TheSkirmishGameInfo->startGame(0); - InitGameLogicRandom(TheSkirmishGameInfo->getSeed()); Bool isSkirmish = TRUE; const MapMetaData *md = TheMapCache->findMap(TheSkirmishGameInfo->getMap()); @@ -443,6 +442,8 @@ void reallyDoStart( void ) if (isSkirmish) { + InitGameLogicRandom(TheSkirmishGameInfo->getSeed()); + GameMessage *msg = TheMessageStream->appendMessage( GameMessage::MSG_NEW_GAME ); msg->appendIntegerArgument(GAME_SKIRMISH); msg->appendIntegerArgument(DIFFICULTY_NORMAL); // not really used; just specified so we can add the game speed last @@ -451,6 +452,8 @@ void reallyDoStart( void ) } else { + InitGameLogicRandom(0); + GameMessage *msg = TheMessageStream->appendMessage( GameMessage::MSG_NEW_GAME ); msg->appendIntegerArgument(GAME_SINGLE_PLAYER); msg->appendIntegerArgument(DIFFICULTY_NORMAL); // not really used; just specified so we can add the game speed last