Advertisement
Guest User

Untitled

a guest
Nov 12th, 2017
447
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.41 KB | None | 0 0
  1. signed int __fastcall Aska::TriListComp::DecompressTriangleList(Aska::TriListComp *this, const signed __int8 *a2, unsigned __int16 *a3, unsigned int a4, unsigned int a5)
  2. {
  3.   int v5; // r7
  4.   unsigned int v6; // r11
  5.   int *v7; // r1
  6.   signed int v8; // r6
  7.   int v9; // r9
  8.   unsigned int v10; // r8
  9.   int v11; // r3
  10.   unsigned __int16 v12; // r0
  11.   int v13; // r5
  12.   unsigned __int16 v14; // r2
  13.   int v15; // r6
  14.   __int16 v16; // r3
  15.   unsigned __int16 v17; // r3
  16.   __int16 v18; // r1
  17.   unsigned __int16 v19; // r5
  18.   int v20; // r0
  19.   unsigned int v21; // r7
  20.   int v22; // r3
  21.   __int16 v23; // r3
  22.   __int16 v24; // r2
  23.   unsigned int *v25; // r0
  24.   unsigned int *v26; // r0
  25.   unsigned __int16 v28; // [sp+4h] [bp-8Ch]
  26.   unsigned __int16 v29; // [sp+6h] [bp-8Ah]
  27.   __int16 v30; // [sp+8h] [bp-88h]
  28.   unsigned __int16 v31; // [sp+Ah] [bp-86h]
  29.   __int16 v32; // [sp+Ch] [bp-84h]
  30.   unsigned __int16 v33; // [sp+Eh] [bp-82h]
  31.   unsigned __int16 v34; // [sp+10h] [bp-80h]
  32.   unsigned __int16 v35; // [sp+12h] [bp-7Eh]
  33.   __int16 v36; // [sp+14h] [bp-7Ch]
  34.   unsigned __int16 v37; // [sp+16h] [bp-7Ah]
  35.   unsigned __int16 v38; // [sp+18h] [bp-78h]
  36.   unsigned __int16 v39; // [sp+1Ah] [bp-76h]
  37.   unsigned __int16 v40; // [sp+1Ch] [bp-74h]
  38.   __int16 v41; // [sp+1Eh] [bp-72h]
  39.   unsigned __int16 v42; // [sp+20h] [bp-70h]
  40.   unsigned __int16 v43; // [sp+22h] [bp-6Eh]
  41.   unsigned __int16 v44; // [sp+24h] [bp-6Ch]
  42.   unsigned __int16 v45; // [sp+26h] [bp-6Ah]
  43.   _DWORD (__fastcall **v46)(Aska::StaticStream *__hidden); // [sp+28h] [bp-68h]
  44.   __int64 v47; // [sp+2Ch] [bp-64h]
  45.   void *v48[2]; // [sp+34h] [bp-5Ch]
  46.   int v49; // [sp+3Ch] [bp-54h]
  47.   int v50; // [sp+4Ch] [bp-44h]
  48.   int (**v51)(); // [sp+50h] [bp-40h]
  49.   Aska::TriListComp *v52; // [sp+54h] [bp-3Ch]
  50.   char v53[12]; // [sp+58h] [bp-38h]
  51.   int v54; // [sp+64h] [bp-2Ch]
  52.   __int16 v55; // [sp+68h] [bp-28h]
  53.   __int16 v56; // [sp+6Ah] [bp-26h]
  54.  
  55.   v5 = *(unsigned __int16 *)this;
  56.   v51 = &off_1E27E1C;
  57.   *(_QWORD *)&v53[4] = 0LL;
  58.   v54 = 8;
  59.   v55 = 0;
  60.   v56 = 0;
  61.   v52 = (Aska::TriListComp *)((char *)this + 2);
  62.   v6 = ((unsigned int)a3 >> 1) - 1;
  63.   v46 = off_1DD55AC;
  64.   *(_QWORD *)v53 = v6;
  65.   *(_DWORD *)&v53[4] = ((unsigned int)a3 >> 1) - 1;
  66.   v47 = 0LL;
  67.   *(_QWORD *)v48 = 0LL;
  68.   v49 = 0;
  69.   Aska::StaticStream::Open((Aska::StaticStream *)&v46, a2, a4);
  70.   v8 = 1;
  71.   if ( v5 == 0xFFFF )
  72.   {
  73.     if ( v6 )
  74.     {
  75.       v21 = 0;
  76.       do
  77.       {
  78.         v22 = (int)v52 + 2 * v21;
  79.         v34 = *((_WORD *)v52 + v21);
  80.         v35 = *(_WORD *)(v22 + 2);
  81.         v23 = *(_WORD *)(v22 + 4);
  82.         v36 = v23;
  83.         if ( v34 >= (unsigned int)v35 )
  84.         {
  85.           v21 += 3;
  86.           if ( Aska::StaticStream::Write((Aska::StaticStream *)&v46, &v34, 2u, 3u) != 3 )
  87.           {
  88. LABEL_26:
  89.             v8 = 0;
  90.             v50 = 0;
  91.             break;
  92.           }
  93.         }
  94.         else
  95.         {
  96.           v24 = *((_WORD *)v52 + v21 + 3);
  97.           v28 = v34;
  98.           v29 = v35;
  99.           v30 = v23;
  100.           v31 = v34;
  101.           v32 = v24;
  102.           v33 = v35;
  103.           if ( Aska::StaticStream::Write((Aska::StaticStream *)&v46, &v28, 2u, 6u) != 6 )
  104.             goto LABEL_26;
  105.           v21 += 4;
  106.         }
  107.       }
  108.       while ( v21 < v6 );
  109.     }
  110.   }
  111.   else if ( v6 )
  112.   {
  113.     LOWORD(v9) = v5 - 1;
  114.     v10 = 0;
  115.     do
  116.     {
  117.       v11 = (int)v52 + 2 * v10;
  118.       v12 = v9 - *((_WORD *)v52 + v10);
  119.       v43 = v12;
  120.       v13 = v5 + v12;
  121.       if ( (unsigned __int16)v9 > v13 )
  122.         LOWORD(v13) = v9;
  123.       v14 = v13 - *(_WORD *)(v11 + 2);
  124.       v44 = v14;
  125.       v15 = v5 + v14;
  126.       v16 = *(_WORD *)(v11 + 4);
  127.       if ( (unsigned __int16)v13 > v15 )
  128.         LOWORD(v15) = v13;
  129.       v17 = v15 - v16;
  130.       v45 = v17;
  131.       v9 = v5 + v17;
  132.       if ( (unsigned __int16)v15 > v9 )
  133.         LOWORD(v9) = v15;
  134.       if ( v12 >= (unsigned int)v14 )
  135.       {
  136.         v10 += 3;
  137.         if ( Aska::StaticStream::Write((Aska::StaticStream *)&v46, &v43, 2u, 3u) != 3 )
  138.           goto LABEL_26;
  139.       }
  140.       else
  141.       {
  142.         v18 = *((_WORD *)v52 + v10 + 3);
  143.         v37 = v12;
  144.         v38 = v14;
  145.         v19 = v9 - v18;
  146.         v39 = v17;
  147.         v40 = v12;
  148.         v41 = v9 - v18;
  149.         v42 = v14;
  150.         v20 = Aska::StaticStream::Write((Aska::StaticStream *)&v46, &v37, 2u, 6u);
  151.         v7 = (int *)(v5 + v19);
  152.         if ( (unsigned __int16)v9 <= (signed int)v7 )
  153.           LOWORD(v9) = v5 + v19;
  154.         if ( v20 != 6 )
  155.           goto LABEL_26;
  156.         v10 += 4;
  157.       }
  158.     }
  159.     while ( v10 < v6 );
  160.     v8 = 1;
  161.   }
  162.   v46 = off_1DD55AC;
  163.   v25 = (unsigned int *)v48[1];
  164.   if ( !v48[1] )
  165.     goto LABEL_46;
  166.   __dmb(0xBu);
  167.   do
  168.     v7 = (int *)__ldrex(v25);
  169.   while ( __strex((unsigned int)v7 - 1, v25) );
  170.   __dmb(0xBu);
  171.   if ( v7 == (int *)((char *)&dword_0 + 1) )
  172.   {
  173. LABEL_46:
  174.     if ( v48[0] )
  175.       operator delete[](v48[0]);
  176.     if ( v48[1] )
  177.       Aska::TSharedPointerCode::DeleteCounter((Aska::TSharedPointerCode *)v48[1], v7);
  178.   }
  179.   *(_QWORD *)v48 = 0LL;
  180.   v26 = (unsigned int *)HIDWORD(v47);
  181.   if ( !HIDWORD(v47) )
  182.     goto LABEL_47;
  183.   __dmb(0xBu);
  184.   do
  185.     v7 = (int *)__ldrex(v26);
  186.   while ( __strex((unsigned int)v7 - 1, v26) );
  187.   __dmb(0xBu);
  188.   if ( v7 == (int *)((char *)&dword_0 + 1) )
  189.   {
  190. LABEL_47:
  191.     if ( (_DWORD)v47 )
  192.       operator delete[]((void *)v47);
  193.     if ( HIDWORD(v47) )
  194.       Aska::TSharedPointerCode::DeleteCounter((Aska::TSharedPointerCode *)HIDWORD(v47), v7);
  195.   }
  196.   return v8;
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement