Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.96 KB | None | 0 0
  1. int __thiscall I3D_mirror::ProcessMirror(I3D_mirror *this)
  2. {
  3.   I3D_mirror *v1; // ebx
  4.   int v2; // eax
  5.   int result; // eax
  6.   int v4; // edx
  7.   _DWORD *v5; // eax
  8.   int v6; // ecx
  9.   long double v7; // st7
  10.   double v8; // st7
  11.   long double v9; // st7
  12.   int v10; // eax
  13.   int v11; // ecx
  14.   int v12; // eax
  15.   char *v13; // ebp
  16.   int v14; // edx
  17.   int v15; // eax
  18.   float *v16; // ebp
  19.   float v17; // STE0_4
  20.   float v18; // STDC_4
  21.   float v19; // STD8_4
  22.   float *v20; // edi
  23.   int v21; // esi
  24.   double v22; // st7
  25.   double v23; // st6
  26.   long double v24; // st6
  27.   float v25; // edx
  28.   double v26; // st7
  29.   double v27; // st6
  30.   int v28; // eax
  31.   int v29; // ecx
  32.   _DWORD *v30; // ebp
  33.   I3D_frame **v31; // esi
  34.   int v32; // eax
  35.   int v33; // eax
  36.   _DWORD *v34; // edi
  37.   int j; // eax
  38.   float v36; // eax
  39.   unsigned int v37; // edx
  40.   float v38; // eax
  41.   I3D_frame *v39; // edi
  42.   float *v40; // eax
  43.   float *v41; // eax
  44.   _DWORD *v42; // ecx
  45.   float v43; // edx
  46.   I3D_frame *v44; // esi
  47.   int v45; // eax
  48.   float v46; // [esp+C4h] [ebp-104h]
  49.   I3D_frame **i; // [esp+C4h] [ebp-104h]
  50.   float v48; // [esp+C8h] [ebp-100h]
  51.   float v49; // [esp+CCh] [ebp-FCh]
  52.   float v50; // [esp+CCh] [ebp-FCh]
  53.   float v51; // [esp+D0h] [ebp-F8h]
  54.   float v52; // [esp+D0h] [ebp-F8h]
  55.   float v53; // [esp+D4h] [ebp-F4h]
  56.   int v54; // [esp+D4h] [ebp-F4h]
  57.   float v55; // [esp+D8h] [ebp-F0h]
  58.   float *v56; // [esp+DCh] [ebp-ECh]
  59.   int v57; // [esp+E0h] [ebp-E8h]
  60.   float v58; // [esp+E4h] [ebp-E4h]
  61.   float v59; // [esp+E8h] [ebp-E0h]
  62.   float v60; // [esp+ECh] [ebp-DCh]
  63.   float v61; // [esp+F0h] [ebp-D8h]
  64.   float v62; // [esp+F4h] [ebp-D4h]
  65.   float v63; // [esp+F8h] [ebp-D0h]
  66.   char v64; // [esp+FCh] [ebp-CCh]
  67.   float v65; // [esp+104h] [ebp-C4h]
  68.   float v66[8]; // [esp+108h] [ebp-C0h]
  69.   float v67; // [esp+128h] [ebp-A0h]
  70.   int v68; // [esp+138h] [ebp-90h]
  71.   int v69; // [esp+13Ch] [ebp-8Ch]
  72.   int v70; // [esp+140h] [ebp-88h]
  73.   char v71; // [esp+148h] [ebp-80h]
  74.   float v72; // [esp+168h] [ebp-60h]
  75.   float v73; // [esp+16Ch] [ebp-5Ch]
  76.   float v74; // [esp+170h] [ebp-58h]
  77.   char v75; // [esp+188h] [ebp-40h]
  78.  
  79.   v1 = this;
  80.   v2 = *((_DWORD *)this + 163);
  81.   if ( !(v2 & 4) )
  82.   {
  83.     if ( !(v2 & 1) )
  84.       return 0;
  85.     *((_DWORD *)this + 163) = v2 | 4;
  86.     if ( !(*((_BYTE *)this + 172) & 0x20) )
  87.       I3D_frame::UpdateWMatrixProc((I3D_frame *)this);
  88.     S_matrix::operator*((float *)v1 + 164, v66, (float *)v1 + 4);
  89.     v4 = v69;
  90.     v5 = (_DWORD *)((char *)v1 + 504);
  91.     *v5 = v68;
  92.     v6 = v70;
  93.     v5[1] = v4;
  94.     v5[2] = v6;
  95.     v58 = 1.0;
  96.     v59 = 1.0;
  97.     v60 = 1.0;
  98.     S_vector::RotateByMatrix(&v58, &v61, v66);
  99.     v7 = v63 * v63 + v62 * v62 + v61 * v61;
  100.     *((float *)v1 + 130) = v7;
  101.     *((float *)v1 + 129) = sqrt(v7);
  102.     S_matrix::Inverse((I3D_mirror *)((char *)v1 + 524), (const struct S_matrix *)v66);
  103.     if ( !(*((_BYTE *)v1 + 172) & 0x20) )
  104.       I3D_frame::UpdateWMatrixProc((I3D_frame *)v1);
  105.     v48 = *((float *)v1 + 12);
  106.     v49 = *((float *)v1 + 13);
  107.     v51 = *((float *)v1 + 14);
  108.     v8 = v48 * v48 + v49 * v49 + v51 * v51;
  109.     v46 = v8;
  110.     if ( fabs(v8 - 1.0) >= 0.00000000999999993922529 )
  111.     {
  112.       if ( v46 >= 0.0000000099999999 )
  113.       {
  114.         v9 = 1.0 / sqrt(v46);
  115.         v48 = v48 * v9;
  116.         v49 = v49 * v9;
  117.         v51 = v51 * v9;
  118.       }
  119.       else if ( v48 == 0.0 )
  120.       {
  121.         if ( v51 == 0.0 )
  122.         {
  123.           if ( v49 >= 0.0 )
  124.             v49 = 1.0;
  125.           else
  126.             v49 = -1.0;
  127.         }
  128.         else if ( v51 >= 0.0 )
  129.         {
  130.           v51 = 1.0;
  131.         }
  132.         else
  133.         {
  134.           v51 = -1.0;
  135.         }
  136.       }
  137.       else if ( v48 >= 0.0 )
  138.       {
  139.         v48 = 1.0;
  140.       }
  141.       else
  142.       {
  143.         v48 = -1.0;
  144.       }
  145.     }
  146.     v58 = v48;
  147.     v59 = v49;
  148.     v60 = v51;
  149.     S_matrix::SetDir((S_matrix *)v66, (const struct S_vector *)&v58);
  150.     if ( !(*((_BYTE *)v1 + 172) & 0x20) )
  151.       I3D_frame::UpdateWMatrixProc((I3D_frame *)v1);
  152.     v10 = *((_DWORD *)v1 + 17);
  153.     v11 = *((_DWORD *)v1 + 18);
  154.     v68 = *((_DWORD *)v1 + 16);
  155.     v69 = v10;
  156.     v70 = v11;
  157.     S_matrix::Inverse((I3D_mirror *)((char *)v1 + 588), (const struct S_matrix *)v66);
  158.     qmemcpy(&v71, v66, 0x40u);
  159.     v72 = v67 * -1.0;
  160.     v73 = v73 * -1.0;
  161.     v74 = v74 * -1.0;
  162.     qmemcpy((char *)v1 + 588, S_matrix::operator*((float *)v1 + 147, (float *)&v75, (float *)&v71), 0x40u);
  163.   }
  164.   dword_107F7708 = 0;
  165.   dword_107F771C = (int)v1;
  166.   FindVisualsR(*(struct #11 **)(*((_DWORD *)v1 + 121) + 532));
  167.   FindVisualsR(*(struct #11 **)(*((_DWORD *)v1 + 121) + 540));
  168.   if ( !dword_107F7708 )
  169.   {
  170.     *((_DWORD *)v1 + 163) &= 0xFFFFFDFF;
  171.     return 0;
  172.   }
  173.   (*(void (__stdcall **)(struct IDirect3DDevice8 *, _DWORD, _DWORD, unsigned int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)m_pD3DDevice8 + 0x90))(
  174.     m_pD3DDevice8,
  175.     0,
  176.     0,
  177.     (m_HardwareCaps & 0x10 | 8) >> 2,
  178.     0,
  179.     0,
  180.     0);
  181.   v12 = *((_DWORD *)v1 + 184);
  182.   if ( v12 < dword_106F2834 )
  183.     v12 = dword_106F2834;
  184.   if ( dword_106F2830 < v12 )
  185.   {
  186.     dword_106F2830 = v12;
  187.     v13 = (char *)operator new(24 * v12);
  188.     v14 = 0;
  189.     if ( dword_106F2834 > 0 )
  190.     {
  191.       v15 = 0;
  192.       do
  193.       {
  194.         qmemcpy(&v13[v15], (char *)LVertList + v15, 0x18u);
  195.         ++v14;
  196.         v15 += 24;
  197.       }
  198.       while ( v14 < dword_106F2834 );
  199.     }
  200.     operator delete(LVertList);
  201.     LVertList = v13;
  202.   }
  203.   v16 = (float *)&pCurrentCamera->I3D_frame__AddRef;
  204.   dword_106F2834 = *((_DWORD *)v1 + 184);
  205.   if ( !(pCurrentCamera[2].I3D_frame__Update & 0x20) )
  206.     I3D_frame::UpdateWMatrixProc(pCurrentCamera);
  207.   v53 = *(float *)&pCurrentCamera[4].I3D_frame__SetName * 0.99000001;
  208.   if ( !(*((_BYTE *)v1 + 172) & 0x20) )
  209.     I3D_frame::UpdateWMatrixProc((I3D_frame *)v1);
  210.   v17 = *((float *)v1 + 180) * 255.0;
  211.   v18 = *((float *)v1 + 181) * 255.0;
  212.   v19 = *((float *)v1 + 182) * 255.0;
  213.   v20 = (float *)LVertList;
  214.   v21 = (signed int)v19 | (((signed int)v18 | (((signed int)v17 | ((signed int)255.0 << 8)) << 8)) << 8);
  215.   v56 = (float *)*((_DWORD *)v1 + 186);
  216.   if ( *((_DWORD *)v1 + 184) )
  217.   {
  218.     v57 = *((_DWORD *)v1 + 184);
  219.     do
  220.     {
  221.       S_vector::operator*(v56, &v61, (float *)v1 + 4);
  222.       v22 = v61 - v16[16];
  223.       v50 = v62 - v16[17];
  224.       v52 = v63 - v16[18];
  225.       v23 = v22 * v22 + v52 * v52 + v50 * v50;
  226.       v55 = v23;
  227.       if ( fabs(v23 - 1.0) >= 0.00000000999999993922529 )
  228.       {
  229.         if ( v55 >= 0.0000000099999999 )
  230.         {
  231.           v24 = 1.0 / sqrt(v55);
  232.           v22 = v22 * v24;
  233.           v50 = v50 * v24;
  234.           v52 = v52 * v24;
  235.         }
  236.         else if ( v22 == 0.0 )
  237.         {
  238.           if ( v52 == 0.0 )
  239.           {
  240.             if ( v50 >= 0.0 )
  241.               v50 = 1.0;
  242.             else
  243.               v50 = -1.0;
  244.           }
  245.           else if ( v52 >= 0.0 )
  246.           {
  247.             v52 = 1.0;
  248.           }
  249.           else
  250.           {
  251.             v52 = -1.0;
  252.           }
  253.         }
  254.         else if ( v22 >= 0.0 )
  255.         {
  256.           v22 = 1.0;
  257.         }
  258.         else
  259.         {
  260.           v22 = -1.0;
  261.         }
  262.       }
  263.       v20 += 6;
  264.       v65 = v52 * v53;
  265.       v58 = v22 * v53 + v16[16];
  266.       v25 = v58;
  267.       v26 = v50 * v53 + v16[17];
  268.       v61 = v58;
  269.       v59 = v26;
  270.       v62 = v59;
  271.       v27 = v65 + v16[18];
  272.       v60 = v27;
  273.       v63 = v60;
  274.       *(v20 - 5) = v26;
  275.       *(v20 - 6) = v25;
  276.       *(v20 - 4) = v27;
  277.       *((_DWORD *)v20 - 3) = v21;
  278.       v56 += 3;
  279.       --v57;
  280.     }
  281.     while ( v57 );
  282.   }
  283.   if ( m_CurrZCompare )
  284.   {
  285.     m_CurrZCompare = 0;
  286.     (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, signed int))(*(_DWORD *)m_pD3DDevice8 + 200))(
  287.       m_pD3DDevice8,
  288.       23,
  289.       8);
  290.   }
  291.   if ( m_CurrFogState )
  292.   {
  293.     m_CurrFogState = 0;
  294.     (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, _DWORD))(*(_DWORD *)m_pD3DDevice8 + 200))(
  295.       m_pD3DDevice8,
  296.       28,
  297.       0);
  298.   }
  299.   if ( m_CurrColorOp != 4 )
  300.   {
  301.     m_CurrColorOp = 4;
  302.     (*(void (__stdcall **)(struct IDirect3DDevice8 *, _DWORD, signed int, signed int))(*(_DWORD *)m_pD3DDevice8 + 252))(
  303.       m_pD3DDevice8,
  304.       0,
  305.       1,
  306.       4);
  307.   }
  308.   if ( m_CurrAlphaState )
  309.   {
  310.     m_CurrAlphaState = 0;
  311.     (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, _DWORD))(*(_DWORD *)m_pD3DDevice8 + 200))(
  312.       m_pD3DDevice8,
  313.       27,
  314.       0);
  315.     (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, _DWORD))(*(_DWORD *)m_pD3DDevice8 + 0xC8))(
  316.       m_pD3DDevice8,
  317.       15,
  318.       0);
  319.   }
  320.   m_CullMode = 3;
  321.   if ( m_CurrCullState != 1 )
  322.   {
  323.     m_CurrCullState = 1;
  324.     (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, signed int))(*(_DWORD *)m_pD3DDevice8 + 0xC8))(
  325.       m_pD3DDevice8,
  326.       22,
  327.       1);
  328.   }
  329.   if ( m_CurrCullState != 3 )
  330.   {
  331.     m_CurrCullState = 3;
  332.     (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, enum _D3DCULL))(*(_DWORD *)m_pD3DDevice8 + 200))(
  333.       m_pD3DDevice8,
  334.       22,
  335.       m_CullMode);
  336.   }
  337.   if ( m_CurrClipState != 1 )
  338.   {
  339.     m_CurrClipState = 1;
  340.     (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, signed int))(*(_DWORD *)m_pD3DDevice8 + 200))(
  341.       m_pD3DDevice8,
  342.       136,
  343.       1);
  344.   }
  345.   (*(void (__stdcall **)(IGraph *, void *))(*(_DWORD *)pGlobalIGraph + 84))(pGlobalIGraph, &unk_10106188);
  346.   (*(void (__stdcall **)(struct IDirect3DDevice8 *, _DWORD, _DWORD))(*(_DWORD *)m_pD3DDevice8 + 0xF4))(
  347.     m_pD3DDevice8,
  348.     0,
  349.     0);
  350.   (*(void (__stdcall **)(IGraph *, signed int, _DWORD, _DWORD, _DWORD, void *, _DWORD))(*(_DWORD *)pGlobalIGraph + 0x5C))(
  351.     pGlobalIGraph,
  352.     3,
  353.     *((_DWORD *)v1 + 184),
  354.     *((_DWORD *)v1 + 187),
  355.     *((_DWORD *)v1 + 185),
  356.     LVertList,
  357.     0);
  358.   if ( m_CurrZCompare != 1 )
  359.   {
  360.     m_CurrZCompare = 1;
  361.     (*(void (__stdcall **)(struct IDirect3DDevice8 *, signed int, signed int))(*(_DWORD *)m_pD3DDevice8 + 0xC8))(
  362.       m_pD3DDevice8,
  363.       23,
  364.       4);
  365.   }
  366.   v54 = dword_107F7708;
  367.   for ( i = (I3D_frame **)dword_107F7700; v54; i = v31 + 1 )
  368.   {
  369.     v28 = *((_DWORD *)v1 + 124);
  370.     v29 = *((_DWORD *)v1 + 122);
  371.     --v54;
  372.     if ( !v28 )
  373.       goto LABEL_77;
  374.     while ( 1 )
  375.     {
  376.       --v28;
  377.       if ( *(I3D_frame **)(*(_DWORD *)v29 + 8) == *i )
  378.         break;
  379.       v29 += 4;
  380.       if ( !v28 )
  381.         goto LABEL_77;
  382.     }
  383.     v30 = *(_DWORD **)v29;
  384.     if ( *(_DWORD *)v29 )
  385.     {
  386.       v31 = i;
  387.     }
  388.     else
  389.     {
  390. LABEL_77:
  391.       v31 = i;
  392.       v30 = (_DWORD *)(*(int (__stdcall **)(I3D_driver *, int))(*(_DWORD *)pI3DDriver + 72))(
  393.                         pI3DDriver,
  394.                         (*i)[6].I3D_frame__SetOn);
  395.       if ( !v30 )
  396.       {
  397.         dbgPrintf(`string');
  398.        return 0;
  399.      }
  400.      v32 = *((_DWORD *)v1 + 123);
  401.      if ( *((_DWORD *)v1 + 124) >= v32 )
  402.      {
  403.        v33 = *((_DWORD *)v1 + 125) + v32;
  404.        *((_DWORD *)v1 + 123) = v33;
  405.        v34 = operator new(4 * v33);
  406.        for ( j = 0; j < *((_DWORD *)v1 + 124); ++j )
  407.          v34[j] = *(_DWORD *)(*((_DWORD *)v1 + 122) + 4 * j);
  408.        operator delete(*((void **)v1 + 122));
  409.        *((_DWORD *)v1 + 122) = v34;
  410.      }
  411.      *(_DWORD *)(*((_DWORD *)v1 + 122) + 4 * (*((_DWORD *)v1 + 124))++) = v30;
  412.      v36 = *(float *)v30;
  413.      v30[119] = 0x10000;
  414.      (*(void (__stdcall **)(_DWORD *, I3D_frame *))(LODWORD(v36) + 64))(v30, *i);
  415.      v30[2] = *i;
  416.      (*(void (__stdcall **)(I3D_frame *))(*i)->I3D_frame__AddRef)(*i);
  417.      v37 = v30[119] & 0xFFFFFFBF | 0x10000;
  418.      v30[43] |= 0x200000u;
  419.      v38 = *(float *)v30;
  420.      v30[119] = v37;
  421.      (*(void (__stdcall **)(_DWORD *, _DWORD, signed int))(LODWORD(v38) + 32))(v30, 0, 0x1E00);
  422.    }
  423.    v39 = *v31;
  424.    if ( v30[71] != (*v31)[3].I3D_frame__DebugDraw )
  425.    {
  426.      if ( v39[6].I3D_frame__SetName & 0x40 )
  427.      {
  428.        v40 = (float *)&unk_10106188;
  429.      }
  430.      else
  431.      {
  432.        if ( !(v39[2].I3D_frame__Update & 0x20) )
  433.          I3D_frame::UpdateWMatrixProc(*v31);
  434.        v40 = (float *)&v39->I3D_frame__SetDir;
  435.      }
  436.      qmemcpy(v30 + 20, S_matrix::operator*(v40, (float *)&v75, (float *)v1 + 147), 0x40u);
  437.      v41 = S_matrix::GetScale((float *)v30 + 20, (float *)&v64);
  438.      v42 = v30 + 36;
  439.      *v42 = *(_DWORD *)v41;
  440.      v42[1] = *((_DWORD *)v41 + 1);
  441.      v43 = *(float *)v30;
  442.      v42[2] = *((_DWORD *)v41 + 2);
  443.      v30[43] = v30[43] & 0xFFFFFFD7 | 0x40000014;
  444.      (*(void (__stdcall **)(_DWORD *))(LODWORD(v43) + 28))(v30);
  445.      v44 = *i;
  446.      if ( !((*i)[6].I3D_frame__SetName & 0x20000) )
  447.        (*(void (__stdcall **)(I3D_frame *))(v44->I3D_frame__AddRef + 108))(*i);
  448.      I3D_visual::SetBoundVolume((I3D_visual *)v30, (const struct I3D_bvolume *)&v44[6]);
  449.      v30[71] = (*i)[3].I3D_frame__DebugDraw;
  450.      v31 = i;
  451.    }
  452.    v45 = v30[119];
  453.    if ( v45 & 0x800 )
  454.      v30[134] = (*v31)[7].I3D_frame__SetCallback;
  455.    (*(void (__thiscall **)(_DWORD *))(*v30 + 112))(v30);
  456.    v30[80] = RenderNumber;
  457.  }
  458.  result = *((_DWORD *)v1 + 124);
  459.  if ( !result )
  460.    *((_DWORD *)v1 + 163) &= 0xFFFFFDFF;
  461.  return result;
  462. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement