Skip to content

Commit 805d193

Browse files
committed
bugfix(savegame): Guard GameLogic xfer version bump with RETAIL_COMPATIBLE_XFER_SAVE
1 parent b54c8ec commit 805d193

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4244,14 +4244,18 @@ void GameLogic::prepareLogicForObjectLoad()
42444244
* this version breaks compatibility with previous versions. (CBD)
42454245
* 5: Added xfering the BuildAssistant's sell list.
42464246
* 9: Added m_rankPointsToAddAtGameStart, or else on a load game, your RestartGame button will forget your exp
4247-
* 10: TheSuperHackers @tweak Save objects in reverse order so they load in correct order. Reverse object list for old saves.
4247+
* 10: TheSuperHackers @fix Save objects in reverse order so they load in correct order
42484248
*/
42494249
// ------------------------------------------------------------------------------------------------
42504250
void GameLogic::xfer( Xfer *xfer )
42514251
{
42524252

42534253
// version
4254+
#if RETAIL_COMPATIBLE_XFER_SAVE
4255+
const XferVersion currentVersion = 9;
4256+
#else
42544257
const XferVersion currentVersion = 10;
4258+
#endif
42554259
XferVersion version = currentVersion;
42564260
xfer->xferVersion( &version, currentVersion );
42574261

@@ -4284,14 +4288,17 @@ void GameLogic::xfer( Xfer *xfer )
42844288
ObjectTOCEntry *tocEntry;
42854289
if( xfer->getXferMode() == XFER_SAVE )
42864290
{
4287-
4288-
// TheSuperHackers @fix bobtista 27/01/2026 Save objects in reverse order (newest first)
4291+
#if !RETAIL_COMPATIBLE_XFER_SAVE
4292+
// TheSuperHackers @fix bobtista 07/03/2026 Save objects in reverse order (newest first)
42894293
// so they load in the correct order (oldest objects at head of list).
42904294
Object *lastObj = nullptr;
42914295
for( obj = getFirstObject(); obj; obj = obj->getNextObject() )
42924296
lastObj = obj;
42934297

42944298
for( obj = lastObj; obj; obj = obj->getPrevObject() )
4299+
#else
4300+
for( obj = getFirstObject(); obj; obj = obj->getNextObject() )
4301+
#endif
42954302
{
42964303

42974304
// get the object TOC entry for this template
@@ -4374,9 +4381,9 @@ void GameLogic::xfer( Xfer *xfer )
43744381

43754382
}
43764383

4377-
// TheSuperHackers @fix bobtista 27/01/2026 Reverse object list for old saves.
4378-
// Old saves stored objects oldest-first, which results in reversed order when loaded
4379-
// since objects are prepended during creation. Version 10+ saves in reverse order.
4384+
// TheSuperHackers @fix bobtista 07/03/2026 Reverse object list after load.
4385+
// Objects are prepended during creation, which reverses the saved order.
4386+
// Version 10+ saves in reverse order so they load in the correct order.
43804387
if ( version <= 9 )
43814388
{
43824389
Object *prev = nullptr;

0 commit comments

Comments
 (0)