private static void DecompressYaz0(byte[] Input, uint Offset, ref byte[] Output)
{
UInt32 Size = Helpers.Read32(Input, (int)(Offset + 4));
Output = new byte[Size];
int SrcPlace = (int)Offset + 0x10, DstPlace = 0;
uint ValidBitCount = 0;
byte CodeByte = 0;
while (DstPlace < Size)
{
if (ValidBitCount == 0)
{
CodeByte = Input[SrcPlace];
++SrcPlace;
ValidBitCount = 8;
}
if ((CodeByte & 0x80) != 0)
{
Output[DstPlace] = Input[SrcPlace];
DstPlace++;
SrcPlace++;
}
else
{
byte Byte1 = Input[SrcPlace];
byte Byte2 = Input[SrcPlace + 1];
SrcPlace += 2;
uint Dist = (uint)(((Byte1 & 0xF) << 8) | Byte2);
uint CopySource = (uint)(DstPlace - (Dist + 1));
uint NumBytes = (uint)(Byte1 >> 4);
if (NumBytes == 0)
{
NumBytes = (uint)(Input[SrcPlace] + 0x12);
SrcPlace++;
}
else
NumBytes += 2;
int i;
for (i = 0; i < NumBytes; ++i)
{
Output[DstPlace] = Output[CopySource];
CopySource++;
DstPlace++;
}
}
CodeByte <<= 1;
ValidBitCount -= 1;
}
}