@@ -4804,13 +4804,14 @@ void GameLogic::prepareLogicForObjectLoad()
48044804 * 5: Added xfering the BuildAssistant's sell list.
48054805 * 9: Added m_rankPointsToAddAtGameStart, or else on a load game, your RestartGame button will forget your exp
48064806 * 10: xfer m_superweaponRestriction
4807+ * 11: TheSuperHackers @tweak Save objects in reverse order so they load in correct order
48074808 */
48084809// ------------------------------------------------------------------------------------------------
48094810void GameLogic::xfer ( Xfer *xfer )
48104811{
48114812
48124813 // version
4813- const XferVersion currentVersion = 10 ;
4814+ const XferVersion currentVersion = 11 ;
48144815 XferVersion version = currentVersion;
48154816 xfer->xferVersion ( &version, currentVersion );
48164817
@@ -4843,8 +4844,13 @@ void GameLogic::xfer( Xfer *xfer )
48434844 ObjectTOCEntry *tocEntry;
48444845 if ( xfer->getXferMode () == XFER_SAVE )
48454846 {
4846-
4847+ // TheSuperHackers @fix bobtista 27/01/2026 Save objects in reverse order (newest first)
4848+ // so they load in the correct order (oldest objects at head of list).
4849+ Object *lastObj = nullptr ;
48474850 for ( obj = getFirstObject (); obj; obj = obj->getNextObject () )
4851+ lastObj = obj;
4852+
4853+ for ( obj = lastObj; obj; obj = obj->getPrevObject () )
48484854 {
48494855
48504856 // get the object TOC entry for this template
@@ -4927,6 +4933,25 @@ void GameLogic::xfer( Xfer *xfer )
49274933
49284934 }
49294935
4936+ // TheSuperHackers @fix bobtista 27/01/2026 Reverse object list for old saves.
4937+ // Old saves stored objects oldest-first, which results in reversed order when loaded
4938+ // since objects are prepended during creation. Version 11+ saves in reverse order.
4939+ if ( version <= 10 )
4940+ {
4941+ Object *prev = nullptr ;
4942+ Object *current = m_objList;
4943+ Object *next = nullptr ;
4944+ while ( current != nullptr )
4945+ {
4946+ next = current->getNextObject ();
4947+ current->friend_setNextObject ( prev );
4948+ current->friend_setPrevObject ( next );
4949+ prev = current;
4950+ current = next;
4951+ }
4952+ m_objList = prev;
4953+ }
4954+
49304955 }
49314956
49324957 // campaign info
0 commit comments