Last active
September 25, 2018 14:45
-
-
Save DarkLotus/76af9d040a6919105d2ca74b79cafde2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| void __cdecl HandleChangeChar0x81(int a1) | |
| { | |
| unsigned int v1; // ebp@1 | |
| signed int v2; // eax@1 | |
| int v3; // eax@3 | |
| char v4; // cl@4 | |
| char *v5; // edi@5 | |
| char v6; // al@6 | |
| unsigned int v7; // eax@7 | |
| char *v8; // edi@7 | |
| char v9; // cl@8 | |
| char *v10; // eax@10 | |
| char v11; // cl@11 | |
| unsigned int v12; // eax@12 | |
| char *v13; // edi@12 | |
| char v14; // cl@13 | |
| char *v15; // edi@14 | |
| char v16; // al@15 | |
| void *v17; // eax@19 | |
| int v18; // eax@20 | |
| unsigned int v19; // ebx@29 | |
| signed int v20; // edi@31 | |
| signed int v21; // esi@31 | |
| char *v22; // eax@34 | |
| char v23; // cl@35 | |
| char *v24; // eax@37 | |
| char v25; // cl@38 | |
| char *v26; // eax@39 | |
| char v27; // cl@40 | |
| int v28; // edi@43 | |
| char v29; // al@45 | |
| int v30; // eax@50 | |
| signed int v31; // esi@56 | |
| char *v32; // eax@59 | |
| int v33; // ecx@59 | |
| int v34; // ebp@61 | |
| char v35; // al@61 | |
| signed int v36; // esi@64 | |
| char *v37; // eax@67 | |
| char v38; // cl@68 | |
| int v39; // eax@70 | |
| int v40; // eax@74 | |
| char v41; // cl@75 | |
| void *v42; // ebx@79 | |
| char v43; // cl@79 | |
| bool v44; // sf@79 | |
| int v45; // ebp@79 | |
| int v46; // eax@79 | |
| int v47; // esi@81 | |
| int v48; // edi@82 | |
| int *v49; // ebp@82 | |
| int v50; // eax@83 | |
| int v51; // edi@87 | |
| int v52; // ebp@87 | |
| bool v53; // zf@87 | |
| signed int v54; // esi@88 | |
| _BYTE *v55; // eax@91 | |
| char *v56; // ecx@91 | |
| _BYTE *v57; // edx@91 | |
| char v58; // al@92 | |
| signed int v59; // esi@95 | |
| int v60; // esi@107 | |
| int v61; // esi@110 | |
| char v62; // [sp+14h] [bp-3C0h]@0 | |
| char v63; // [sp+15h] [bp-3BFh]@43 | |
| char v64; // [sp+16h] [bp-3BEh]@66 | |
| unsigned __int8 charCount; // [sp+17h] [bp-3BDh]@23 | |
| int v66; // [sp+18h] [bp-3BCh]@3 | |
| unsigned __int8 v67; // [sp+1Fh] [bp-3B5h]@26 | |
| char *v68; // [sp+20h] [bp-3B4h]@32 | |
| int v69; // [sp+24h] [bp-3B0h]@1 | |
| void *v70; // [sp+28h] [bp-3ACh]@19 | |
| char v71; // [sp+2Fh] [bp-3A5h]@57 | |
| int v72; // [sp+30h] [bp-3A4h]@3 | |
| int v73; // [sp+34h] [bp-3A0h]@65 | |
| void *v74; // [sp+38h] [bp-39Ch]@106 | |
| int v75; // [sp+3Ch] [bp-398h]@64 | |
| int v76[19]; // [sp+40h] [bp-394h]@89 | |
| char v77[4]; // [sp+8Ch] [bp-348h]@82 | |
| int v78[20]; // [sp+90h] [bp-344h]@80 | |
| int v79[20]; // [sp+E0h] [bp-2F4h]@83 | |
| char v80[30]; // [sp+130h] [bp-2A4h]@66 | |
| char v81; // [sp+14Eh] [bp-286h]@66 | |
| char v82; // [sp+150h] [bp-284h]@31 | |
| _BYTE v83[3]; // [sp+151h] [bp-283h]@36 | |
| char v84; // [sp+16Dh] [bp-267h]@32 | |
| char v85; // [sp+170h] [bp-264h]@66 | |
| char v86; // [sp+18Eh] [bp-246h]@66 | |
| char v87; // [sp+190h] [bp-244h]@31 | |
| char v88; // [sp+1ADh] [bp-227h]@32 | |
| char v89[32]; // [sp+1B0h] [bp-224h]@5 | |
| char v90[500]; // [sp+1D0h] [bp-204h]@4 | |
| int v91; // [sp+3D0h] [bp-4h]@19 | |
| dword_A750E4[0] = -1; | |
| dword_A750E8 = -1; | |
| dword_A750EC = -1; | |
| dword_A750F0 = -1; | |
| dword_A750F4 = -1; | |
| dword_A750F8 = -1; | |
| dword_A750FC = -1; | |
| v1 = 0; | |
| v69 = a1; | |
| v2 = 0; | |
| do | |
| { | |
| byte_A752A8[v2] = 0; | |
| byte_A75100[v2] = 0; | |
| v2 += 60; | |
| } | |
| while ( v2 < 420 ); | |
| CHARCOUNT = 0; | |
| v66 = 0; | |
| v72 = 0; | |
| v3 = 0; | |
| do | |
| { | |
| v4 = byte_A75084[v3]; | |
| v90[v3++] = v4; | |
| } | |
| while ( v4 ); | |
| v5 = &v89[31]; | |
| do | |
| v6 = (v5++)[1]; | |
| while ( v6 ); | |
| *(_WORD *)v5 = *(_WORD *)" "; | |
| v7 = strlen(&byte_A750A4) + 1; | |
| v8 = &v89[31]; | |
| do | |
| v9 = (v8++)[1]; | |
| while ( v9 ); | |
| qmemcpy(v8, &byte_A750A4, v7); | |
| if ( dword_94BFA8 ) | |
| { | |
| v10 = &v89[31]; | |
| do | |
| v11 = (v10++)[1]; | |
| while ( v11 ); | |
| *(_WORD *)v10 = 10272; | |
| v10[2] = 0; | |
| v12 = strlen(&byte_951E08) + 1; | |
| v13 = &v89[31]; | |
| do | |
| v14 = (v13++)[1]; | |
| while ( v14 ); | |
| qmemcpy(v13, &byte_951E08, v12); | |
| v15 = &v89[31]; | |
| do | |
| v16 = (v15++)[1]; | |
| while ( v16 ); | |
| *(_WORD *)v15 = 41; | |
| } | |
| sub_5E2BC0(v90); | |
| if ( dword_A78338 || dword_94BFA8 ) | |
| { | |
| v17 = j__malloc(0x108u); | |
| v70 = v17; | |
| v91 = 0; | |
| if ( v17 ) | |
| v18 = sub_4FCEC0(v17); | |
| else | |
| v18 = 0; | |
| v91 = -1; | |
| v72 = v18; | |
| } | |
| ReadByte(a1, (int)&v66, &charCount); | |
| if ( dword_A78338 || dword_94BFA8 ) | |
| CHARCOUNT = charCount; | |
| ReadByte(a1, (int)&v66, &v67); | |
| if ( !dword_94BFA8 ) | |
| { | |
| sprintf(v90, "%d", v67); | |
| unkA8Byte = v67; | |
| sub_54D6F0(39, v90, 0); | |
| } | |
| if ( charCount > 5u ) | |
| { | |
| v19 = charCount; | |
| if ( !charCount ) | |
| goto LABEL_43; | |
| } | |
| else | |
| { | |
| v19 = 5; | |
| } | |
| v20 = byte_A75100 - &v87; | |
| v21 = byte_A752A8 - &v82; | |
| do | |
| { | |
| ReadStringLimitedLen(v69, &v66, &v68, 30); | |
| strncpy(&v82, v68, 0x1Eu); | |
| ReadStringLimitedLen(v69, &v66, &v68, 30); | |
| strncpy(&v87, v68, 0x1Eu); | |
| v84 = 0; | |
| v88 = 0; | |
| if ( dword_A78338 || dword_94BFA8 ) | |
| { | |
| v22 = &v82; | |
| do | |
| v23 = *v22++; | |
| while ( v23 ); | |
| if ( v22 != v83 ) | |
| { | |
| v24 = &v82; | |
| do | |
| { | |
| v25 = *v24; | |
| v24[v21] = *v24; | |
| ++v24; | |
| } | |
| while ( v25 ); | |
| v26 = &v87; | |
| do | |
| { | |
| v27 = *v26; | |
| v26[v20] = *v26; | |
| ++v26; | |
| } | |
| while ( v27 ); | |
| dword_A750E4[v1] = v1; | |
| sub_4FD920(&v82, v1); | |
| } | |
| } | |
| ++v1; | |
| v21 += 60; | |
| v20 += 60; | |
| } | |
| while ( v1 < v19 ); | |
| LABEL_43: | |
| v28 = v69; | |
| ReadByte(v69, (int)&v66, &v63); | |
| if ( !dword_A78338 && !dword_94BFA8 ) | |
| { | |
| v29 = v63; | |
| if ( !v63 ) | |
| { | |
| if ( dword_9525A4 ) | |
| { | |
| (**(void (__stdcall ***)(_DWORD))dword_9525A4)(1); | |
| dword_9525A4 = 0; | |
| } | |
| if ( dword_9529EC ) | |
| { | |
| *(_DWORD *)(dword_9529EC + 132) = 0; | |
| v70 = j__malloc(0x4D8u); | |
| v91 = 1; | |
| if ( v70 ) | |
| v30 = sub_4E89B0( | |
| -1, | |
| -1, | |
| "The Ultima Online servers are currently down. Please try again in a few moments.", | |
| dword_9529EC, | |
| 0, | |
| 1, | |
| 0, | |
| 0, | |
| 0); | |
| else | |
| v30 = 0; | |
| v91 = -1; | |
| dword_9525A4 = v30; | |
| sub_4DCA10(0, 1); | |
| dword_A78398 = 0; | |
| sub_45EDA0(); | |
| } | |
| goto LABEL_116; | |
| } | |
| LABEL_55: | |
| dword_A7547C = v29; | |
| dword_A75478 = (int)j__malloc_0(4 * ((char)dword_A7547C + 1) | -((unsigned __int64)(unsigned int)((char)dword_A7547C + 1) >> 30 != 0)); | |
| memset((void *)dword_A75478, 0, 4 * v63 + 4); | |
| UNKCHANGECHARPOINTER = (int)j__malloc_0(2 * (v63 + 1) | -((unsigned __int64)(unsigned int)(v63 + 1) >> 31 != 0)); | |
| v29 = v63; | |
| LABEL_56: | |
| v31 = 0; | |
| if ( v29 > 0 ) | |
| { | |
| do | |
| { | |
| ReadByte(v28, (int)&v66, &v71); | |
| ReadStringLimitedLen(v28, &v66, &v68, 16); | |
| if ( !dword_94BFA8 && strlen(v68) ) | |
| { | |
| *(_WORD *)(UNKCHANGECHARPOINTER + 2 * v31) = v71; | |
| *(_DWORD *)(dword_A75478 + 4 * v31) = j__malloc_0(0x10u); | |
| v32 = v68; | |
| v33 = *(_DWORD *)(dword_A75478 + 4 * v31); | |
| *(_DWORD *)v33 = *(_DWORD *)v68; | |
| *(_DWORD *)(v33 + 4) = *((_DWORD *)v32 + 1); | |
| *(_DWORD *)(v33 + 8) = *((_DWORD *)v32 + 2); | |
| *(_DWORD *)(v33 + 12) = *((_DWORD *)v32 + 3); | |
| *(_BYTE *)(*(_DWORD *)(dword_A75478 + 4 * v31) + 15) = 0; | |
| } | |
| ++v31; | |
| } | |
| while ( v31 < v63 ); | |
| } | |
| goto LABEL_61; | |
| } | |
| v29 = v63; | |
| if ( v63 ) | |
| { | |
| if ( dword_94BFA8 ) | |
| goto LABEL_56; | |
| goto LABEL_55; | |
| } | |
| LABEL_61: | |
| v34 = 0; | |
| ReadByte(v28, (int)&v66, &v63); | |
| v35 = v63; | |
| if ( v63 ) | |
| { | |
| if ( !dword_94BFA8 ) | |
| { | |
| dword_A7545C = v63; | |
| dword_A75450 = (int)j__malloc_0(92 * v63 | -(92 * (unsigned __int64)(unsigned int)v63 >> 32 != 0)); | |
| memset((void *)dword_A75450, 0, 92 * v63); | |
| dword_A75458 = (int)j__malloc_0(4 * (v63 + 1) | -((unsigned __int64)(unsigned int)(v63 + 1) >> 30 != 0)); | |
| memset((void *)dword_A75458, 0, 4 * v63 + 4); | |
| dword_A75454 = (int)j__malloc_0(4 * (v63 + 1) | -((unsigned __int64)(unsigned int)(v63 + 1) >> 30 != 0)); | |
| v35 = v63; | |
| } | |
| v36 = 0; | |
| v34 = 0; | |
| v75 = 0; | |
| v70 = 0; | |
| if ( v35 > 0 ) | |
| { | |
| v73 = 0; | |
| do | |
| { | |
| ReadByte(v28, (int)&v66, &v64); | |
| ReadStringLimitedLen(v28, &v66, &v68, 31); | |
| strncpy(v80, v68, 0x1Fu); | |
| v81 = 0; | |
| ReadStringLimitedLen(v28, &v66, &v68, 31); | |
| strncpy(&v85, v68, 0x1Fu); | |
| v86 = 0; | |
| if ( !dword_94BFA8 ) | |
| { | |
| v37 = v80; | |
| do | |
| v38 = *v37++; | |
| while ( v38 ); | |
| if ( v37 != &v80[1] ) | |
| { | |
| v39 = v73 + dword_A75450; | |
| v73 += 92; | |
| qmemcpy((void *)(v39 + 4), v80, 0x20u); | |
| qmemcpy((void *)(v39 + 36), &v85, 0x20u); | |
| *(_DWORD *)v39 = v64; | |
| *(_DWORD *)(dword_A75458 + 4 * v64) = j__malloc_0(strlen(&v85) + strlen(v80) + 3); | |
| sprintf(*(char **)(dword_A75458 + 4 * v64), "%s: %s", v80, &v85); | |
| v28 = v69; | |
| v36 = (signed int)v70; | |
| *(_DWORD *)(dword_A75454 + 4 * v64) = v64; | |
| } | |
| } | |
| if ( v36 > 0 && strcmp(v80, v89) ) | |
| *(&v75 + ++v34) = v36; | |
| v40 = 0; | |
| do | |
| { | |
| v41 = v80[v40]; | |
| v89[v40++] = v41; | |
| } | |
| while ( v41 ); | |
| v35 = v63; | |
| v70 = (void *)++v36; | |
| } | |
| while ( v36 < v63 ); | |
| } | |
| } | |
| if ( !dword_94BFA8 && v35 ) | |
| { | |
| v42 = j__malloc_0(4 * (v35 + 1) | -((unsigned __int64)(unsigned int)(v35 + 1) >> 30 != 0)); | |
| memset(v42, 0, 4 * v63 + 4); | |
| v43 = v63; | |
| v44 = v34 + 1 < 0; | |
| v45 = v34 + 1; | |
| v69 = v45; | |
| *(&v75 + v45) = v63; | |
| v46 = 0; | |
| if ( !v44 ) | |
| { | |
| do | |
| { | |
| v78[v46] = v46; | |
| ++v46; | |
| } | |
| while ( v46 <= v45 ); | |
| } | |
| v47 = 0; | |
| if ( v45 > 0 ) | |
| { | |
| v48 = v69; | |
| v49 = (int *)&v77[4 * v69]; | |
| do | |
| { | |
| v50 = sub_590450(v48); | |
| v79[v47] = v78[v50]; | |
| if ( v50 < v48 - 1 ) | |
| v78[v50] = *v49; | |
| ++v47; | |
| --v49; | |
| --v48; | |
| } | |
| while ( v47 < v69 ); | |
| v43 = v63; | |
| } | |
| v51 = 0; | |
| v52 = 0; | |
| v53 = v69 == 0; | |
| v44 = v69 < 0; | |
| v79[v69] = v69; | |
| if ( !v44 && !v53 ) | |
| { | |
| do | |
| { | |
| v54 = *(&v75 + v79[v52]); | |
| if ( v54 < v43 ) | |
| { | |
| v70 = (void *)v76[v79[v52]]; | |
| do | |
| { | |
| if ( v54 >= (signed int)v70 ) | |
| break; | |
| v55 = j__malloc_0(strlen(*(const char **)(dword_A75458 + 4 * v54)) + 1); | |
| *((_DWORD *)v42 + v51) = v55; | |
| v56 = *(char **)(dword_A75458 + 4 * v54); | |
| v57 = v55; | |
| do | |
| { | |
| v58 = *v56; | |
| *v57++ = *v56++; | |
| } | |
| while ( v58 ); | |
| *(_DWORD *)(dword_A75454 + 4 * v51) = v54; | |
| v43 = v63; | |
| ++v54; | |
| ++v51; | |
| } | |
| while ( v54 < v63 ); | |
| } | |
| ++v52; | |
| } | |
| while ( v52 < v69 ); | |
| } | |
| v59 = 0; | |
| if ( v43 > 0 ) | |
| { | |
| do | |
| sub_42ED8C(*(_DWORD *)(dword_A75458 + 4 * v59++)); | |
| while ( v59 < v63 ); | |
| } | |
| sub_42ED8C(dword_A75458); | |
| dword_A75458 = (int)v42; | |
| } | |
| if ( dword_9525A4 ) | |
| { | |
| (**(void (__stdcall ***)(_DWORD))dword_9525A4)(1); | |
| dword_9525A4 = 0; | |
| } | |
| if ( dword_9529F0 ) | |
| { | |
| (**(void (__stdcall ***)(_DWORD))dword_9529F0)(1); | |
| dword_9529F0 = 0; | |
| } | |
| if ( dword_9529EC ) | |
| *(_DWORD *)(dword_9529EC + 132) = 0; | |
| if ( dword_A78338 || dword_94BFA8 ) | |
| { | |
| v61 = v72; | |
| if ( sub_4FDB60(v72) <= 0 ) | |
| { | |
| sub_540B60(v61); | |
| } | |
| else | |
| { | |
| dword_9529F0 = v61; | |
| sub_4DCA10(0, 1); | |
| sub_4DAF10(v61); | |
| } | |
| } | |
| else | |
| { | |
| v74 = j__malloc(0xA034u); | |
| v91 = 2; | |
| if ( v74 ) | |
| v60 = sub_4AD3C0(dword_9529E8, 3500, 100, 100, 100, 100, 0, 0, 0); | |
| else | |
| v60 = 0; | |
| v91 = -1; | |
| sub_545B30(v60); | |
| sub_4AA9F0(v60); | |
| sub_4DCA10(0, 1); | |
| dword_952A04 = v60; | |
| } | |
| if ( dword_A1BC6C && dword_9529F0 ) | |
| (*(void (**)(void))(*(_DWORD *)dword_9529F0 + 104))(); | |
| LABEL_116: | |
| sub_600F53(v62); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment