// // sub_59AE8 from 0x59ae8 to 0x59c90 (424 bytes) // // 1 xrefs: // > sub_597E0 @ 0x598b8 // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // __int64 __fastcall sub_59AE8(__int64 *a1, char a2) { __int64 result; // x0 int v4; // w8 int v5; // w10 int v6; // w9 int v8; // w23 __int64 v9; // x8 __int64 v10; // x20 __int64 v11; // x21 __int64 v12; // x22 int v13; // w8 int v14; // w8 __int64 v15; // x9 __int64 v16; // [xsp+8h] [xbp-58h] BYREF _BYTE v17[32]; // [xsp+10h] [xbp-50h] BYREF _BYTE v18[8]; // [xsp+38h] [xbp-28h] BYREF if ( (a2 & 1) != 0 ) { if ( (*((_BYTE *)a1 + 74) & 0x20) != 0 ) return 0; result = (*(__int64 (__fastcall **)(__int64 *, _BYTE *))(*a1 + 168))(a1, v18); if ( (_DWORD)result ) return result; v4 = *((_DWORD *)a1 + 18); if ( (v4 & 0x20000) != 0 || !v18[0] ) return 0; v5 = *((_DWORD *)a1 + 138); v6 = *(_DWORD *)(a1[1] + 1760); if ( v5 ) { if ( v5 != v6 && v5 + 1 != v6 ) { result = sub_5C6C4(); if ( (_DWORD)result ) return result; v8 = *((_DWORD *)a1 + 18); *((_DWORD *)a1 + 138) = 0; *((_DWORD *)a1 + 18) = v8 | 0x20000; if ( v18[4] ) return 0; v9 = a1[59]; if ( !v9 ) return 0; v11 = *(_QWORD *)(v9 + 40); v10 = *(_QWORD *)(v9 + 48); result = sub_D7340(*(_QWORD *)(a1[1] + 1712), &v16, 0); if ( (_DWORD)result ) return result; v12 = a1[4]; sub_59CF0(a1, v17); sub_59D94(a1, 4); a1[59] = v16; if ( v11 ) { sub_59FEC(a1, v11, v12, 1, 0, 0); } else { if ( !v10 ) { LABEL_27: if ( (v8 & 0x40000) == 0 ) return 0; v14 = *((_DWORD *)a1 + 18) | 0x10000; LABEL_21: *((_DWORD *)a1 + 18) = v14; return 0; } sub_5A364(a1, v10, v12, 1, 0, 0); } sub_5A244(a1, v17); v15 = *a1; *((_DWORD *)a1 + 18) &= ~0x40000u; (*(void (__fastcall **)(__int64 *, _QWORD))(v15 + 16))(a1, v17[28]); goto LABEL_27; } } else { *((_DWORD *)a1 + 138) = v6; } v14 = v4 | 0x1000000; goto LABEL_21; } v13 = *((_DWORD *)a1 + 18); result = 0; *((_DWORD *)a1 + 138) = 0; if ( (v13 & 0x20000) != 0 ) { *((_DWORD *)a1 + 18) = v13 & 0xFFFDFFFF; return 0; } return result; }