Exemplo n.º 1
0
 public BSAStateObject(BSAReader bsaReader)
 {
     Magic        = bsaReader._magic;
     Version      = bsaReader._version;
     ArchiveFlags = bsaReader._archiveFlags;
     FileFlags    = bsaReader._fileFlags;
 }
Exemplo n.º 2
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.º 3
0
        internal void LoadFileRecordBlock(BSAReader bsa, BinaryReader src)
        {
            if (bsa.HasFolderNames)
            {
                Name = src.ReadStringLen(bsa.HeaderType);
            }

            for (var idx = 0; idx < _fileCount; idx += 1)
            {
                Files.Add(new FileRecord(bsa, this, src, idx));
            }
        }
Exemplo n.º 4
0
 internal FolderRecord(BSAReader bsa, BinaryReader src)
 {
     //Hash = src.ReadUInt64();
     Files = new List <FileRecord>();
     src.ReadUInt64(); //hash
     _fileCount = src.ReadUInt32();
     if (bsa.HeaderType == VersionType.SSE)
     {
         _unk    = src.ReadUInt32();
         _offset = src.ReadUInt64();
     }
     else
     {
         _offset = src.ReadUInt32();
     }
 }
Exemplo n.º 5
0
 internal void LoadFileRecord(BSAReader bsaReader, FolderRecord folder, FileRecord file, BinaryReader rdr)
 {
     _name = rdr.ReadStringTerm(_bsa.HeaderType);
 }