// // sub_56C18 from 0x56c18 to 0x56e64 (588 bytes) // // 2 xrefs: // > @ 0x10c528 // > @ 0x10c750 // // 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_56C18(__int64 a1, __int64 a2, int a3) { __int64 v3; // x21 __int64 v4; // x20 unsigned int v7; // w23 signed int v8; // w8 int v10; // w10 signed int v11; // w9 signed int v12; // w10 __int64 v13; // x9 bool v14; // cc __int64 v15; // x8 _QWORD *v16; // x10 _QWORD *v17; // x10 __int64 v18; // x8 __int64 v19; // x0 __int64 v20; // [xsp+0h] [xbp-50h] BYREF int v21; // [xsp+8h] [xbp-48h] char v22; // [xsp+Ch] [xbp-44h] __int128 v23; // [xsp+10h] [xbp-40h] BYREF unsigned int v24; // [xsp+28h] [xbp-28h] BYREF unsigned int v25; // [xsp+2Ch] [xbp-24h] BYREF v25 = a3; *(_QWORD *)&v23 = 0; v3 = *(_QWORD *)(a1 + 96); if ( !v3 ) return 9; v4 = *(_QWORD *)(a1 + 112); if ( a3 == -3 ) { a3 = *(_DWORD *)(a1 + 24) - 1; v25 = a3; goto LABEL_8; } if ( a3 != -2 ) { if ( a3 == -1 ) { a3 = 0; v25 = 0; goto LABEL_9; } LABEL_8: if ( (a3 & 0x80000000) == 0 ) goto LABEL_9; return 31; } v7 = sub_5796C(a1, *(_QWORD *)(a1 + 112), &v25); if ( v7 ) return v7; a3 = v25; if ( (v25 & 0x80000000) != 0 ) return 31; LABEL_9: if ( a3 >= *(_DWORD *)(a1 + 24) ) return 31; v7 = sub_5796C(a1, a2, &v24); if ( !v7 ) { v8 = v24; if ( v25 == v24 ) return 0; if ( v24 ) { if ( !v25 ) *((_QWORD *)&v23 + 1) = a2; } else { v7 = sub_5793C(a1, 1, (char *)&v23 + 8); if ( v7 ) return v7; v8 = v24; } v10 = *(_DWORD *)(a1 + 24); v11 = v10 - 1; if ( v8 == v10 - 1 ) { v7 = sub_5793C(a1, (unsigned int)(v10 - 2), &v23); if ( v7 ) return v7; v12 = v25; v8 = v24; } else { v12 = v25; if ( v25 == v11 ) { v12 = v11; *(_QWORD *)&v23 = a2; } } v13 = v8; v14 = v12 <= v8; v15 = v12; if ( v14 ) { while ( v13 > v15 ) { v17 = (_QWORD *)(*(_QWORD *)(a1 + 16) + 8 * v13--); *v17 = *(v17 - 1); } } else { while ( v13 < v15 ) { v16 = (_QWORD *)(*(_QWORD *)(a1 + 16) + 8 * v13++); *v16 = v16[1]; } } *(_QWORD *)(*(_QWORD *)(a1 + 16) + 8 * v15) = a2; v18 = *(_QWORD *)(a1 + 8); v22 = 0; v21 = 1; v20 = v18; sub_520A0((__int64)&v20); v7 = sub_CB2C0(v3, a2, v24, v25, 1, 0); if ( v7 || *((_QWORD *)&v23 + 1) && (v7 = sub_579A0(v4, *((_QWORD *)&v23 + 1) + 8LL)) != 0 ) { sub_57964(); return v7; } v19 = sub_57964(); if ( v23 == 0 ) return 0; v7 = sub_5794C(v19); if ( !v7 ) return 0; } return v7; }