private void readBinary(ArkArchive archive, ReadingOptions options) { X = archive.ReadFloat(); Y = archive.ReadFloat(); Z = archive.ReadFloat(); UnkByte = archive.ReadByte(); UnkFloat = archive.ReadFloat(); if (options.HibernationObjectProperties) { ArkArchive nameArchive = archive.Slice(archive.ReadInt()); readBinaryNameTable(nameArchive); } else { archive.SkipBytes(archive.ReadInt()); nameTable = null; // Unknown data since the missed names are unrelated to the main nameTable archive.HasUnknownData = true; } ArkArchive objectArchive = archive.Slice(archive.ReadInt()); readBinaryObjects(objectArchive, options); UnkInt1 = archive.ReadInt(); ClassIndex = archive.ReadInt(); }
private void readBinaryHeader(ArkArchive archive) { SaveVersion = archive.ReadShort(); if (SaveVersion < 5 || SaveVersion > 9) { throw new NotSupportedException("Found unknown Version " + SaveVersion); } if (SaveVersion > 6) { hibernationOffset = archive.ReadInt(); int shouldBeZero = archive.ReadInt(); if (shouldBeZero != 0) { throw new NotSupportedException("The stuff at this position should be zero: " + (archive.Position - 4).ToString("X4")); } } else { hibernationOffset = 0; } if (SaveVersion > 5) { nameTableOffset = archive.ReadInt(); propertiesBlockOffset = archive.ReadInt(); } else { nameTableOffset = 0; propertiesBlockOffset = 0; } GameTime = archive.ReadFloat(); SaveCount = SaveVersion > 8 ? archive.ReadInt() : 0; }