コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: Bbsa.cs プロジェクト: osdanova/OpenKh
        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
        }