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)); } }
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)); } }
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)); } }
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); } }