Exemplo n.º 1
0
 public override Stream OpenEntry(ArcFile arc, Entry entry)
 {
     var pent = entry as PackedEntry;
     if (null == pent || !pent.IsPacked)
         return base.OpenEntry (arc, entry);
     using (var input = arc.File.CreateStream (entry.Offset, entry.Size))
     using (var bmr = new BmrDecoder (input))
     {
         bmr.Unpack();
         return new MemoryStream (bmr.Data);
     }
 }
Exemplo n.º 2
0
        public override Stream OpenEntry(ArcFile arc, Entry entry)
        {
            var pent = entry as PackedEntry;

            if (null == pent || !pent.IsPacked)
            {
                return(base.OpenEntry(arc, entry));
            }
            using (var input = arc.File.CreateStream(entry.Offset, entry.Size))
                using (var bmr = new BmrDecoder(input))
                {
                    bmr.Unpack();
                    return(new MemoryStream(bmr.Data));
                }
        }
Exemplo n.º 3
0
        public override Stream OpenEntry(ArcFile arc, Entry entry)
        {
            var lent = entry as LinkEntry;

            if (null == lent || (!lent.IsPacked && !lent.IsEncrypted))
            {
                if (entry.Size > 8)
                {
                    uint unpacked_size = arc.File.View.ReadUInt32(entry.Offset);
                    int  id            = arc.File.View.ReadUInt16(entry.Offset + 5);
                    if (id == 0x4D42) // 'BM'
                    {
                        using (var input = arc.File.CreateStream(entry.Offset + 4, entry.Size - 4, entry.Name))
                        {
                            var data = Lin2Opener.UnpackLzss(input, unpacked_size);
                            return(new BinMemoryStream(data, entry.Name));
                        }
                    }
                }
                return(base.OpenEntry(arc, entry));
            }
            if (lent.IsEncrypted)
            {
                var larc = arc as LinkArchive;
                if (null == larc)
                {
                    return(base.OpenEntry(arc, entry));
                }
                return(larc.Encryption.DecryptEntry(larc, lent));
            }
            using (var input = arc.File.CreateStream(entry.Offset, entry.Size))
                using (var bmr = new BmrDecoder(input))
                {
                    bmr.Unpack();
                    return(new BinMemoryStream(bmr.Data, entry.Name));
                }
        }
Exemplo n.º 4
0
        public override Stream OpenEntry(ArcFile arc, Entry entry)
        {
            var lent = entry as LinkEntry;

            if (null == lent || (!lent.IsPacked && !lent.IsEncrypted))
            {
                return(base.OpenEntry(arc, entry));
            }
            if (lent.IsEncrypted)
            {
                var larc = arc as LinkArchive;
                if (null == larc)
                {
                    return(base.OpenEntry(arc, entry));
                }
                return(larc.Encryption.DecryptEntry(larc, lent));
            }
            using (var input = arc.File.CreateStream(entry.Offset, entry.Size))
                using (var bmr = new BmrDecoder(input))
                {
                    bmr.Unpack();
                    return(new BinMemoryStream(bmr.Data, entry.Name));
                }
        }