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();
        }
        public void WriteBinary(ArkArchive archive)
        {
            archive.WriteFloat(X);
            archive.WriteFloat(Y);
            archive.WriteFloat(Z);
            archive.WriteByte(UnkByte);
            archive.WriteFloat(UnkFloat);

            archive.WriteInt(nameTableSize);
            ArkArchive nameArchive = archive.Slice(nameTableSize);

            nameArchive.WriteInt(3);

            nameArchive.WriteInt(nameTable.Count);
            nameTable.ForEach(nameArchive.WriteString);

            nameArchive.WriteInt(ZoneVolumes.Count);
            ZoneVolumes.ForEach(nameArchive.WriteName);

            archive.WriteInt(objectsSize);
            ArkArchive objectArchive = archive.Slice(objectsSize);

            objectArchive.WriteInt(Objects.Count);

            int currentOffset = propertiesStart;

            foreach (GameObject gameObject in Objects)
            {
                currentOffset = gameObject.WriteBinary(objectArchive, currentOffset);
            }

            objectArchive.SetNameTable(nameTable, 0, true);
            foreach (GameObject gameObject in Objects)
            {
                gameObject.WriteProperties(objectArchive, 0);
            }

            archive.WriteInt(UnkInt1);
            archive.WriteInt(ClassIndex);
        }