예제 #1
0
        public Section(EndianAwareBinaryReader reader)
        {
            Offset          = reader.BaseStream.Position;
            AssetLayers     = new List <AssetLayer>();
            DirectoryLayers = new List <DirectoryLayer>();

            reader.AssertTag(BlockType.SECT);
            LayerCount         = reader.ReadInt32();
            Unknown1           = reader.ReadInt32();
            SizeOfLayerData    = reader.ReadInt32();
            SizeOfName         = reader.ReadInt32();
            SizeOfChunk        = reader.ReadInt32();
            SizeOfSubLayerData = reader.ReadInt32();
            Unknown2           = reader.ReadInt32();
            Layers             = Utils.CreateArray <Layer>(LayerCount, reader);
            SectionName        = reader.ReadCString();

            // skip padding
            reader.Seek(Offset + SizeOfChunk, SeekOrigin.Begin);

            // read sub layers
            for (var i = 0; i < LayerCount; i++)
            {
                ReadLayer(reader, Layers[i]);
            }

            // append internal names to asset entries
            UpdateAssetEntries();
        }
예제 #2
0
        public DirectoryEntry(EndianAwareBinaryReader reader, int size)
        {
            var offset = reader.BaseStream.Position + size;

            AssetID  = reader.ReadUInt64();
            Unknown2 = reader.ReadInt32(); // size of next block?
            Unknown3 = reader.ReadInt32(); // file hash of size?
            Unknown4 = reader.ReadInt32();
            Unknown5 = reader.ReadInt32();
            Unknown6 = reader.ReadInt32();
            Unknown7 = reader.ReadInt32();
            FileName = reader.ReadCString();

            reader.Seek(offset, SeekOrigin.Begin);
        }