// // sub_180007E10 from 0x180007e10 to 0x180008045 (565 bytes) // // 2 xrefs: // > sub_180007790 @ 0x18000798b // > @ 0x1801f63c0 // // 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_180007E10(__int64 a1, __int64 a2, __int64 a3) { __int64 v3; // r13 int v7; // eax int v8; // esi int v9; // eax int v10; // ebp int v11; // ecx __int64 v12; // r12 unsigned int v13; // eax int v14; // edx unsigned __int8 v15; // al int v16; // edi int v17; // edx int v18; // eax unsigned int v19; // ecx unsigned __int8 v20; // al int v21; // ebp __int64 v22; // rdi __int64 i; // rdi v3 = *(_QWORD *)(a2 + 32); *(_OWORD *)a1 = 0; *(_OWORD *)(a1 + 16) = 0; *(_QWORD *)(a1 + 32) = 0; if ( (unsigned int)sub_180001340(a3, 1) ) v7 = sub_180001340(a3, 4) + 1; else v7 = 1; *(_DWORD *)a1 = v7; v8 = 0; if ( (unsigned int)sub_180001340(a3, 1) && (v9 = sub_180001340(a3, 8), *(_DWORD *)(a1 + 24) = v9 + 1, v10 = 0, *(_QWORD *)(a1 + 32) = sub_1800182F0((unsigned int)(2 * (v9 + 1))), *(int *)(a1 + 24) > 0) ) { v11 = *(_DWORD *)(a2 + 4); v12 = 0; while ( 1 ) { v13 = v11 - 1; v14 = 0; if ( !v11 ) v13 = 0; for ( ; v13; v13 >>= 1 ) ++v14; v15 = sub_180001340(a3, v14); v16 = v15; v17 = 0; *(_BYTE *)(v12 + *(_QWORD *)(a1 + 32)) = v15; v18 = *(_DWORD *)(a2 + 4); v19 = v18 - 1; if ( !v18 ) v19 = 0; for ( ; v19; v19 >>= 1 ) ++v17; v20 = sub_180001340(a3, v17); *(_BYTE *)(v12 + *(_QWORD *)(a1 + 32) + 1) = v20; if ( v16 == v20 ) break; v11 = *(_DWORD *)(a2 + 4); if ( v16 >= v11 || v20 >= v11 ) break; ++v10; v12 += 2; if ( v10 >= *(_DWORD *)(a1 + 24) ) goto LABEL_19; } } else { LABEL_19: if ( (int)sub_180001340(a3, 2) <= 0 ) { if ( *(int *)a1 <= 1 || (*(_QWORD *)(a1 + 8) = sub_1800182F0(*(unsigned int *)(a2 + 4)), v21 = 0, *(int *)(a2 + 4) <= 0) ) { LABEL_25: *(_QWORD *)(a1 + 16) = sub_1800182F0((unsigned int)(2 * *(_DWORD *)a1)); if ( *(int *)a1 <= 0 ) return 0; for ( i = 0; ; i += 2 ) { sub_180001340(a3, 8); *(_BYTE *)(i + *(_QWORD *)(a1 + 16)) = sub_180001340(a3, 8); if ( *(char *)(*(_QWORD *)(a1 + 16) + i) >= *(_DWORD *)(v3 + 16) ) break; *(_BYTE *)(*(_QWORD *)(a1 + 16) + i + 1) = sub_180001340(a3, 8); if ( *(char *)(*(_QWORD *)(a1 + 16) + i + 1) >= *(_DWORD *)(v3 + 20) ) break; if ( ++v8 >= *(_DWORD *)a1 ) return 0; } } else { v22 = 0; while ( 1 ) { *(_BYTE *)(v22 + *(_QWORD *)(a1 + 8)) = sub_180001340(a3, 4); if ( *(unsigned __int8 *)(*(_QWORD *)(a1 + 8) + v22) >= *(int *)a1 ) break; ++v21; ++v22; if ( v21 >= *(_DWORD *)(a2 + 4) ) goto LABEL_25; } } } } return 0xFFFFFFFFLL; }