Beispiel #1
0
        internal Archive(AssetLoader loader)
            : base(loader)
        {
            BinaryReader reader = Reader = loader.Reader;

            loader.Position = loader.Length - 12;
            reader.Require(Magic);

            int namesSize   = reader.ReadInt32();           // Number of bytes of the headerSize that are record names, sometimes (always?) plus a few bytes.
            int headersSize = reader.ReadInt32();

            reader.BaseStream.Position = loader.Length - headersSize;

            int count = reader.ReadInt32();

            for (int index = 0; index < count; index++)
            {
                int    nameLength = reader.ReadInt32();
                string name       = reader.ReadString(nameLength - 1, Encoding.ASCII);
                reader.Require((byte)0);
                int id = reader.ReadInt32();
                ArchiveRecordMode mode = (ArchiveRecordMode)reader.ReadInt32();
                int  size           = reader.ReadInt32();
                int  sizeCompressed = reader.ReadInt32();
                uint offset         = reader.ReadUInt32();

                if (mode != ArchiveRecordMode.Directory)
                {
                    new ArchiveRecord(this, name, id, mode, size, sizeCompressed, offset);
                }
            }
        }
Beispiel #2
0
 internal ArchiveRecord(Archive archive, string name, int id, ArchiveRecordMode mode, int size, int sizeCompressed, uint offset)
     : base(archive, name)
 {
     Archive = archive;
     MoveIntoPath(name);
     Id             = id;
     Mode           = mode;
     Size           = size;
     SizeCompressed = sizeCompressed;
     Offset         = offset;
 }
Beispiel #3
0
 internal ArchiveRecord(Archive archive, string name, int id, ArchiveRecordMode mode, int size, int sizeCompressed, uint offset)
     : base(archive, name)
 {
     Archive = archive;
     MoveIntoPath(name);
     Id = id;
     Mode = mode;
     Size = size;
     SizeCompressed = sizeCompressed;
     Offset = offset;
 }