static const uint sub_10106250 = 0x10106250; static const uint sub_101061B0 = 0x101061B0; static const uint sub_101092D0 = 0x101092D0; static const uint sub_101084A0 = 0x101084A0; int __cdecl sub_1008DCA0( uint arg_0 ) { uint edi; uint esi; uint ebp; uint& esp = stackptr; union { uint ebx; word bx; struct { byte bl; byte bh; }; }; union { uint edx; word dx; struct { byte dl; byte dh; }; }; union { uint ecx; word cx; struct { byte cl; byte ch; }; }; union { uint eax; word ax; struct { byte al; byte ah; }; }; uint var_1C; uint var_18; uint var_14; uint var_10; uint var_C; uint var_4 stkpush( 0x0FFFFFFFF ); // push 0x0FFFFFFFF stkpush( offset unk_10116B10 ); // push offset unk_10116B10 eax = large fs:0; // mov eax, large fs:0 stkpush( eax ); // push eax esp -= 0x10; // sub esp, 0x10 stkpush( ebx ); // push ebx stkpush( esi ); // push esi stkpush( edi ); // push edi eax = dword_1015B06C; // mov eax, dword_1015B06C eax ^= ebp; // xor eax, ebp stkpush( eax ); // push eax eax = (uint)&var_C; // lea eax, var_C large fs:0 = eax; // mov large fs:0, eax var_10 = esp; // mov var_10, esp edi = ecx; // mov edi, ecx var_18 = edi; // mov var_18, edi ebx = arg_0; // mov ebx, arg_0 eax = *puint(ebx+0x18); // mov eax, [ebx+0x18] esi = 0; // xor esi, esi // eax-esi; // cmp eax, esi var_14 = esi; // mov var_14, esi arg_0 = eax; // mov arg_0, eax if( int((eax-esi))<=0 ) goto loc_1008DD56; // jle short loc_1008DD56 loc_1008DCE2: // loc_1008DCE2: eax = *puint(ebx+esi*4+0x0A4); // mov eax, [ebx+esi*4+0x0A4] eax <<= 7; // shl eax, 7 ecx = eax+ebx+0x0E4; // lea ecx, [eax+ebx+0x0E4] var_1C = ecx; // mov var_1C, ecx stkpush( esi ); // push esi ecx = ebx; // mov ecx, ebx eax = stkcall( sub_101084A0, eax ); // call sub_101084A0 edx = var_1C; // mov edx, var_1C stkpush( edi ); // push edi stkpush( offset sub_1008D940 ); // push offset sub_1008D940 stkpush( eax ); // push eax stkpush( edx ); // push edx eax = stkcall( sub_101061B0, eax ); // call sub_101061B0 esp += 0x10; // add esp, 0x10 // eax&eax; // test eax, eax *puint(edi+esi*4+0x0D) = eax; // mov [edi+esi*4+0x0D], eax if( eax!=0 ) goto loc_1008DD48; // jnz short loc_1008DD48 esi -= 1; // sub esi, 1 var_14 = 4; // mov var_14, 4 if( int(esi)<0 ) goto loc_1008DD48; // js short loc_1008DD48 edi = edi+esi*4+0x0D; // lea edi, [edi+esi*4+0x0D] esp = esp+0; // lea esp, [esp+0] loc_1008DD30: // loc_1008DD30: eax = *puint(edi); // mov eax, [edi] stkpush( eax ); // push eax eax = stkcall( sub_10106250, eax ); // call sub_10106250 esi -= 1; // sub esi, 1 esp += 4; // add esp, 4 edi -= 4; // sub edi, 4 // esi&esi; // test esi, esi if( int(esi)>=0 ) goto loc_1008DD30; // jge short loc_1008DD30 edi = var_18; // mov edi, var_18 loc_1008DD48: // loc_1008DD48: esi += 1; // add esi, 1 // esi-arg_0; // cmp esi, arg_0 if( int((esi-arg_0))<0 ) goto loc_1008DCE2; // jl short loc_1008DCE2 // var_14-0; // cmp var_14, 0 if( (var_14-0)!=0 ) goto loc_1008DDA2; // jnz short loc_1008DDA2 loc_1008DD56: // loc_1008DD56: stkpush( edi ); // push edi esi |= 0x0FFFFFFFF; // or esi, 0x0FFFFFFFF stkpush( offset sub_1008D8A0 ); // push offset sub_1008D8A0 ecx = ebx; // mov ecx, ebx *puint(edi+5) = ebx; // mov [edi+5], ebx *puint(edi+9) = esi; // mov [edi+9], esi var_4 = 0; // mov var_4, 0 eax = stkcall( sub_101092D0, eax ); // call sub_101092D0 // eax&eax; // test eax, eax if( eax==0 ) goto loc_1008DD7E; // jz short loc_1008DD7E var_14 = 0x32; // mov var_14, 0x32 loc_1008DD7E: // loc_1008DD7E: var_4 = esi; // mov var_4, esi esi = arg_0; // mov esi, arg_0 esi -= 1; // sub esi, 1 if( int(esi)<0 ) goto loc_1008DDA2; // js short loc_1008DDA2 esp = esp+0; // lea esp, [esp+0] loc_1008DD90: // loc_1008DD90: ecx = *puint(edi+esi*4+0x0D); // mov ecx, [edi+esi*4+0x0D] stkpush( ecx ); // push ecx eax = stkcall( sub_10106250, eax ); // call sub_10106250 esp += 4; // add esp, 4 esi -= 1; // sub esi, 1 if( int(esi)>=0 ) goto loc_1008DD90; // jns short loc_1008DD90 loc_1008DDA2: // loc_1008DDA2: eax = var_14; // mov eax, var_14 ecx = var_C; // mov ecx, var_C large fs:0 = ecx; // mov large fs:0, ecx ecx = stkpop(); // pop ecx edi = stkpop(); // pop edi esi = stkpop(); // pop esi ebx = stkpop(); // pop ebx esp = ebp; // mov esp, ebp ebp = stkpop(); // pop ebp 4! retn 4 // retn 4 }