Advertisement
Guest User

Untitled

a guest
Jan 9th, 2017
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // STR: "Networking", "StartLagCompensation", "CLagCompensationManager::StartLagCompensation with NULL CU
  2. void __userpurge sub_10308C00(int a1@<ecx>, int a2@<edi>, double a3@<st0>, int a4, int a5, int a6, int a7, int a8)
  3. {
  4.   int v8; // edx@1
  5.   int v9; // esi@1
  6.   int v10; // edi@5
  7.   int v11; // eax@5
  8.   int v12; // eax@7
  9.   int v13; // esi@7
  10.   _BYTE *v14; // ecx@7
  11.   unsigned int v15; // esi@7
  12.   int v16; // edx@10
  13.   int v17; // ecx@11
  14.   unsigned int *v18; // eax@15
  15.   int v19; // ecx@18
  16.   int v20; // eax@18
  17.   unsigned __int16 v21; // ax@19
  18.   int v22; // ecx@19
  19.   int v23; // eax@20
  20.   _DWORD **v24; // esi@21
  21.   _DWORD *v25; // esi@21
  22.   _DWORD *v26; // ST24_4@22
  23.   int v27; // edx@23
  24.   int v28; // edx@38
  25.   int v29; // eax@40
  26.   unsigned int v30; // ST4C_4@41
  27.   __m128 v31; // xmm1@41
  28.   int v32; // ecx@43
  29.   __m128 v33; // xmm3@47
  30.   __m128 v34; // xmm1@50
  31.   int v35; // edx@50
  32.   unsigned int v36; // eax@53
  33.   float v37; // xmm0_4@55
  34.   int v38; // et1@55
  35.   int v40; // et1@56
  36.   int v42; // et1@57
  37.   int v44; // eax@58
  38.   int v45; // et1@59
  39.   int v47; // et1@60
  40.   int v49; // et1@61
  41.   int v51; // eax@62
  42.   int v52; // eax@65
  43.   int v53; // eax@67
  44.   unsigned __int16 v54; // dx@67
  45.   int v55; // eax@71
  46.   int v56; // ecx@72
  47.   int v57; // eax@72
  48.   _BYTE *v58; // edx@72
  49.   unsigned int v59; // eax@72
  50.   void **v60; // eax@74
  51.   int v61; // ecx@75
  52.   int v62; // ecx@78
  53.   int v63; // [sp+26h] [bp-50h]@1
  54.   bool v64; // [sp+31h] [bp-45h]@36
  55.   int v65; // [sp+32h] [bp-44h]@1
  56.   int v66; // [sp+36h] [bp-40h]@19
  57.   int v67; // [sp+36h] [bp-40h]@67
  58.   _BYTE *v68; // [sp+3Ah] [bp-3Ch]@0
  59.   int v69; // [sp+3Ah] [bp-3Ch]@71
  60.   int v70; // [sp+3Eh] [bp-38h]@5
  61.   int v71; // [sp+3Eh] [bp-38h]@20
  62.   _BYTE *v72; // [sp+3Eh] [bp-38h]@72
  63.   int v73; // [sp+42h] [bp-34h]@1
  64.   int v74; // [sp+42h] [bp-34h]@34
  65.   int i; // [sp+46h] [bp-30h]@18
  66.   void **v76; // [sp+46h] [bp-30h]@74
  67.   float v77; // [sp+4Ah] [bp-2Ch]@44
  68.   float v78; // [sp+4Ah] [bp-2Ch]@50
  69.   float v79; // [sp+4Eh] [bp-28h]@19
  70.   char v80; // [sp+5Ah] [bp-1Ch]@58
  71.   __int128 v81; // [sp+62h] [bp-14h]@1
  72.   int v82; // [sp+72h] [bp-4h]@1
  73.  
  74.   v8 = *(_WORD *)(a1 + 20);
  75.   v9 = a1 + 4;
  76.   v65 = a1;
  77.   v63 = a2;
  78.   _mm_storeu_si128((__m128i *)&v81, 0i64);
  79.   v82 = 0;
  80.   v73 = a1 + 4;
  81.   while ( (_WORD)v8 != -1 && *(_WORD *)(*(_DWORD *)(a1 + 8) + 16 * (unsigned __int16)v8) != -1 )
  82.     v8 = *(_WORD *)(*(_DWORD *)(a1 + 8) + 16 * (unsigned __int16)v8);
  83.   v10 = DWORD3(v81);
  84.   LOWORD(v11) = v8;
  85.   v70 = (unsigned __int16)v8;
  86.   if ( (unsigned __int16)v8 != 0xFFFF )
  87.   {
  88.     v8 = v81;
  89.     do
  90.     {
  91.       v12 = 2 * (unsigned __int16)v11;
  92.       v13 = *(_DWORD *)(v65 + 8);
  93.       v14 = *(_BYTE **)(v13 + 8 * v12 + 12);
  94.       v15 = *(_DWORD *)(v13 + 8 * v12 + 8);
  95.       v68 = v14;
  96.       if ( v15 != -1
  97.         && dword_10944FF8[6 * (unsigned __int16)v15] == v15 >> 16
  98.         && (&dword_10944FF4)[6 * (unsigned __int16)v15] )
  99.       {
  100.         *v14 = 0;
  101.         sub_10308030(v14 + 48, v8);
  102.         sub_10308030(v68 + 448, v16);
  103.       }
  104.       else
  105.       {
  106.         v17 = v10;
  107.         v68 = (_BYTE *)v10;
  108.         if ( v10 + 1 > SDWORD1(v81) )
  109.         {
  110.           sub_10116F80(v10 - DWORD1(v81) + 1);
  111.           v10 = DWORD3(v81);
  112.           v8 = v81;
  113.           v17 = (int)v68;
  114.         }
  115.         ++v10;
  116.         v82 = v8;
  117.         DWORD3(v81) = v10;
  118.         if ( v10 - v17 - 1 > 0 )
  119.         {
  120.           memmove((void *)(v8 + 4 * v17 + 4), (const void *)(v8 + 4 * v17), 4 * (v10 - v17 - 1));
  121.           v8 = v81;
  122.           v17 = (int)v68;
  123.         }
  124.         v18 = (unsigned int *)(v8 + 4 * v17);
  125.         if ( v18 )
  126.           *v18 = v15;
  127.       }
  128.       v9 = v73;
  129.       LOWORD(v11) = sub_102E5800(v70);
  130.       v8 = v81;
  131.       v11 = (unsigned __int16)v11;
  132.       v70 = v11;
  133.     }
  134.     while ( (unsigned __int16)v11 != 0xFFFF );
  135.   }
  136.   v19 = v81;
  137.   v20 = 0;
  138.   for ( i = 0; v20 < v10; i = v20 )
  139.   {
  140.     v79 = *(float *)(v19 + 4 * v20);
  141.     v21 = sub_1017F7F0(&v79);
  142.     v22 = v21;
  143.     v66 = v21;
  144.     if ( v21 != 0xFFFF )
  145.     {
  146.       v8 = 16 * v21;
  147.       v68 = (_BYTE *)v8;
  148.       v23 = *(_DWORD *)(*(_DWORD *)(v65 + 8) + v8 + 12);
  149.       v71 = v23;
  150.       if ( v23 )
  151.       {
  152.         v24 = (_DWORD **)(v23 + 4);
  153.         sub_1030AF40(v23 + 4);
  154.         v25 = *v24;
  155.         if ( v25 )
  156.         {
  157.           do
  158.           {
  159.             v26 = v25;
  160.             v25 = (_DWORD *)*v25;
  161.             (*(void (__stdcall **)(_DWORD *))(*g_pMemAlloc + 20))(v26);
  162.           }
  163.           while ( v25 );
  164.           v27 = v71;
  165.           *(_DWORD *)(v71 + 4) = 0;
  166.           *(_DWORD *)(v71 + 8) = 0;
  167.         }
  168.         else
  169.         {
  170.           v27 = v71;
  171.         }
  172.         (*(void (__stdcall **)(int))(*g_pMemAlloc + 20))(v27);
  173.         v9 = v73;
  174.         v22 = v66;
  175.       }
  176.       if ( (_WORD)v22 != -1 )
  177.       {
  178.         sub_102E5FA0(v22);
  179.         *(_WORD *)&v68[*(_DWORD *)(v9 + 4)] = v66;
  180.         *(_WORD *)&v68[*(_DWORD *)(v9 + 4) + 2] = *(_WORD *)(v9 + 20);
  181.         v8 = v66;
  182.         --*(_WORD *)(v9 + 18);
  183.         *(_WORD *)(v9 + 20) = v66;
  184.       }
  185.     }
  186.     v19 = v81;
  187.     v20 = i + 1;
  188.   }
  189.   *(_BYTE *)(v65 + 32) = 0;
  190.   *(_DWORD *)(v65 + 36) = a4;
  191.   if ( *(_BYTE *)(a4 + 3156)
  192.     && *(_DWORD *)(dword_1092F7C4 + 24) > 1
  193.     && ((int (__fastcall *)(int (__stdcall ***)(char), int))off_108F9888[13])(&off_108F9888, v8)
  194.     && !(unsigned __int8)(*(int (**)(void))(*(_DWORD *)a4 + 1996))()
  195.     && !((*(_DWORD *)(a4 + 3264) >> 3) & 1) )
  196.   {
  197.     v74 = *(_DWORD *)(a4 + 4028);
  198.     if ( !v74 )
  199.       Error("CLagCompensationManager::StartLagCompensation with NULL CUserCmd!!!\n");
  200.     v64 = *(_DWORD *)(g_VProfCurrentProfile + 4108) != 0;
  201.     if ( v64 )
  202.       CVProfile::EnterScope(g_VProfCurrentProfile, "StartLagCompensation", 0, "Networking", 0, 4);
  203.     *(_BYTE *)(v65 + 72) = 1;
  204.     v28 = *(_DWORD *)(a4 + 28);
  205.     if ( v28 )
  206.       v28 = (v28 - *(_DWORD *)(dword_1092F7C4 + 96)) >> 4;
  207.     v29 = (*(int (__stdcall **)(int, int))(*(_DWORD *)dword_10A2ABB8 + 84))(v28, v63);
  208.     if ( v29 )
  209.     {
  210.       (*(void (__stdcall **)(_DWORD))(*(_DWORD *)v29 + 36))(0);
  211.       *(float *)&v30 = a3;
  212.       v31 = (__m128)v30;
  213.     }
  214.     else
  215.     {
  216.       v31 = (__m128)(unsigned int)v68;
  217.     }
  218.     v32 = a4;
  219.     v31.m128_f32[0] = v31.m128_f32[0] + *(float *)(a4 + 3152);
  220.     if ( (int (__stdcall ***)(char))dword_108F9BBC == &off_108F9BA0 )
  221.     {
  222.       LODWORD(v77) = (unsigned int)&off_108F9BA0 ^ dword_108F9BCC;
  223.     }
  224.     else
  225.     {
  226.       (*(void (__thiscall **)(int))(*(_DWORD *)dword_108F9BBC + 48))(dword_108F9BBC);
  227.       v31 = (__m128)v31.m128_u32[0];
  228.       v32 = a4;
  229.       v77 = a3;
  230.     }
  231.     if ( v31.m128_f32[0] >= 0.0 )
  232.     {
  233.       v33 = (__m128)LODWORD(v77);
  234.       if ( v31.m128_f32[0] <= v77 )
  235.         v33 = v31;
  236.     }
  237.     else
  238.     {
  239.       v33 = 0i64;
  240.     }
  241.     v34 = v33;
  242.     v35 = dword_1092F7C4;
  243.     v78 = (float)((float)*(signed int *)(i + 8) * *(float *)(dword_1092F7C4 + 32)) - *(float *)(v32 + 3152);
  244.     v34.m128_f32[0] = v33.m128_f32[0] - (float)(*(float *)(dword_1092F7C4 + 16) - v78);
  245.     if ( COERCE_FLOAT(_mm_and_ps(v34, (__m128)xmmword_10838B90)) > 0.2 )
  246.       v78 = *(float *)(dword_1092F7C4 + 16) - v33.m128_f32[0];
  247.     if ( (int (__stdcall ***)(char))dword_108F9AB4 == &off_108F9A98 )
  248.     {
  249.       v36 = (unsigned int)&off_108F9A98 ^ dword_108F9AC8;
  250.     }
  251.     else
  252.     {
  253.       v36 = (*(int (**)(void))(*(_DWORD *)dword_108F9AB4 + 52))();
  254.       v35 = dword_1092F7C4;
  255.     }
  256.     v37 = (float)(signed int)v36 * *(float *)(v35 + 32);
  257.     *(_DWORD *)(v65 + 40) = a5;
  258.     *(_DWORD *)(v65 + 44) = *(_DWORD *)a6;
  259.     *(_DWORD *)(v65 + 48) = *(_DWORD *)(a6 + 4);
  260.     *(_DWORD *)(v65 + 52) = *(_DWORD *)(a6 + 8);
  261.     v79 = v37 + v78;
  262.     *(_DWORD *)(v65 + 56) = *(_DWORD *)a7;
  263.     *(_DWORD *)(v65 + 60) = *(_DWORD *)(a7 + 4);
  264.     *(_DWORD *)(v65 + 64) = *(_DWORD *)(a7 + 8);
  265.     *(_DWORD *)(v65 + 68) = a8;
  266.     v38 = *(_DWORD *)(v65 + 44);
  267.     __asm { lahf }
  268.     if ( !__SETP__(_AH & 0x44, 0) )
  269.     {
  270.       v40 = *(_DWORD *)(v65 + 48);
  271.       __asm { lahf }
  272.       if ( !__SETP__(_AH & 0x44, 0) )
  273.       {
  274.         v42 = *(_DWORD *)(v65 + 52);
  275.         __asm { lahf }
  276.         if ( !__SETP__(_AH & 0x44, 0) )
  277.         {
  278.           v44 = (*(int (__stdcall **)(char *))(**(_DWORD **)(v65 + 36) + 512))(&v80);
  279.           v35 = dword_1092F7C4;
  280.           *(_DWORD *)(v65 + 44) = *(_DWORD *)v44;
  281.           *(_DWORD *)(v65 + 48) = *(_DWORD *)(v44 + 4);
  282.           *(_DWORD *)(v65 + 52) = *(_DWORD *)(v44 + 8);
  283.         }
  284.       }
  285.     }
  286.     v45 = *(_DWORD *)(v65 + 56);
  287.     __asm { lahf }
  288.     if ( !__SETP__(_AH & 0x44, 0) )
  289.     {
  290.       v47 = *(_DWORD *)(v65 + 60);
  291.       __asm { lahf }
  292.       if ( !__SETP__(_AH & 0x44, 0) )
  293.       {
  294.         v49 = *(_DWORD *)(v65 + 64);
  295.         __asm { lahf }
  296.         if ( !__SETP__(_AH & 0x44, 0) )
  297.         {
  298.           v51 = (*(int (__fastcall **)(_DWORD, int))(**(_DWORD **)(v65 + 36) + 516))(*(_DWORD *)(v65 + 36), v35);
  299.           v35 = dword_1092F7C4;
  300.           *(_DWORD *)(v65 + 56) = *(_DWORD *)v51;
  301.           *(_DWORD *)(v65 + 60) = *(_DWORD *)(v51 + 4);
  302.           *(_DWORD *)(v65 + 64) = *(_DWORD *)(v51 + 8);
  303.         }
  304.       }
  305.     }
  306.     if ( *(float *)(v65 + 68) <= 0.0 )
  307.       *(_DWORD *)(v65 + 68) = 2139095039;
  308.     v52 = *(_DWORD *)(a4 + 28);
  309.     if ( v52 )
  310.       v52 = (v52 - *(_DWORD *)(v35 + 96)) >> 4;
  311.     v53 = (*(int (__cdecl **)(int))(*(_DWORD *)dword_10A2ABB8 + 320))(v52 - 1);
  312.     v54 = *(_WORD *)(v9 + 16);
  313.     v67 = v53;
  314.     while ( v54 != -1 && *(_WORD *)(*(_DWORD *)(v9 + 4) + 16 * v54) != -1 )
  315.       v54 = *(_WORD *)(*(_DWORD *)(v9 + 4) + 16 * v54);
  316.     LOWORD(v55) = v54;
  317.     v69 = v54;
  318.     if ( v54 != 0xFFFF )
  319.     {
  320.       while ( 1 )
  321.       {
  322.         v56 = (unsigned __int16)v55;
  323.         v57 = *(_DWORD *)(v65 + 8);
  324.         v56 *= 2;
  325.         v58 = *(_BYTE **)(v57 + 8 * v56 + 12);
  326.         v59 = *(_DWORD *)(v57 + 8 * v56 + 8);
  327.         v72 = v58;
  328.         if ( v59 != -1 && dword_10944FF8[6 * (unsigned __int16)v59] == v59 >> 16 )
  329.         {
  330.           v60 = (&dword_10944FF4)[6 * (unsigned __int16)v59];
  331.           v76 = v60;
  332.           if ( v60 )
  333.           {
  334.             v61 = a4;
  335.             if ( (void **)a4 != v60 )
  336.               goto LABEL_78;
  337.             if ( ((int (__thiscall *)(int (__stdcall ***)(char)))off_108F9AF0[13])(&off_108F9AF0) )
  338.               break;
  339.           }
  340.         }
  341. LABEL_80:
  342.         v55 = (unsigned __int16)sub_102E5800(v69);
  343.         v69 = v55;
  344.         if ( (unsigned __int16)v55 == 0xFFFF )
  345.           goto LABEL_81;
  346.       }
  347.       v61 = a4;
  348. LABEL_78:
  349.       if ( (unsigned __int8)(*(int (__stdcall **)(void **, int, int))(*(_DWORD *)v61 + 1420))(v76, v74, v67) )
  350.         *v72 = sub_103092C0(v76, v72 + 4, v72 + 48, v72 + 448, v62);
  351.       goto LABEL_80;
  352.     }
  353. LABEL_81:
  354.     if ( v64 )
  355.       CVProfile::ExitScope(g_VProfCurrentProfile);
  356.   }
  357.   if ( SDWORD2(v81) >= 0 )
  358.   {
  359.     if ( (_DWORD)v81 )
  360.       (*(void (__stdcall **)(_DWORD))(*g_pMemAlloc + 20))(v81);
  361.   }
  362. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement