CharacterData::Decode

mail@pastecode.io avatar
unknown
c_cpp
a year ago
19 kB
7
Indexable
Never
__int16 __userpurge CharacterData::Decode@<ax>(int a1@<ebp>, int a2, int a3)
{
  int v3; // esi
  int v4; // ecx
  int v5; // edi
  int v6; // eax
  bool v7; // zf
  int v8; // ebx
  int *v9; // esi
  int v10; // eax
  unsigned __int32 *v11; // ecx
  int v12; // eax
  unsigned __int32 *v13; // ecx
  int v14; // eax
  int v15; // eax
  int *v16; // esi
  int v17; // eax
  int v18; // edi
  int i; // ebx
  int v20; // eax
  int v21; // eax
  unsigned __int32 *v22; // ecx
  int v23; // eax
  int v24; // esi
  const void **v25; // edi
  _DWORD *v26; // eax
  char *v27; // ecx
  _DWORD *v28; // eax
  int v29; // eax
  int j; // ebx
  _DWORD *v31; // esi
  _DWORD *v32; // esi
  int v33; // edi
  int v34; // esi
  unsigned __int32 *v35; // ecx
  _DWORD *v36; // esi
  int v37; // edi
  unsigned __int8 v38; // al
  int v39; // esi
  unsigned __int32 *v40; // ecx
  int v41; // eax
  int v42; // eax
  int v43; // edi
  unsigned __int8 v44; // al
  int v45; // esi
  unsigned __int32 *v46; // ecx
  int v47; // edi
  int v48; // eax
  int *v49; // ebx
  int v50; // eax
  unsigned __int8 v51; // al
  int v52; // esi
  unsigned __int32 *v53; // ecx
  unsigned __int16 v54; // ax
  _DWORD *v55; // esi
  int v56; // ebx
  unsigned __int16 v57; // ax
  int v58; // ebx
  int v59; // eax
  int v60; // esi
  int v61; // ebx
  int v62; // eax
  int v63; // esi
  int v64; // eax
  unsigned __int16 v65; // ax
  int *v66; // esi
  int v67; // esi
  int v68; // esi
  int v69; // esi
  int v70; // esi
  unsigned __int16 v71; // ax
  int v72; // esi
  int v73; // ebx
  void *v74; // eax
  int v75; // ebx
  int *v76; // esi
  int *v77; // esi
  int v78; // ebx
  int v79; // ebx
  int v80; // edx
  int v81; // eax
  int v82; // ecx
  int k; // esi
  int v84; // ecx
  int v85; // ecx
  int v86; // edi
  int v87; // ecx
  int v88; // ecx
  int v89; // edi
  int v90; // ecx
  int v91; // ecx
  int v92; // esi
  int v93; // ecx
  int v94; // ecx
  int v95; // esi
  int v96; // ecx
  int v97; // esi
  int v98; // eax
  _DWORD *v99; // edi
  int v100; // eax
  int v101; // edi
  int v102; // esi
  int v103; // eax
  int v104; // esi
  _DWORD *v105; // ebx
  int v106; // eax
  int v107; // ebx
  int v108; // eax
  int *v109; // edi
  int v110; // eax
  int v111; // ecx
  _DWORD *v112; // esi
  int v113; // eax
  int v114; // ecx
  int v115; // eax
  _DWORD *v116; // ecx
  int v117; // eax
  int v118; // eax
  int v119; // ebx
  unsigned __int32 *v121; // [esp-6Ch] [ebp-6Ch] BYREF
  unsigned __int32 *v122; // [esp-68h] [ebp-68h]
  int v123; // [esp-64h] [ebp-64h]

  SEHSetup();
  v3 = *(a1 + 8);
  v5 = v4;
  *(a1 - 24) = v4;
  LOWORD(v6) = CInPacket::Decode2(v3);
  *(a1 - 28) = v6;
  if ( (v6 & 1) != 0 )
  {
    sub_480364(v5, v3, *(a1 + 12));
    *(v5 + 643) = CInPacket::Decode1(v3);
  }
  if ( (*(a1 - 28) & 2) != 0 )
    sub_480550(v5, v3);
  `eh vector constructor iterator'(a1 - 96, 4, 6, sub_482C80, sub_482C86);
  *(a1 - 4) = 0;
  `eh vector constructor iterator'(a1 - 72, 4, 6, sub_482C80, sub_482C86);
  v7 = *(a1 + 12) == 0;
  *(a1 - 4) = 1;
  if ( !v7 )
  {
    if ( (*(a1 - 28) & 4) != 0 )
    {
      v8 = -1;
      v9 = (v5 + 191);
      do
      {
        v10 = *v9;
        if ( *v9 )
        {
          v11 = (*(v10 + 28) | *(v10 + 24));
          if ( *(v10 + 24) )
          {
            v123 = v8;
            v122 = v11;
            v121 = v11;
            *(a1 - 44) = &v121;
            sub_482C49(v9 - 1);
            *(a1 - 4) = 1;
            sub_48370B(-1);
            sub_4828BE(v121, v122, v123);
          }
        }
        v12 = v9[40];
        if ( v12 )
        {
          v13 = (*(v12 + 28) | *(v12 + 24));
          if ( *(v12 + 24) )
          {
            v123 = v8 - 100;
            v122 = v13;
            v121 = v13;
            *(a1 - 44) = &v121;
            sub_482C49(v9 + 39);
            *(a1 - 4) = 1;
            sub_48370B(-1);
            sub_4828BE(v121, v122, v123);
          }
        }
        --v8;
        v9 += 2;
      }
      while ( v8 >= -19 );
    }
    v14 = *(a1 - 28);
    *(a1 - 20) = 1;
    *(a1 - 40) = v14;
    while ( 1 )
    {
      switch ( *(a1 - 20) )
      {
        case 1:
          v123 = 4;
          goto LABEL_27;
        case 2:
          v123 = 8;
          goto LABEL_27;
        case 3:
          v123 = 16;
          goto LABEL_27;
      }
      if ( *(a1 - 20) == 4 )
        break;
      if ( *(a1 - 20) == 5 )
      {
        v123 = 64;
LABEL_27:
        v15 = v123;
        goto LABEL_28;
      }
      v15 = 0;
LABEL_28:
      if ( (v15 & *(a1 - 40)) != 0 )
      {
        v16 = (*(a1 - 24) + 4 * *(a1 - 20) + 499);
        v17 = *v16;
        if ( *v16 )
          v17 = *(v17 - 4);
        v18 = v17 - 1;
        for ( i = 1; i <= v18; ++i )
        {
          v20 = *(*v16 + 8 * i + 4);
          if ( v20 && *(v20 + 24) )
          {
            v123 = i;
            v21 = sub_4836C2(v16, i);
            v122 = v22;
            v121 = v22;
            *(a1 - 44) = &v121;
            sub_482C49(v21);
            *(a1 - 4) = 1;
            sub_48370B(-1);
            sub_4828BE(v121, v122, v123);
          }
        }
      }
      if ( ++*(a1 - 20) > 5 )
        goto LABEL_37;
    }
    v123 = 32;
    goto LABEL_27;
  }
LABEL_37:
  *(a1 - 44) = *(a1 - 28) & 0x80;
  v23 = *(a1 - 28);
  *(a1 - 20) = 1;
  *(a1 - 40) = v23;
  do
  {
    v24 = *(a1 - 20);
    v25 = (*(a1 - 24) + 4 * v24 + 499);
    v26 = *v25;
    if ( *v25 )
      v26 = *(v26 - 1);
    v7 = *(a1 - 44) == 0;
    v27 = v26 - 1;
    *(a1 - 32) = v26 - 1;
    if ( !v7 )
    {
      v27 = CInPacket::Decode1(*(a1 + 8));
      *(a1 - 32) = v27;
    }
    v28 = *v25;
    if ( *v25 )
      v28 = *(v28 - 1);
    if ( v27 != v28 - 1 )
      sub_447B44(v25, (v27 + 1), 0, a1 - 13);
    switch ( v24 )
    {
      case 1:
        v123 = 4;
        goto LABEL_57;
      case 2:
        v123 = 8;
        goto LABEL_57;
      case 3:
        v123 = 16;
        goto LABEL_57;
      case 4:
        v123 = 32;
        goto LABEL_57;
      case 5:
        v123 = 64;
LABEL_57:
        v29 = v123;
        goto LABEL_58;
    }
    v29 = 0;
LABEL_58:
    if ( (v29 & *(a1 - 40)) != 0 )
    {
      for ( j = 0; j <= *(a1 - 32); ++j )
      {
        v31 = *v25 + 8 * j;
        if ( v31[1] )
        {
          sub_436E8B(v31, 0);
          v31[1] = 0;
        }
      }
    }
    ++*(a1 - 20);
  }
  while ( *(a1 - 20) <= 5 );
  if ( (*(a1 - 28) & 4) != 0 )
  {
    v32 = (*(a1 - 24) + 183);
    v33 = 20;
    do
    {
      if ( *v32 )
      {
        sub_436E8B(v32 - 1, 0);
        *v32 = 0;
      }
      v32 += 2;
      --v33;
    }
    while ( v33 );
    while ( 1 )
    {
      v34 = CInPacket::Decode1(*(a1 + 8));
      if ( !v34 )
        break;
      v123 = *(a1 + 8);
      v122 = (a1 - 36);
      sub_480993(a1, v33, v34);
      *(a1 - 4) = 5;
      if ( v34 <= 19 )
      {
        if ( *(a1 + 12) && (v35 = (*(*(a1 - 32) + 28) | *(*(a1 - 32) + 24)), *(*(a1 - 32) + 24)) )
        {
          v123 = -v34;
          v122 = v35;
          v121 = v35;
          *(a1 - 44) = &v121;
          sub_482C49(a1 - 36);
          *(a1 - 4) = 5;
          sub_48370B(-1);
          sub_4828BE(v121, v122, v123);
        }
        else
        {
          sub_447A88((*(a1 - 24) + 8 * v34 + 179), a1 - 36);
        }
      }
      v7 = *(a1 - 32) == 0;
      *(a1 - 4) = 1;
      if ( !v7 )
      {
        sub_436E8B((a1 - 36), 0);
        *(a1 - 32) = 0;
      }
    }
    v36 = (*(a1 - 24) + 343);
    v37 = 20;
    do
    {
      if ( *v36 )
      {
        sub_436E8B(v36 - 1, 0);
        *v36 = 0;
      }
      v36 += 2;
      --v37;
    }
    while ( v37 );
    while ( 1 )
    {
      v38 = CInPacket::Decode1(*(a1 + 8));
      v39 = v38;
      if ( !v38 )
        break;
      v123 = *(a1 + 8);
      v122 = (a1 - 36);
      sub_480993(a1, v37, v38);
      *(a1 - 4) = 7;
      if ( v39 >= 1 && v39 <= 19 )
      {
        if ( *(a1 + 12) && (v40 = (*(*(a1 - 32) + 28) | *(*(a1 - 32) + 24)), *(*(a1 - 32) + 24)) )
        {
          v123 = -100 - v39;
          v122 = v40;
          v121 = v40;
          *(a1 - 44) = &v121;
          sub_482C49(a1 - 36);
          *(a1 - 4) = 7;
          sub_48370B(-1);
          sub_4828BE(v121, v122, v123);
        }
        else
        {
          sub_447A88((*(a1 - 24) + 8 * v39 + 339), a1 - 36);
        }
      }
      v7 = *(a1 - 32) == 0;
      *(a1 - 4) = 1;
      if ( !v7 )
      {
        sub_436E8B((a1 - 36), 0);
        *(a1 - 32) = 0;
      }
    }
    v41 = *(*(a1 - 24) + 503);
    if ( v41 )
      v42 = *(v41 - 4);
    else
      v42 = 0;
    v43 = v42 - 1;
    while ( 1 )
    {
      v44 = CInPacket::Decode1(*(a1 + 8));
      v45 = v44;
      if ( !v44 )
        break;
      v123 = *(a1 + 8);
      v122 = (a1 - 36);
      sub_480993(a1, v43, v44);
      *(a1 - 4) = 9;
      if ( v45 >= 1 && v45 <= v43 )
      {
        if ( *(a1 + 12) && (v46 = (*(*(a1 - 32) + 28) | *(*(a1 - 32) + 24)), *(*(a1 - 32) + 24)) )
        {
          v123 = v45;
          v122 = v46;
          v121 = v46;
          *(a1 - 44) = &v121;
          sub_482C49(a1 - 36);
          *(a1 - 4) = 9;
          sub_48370B(-1);
          sub_4828BE(v121, v122, v123);
        }
        else
        {
          sub_447A88((*(*(a1 - 24) + 503) + 8 * v45), a1 - 36);
        }
      }
      v7 = *(a1 - 32) == 0;
      *(a1 - 4) = 1;
      if ( !v7 )
      {
        sub_436E8B((a1 - 36), 0);
        *(a1 - 32) = 0;
      }
    }
  }
  v47 = *(a1 + 8);
  *(a1 - 20) = 2;
  while ( 2 )
  {
    switch ( *(a1 - 20) )
    {
      case 1:
        v123 = 4;
        break;
      case 2:
        v123 = 8;
        break;
      case 3:
        v123 = 16;
        break;
      case 4:
        v123 = 32;
        break;
      case 5:
        v123 = 64;
        break;
      default:
        v48 = 0;
        goto LABEL_117;
    }
    v48 = v123;
LABEL_117:
    if ( (v48 & *(a1 - 40)) != 0 )
    {
      v49 = (*(a1 - 24) + 4 * *(a1 - 20) + 499);
      v50 = *v49;
      if ( *v49 )
        v50 = *(v50 - 4);
      *(a1 - 32) = v50 - 1;
      while ( 1 )
      {
        v51 = CInPacket::Decode1(v47);
        v52 = v51;
        if ( !v51 )
          break;
        v123 = v47;
        v122 = (a1 - 48);
        sub_480993(a1, v47, v51);
        *(a1 - 4) = 11;
        if ( v52 < 1 || v52 > *(a1 - 32) )
        {
          v7 = *(a1 - 44) == 0;
          *(a1 - 4) = 1;
          if ( !v7 )
            goto LABEL_129;
        }
        else
        {
          if ( *(a1 + 12) && (v53 = (*(*(a1 - 44) + 28) | *(*(a1 - 44) + 24)), *(*(a1 - 44) + 24)) )
          {
            v123 = v52;
            v122 = v53;
            v121 = v53;
            *(a1 + 8) = &v121;
            sub_482C49(a1 - 48);
            *(a1 - 4) = 11;
            sub_48370B(-1);
            sub_4828BE(v121, v122, v123);
          }
          else
          {
            sub_447A88((*v49 + 8 * v52), a1 - 48);
          }
          v7 = *(a1 - 44) == 0;
          *(a1 - 4) = 1;
          if ( !v7 )
          {
LABEL_129:
            sub_436E8B((a1 - 48), 0);
            *(a1 - 44) = 0;
            continue;
          }
        }
      }
    }
    if ( ++*(a1 - 20) <= 5 )
      continue;
    break;
  }
  if ( (*(a1 - 27) & 1) != 0 )
  {
    v54 = CInPacket::Decode2(v47);
    if ( v54 )
    {
      v55 = (*(a1 - 24) + 523);
      v56 = v54;
      do
      {
        *(a1 - 44) = CInPacket::Decode4(v47);
        *(a1 + 8) = CInPacket::Decode4(v47);
        sub_44ACC6(v55, (a1 - 44), (a1 + 8));
        --v56;
      }
      while ( v56 );
    }
  }
  if ( *(a1 - 27) < 0 )
  {
    v57 = CInPacket::Decode2(v47);
    if ( v57 )
    {
      v58 = v57;
      do
      {
        *(a1 - 44) = CInPacket::Decode4(v47);
        LOWORD(v59) = CInPacket::Decode2(v47);
        *(a1 + 8) = v59;
        sub_4830BA(a1 - 44, a1 + 8);
        --v58;
      }
      while ( v58 );
    }
  }
  if ( (*(a1 - 27) & 2) != 0 )
  {
    v60 = CInPacket::Decode2(v47);
    v61 = *(a1 - 24) + 571;
    sub_4832E0(v61);
    if ( v60 )
    {
      do
      {
        LOWORD(v62) = CInPacket::Decode2(v47);
        *(a1 - 44) = v62;
        CInPacket::DecodeStr(a1, a1 + 8);
        v123 = a1 + 8;
        v122 = (a1 - 44);
        *(a1 - 4) = 13;
        sub_4831F1(v61, v122, v123);
        *(a1 - 4) = 1;
        ZXString_char_::_Release((a1 + 8));
        --v60;
      }
      while ( v60 );
    }
  }
  if ( (*(a1 - 27) & 0x40) != 0 )
  {
    v63 = CInPacket::Decode2(v47);
    sub_483478(*(a1 - 24) + 595);
    if ( v63 )
    {
      do
      {
        LOWORD(v64) = CInPacket::Decode2(v47);
        v123 = 8;
        *(a1 + 8) = v64;
        CInPacket::DecodeBuffer(v47, (a1 - 48), v123);
        sub_483399(a1 + 8, a1 - 48);
        --v63;
      }
      while ( v63 );
    }
  }
  if ( (*(a1 - 27) & 4) != 0 )
  {
    v65 = CInPacket::Decode2(v47);
    if ( v65 )
    {
      *(a1 + 8) = v65;
      do
      {
        *(a1 - 44) = 0;
        *(a1 - 4) = 14;
        sub_482C8B(a1 - 48);
        v66 = *(a1 - 44);
        *v66 = CInPacket::Decode4(v47);
        v67 = *(a1 - 44);
        *(v67 + 4) = CInPacket::Decode4(v47);
        v68 = *(a1 - 44);
        *(v68 + 8) = CInPacket::Decode4(v47);
        v69 = *(a1 - 44);
        *(v69 + 12) = CInPacket::Decode4(v47);
        v70 = *(a1 - 44);
        *(v70 + 16) = CInPacket::Decode4(v47);
        sub_483533(*(a1 - 44), a1 - 48);
        v7 = *(a1 - 44) == 0;
        *(a1 - 4) = 1;
        if ( !v7 )
        {
          sub_482CBE(0);
          *(a1 - 44) = 0;
        }
        v7 = (*(a1 + 8))-- == 1;
      }
      while ( !v7 );
    }
  }
  if ( (*(a1 - 27) & 8) != 0 )
  {
    *(a1 - 44) = 0;
    *(a1 - 4) = 15;
    v71 = CInPacket::Decode2(v47);
    if ( v71 )
    {
      v72 = *(a1 - 24) + 647;
      v73 = v71;
      do
      {
        v74 = sub_483684(v72, a1);
        sub_4817D1(v74, v47);
        --v73;
      }
      while ( v73 );
    }
    *(a1 - 4) = 1;
    ZXString_char_::_Release((a1 - 44));
  }
  if ( (*(a1 - 27) & 0x10) != 0 )
  {
    v75 = *(a1 - 24);
    v76 = (v75 + 667);
    *(a1 + 8) = 5;
    do
    {
      *v76++ = CInPacket::Decode4(v47);
      v7 = (*(a1 + 8))-- == 1;
    }
    while ( !v7 );
    v77 = (v75 + 687);
    v78 = 10;
    do
    {
      *v77++ = CInPacket::Decode4(v47);
      --v78;
    }
    while ( v78 );
  }
  if ( *(a1 + 12) )
  {
    *(a1 - 20) = 1;
    do
    {
      v79 = 0;
      *(a1 + 8) = 0;
      *(a1 - 32) = 12;
      while ( 1 )
      {
        v80 = *(a1 - 20);
        v81 = *(a1 + 4 * v80 - 72);
        v82 = v81 ? *(v81 - 4) : 0;
        if ( *(a1 + 8) >= v82 )
          break;
        *(a1 + 12) = *(a1 + 8) + 1;
        for ( k = v81 + *(a1 - 32) + 4; ; k += 12 )
        {
          v84 = v81 ? *(v81 - 4) : 0;
          if ( *(a1 + 12) >= v84 )
            break;
          v85 = *(v81 + v79 + 4);
          v86 = *(v85 + 24);
          v87 = v85 + 24;
          if ( v86 == *(*k + 24) && *(v87 + 4) == *(*k + 28) )
            break;
          ++*(a1 + 12);
        }
        if ( v81 )
          v88 = *(v81 - 4);
        else
          v88 = 0;
        if ( *(a1 + 12) < v88 )
          goto LABEL_194;
        v89 = *(a1 + 4 * *(a1 - 20) - 96);
        *(a1 + 12) = 0;
        for ( *(a1 - 40) = v89 + 4; ; *(a1 - 40) += 12 )
        {
          v90 = v89 ? *(v89 - 4) : 0;
          if ( *(a1 + 12) >= v90 )
            break;
          v91 = *(v81 + v79 + 4);
          v92 = *(v91 + 24);
          v93 = v91 + 24;
          if ( v92 == *(**(a1 - 40) + 24) && *(v93 + 4) == *(**(a1 - 40) + 28) )
            break;
          ++*(a1 + 12);
        }
        v94 = v89 ? *(v89 - 4) : 0;
        v95 = *(a1 + 12);
        if ( v95 < v94 )
        {
          v97 = 12 * v95;
          (*(**(v89 + v97 + 4) + 40))(*(v89 + v97 + 4), *(v81 + v79 + 4));
          v98 = *(a1 - 20);
          v99 = (a1 + 4 * v98 - 96);
          sub_447A88((v79 + *(a1 + 4 * v98 - 72)), *v99 + v97);
          v123 = *v99 + v97;
        }
        else
        {
LABEL_194:
          --*(a1 + 8);
          *(a1 - 32) -= 12;
          v96 = v79;
          v79 -= 12;
          v123 = v96 + v81;
        }
        sub_483790(v123);
        ++*(a1 + 8);
        *(a1 - 32) += 12;
        v79 += 12;
      }
      v100 = *(a1 + 4 * v80 - 96);
      if ( v100 && *(v100 - 4) )
      {
        v101 = 0;
        *(a1 + 8) = 0;
        while ( 1 )
        {
          v102 = *(a1 + 4 * *(a1 - 20) - 96);
          v103 = v102 ? *(v102 - 4) : 0;
          if ( *(a1 + 8) >= v103 )
            break;
          v104 = v101 + v102;
          v105 = sub_48370B(-1);
          sub_447A88(v105, v104);
          v106 = *(v104 + 8);
          ++*(a1 + 8);
          v105[2] = v106;
          v101 += 12;
        }
      }
      v107 = *(a1 - 20);
      v108 = *(a1 - 24);
      *(a1 + 8) = 0;
      *(a1 + 12) = 0;
      v109 = (v108 + 4 * v107 + 499);
      while ( 1 )
      {
        v110 = *(a1 + 4 * v107 - 72);
        v111 = v110 ? *(v110 - 4) : 0;
        if ( *(a1 + 8) >= v111 )
          break;
        v112 = (v110 + *(a1 + 12));
        v113 = *v109;
        if ( *v109 )
          v113 = *(v113 - 4);
        v114 = v113 - 1;
        if ( v107 == 1 && (v115 = v112[2], v115 <= -101) && v115 >= -119 )
        {
          v116 = (*(a1 - 24) - 8 * v115 - 461);
        }
        else
        {
          v117 = v112[2];
          if ( v117 < 1 || v117 > v114 )
            goto LABEL_222;
          v116 = (*v109 + 8 * v117);
        }
        if ( v116 && !v116[1] )
        {
          v123 = v112;
          goto LABEL_225;
        }
LABEL_222:
        v118 = sub_464D62(*(a1 - 24), v107);
        v123 = v112;
        if ( v118 <= 0 )
          v116 = sub_482FC7(-1);
        else
          v116 = (*v109 + 8 * v118);
LABEL_225:
        sub_447A88(v116, v123);
        ++*(a1 + 8);
        *(a1 + 12) += 12;
      }
      v119 = v107 + 1;
      *(a1 - 20) = v119;
    }
    while ( v119 <= 5 );
  }
  *(a1 - 4) = 0;
  `eh vector destructor iterator'(a1 - 72, 4, 6, sub_482C86);
  *(a1 - 4) = -1;
  `eh vector destructor iterator'(a1 - 96, 4, 6, sub_482C86);
  return *(a1 - 28);
}