using System; namespace OpenVIII { public class LZSSold { /// /// Decompiles LZSS. You have to know the OutputSize. [DEPRECATED] /// /// buffer /// Original filesize of compressed file /// Filesize of final file /// Byte array [Obsolete("This method proved to be broken. Please use DecompressAllNew")] public static byte[] DecompressAll(byte[] data, uint fileSize, int size = 0) { try { bool bDynamic = false; if (size == 0) { size = 0x4000000; //64MB bDynamic = true; } byte[] result = new byte[size]; int curResult = 0; int curBuff = 4078, flagByte = 0; int fileData = 4, endFileData = (int)fileSize; byte[] textBuf = new byte[4113]; while (true) { if (fileData + 1 >= endFileData) return !bDynamic ? result : ReturnDynamic(result, curResult); if (((flagByte >>= 1) & 256) == 0) flagByte = data[fileData++] | 0xff00; if (fileData >= endFileData) return !bDynamic ? result : ReturnDynamic(result, curResult); if ((flagByte & 1) > 0) { result[curResult] = textBuf[curBuff] = data[fileData++]; curBuff = (curBuff + 1) & 4095; ++curResult; } else { if (fileData + 1 >= endFileData) return !bDynamic ? result : ReturnDynamic(result, curResult); int offset = (byte)BitConverter.ToChar(data, fileData++); if (fileData + 1 >= endFileData) return !bDynamic ? result : ReturnDynamic(result, curResult); int length = (byte)BitConverter.ToChar(data, fileData++); offset |= (length & 0xF0) << 4; length = (length & 0xF) + 2 + offset; int e; for (e = offset; e <= length; e++) { textBuf[curBuff] = result[curResult] = textBuf[e & 4095]; curBuff = (curBuff + 1) & 4095; ++curResult; } } } } catch { return null; } } private static byte[] ReturnDynamic(byte[] result, int curResult) { byte[] buffer = new byte[curResult]; Array.Copy(result, buffer, buffer.Length); return buffer; } } }