int __fastcall sub_40160C(int a1, int a2, int a3, _DWORD *a4, int *a5, int a6, int *a7) { char *v7; // r7 int v10; // r0 int v11; // r5 int v12; // r0 int v13; // r6 int v14; // r5 int v16; // r1 int v17; // r2 int v18; // r3 int v19; // r0 int v20; // r0 int v21; // r1 int v22; // r3 int v23; // r4 int v24; // r7 int v26; // [sp+0h] [bp-34h] BYREF _DWORD v27[12]; // [sp+4h] [bp-30h] BYREF v7 = off_4016F4[0]; if ( *off_4016F4[0] == 0 ) return *off_4016F8; if ( a2 != 1 ) return 4; ((void (__fastcall *)(_DWORD *, int))loc_401000)(a1: v27, a2: 48); v26 = 1; sub_4010AC(a1: &v26); v26 = 10; v10 = sub_4010AC(a1: &v26); *a7 = v10; if ( v10 == 0 ) { v27[1] = 1; v26 = a1; if ( a1 == 5 ) { v12 = sub_4010AC(a1: &v26); v11 = 11; *a7 = v12; if ( v12 == 0 ) v11 = 1; v13 = 0; } else { v14 = a6; if ( a6 == 0 ) { v11 = 9; *a7 = dword_4016FC; LABEL_26: v26 = 11; sub_4010AC(a1: &v26); return v11; } v16 = *((_DWORD *)v7 + 12); v17 = *((_DWORD *)v7 + 13); v18 = *((_DWORD *)v7 + 14); v27[2] = *((_DWORD *)v7 + 6); v27[3] = v16; v27[4] = v17; v27[5] = v18; v13 = 0; while ( 1 ) { if ( v14 == 0 ) { v11 = 1; goto LABEL_20; } v13 = *a5; if ( *a5 != 0 ) { v27[0] = *a5; v19 = sub_4010AC(a1: &v26); *a7 = v19; if ( v19 != 0 ) break; } --v14; ++a5; } v11 = 11; } LABEL_20: sub_401080(a1: &v26); v20 = v27[6]; v21 = v27[7]; v22 = v27[8]; v23 = v27[9]; v24 = v27[10]; *a4 = v27[11]; a4[1] = v20; a4[2] = v21; a4[3] = v22; a4[4] = v23; a4[5] = v24; if ( *a7 != 0 ) { if ( *a7 == dword_4016FC ) *a4 = v13; } else if ( v20 != v21 ) { v11 = 7; } goto LABEL_26; } return 11; }