protected Bbsa(Stream stream) { _header = BinaryMapping.ReadObject <Header>(stream, (int)stream.Position); _header.Partitions = ReadPartitions <PartitionFileEntry>(stream, 0x30, _header.PartitionCount); ReadPartitionLba(_header.Partitions, stream, _header.PartitionOffset); stream.Position = _header.DirectoryOffset; var reader = new BinaryReader(stream); _directoryEntries = Enumerable.Range(0, _header.DirectoryCount) .Select(x => new DirectoryEntry { FileHash = reader.ReadUInt32(), Info = reader.ReadUInt32(), DirectoryHash = reader.ReadUInt32() }).ToArray(); int header2Offset = _header.ArchivePartitionSector * 0x800; stream.Position = header2Offset; _header2 = BinaryMapping.ReadObject <ArchivePartitionHeader>(stream); _header2.Partitions = ReadPartitions <ArchivePartitionEntry>(stream, header2Offset + 8, _header2.PartitionCount); ReadPartitionLba(_header2.Partitions, stream, header2Offset + _header2.LbaStartOffset); ReadUnknownStruct(_header2.Partitions, stream, header2Offset + _header2.UnknownOffset); }
protected Bbsa(Stream stream) { _header = BinaryMapping.ReadObject <Header>(stream, (int)stream.Position); _header.Partitions = ReadPartitions <PartitionFileEntry>(stream, 0x30, _header.PartitionCount); ReadPartitionLba(_header.Partitions, stream, _header.PartitionOffset); _header._directories = Enumerable.Range(0, _header.DirectoryCount) .Select(x => Directory.Read(stream, _header.DirectoryOffset, x, _header.DirectoryEntriesCount, _header.DirectoryCount)).ToArray(); int header2Offset = _header.ArchivePartitionSector * 0x800; stream.Position = header2Offset; _header2 = BinaryMapping.ReadObject <ArchivePartitionHeader>(stream); _header2.Partitions = ReadPartitions <ArchivePartitionEntry>(stream, header2Offset + 8, _header2.PartitionCount); ReadPartitionLba(_header2.Partitions, stream, header2Offset + _header2.PartitionEntriesOffset); //ReadArcEntries(_header2.Partitions, stream, header2Offset + _header2.ArcEntriesOffset); //Thanks Thamstras for the structure information, ArcEntries extraction and repacking to be implemented }