// // sub_1800013B0 from 0x1800013b0 to 0x180001531 (385 bytes) // // 15 xrefs: // > sub_180006A40 @ 0x180006b49 // > sub_180006A40 @ 0x180006bc9 // > sub_180006A40 @ 0x180006bee // > sub_180006A40 @ 0x180006c0c // > sub_180006A40 @ 0x180006c35 // > sub_180006A40 @ 0x180006c92 // > sub_180006A40 @ 0x180006cb7 // > sub_180006A40 @ 0x180006cdd // > sub_180006A40 @ 0x180006d37 // > sub_180009770 @ 0x1800099a7 // > sub_180009770 @ 0x180009c21 // > @ 0x18017d354 // > @ 0x18017d364 // > @ 0x18017d378 // > @ 0x1801f609c // // 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_1800013B0(__int64 a1, __int64 a2) { __int64 v2; // rsi _DWORD *v5; // rbx unsigned int v6; // ecx __int64 v7; // rax __int64 v8; // rax int v9; // ebp unsigned int v10; // edx unsigned int v11; // r9d unsigned int v12; // r8d __int64 v13; // r9 unsigned int v14; // r8d char v15; // dl unsigned int v16; // r8d unsigned int v17; // ecx unsigned int *v18; // rax unsigned int v19; // ecx int v20; // edx int v21; // edx v2 = *(_QWORD *)(a1 + 56); v5 = *(_DWORD **)a2; v6 = **(_DWORD **)a2 >> *(_DWORD *)(a2 + 16); LODWORD(v7) = *(unsigned __int16 *)(*(_QWORD *)(a1 + 48) + 2LL * (v6 & *(_DWORD *)(a1 + 112))); if ( (unsigned int)v7 >= 0x8000 ) { v8 = v7 & 0x7FFF; v9 = *(__int16 *)(a1 + 98); v10 = __ROL4__(v6 & *(_DWORD *)(a1 + 104), 16); v11 = (v10 << 8) ^ ((v10 << 8) ^ (v10 >> 8)) & 0xFF00FF; v12 = (16 * v11) ^ ((16 * v11) ^ (v11 >> 4)) & 0xF0F0F0F; v13 = *(_QWORD *)(a1 + 64); v14 = (4 * v12) ^ ((4 * v12) ^ (v12 >> 2)) & 0x33333333; v15 = v9 - v8; v16 = (2 * v14) ^ ((2 * v14) ^ (v14 >> 1)) & 0x55555555; v17 = v9 - v8; v18 = (unsigned int *)(v13 + 4 * v8); v19 = v17 >> 2; if ( v19 ) { while ( *v18 <= v16 ) { if ( v18[1] > v16 ) { v7 = ((__int64)v18 - v13 + 4) >> 2; goto LABEL_12; } if ( v18[2] > v16 ) { v7 = ((__int64)v18 - v13 + 8) >> 2; goto LABEL_12; } if ( v18[3] > v16 ) { v7 = ((__int64)v18 - v13 + 12) >> 2; goto LABEL_12; } v18 += 4; if ( !--v19 ) goto LABEL_8; } goto LABEL_16; } LABEL_8: v20 = v15 & 3; if ( v20 ) { while ( *v18 <= v16 ) { ++v18; if ( !--v20 ) goto LABEL_11; } LABEL_16: v7 = ((__int64)v18 - v13) >> 2; goto LABEL_12; } LABEL_11: LODWORD(v7) = *(__int16 *)(a1 + 98); } LABEL_12: v21 = *(_DWORD *)(a2 + 16) + *(char *)((v7 & 0x7FFF) + v2); *(_DWORD *)(a2 + 16) = (*(_BYTE *)(a2 + 16) + *(_BYTE *)((v7 & 0x7FFF) + v2)) & 7; *(_QWORD *)a2 = (char *)v5 + ((__int64)v21 >> 3); return (unsigned int)*(__int16 *)(*(_QWORD *)(a1 + 80) + 2LL * (unsigned int)(v7 - 1)); }