// // sub_180007CB0 from 0x180007cb0 to 0x180007e04 (340 bytes) // // 2 xrefs: // > sub_180007A70 @ 0x180007bee // > @ 0x1801f63b4 // // 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_180007CB0(__int64 a1, __int64 a2) { unsigned int v4; // esi int v5; // edi int v6; // eax int v7; // r8d __int64 v8; // r9 __int64 v9; // r10 int v10; // eax int v11; // edx unsigned int v12; // ecx __int64 v13; // rax int v14; // r8d __int64 v15; // rdx int v16; // ecx int v17; // r8d __int64 v18; // rax __int64 result; // rax __int64 v20; // r9 __int64 v21; // rcx v4 = 0; if ( (unsigned int)sub_180001340(a2, 1) ) v5 = sub_180001340(a2, 4) + 1; else v5 = 1; if ( (unsigned int)sub_180001340(a2, 1) ) { v6 = sub_180001340(a2, 8) + 1; v4 = (2 * v6 + 3) & 0xFFFFFFFC; if ( v6 > 0 ) { v7 = *(_DWORD *)(a2 + 16); v8 = *(_QWORD *)a2; v9 = (unsigned int)v6; do { v10 = *(_DWORD *)(a1 + 4); v11 = 0; v12 = v10 - 1; if ( !v10 ) v12 = 0; for ( ; v12; v12 >>= 1 ) ++v11; v13 = (__int64)(v7 + 2 * v11) >> 3; v7 = ((_BYTE)v7 + 2 * (_BYTE)v11) & 7; v8 += v13; *(_DWORD *)(a2 + 16) = v7; *(_QWORD *)a2 = v8; --v9; } while ( v9 ); } } v14 = (*(_BYTE *)(a2 + 16) + 2) & 7; v15 = *(_QWORD *)a2 + ((__int64)(*(_DWORD *)(a2 + 16) + 2) >> 3); *(_DWORD *)(a2 + 16) = v14; *(_QWORD *)a2 = v15; if ( v5 <= 1 ) { result = (v4 + 2 * v5 + 3) & 0xFFFFFFFC; if ( v5 <= 0 ) return result; } else { v16 = *(_DWORD *)(a1 + 4); v17 = v14 + 4 * v16; v18 = v17; v14 = v17 & 7; *(_QWORD *)a2 = v15 + (v18 >> 3); result = (((v4 + v16 + 3) & 0xFFFFFFFC) + 2 * v5 + 3) & 0xFFFFFFFC; } v20 = (unsigned int)v5; do { v21 = (__int64)(v14 + 24) >> 3; v14 = ((_BYTE)v14 + 24) & 7; *(_QWORD *)a2 += v21; --v20; } while ( v20 ); *(_DWORD *)(a2 + 16) = v14; return result; }