Example #1
0
        static int unk1(UnkClass a, int a2)
        {
            var v2 = a2;
            var v3 = a2 - a.unk4038;

            if (a2 - a.unk4038 <= 0)
            {
                uint v7 = (uint)(a.unk4040 & ((1 << a2) - 1));
                a.unk4040 >>= v2;
                a.unk4038  -= v2;
                return((int)v7);
            }
            else
            {
                var v4 = a.unk24;
                while (true)
                {
                    var v5 = a.unk28;
                    if (v5 >= v4)
                    {
                        break;
                    }
                    var v6 = a.unk4038;
                    v3        -= 8;
                    a.unk4040 |= a.unk8[v5] << a.unk4038;
                    a.unk28    = v5 + 1;
                    a.unk4038  = v6 + 8;
                    if (v3 <= 0)
                    {
                        uint v7 = (uint)(a.unk4040 & ((1 << a2) - 1));
                        a.unk4040 >>= v2;
                        a.unk4038  -= v2;
                        return((int)v7);
                    }
                }
                return(-1);
            }
        }
Example #2
0
        static uint DecompressBlock(UnkClass unkClass)
        {
            var v17 = new byte[4096];

            do
            {
                var result = unk1(unkClass, unkClass.dword4030);
                var v3     = result;
                if (result == -1)
                {
                    break;
                }

                var v4 = unkClass.dword6848;
                if (v4 == -1)
                {
                    if (result >= 256)
                    {
                        throw (new Exception("Unexpected compression code"));
                    }
                    //test.gap684C[test.dwordE84C++] = result;
                    var temp = BitConverter.GetBytes(result);
                    unkClass.OutputBuffer[unkClass.dwordE84C++]   = temp[0];
                    unkClass.OutputBuffer[unkClass.dwordE84C + 1] = temp[1];
                    unkClass.OutputBuffer[unkClass.dwordE84C + 2] = temp[2];
                    unkClass.OutputBuffer[unkClass.dwordE84C + 3] = temp[3];
                }
                else
                {
                    var v5 = unkClass.signed402C;
                    var i  = 0;
                    if (v3 < v5)
                    {
                        var v10 = v3;
                        var v11 = 0;
                        var v12 = 0;
                        do
                        {
                            v12        = v11;
                            v17[v11++] = unkClass.gap0[4 * v10 + 2];
                            v10        = BitConverter.ToInt16(unkClass.gap0, 4 * v10); //*(unsigned __int16 *)&a1->gap0[4 * v10 + 44];
                        }while ((ushort)v10 != 0xFFFF);
                        for (i = v17[v12]; v12 >= 0; unkClass.OutputBuffer[unkClass.dwordE84C++] = v17[v12--])
                        {
                            ;
                        }
                    }
                    else
                    {
                        if (v3 != v5)
                        {
                            throw (new Exception("Unexpected next compression code"));
                        }
                        var v6 = 0;
                        var v7 = 0;
                        do
                        {
                            v7 = v6;
                            var v8 = unkClass.gap0[4 * v4 + 2];
                            v4        = BitConverter.ToInt16(unkClass.gap0, 4 * v4);//*(unsigned __int16 *)&a1->gap0[4 * v4 + 44];
                            v17[v6++] = v8;
                        }while ((ushort)v4 != 0xFFFF);

                        i = v17[v7];
                        for (var m = i; v7 >= 0; unkClass.OutputBuffer[unkClass.dwordE84C++] = v17[v7--])
                        {
                            i = m;
                        }
                        var temp2 = BitConverter.GetBytes(i);
                        //test.gap684C[test.dwordE84C++] = i;
                        unkClass.OutputBuffer[unkClass.dwordE84C++]   = temp2[0];
                        unkClass.OutputBuffer[unkClass.dwordE84C + 1] = temp2[1];
                        unkClass.OutputBuffer[unkClass.dwordE84C + 2] = temp2[2];
                        unkClass.OutputBuffer[unkClass.dwordE84C + 3] = temp2[3];
                    }
                    var v13 = unkClass.dword6848;

                    //test.gap0[4 * test.signed402C + 2] = (byte)i;
                    var temp3 = BitConverter.GetBytes(i);
                    unkClass.gap0[4 * unkClass.signed402C + 2]     = temp3[0];
                    unkClass.gap0[4 * unkClass.signed402C + 2 + 1] = temp3[1];

                    //unkClass.gap0[4 * unkClass.signed402C + 0] = (byte)v13;
                    temp3 = BitConverter.GetBytes(v13);
                    unkClass.gap0[4 * unkClass.signed402C]     = temp3[0];
                    unkClass.gap0[4 * unkClass.signed402C + 1] = temp3[1];

                    var v14 = (i ^ v13) & 0x3FF;
                    //test.gap4049[2 * test.signed402C + 0x7FF] = (byte)(test.char4048 + v14);
                    var temp = BitConverter.GetBytes(unkClass.signed402C);
                    unkClass.char4048[v14] = temp[0];
                    unkClass.char4048[v14] = temp[1];
                    var v15 = unkClass.dword4030;
                    ++unkClass.signed402C;
                    result = (1 << v15);
                    if (unkClass.signed402C == result)
                    {
                        result             = (v15 + 1);
                        unkClass.dword4030 = result;
                        if (result > 12)
                        {
                            unkClass.signed402C = 256;
                            unkClass.dword4030  = 9;
                            //result = (__int64)memset(&a1->char4048, 255, 0x800ui64);
                            unkClass.char4048  = new byte[2048];
                            unkClass.dword6848 = -1;
                            continue;
                        }
                    }
                }
                unkClass.dword6848 = v3;
            }while (unkClass.dwordE84C < 0x7000);

            return(0);
        }