private void FakeCompress(ref byte[] Data)
        {
            CompressionHeader Header = new CompressionHeader()
            {
                Magic = 1,
                dLen  = (uint)Data.LongLength
            };

            List <byte> Buffer = new List <byte>();

            for (uint i = 0, x = 0; i < Data.Length; i++, x--)
            {
                if (x == 0)
                {
                    x = 8;
                    Buffer.Add(0xFF);
                }
                Buffer.Add(Data[i]);
            }

            Header.cLen = (uint)Buffer.LongCount() + 0x8;

            Buffer.InsertRange(0, Tools.BuildStruct(ref Header));

            Data = null;
            Data = Buffer.ToArray();
        }
        private void Compress(ref byte[] Data)
        {
            CompressionHeader Header = new CompressionHeader()
            {
                Magic = 1,
                dLen  = (uint)Data.LongLength
            };
            List <byte> Output = new List <byte>();
            List <byte> Buffer = new List <byte>();
            byte        f      = 0;

            for (uint i = 0, x = 8; i < Data.LongLength; i++)
            {
                for (byte Cnt = 0x11; Cnt > MinCompressMatch && i + Cnt < Data.LongLength; Cnt--)
                {
                    byte[] Tmp = GetRange(Data, i, Cnt);
                    for (ushort r = Cnt; r < 0xFFF && r <= i; r++)
                    {
                        if (Data[i - r] == Tmp[0] && EqualsAt(Data, Tmp, i - r))
                        {
                            Buffer.Add((byte)(((r & 0xF) << 4) | (Cnt - 2)));
                            Buffer.Add((byte)(r >> 4));
                            i += (uint)Cnt - 1;
                            goto Cont;
                        }
                    }
                }

                f |= (byte)(1 << (int)(8 - x));
                Buffer.Add(Data[i]);

                Cont :;
                x--;
                if (x == 0)
                {
                    Output.Add(f);
                    Output.AddRange(Buffer);

                    Buffer = new List <byte>();
                    x      = 8;
                    f      = 0;
                }
            }

            if (Buffer.Count != 0)
            {
                Output.Add(f);
                Output.AddRange(Buffer);
            }

            Header.cLen = (uint)Output.LongCount() + 0x8;

            Output.InsertRange(0, Tools.BuildStruct(ref Header));

            Data = null;
            Data = Output.ToArray();
        }