shiftandzplz

Untitled

Oct 1st, 2020
998
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. double __cdecl sub_47E990(int local, int ent, int weapdef, unsigned __int16 a5, int a6, int a7, char isplayer)
  2. {
  3.   int v7; // eax
  4.   double result; // st7
  5.   float v9; // xmm0_4
  6.   signed int v10; // edi
  7.   __int16 v11; // ax
  8.   float v12; // xmm0_4
  9.   float v13; // xmm1_4
  10.   signed int v14; // eax
  11.   int v15; // eax
  12.   int *v16; // edi
  13.   bool v17; // al
  14.   float v18; // xmm1_4
  15.   float v19; // xmm2_4
  16.   float v20; // xmm3_4
  17.   float v21; // xmm0_4
  18.   long double v22; // st7
  19.   long double v23; // st6
  20.   float v24; // xmm0_4
  21.   __int16 v25; // ax
  22.   float v26; // xmm0_4
  23.   float v27; // xmm0_4
  24.   signed int v28; // edi
  25.   int v29; // ST14_4
  26.   int v30; // eax
  27.   int v31; // edx
  28.   bool v32; // zf
  29.   int v33; // ecx
  30.   signed int v34; // xmm0_4
  31.   float v35; // xmm0_4
  32.   int v36; // edi
  33.   int v37; // eax
  34.   float v38; // xmm1_4
  35.   float v39; // xmm2_4
  36.   int v40; // eax
  37.   float v41; // xmm0_4
  38.   float v42; // xmm3_4
  39.   long double v43; // st7
  40.   long double v44; // st6
  41.   int v45; // edi
  42.   __m128 v46; // xmm0
  43.   float v47; // xmm4_4
  44.   int v48; // xmm4_4
  45.   float v49; // xmm7_4
  46.   float v50; // xmm5_4
  47.   int v51; // eax
  48.   float v52; // xmm0_4
  49.   float v53; // xmm3_4
  50.   float v54; // xmm1_4
  51.   float v55; // xmm2_4
  52.   float v56; // xmm4_4
  53.   unsigned __int8 v57; // [esp+13h] [ebp-B9h]
  54.   float maxSpread; // [esp+14h] [ebp-B8h]
  55.   float right; // [esp+18h] [ebp-B4h]
  56.   float up; // [esp+1Ch] [ebp-B0h]
  57.   float v61; // [esp+20h] [ebp-ACh]
  58.   BOOL drawTracer; // [esp+24h] [ebp-A8h]
  59.   float v63; // [esp+28h] [ebp-A4h]
  60.   float v64; // [esp+2Ch] [ebp-A0h]
  61.   float v65; // [esp+30h] [ebp-9Ch]
  62.   float btr; // [esp+34h] [ebp-98h]
  63.   float v67; // [esp+38h] [ebp-94h]
  64.   float v68; // [esp+3Ch] [ebp-90h]
  65.   float v69; // [esp+40h] [ebp-8Ch]
  66.   float v70; // [esp+44h] [ebp-88h]
  67.   float v71; // [esp+48h] [ebp-84h]
  68.   float v72; // [esp+4Ch] [ebp-80h]
  69.   float v73; // [esp+50h] [ebp-7Ch]
  70.   float v74; // [esp+54h] [ebp-78h]
  71.   float v75; // [esp+58h] [ebp-74h]
  72.   float v76; // [esp+5Ch] [ebp-70h]
  73.   float v77; // [esp+60h] [ebp-6Ch]
  74.   float v78; // [esp+64h] [ebp-68h]
  75.   float v79; // [esp+68h] [ebp-64h]
  76.   float v80; // [esp+6Ch] [ebp-60h]
  77.   float v81; // [esp+70h] [ebp-5Ch]
  78.   float v82; // [esp+74h] [ebp-58h]
  79.   int v83; // [esp+78h] [ebp-54h]
  80.   int bfp; // [esp+7Ch] [ebp-50h]
  81.   int v85; // [esp+80h] [ebp-4Ch]
  82.   int v86; // [esp+84h] [ebp-48h]
  83.   int v87; // [esp+88h] [ebp-44h]
  84.   float v88; // [esp+8Ch] [ebp-40h]
  85.   float v89; // [esp+90h] [ebp-3Ch]
  86.   float v90; // [esp+94h] [ebp-38h]
  87.   float v91; // [esp+98h] [ebp-34h]
  88.   float v92; // [esp+9Ch] [ebp-30h]
  89.   float v93; // [esp+A0h] [ebp-2Ch]
  90.   float v94; // [esp+A4h] [ebp-28h]
  91.   float v95; // [esp+A8h] [ebp-24h]
  92.   float v96; // [esp+ACh] [ebp-20h]
  93.   float v97; // [esp+B0h] [ebp-1Ch]
  94.   float v98; // [esp+B4h] [ebp-18h]
  95.   float v99; // [esp+B8h] [ebp-14h]
  96.   int v100; // [esp+C0h] [ebp-Ch]
  97.   int v101; // [esp+C4h] [ebp-8h]
  98.   int v102; // [esp+C8h] [ebp-4h]
  99.  
  100.   if ( *(dword_98FD04 + 0x24) & 6 && *(ent + 0x168) == *(dword_98FD04 + 0x108) )
  101.   {
  102.     if ( *(a6 + 0x10) & 2 )
  103.     {
  104.       if ( *(a6 + 0x4C) == 0x3FF )
  105.         v7 = *(a6 + 0xFC);
  106.       else
  107.         result = sub_41FFB0("frag_grenade_mp", 0);
  108.     }
  109.     else
  110.     {
  111.       v7 = *(a6 + 0x104);
  112.     }
  113.     right = *&dword_A8D5F8 * 0.0039215689;
  114.     v9 = *(a6 + 0x110);
  115.     v10 = v7 + 1536;
  116.     LODWORD(v61) = 1;
  117.     if ( v9 != 1.0 )
  118.       v61 = 0.0;
  119.     BG_GetSpreadForWeapon(&up, &maxSpread, a6, weapdef);
  120.     if ( CG_PlayerGetViewOrigin(local, a6, &v63) )
  121.     {
  122.       v11 = word_22D9940[v10 + 0x700 * local];
  123.       v100 = dword_9EEBC4;
  124.       v101 = dword_9EEBC8;
  125.       v102 = 0;
  126.       v57 = 0;
  127.       if ( v11 )
  128.       {
  129.         if ( (&unk_228B940 + 0x68 * v11) && sub_5DC160(a5, &v57) )
  130.         {
  131.           if ( dword_9E2AB0 )
  132.           {
  133.             AngleVectors(&unk_A76B6C + 0x157 * *(ent + 0x168), &v75, &v72, &v78);
  134.             btr = (v72 * 30.0) + v63;
  135.             v67 = (v73 * 30.0) + v64;
  136.             v68 = (v74 * 30.0) + v65;
  137.           }
  138.           else
  139.           {
  140.             if ( !sub_4DF1A0(local, v10, v57) )
  141.               return result;
  142.             btr = v69;
  143.             v67 = v70;
  144.             v68 = v71;
  145.             AngleVectors(&v100, &v75, &v72, &v78);
  146.           }
  147.           if ( *&(*off_B3FAA4[0])[4] > 0.0 )
  148.           {
  149.             v14 = rand();
  150.             v12 = maxSpread;
  151.             LOBYTE(drawTracer) = (*&(*off_B3FAA4[0])[4] * 32768.0) > v14;
  152. LABEL_21:
  153.             if ( v61 != 0.0 )
  154.             {
  155.               v13 = *(weapdef + 0x830);
  156. LABEL_41:
  157.               right = ((v12 - v13) * right) + v13;
  158.               sub_7A8E80(&bfp, 0, 0x40u);
  159.               v31 = *(ent + 0x168);
  160.               v32 = *(weapdef + 0x5CC) == 0;
  161.               bfp = 0x3FE;
  162.               v85 = v31;
  163.               v86 = 0x3F800000;
  164.               v33 = !v32 + 1;
  165.               v32 = *(weapdef + 0x148) == 3;
  166.               v87 = v33;
  167.               if ( v32 )
  168.               {
  169.                 v34 = *(weapdef + 0x920);
  170.                 v61 = *(weapdef + 0x40C);
  171.               }
  172.               else
  173.               {
  174.                 *&v34 = 8192.0;
  175.                 LODWORD(v61) = 1;
  176.               }
  177.               up = *&v34;
  178.               v88 = v63;
  179.               v45 = 0;
  180.               v89 = v64;
  181.               v90 = v65;
  182.               if ( SLODWORD(v61) > 0 )
  183.               {
  184.                 v46 = LODWORD(right);
  185.                 v46.m128_f32[0] = right * 0.017453292;
  186.                 v47 = sub_7DB99A(_mm_cvtps_pd(v46));
  187.                 *&v48 = v47 * up;
  188.                 v49 = v72 * up;
  189.                 v50 = v73 * up;
  190.                 v83 = v48;
  191.                 maxSpread = v72 * up;
  192.                 v81 = v73 * up;
  193.                 v82 = v74 * up;
  194.                 while ( 1 )
  195.                 {
  196.                   v97 = v72;
  197.                   v98 = v73;
  198.                   v99 = v74;
  199.                   v51 = *a6;
  200.                   v91 = v63;
  201.                   v92 = v64;
  202.                   v93 = v65;
  203.                   RandomBulletDir(v45 + v51, &right, &up);
  204.                   v52 = right * *&v48;
  205.                   v53 = up * *&v48;
  206.                   v54 = (v75 * (right * *&v48)) + (v91 + v49);
  207.                   v55 = (v76 * (right * *&v48)) + (v92 + v50);
  208.                   v56 = v77 * (right * *&v48);
  209.                   right = v52;
  210.                   v94 = (v78 * v53) + v54;
  211.                   v95 = (v79 * v53) + v55;
  212.                   v96 = (v80 * v53) + (v56 + (v93 + v82));
  213.                   up = v53;
  214.                   v97 = v94 - v91;
  215.                   v98 = v95 - v92;
  216.                   v99 = v96 - v93;
  217.                   sub_40E0C0(&v97);
  218.                   v86 = 0x3F800000;
  219.                   FireBulletPenetrate(local, &bfp, weapdef, ent, &btr, drawTracer, isplayer);
  220.                   if ( ++v45 >= SLODWORD(v61) )
  221.                     break;
  222.                   v49 = maxSpread;
  223.                   v50 = v81;
  224.                   v48 = v83;
  225.                 }
  226.               }
  227.               return result;
  228.             }
  229. LABEL_40:
  230.             v13 = up;
  231.             goto LABEL_41;
  232.           }
  233.           LOBYTE(drawTracer) = 0;
  234. LABEL_20:
  235.           v12 = maxSpread;
  236.           goto LABEL_21;
  237.         }
  238.       }
  239.     }
  240.     return result;
  241.   }
  242.   v15 = *(ent + 0x16C);
  243.   if ( v15 != 1 )
  244.   {
  245.     switch ( v15 )
  246.     {
  247.       case 0xB:
  248.         v26 = *(weapdef + 0x8C4);
  249.         up = v26;
  250.         maxSpread = v26;
  251.         v27 = 1.0;
  252.         break;
  253.       case 0xE:
  254.         if ( (a7 - 0xA2) > 7 )
  255.         {
  256.           v35 = *(weapdef + 0x830);
  257.           LODWORD(v61) = 1;
  258.         }
  259.         else
  260.         {
  261.           if ( isplayer )
  262.             v35 = *(weapdef + 0x8C4);
  263.           else
  264.             v35 = *(weapdef + 0x8C0);
  265.           v61 = 0.0;
  266.         }
  267.         v36 = *(ent + 0x168);
  268.         maxSpread = v35;
  269.         up = v35;
  270.         right = 0.0;
  271.         v57 = 0;
  272.         sub_44C150(local, a5, v36, &v57);
  273.         if ( v37 && sub_4DF1A0(local, v36, v57) )
  274.         {
  275.           v63 = v69;
  276.           v64 = v70;
  277.           v65 = v71;
  278.           btr = v69;
  279.           v67 = v70;
  280.           v68 = v71;
  281.           LOBYTE(drawTracer) = 1;
  282.           goto LABEL_20;
  283.         }
  284.         return result;
  285.       case 0x11:
  286.         v38 = *(ent + 0x184) - *(ent + 0xF0);
  287.         v39 = *(ent + 0x188) - *(ent + 0xF4);
  288.         up = *(weapdef + 0x53C);
  289.         v40 = *(dword_98FD04 + 8) - *(dword_98FD00 + 8);
  290.         maxSpread = *(weapdef + 0x548);
  291.         v41 = *(ent + 0x180) - *(ent + 0xEC);
  292.         if ( v40 )
  293.         {
  294.           v42 = flt_8D9134 / v40;
  295.           v41 = v42 * v41;
  296.           v38 = v38 * v42;
  297.           v39 = v39 * v42;
  298.         }
  299.         v43 = sub_401060(((v39 * v39) + (v38 * v38)) + (v41 * v41));
  300.         v61 = v43;
  301.         v44 = v43 - 255.0;
  302.         result = 0.0;
  303.         if ( v44 < 0.0 )
  304.           v27 = v61 * 0.0039215689;
  305.         else
  306.           v27 = 255.0 * 0.0039215689;
  307.         break;
  308.       case 0x30:
  309.         up = 0.0;
  310.         maxSpread = 0.0;
  311.         right = 0.0;
  312.         v69 = *(ent + 0x180);
  313.         v70 = *(ent + 0x184);
  314.         v71 = *(ent + 0x188);
  315.         AngleVectors((ent + 0x1A4), &v75, &v72, &v78);
  316. LABEL_39:
  317.         v63 = v69;
  318.         btr = v69;
  319.         v12 = maxSpread;
  320.         v64 = v70;
  321.         v65 = v71;
  322.         v67 = v70;
  323.         v68 = v71;
  324.         LOBYTE(drawTracer) = 0;
  325.         goto LABEL_40;
  326.       default:
  327.         return sub_562550(0xE, "Unknown eType %i in CG_DrawBulletImpacts()\n", *(ent + 0x16C));
  328.     }
  329.     v28 = *(ent + 0x168);
  330.     v29 = *(ent + 0x168);
  331.     right = v27;
  332.     v57 = 0;
  333.     sub_44C150(local, a5, v29, &v57);
  334.     if ( !v30 || !sub_4DF1A0(local, v28, v57) )
  335.       return result;
  336.     goto LABEL_39;
  337.   }
  338.   sub_47E5D0(&maxSpread, weapdef, ent, &up);
  339.   v16 = &dword_A76764[0x157 * *(ent + 0x168)];
  340.   v17 = sub_47E580(ent);
  341.   v18 = *(ent + 0x180) - *(ent + 0xEC);
  342.   v19 = *(ent + 0x184) - *(ent + 0xF0);
  343.   v20 = *(ent + 0x188) - *(ent + 0xF4);
  344.   LODWORD(v61) = v17;
  345.   if ( *(dword_98FD04 + 8) != *(dword_98FD00 + 8) )
  346.   {
  347.     v21 = flt_8D9134 / (*(dword_98FD04 + 8) - *(dword_98FD00 + 8));
  348.     v18 = v21 * v18;
  349.     v19 = v19 * v21;
  350.     v20 = v20 * v21;
  351.   }
  352.   v22 = sub_401060(((v20 * v20) + (v19 * v19)) + (v18 * v18));
  353.   right = v22;
  354.   v23 = v22 - 255.0;
  355.   result = 0.0;
  356.   if ( v23 < 0.0 )
  357.     v24 = right;
  358.   else
  359.     v24 = 255.0;
  360.   v25 = word_22D9940[*(ent + 0x168) + 0x700 * local];
  361.   right = v24 * 0.0039215689;
  362.   v57 = 0;
  363.   if ( v25 && (&unk_228B940 + 0x68 * v25) && sub_5DC160(a5, &v57) && sub_4DF1A0(local, *(ent + 0x168), v57) )
  364.   {
  365.     sub_481090(&v63, *(ent + 0x168), local);
  366.     btr = v69;
  367.     v67 = v70;
  368.     v68 = v71;
  369.     LOBYTE(drawTracer) = 0;
  370.     AngleVectors(v16 + 0x102, &v75, &v72, &v78);
  371.     goto LABEL_20;
  372.   }
  373.   return result;
  374. }
RAW Paste Data