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; }
internal void LoadFileRecord(BSAReader bsaReader, FolderRecord folder, FileRecord file, BinaryReader rdr) { _name = rdr.ReadStringTerm(_bsa.HeaderType); }