@@ -47,15 +47,17 @@ SatisfactorySave::SaveGame::SaveGame(const std::filesystem::path& filepath) {
4747 IStreamArchive ar (std::move (file_data_blob));
4848
4949 // Store header SaveVersion as first stack entry.
50- auto save_version_stack_pusher = ar.pushSaveVersion (mSaveHeader .SaveVersion );
50+ auto save_version_stack_pusher = ar.SaveVersion ().push (mSaveHeader .SaveVersion );
51+ // Store UE5 version as first stack entry.
52+ auto ue5_version_stack_pusher = ar.UE5Version ().push (1000 );
5153
5254 // Validate blob size
5355 if (file_data_blob_size - sizeof (int64_t ) != ar.read <int64_t >()) {
5456 throw std::runtime_error (" Bad blob size!" );
5557 }
5658 TIME_MEASURE_END (" toStream" );
5759
58- if (ar.getSaveVersion () >= 53 ) {
60+ if (ar.SaveVersion (). get () >= 53 ) {
5961 mPersistentLevelSaveObjectVersionData = FSaveObjectVersionData ();
6062 ar << mPersistentLevelSaveObjectVersionData .value ();
6163 } else {
@@ -71,7 +73,13 @@ SatisfactorySave::SaveGame::SaveGame(const std::filesystem::path& filepath) {
7173 TIME_MEASURE_END (" PerLevelData" );
7274
7375 TIME_MEASURE_START (" PersistentAndRuntimeData" );
76+ std::unique_ptr<StackGuard<int32_t >> persistent_level_version_stack_pusher;
77+ if (mPersistentLevelSaveObjectVersionData .has_value ()) {
78+ persistent_level_version_stack_pusher =
79+ ar.UE5Version ().push (mPersistentLevelSaveObjectVersionData .value ().PackageFileVersion .FileVersionUE5 );
80+ }
7481 ar << mPersistentAndRuntimeData ;
82+ persistent_level_version_stack_pusher.reset ();
7583 TIME_MEASURE_END (" PersistentAndRuntimeData" );
7684
7785 // Parse unresolved data
@@ -94,27 +102,35 @@ void SatisfactorySave::SaveGame::save(const std::filesystem::path& filepath) {
94102 // Serialize data to blob
95103 OStreamArchive ar;
96104
97- auto save_version_stack_pusher = ar.pushSaveVersion (mSaveHeader .SaveVersion );
105+ auto save_version_stack_pusher = ar.SaveVersion ().push (mSaveHeader .SaveVersion );
106+ auto ue5_version_stack_pusher = ar.UE5Version ().push (1000 );
98107
99108 // Size placeholder
100109 ar.write <int64_t >(0 );
101110
102- if (ar.getSaveVersion () >= 53 ) {
111+ if (ar.SaveVersion (). get () >= 53 ) {
103112 if (!mPersistentLevelSaveObjectVersionData .has_value ()) {
104113 throw std::runtime_error (" Missing mPersistentLevelSaveObjectVersionData!" );
105114 }
106115 ar << mPersistentLevelSaveObjectVersionData .value ();
107116 }
108117 ar << SaveGameValidationData;
109118 ar << mPerLevelDataMap ;
119+ std::unique_ptr<StackGuard<int32_t >> persistent_level_version_stack_pusher;
120+ if (mPersistentLevelSaveObjectVersionData .has_value ()) {
121+ persistent_level_version_stack_pusher =
122+ ar.UE5Version ().push (mPersistentLevelSaveObjectVersionData .value ().PackageFileVersion .FileVersionUE5 );
123+ }
110124 ar << mPersistentAndRuntimeData ;
125+ persistent_level_version_stack_pusher.reset ();
111126 ar << mUnresolvedWorldSaveData ;
112127
113128 // Store size
114129 auto blob_size = ar.tell ();
115130 ar.seek (0 );
116131 ar.write (static_cast <int64_t >(blob_size - sizeof (int64_t )));
117132
133+ ue5_version_stack_pusher.reset ();
118134 save_version_stack_pusher.reset ();
119135
120136 // Write to file
0 commit comments