// // sub_180003F70 from 0x180003f70 to 0x1800041ce (606 bytes) // // 5 xrefs: // > sub_180017A50 @ 0x180017b58 // > sub_180017E70 @ 0x180018015 // > @ 0x18017d5b0 // > @ 0x18017d5c0 // > @ 0x1801f6240 // // 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_180003F70(__int64 *a1, __int64 a2, int a3) { __int64 v3; // r13 __int64 v4; // rbp int v6; // r15d __int64 v7; // rsi int v9; // eax __int64 v10; // rdi int v11; // edx unsigned int v12; // ecx int v13; // eax __int64 v14; // rcx int v15; // r12d __int64 v16; // r14 int v17; // edx int v18; // ecx __int64 v19; // rbp int v20; // r14d int v21; // r15d size_t v22; // rsi int v23; // eax int v24; // ecx __int64 v25; // kr00_8 __int64 v26; // rax __int64 v27; // rax __int64 v28; // r8 __int64 v29; // r8 __int64 v30; // kr10_8 __int64 v31; // [rsp+70h] [rbp+8h] __int64 v34; // [rsp+88h] [rbp+20h] v3 = *a1; v4 = a2; v6 = a3; v7 = *(_QWORD *)(*a1 + 32); v31 = v7; if ( (unsigned int)sub_180001340(a2, 1) ) return 4294967161LL; v9 = *(_DWORD *)(v7 + 8); v10 = 0; v11 = 0; v12 = v9 - 1; if ( !v9 ) v12 = 0; for ( ; v12; v12 >>= 1 ) ++v11; v13 = sub_180001340(v4, v11); if ( v13 == -1 || v13 >= *(_DWORD *)(v7 + 8) ) return 4294967160LL; v14 = *((int *)a1 + 10); *((_DWORD *)a1 + 9) = v14; v15 = 0; v16 = 2LL * v13; v34 = v16; v17 = *(unsigned __int8 *)(*(_QWORD *)(v7 + 32) + v16); *((_DWORD *)a1 + 10) = v17; v18 = *(int *)(v7 + 4 * v14) >> 2; if ( *(int *)(v3 + 4) > 0 ) { v19 = v18; v20 = 0; v21 = 0; v22 = 4LL * v18; do { memmove((void *)(a1[2] + 4LL * v20), (const void *)(a1[1] + 4 * (v19 + v21)), v22); ++v15; v21 += 1024; v20 += 512; } while ( v15 < *(_DWORD *)(v3 + 4) ); v17 = *((_DWORD *)a1 + 10); v7 = v31; v4 = a2; v16 = v34; v6 = a3; } if ( v17 ) { sub_180001340(v4, 1); if ( (unsigned int)sub_180001340(v4, 1) == -1 ) return 4294967160LL; } if ( v6 ) sub_180008050(a1, v4, *(_QWORD *)(v7 + 40) + 40LL * *(unsigned __int8 *)(*(_QWORD *)(v7 + 32) + v16 + 1)); v23 = *((_DWORD *)a1 + 6); *((_DWORD *)a1 + 6) = 0; if ( v23 == -1 ) { v24 = 0; } else { v25 = *(int *)(v7 + 4LL * *((int *)a1 + 10)); v24 = *(_DWORD *)(v7 + 4LL * *((int *)a1 + 9)) / 4 + (((BYTE4(v25) & 3) + (int)v25) >> 2); } *((_DWORD *)a1 + 7) = v24; v26 = a1[7]; if ( v26 == -1 ) { a1[6] = -1; a1[7] = 0; v27 = 0; } else { v28 = a1[8]; a1[7] = v26 + 1; if ( v28 == -1 ) v27 = 0; else v27 = v28 + *(_DWORD *)(v7 + 4LL * *((int *)a1 + 10)) / 4 + *(_DWORD *)(v7 + 4LL * *((int *)a1 + 9)) / 4; } a1[8] = v27; v29 = a1[6]; if ( v29 != -1 ) { v30 = *(int *)(v7 + 4LL * *((int *)a1 + 10)); v10 = v29 + *(_DWORD *)(v7 + 4LL * *((int *)a1 + 9)) / 4 + (((BYTE4(v30) & 3) + (int)v30) >> 2); } a1[6] = v10; return 0; }