mirror of
https://github.com/crskycode/GARbro.git
synced 2024-11-23 13:45:34 +08:00
(Malie.DatOpener): decompress zlib-compressed entries.
This commit is contained in:
parent
99f5324a2c
commit
f3a7afab63
@ -27,6 +27,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.IO;
|
||||
using GameRes.Compression;
|
||||
using GameRes.Utility;
|
||||
|
||||
namespace GameRes.Formats.Malie
|
||||
@ -167,8 +168,34 @@ namespace GameRes.Formats.Malie
|
||||
var march = arc as MalieArchive;
|
||||
if (null == march)
|
||||
return arc.File.CreateStream (entry.Offset, entry.Size);
|
||||
var input = new EncryptedStream (march.File, march.Decryptor);
|
||||
return new StreamRegion (input, entry.Offset, entry.Size);
|
||||
Stream input = new EncryptedStream (march.File, march.Decryptor);
|
||||
input = new StreamRegion (input, entry.Offset, entry.Size);
|
||||
if (entry.Name.HasExtension (".txtz"))
|
||||
{
|
||||
input = new ZLibStream (input, CompressionMode.Decompress);
|
||||
}
|
||||
else if (entry.Name.HasExtension (".psbz"))
|
||||
{
|
||||
input = UnpackPsbz (input);
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
Stream UnpackPsbz (Stream input)
|
||||
{
|
||||
var header = new byte[8];
|
||||
input.Read (header, 0, 8);
|
||||
if (!header.AsciiEqual ("PSBZ"))
|
||||
{
|
||||
input.Position = 0;
|
||||
return input;
|
||||
}
|
||||
int unpacked_size = header.ToInt32 (4);
|
||||
var output = new MemoryStream (unpacked_size);
|
||||
using (input = new ZLibStream (input, CompressionMode.Decompress))
|
||||
input.CopyTo (output);
|
||||
output.Position = 0;
|
||||
return output;
|
||||
}
|
||||
|
||||
internal abstract class LibIndexReader : ILibIndexReader
|
||||
|
Loading…
Reference in New Issue
Block a user