CharacterData::Decode
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); }