int __fastcall sub_4013FE(int a1, _DWORD *a2) { int result; // r0 char *v5; // r11 unsigned int v6; // r6 int v7; // r2 int v8; // r0 int v9; // r9 int v10; // r10 int v11; // r6 int v12; // r0 int v13; // r1 bool v14; // zf unsigned int v15; // r0 BOOL v16; // r1 bool v17; // zf int v18; // r1 int v19; // r3 int v20; // r0 unsigned int v21; // r2 unsigned int v22; // r1 int v23; // r3 unsigned int v24; // r0 int *v25; // r1 _DWORD *v26; // r3 int v27; // t1 unsigned int v28; // r3 int v29; // [sp+4h] [bp-18h] BYREF int v30; // [sp+8h] [bp-14h] BYREF int v31; // [sp+Ch] [bp-10h] BYREF int v32; // [sp+10h] [bp-Ch] BYREF int v33; // [sp+14h] [bp-8h] BYREF int v34; // [sp+18h] [bp-4h] BYREF result = 2; if ( a1 != 0 && a2 != nullptr ) { if ( *(_DWORD *)a1 <= 0xFu && *((_DWORD *)(v5 = (char *)nullsub_3 + 28 * *(_DWORD *)a1) + 2) == 1 ) { result = 11; v6 = *((_DWORD *)v5 + 7); v7 = *(_DWORD *)(a1 + 12); if ( v7 - 1 >= v6 && (v6 == -1 || v7 != 0) ) { v8 = *((_DWORD *)v5 + 1); v9 = 0; *((_DWORD *)v5 + 7) = v7; v10 = *(_DWORD *)(a1 + 20); v33 = 0; v11 = sub_401BF4(a1: v8, a2: &v34); v12 = sub_401BDC(a1: *((_DWORD *)v5 + 1), a2: &v33); if ( v11 != 0 ) v11 = 13; if ( v12 != 0 ) v11 = 14; if ( sub_401C0C(a1: *((_DWORD *)v5 + 1), a2: &v32, a3: &v31, a4: &v30, a5: &v29) != 0 ) v11 = 15; v13 = v31; v14 = v31 == 3; if ( v31 == 3 ) v14 = v29 == 1; if ( v14 ) { v15 = *(unsigned __int16 *)(a1 + 24); v9 = 1; if ( v15 <= 6 ) *((_DWORD *)nullsub_3 + v15 + 113) = 1; } v16 = v13 != 0; v17 = v9 == 0; if ( v9 == 0 ) v17 = (v34 | 1) == 3; v18 = 32 * v16; v19 = 8; if ( v17 ) { v28 = *(unsigned __int16 *)(a1 + 24); if ( v28 > 6 ) v19 = 8; else v19 = 8 * (*((_DWORD *)nullsub_3 + v28 + 113) != 1); } v20 = v10 & 0x80 | v18 | (16 * v9) | (v9 << 11) | ((v32 == 2) << 8) | v19; if ( (v33 & 2) != 0 ) { v22 = 8194; if ( v30 == 2 ) v22 = 139266; v21 = v20 & 0xFFFFFFF8; } else { v21 = 16388; v22 = v10 & 0x80 | v18 & 0xFFFFFFF8 | (16 * v9) | (v9 << 11) | ((v32 == 2) << 8) | v19 & 0xFFFFFFF8; if ( v33 << 31 == 0 ) v21 = 16396; } a2[72] = v11; v23 = *(_DWORD *)(a1 + 12); v24 = *(_DWORD *)(a1 + 28); a2[64] = v24; a2[65] = v23; a2[67] = v22 | v21; a2[66] = *(unsigned __int16 *)(a1 + 24); if ( v24 <= 0x20 ) { if ( v24 != 0 ) { v25 = (int *)(a1 + 32); v26 = a2; do { v26[1] = 0; --v24; v27 = *v25++; *v26 = v27; v26 += 2; } while ( v24 != 0 ); } if ( sub_40161C(a1: a2, a2: 272, a3: a2 + 68, a4: v5 + 12) != 0 ) return 12; else return 16 * (sub_4018B8(a1: nullsub_3, a2: 496, a3: a2 + 73) != 0); } else { return 17; } } } else { return 1; } } return result; }