protected void readBinaryHeader(ArkArchive archive) { SaveVersion = archive.GetShort(); if (SaveVersion == 5) { GameTime = archive.GetFloat(); propertiesBlockOffset = 0; } else if (SaveVersion == 6) { nameTableOffset = archive.GetInt(); propertiesBlockOffset = archive.GetInt(); GameTime = archive.GetFloat(); } else if (SaveVersion == 7 || SaveVersion == 8) { binaryDataOffset = archive.GetInt(); var unknownValue = archive.GetInt(); if (unknownValue != 0) { var msg = $"Found unexpected Value {unknownValue} at {archive.Position - 4:X}"; _logger.Error(msg); throw new System.NotSupportedException(msg); } nameTableOffset = archive.GetInt(); propertiesBlockOffset = archive.GetInt(); GameTime = archive.GetFloat(); } else if (SaveVersion == 9) { binaryDataOffset = archive.GetInt(); var unknownValue = archive.GetInt(); if (unknownValue != 0) { var msg = $"Found unexpected Value {unknownValue} at {archive.Position - 4:X}"; _logger.Error(msg); throw new System.NotSupportedException(msg); } nameTableOffset = archive.GetInt(); propertiesBlockOffset = archive.GetInt(); GameTime = archive.GetFloat(); //note: unknown integer value was added in v268.22 with SaveVersion=9 [0x25 (37) on The Island, 0x26 (38) on ragnarok/center/scorched] archive.GetInt(); //unknownValue2 } else { var msg = $"Found unknown Version {SaveVersion}"; _logger.Error(msg); throw new System.NotSupportedException(msg); } }
public void readBinary(ArkArchive archive) { var x = archive.GetFloat(); var y = archive.GetFloat(); var z = archive.GetFloat(); var unkByte = archive.GetByte(); var unkFloat = archive.GetFloat(); var nameArchiveSize = archive.GetInt(); var nameArchive = archive.Slice(archive.Position, nameArchiveSize); readBinaryNameTable(nameArchive); archive.Position += nameArchiveSize; var objectArchiveSize = archive.GetInt(); var objectArchive = archive.Slice(archive.Position, objectArchiveSize); readBinaryObjects(objectArchive); archive.Position += objectArchiveSize; var unkInt1 = archive.GetInt(); _classIndex = archive.GetInt(); }