diff --git a/src/Gvas/File.cpp b/src/Gvas/File.cpp index 7493f5d..e99ffd2 100644 --- a/src/Gvas/File.cpp +++ b/src/Gvas/File.cpp @@ -95,16 +95,39 @@ File::saveToFile() { return false; } - if(!writer.writeArray(arrayView(_magicBytes)) || - !writer.writeUint32(_saveVersion) || - !writer.writeUint32(_packageVersion) || - !writer.writeUint16(_engineVersion.major) || - !writer.writeUint16(_engineVersion.minor) || - !writer.writeUint16(_engineVersion.patch) || - !writer.writeUint32(_engineVersion.build) || + if(!writer.writeArray(arrayView(_magicBytes))) { + _lastError = "Couldn't write the magic bytes."_s; + LOG_ERROR(_lastError); + return false; + } + + if(!writer.writeUint32(_saveVersion)) { + _lastError = "Couldn't write the save version."_s; + LOG_ERROR(_lastError); + return false; + } + + if(!writer.writeUint32(_packageVersion)) { + _lastError = "Couldn't write the package version."_s; + LOG_ERROR(_lastError); + return false; + } + + if(_saveVersion == 3) { + if(!writer.writeUint32(_unknown)) { + _lastError = "Couldn't write some unknown bytes."_s; + LOG_ERROR(_lastError); + return false; + } + } + + if(!writer.writeUint16(_engineVersion.major) || + !writer.writeUint16(_engineVersion.minor) || + !writer.writeUint16(_engineVersion.patch) || + !writer.writeUint32(_engineVersion.build) || !writer.writeUEString(_engineVersion.buildId)) { - _lastError = "Couldn't write the header."_s; + _lastError = "Couldn't write the engine version."_s; LOG_ERROR(_lastError); return false; } @@ -198,15 +221,53 @@ File::loadData() { return; } - if(!reader.readUint32(_saveVersion) || - !reader.readUint32(_packageVersion) || - !reader.readUint16(_engineVersion.major) || - !reader.readUint16(_engineVersion.minor) || - !reader.readUint16(_engineVersion.patch) || - !reader.readUint32(_engineVersion.build) || - !reader.readUEString(_engineVersion.buildId)) + if(!reader.readUint32(_saveVersion)) { + _lastError = "Couldn't read save version."; + LOG_ERROR(_lastError); + return; + } + + if(!reader.readUint32(_packageVersion)) { + _lastError = "Couldn't read package version."; + LOG_ERROR(_lastError); + return; + } + + if(_saveVersion == 3) { + if(!reader.readUint32(_unknown)) { + _lastError = "Couldn't read some unknown bytes."; + LOG_ERROR(_lastError); + return; + } + } + + if(!reader.readUint16(_engineVersion.major)) { + _lastError = "Couldn't read major engine version."; + LOG_ERROR(_lastError); + return; + } + + if(!reader.readUint16(_engineVersion.minor)) { + _lastError = "Couldn't read minor engine version."; + LOG_ERROR(_lastError); + return; + } + + if(!reader.readUint16(_engineVersion.patch)) { + _lastError = "Couldn't read patch engine version."; + LOG_ERROR(_lastError); + return; + } + + if(!reader.readUint32(_engineVersion.build)) { + _lastError = "Couldn't read engine build."; + LOG_ERROR(_lastError); + return; + } + + if(!reader.readUEString(_engineVersion.buildId)) { - _lastError = "Couldn't read version data."; + _lastError = "Couldn't read engine build ID string."; LOG_ERROR(_lastError); return; } diff --git a/src/Gvas/File.h b/src/Gvas/File.h index 117252b..0dce428 100644 --- a/src/Gvas/File.h +++ b/src/Gvas/File.h @@ -17,7 +17,6 @@ // along with this program. If not, see . #include -#include #include #include #include @@ -73,6 +72,7 @@ class File { std::uint32_t _saveVersion = 0; std::uint32_t _packageVersion = 0; + std::uint32_t _unknown = 0; struct { std::uint16_t major = 0; std::uint16_t minor = 0;