Exemplo n.º 1
0
        public FileRecord(BSAReader bsa, FolderRecord folderRecord, BinaryReader src, int index)
        {
            _index = index;
            _bsa   = bsa;
            Hash   = src.ReadUInt64();
            var size = src.ReadUInt32();

            FlipCompression = (size & (0x1 << 30)) > 0;

            if (FlipCompression)
            {
                _size = size ^ (0x1 << 30);
            }
            else
            {
                _size = size;
            }

            if (Compressed)
            {
                _size -= 4;
            }

            _offset = src.ReadUInt32();
            Folder  = folderRecord;

            var old_pos = src.BaseStream.Position;

            src.BaseStream.Position = _offset;

            if (bsa.HasNameBlobs)
            {
                _nameBlob = src.ReadStringLenNoTerm(bsa.HeaderType);
            }


            if (Compressed)
            {
                _originalSize = src.ReadUInt32();
            }

            _onDiskSize = (uint)(_size - (_nameBlob?.Length + 1 ?? 0));

            if (Compressed)
            {
                Size         = _originalSize;
                _onDiskSize -= 4;
            }
            else
            {
                Size = _onDiskSize;
            }

            _dataOffset = src.BaseStream.Position;

            src.BaseStream.Position = old_pos;
        }
Exemplo n.º 2
0
 internal void LoadFileRecord(BSAReader bsaReader, FolderRecord folder, FileRecord file, BinaryReader rdr)
 {
     _name = rdr.ReadStringTerm(_bsa.HeaderType);
 }