Skip to content

Commit 0239428

Browse files
committed
Reset randomized slot values.
1 parent d5597b7 commit 0239428

3 files changed

Lines changed: 19 additions & 1 deletion

File tree

Core/GameEngine/Include/GameNetwork/GameInfo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class GameSlot
101101
FirewallHelperClass::FirewallBehaviorType getNATBehavior() const { return m_NATBehavior; }
102102

103103
void saveOriginalSetup();
104+
Bool getSaveOriginalSetup() const { return m_saveOriginalSetup; }
104105
Int getOriginalPlayerTemplate() const { return m_origPlayerTemplate; }
105106
Int getOriginalColor() const { return m_origColor; }
106107
Int getOriginalStartPos() const { return m_origStartPos; }
@@ -130,6 +131,7 @@ class GameSlot
130131
Bool m_isAccepted;
131132
Bool m_hasMap;
132133
Bool m_isMuted;
134+
Bool m_saveOriginalSetup;
133135
Int m_color; ///< color, or -1 for random
134136
Int m_startPos; ///< start position, or -1 for random
135137
Int m_playerTemplate; ///< PlayerTemplate

Core/GameEngine/Source/GameNetwork/GameInfo.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ void GameSlot::reset()
7070
m_disconnected = FALSE;
7171
m_port = 0;
7272
m_isMuted = FALSE;
73+
m_saveOriginalSetup = TRUE;
7374
m_origPlayerTemplate = -1;
7475
m_origStartPos = -1;
7576
m_origColor = -1;
@@ -84,6 +85,8 @@ void GameSlot::saveOriginalSetup()
8485
m_origColor = m_color;
8586
DEBUG_LOG(("GameSlot::saveOriginalSetup() - color=%d, pos=%d, house=%d",
8687
m_color, m_startPos, m_playerTemplate));
88+
89+
m_saveOriginalSetup = FALSE;
8790
}
8891

8992
static Int getSlotIndex(const GameSlot *slot)

GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1265,7 +1265,20 @@ void GameLogic::startNewGame( Bool loadingSaveGame )
12651265
{
12661266
GameSlot *slot = TheGameInfo->getSlot(i);
12671267
if (!loadingSaveGame) {
1268-
slot->saveOriginalSetup();
1268+
if (!slot->getSaveOriginalSetup())
1269+
{
1270+
DEBUG_ASSERTCRASH(m_gameMode == GAME_SKIRMISH, ("Expected GAME_SKIRMISH but got %s", toString(m_gameMode)));
1271+
1272+
// TheSuperHackers @fix Caball009 19/03/2026 Random color, position and faction are based on the logical seed. For improved determinism,
1273+
// restarted games now set the original values so that the games start with the exact same logical seed values as the first time.
1274+
slot->setColor(slot->getOriginalColor());
1275+
slot->setStartPos(slot->getOriginalStartPos());
1276+
slot->setPlayerTemplate(slot->getOriginalPlayerTemplate());
1277+
}
1278+
else
1279+
{
1280+
slot->saveOriginalSetup();
1281+
}
12691282
}
12701283
if (slot->isAI())
12711284
{

0 commit comments

Comments
 (0)