int __fastcall sub_401BE8(_DWORD *a1) { int v2; // r5 int *v3; // r7 int v4; // r5 int v6; // r5 bool v7; // zf void *v8; // r1 bool v9; // zf _DWORD *v10; // r0 int v11; // r2 int v12; // [sp+0h] [bp-2Ch] BYREF unsigned int v13; // [sp+4h] [bp-28h] int v14; // [sp+8h] [bp-24h] v2 = a1[4]; sub_401124(a1: &v12, a2: 40); if ( (unsigned int)(v2 - 1) > 0x3F ) return 259; v3 = (int *)off_401CE0; v4 = 257 * v2; if ( *((_BYTE *)off_401CE0 + v4) == 0 ) return 259; if ( sub_401F56(a1: &v12) != 0 ) return 576; v6 = (int)v3 + v4 + 1; sub_401E6C(a1: v6, a2: 16); a1[1037] = 16; sub_401058(a1: a1 + 1033, a2: v6, a3: 16); if ( *off_401CB8 == 2 ) { if ( v13 < 3 ) goto LABEL_21; v9 = v13 == 4; if ( v13 != 4 ) v9 = v13 == 7; if ( v9 && v14 == 1 ) LABEL_21: v8 = off_401CC0; else v8 = (void *)dword_401CBC; a1[2025] = 3947; v10 = a1 + 1038; v11 = 3947; goto LABEL_26; } if ( *off_401CB8 == 1 ) { if ( v13 < 3 ) goto LABEL_14; v7 = v13 == 4; if ( v13 != 4 ) v7 = v13 == 7; if ( v7 && v14 == 1 ) LABEL_14: v8 = off_401CC8; else v8 = off_401CC4; a1[2025] = 3944; v10 = a1 + 1038; v11 = 3944; LABEL_26: sub_401058(a1: v10, a2: v8, a3: v11); } return 0; }