// // sub_180002960 from 0x180002960 to 0x180002b7f (543 bytes) // // 12 xrefs: // > sub_180002B80 @ 0x180002c29 // > sub_180002B80 @ 0x180002c66 // > sub_180002B80 @ 0x180002d49 // > sub_180002B80 @ 0x180002e86 // > sub_180003130 @ 0x1800031b6 // > sub_180003130 @ 0x1800031fa // > sub_180003130 @ 0x180003296 // > sub_180003390 @ 0x180003436 // > sub_180003390 @ 0x180003450 // > sub_180003390 @ 0x1800034a6 // > sub_180003390 @ 0x180003526 // > @ 0x1801f6138 // // 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 // __m128i __fastcall sub_180002960(__int64 a1, __int64 a2) { __int64 v3; // r12 __int64 v5; // r14 unsigned __int64 v6; // rbx unsigned int v7; // r15d int v8; // r11d unsigned __int64 v9; // rdx unsigned int v10; // esi int v11; // r10d unsigned __int64 v12; // rdx unsigned int v13; // ebp int v14; // r9d unsigned int v15; // r8d int v16; // edx unsigned __int64 v17; // rbx unsigned __int64 v18; // rbx unsigned __int64 v19; // rbx unsigned int v20; // eax int v21; // ecx __int64 v22; // r10 int v24; // [rsp+70h] [rbp+8h] int v25; // [rsp+78h] [rbp+10h] int v26; // [rsp+80h] [rbp+18h] __int64 v27; // [rsp+88h] [rbp+20h] v3 = *(_QWORD *)(a1 + 56); v5 = *(unsigned int *)(a1 + 112); v27 = *(_QWORD *)(a1 + 48); v6 = **(_QWORD **)a2 >> *(_DWORD *)(a2 + 16); v7 = *(unsigned __int16 *)(v27 + 2LL * ((unsigned int)v6 & (unsigned int)v5)); v8 = *(char *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v6 & (unsigned int)v5)) & 0x7FFF) + v3); v9 = v6 >> *(_BYTE *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v6 & (unsigned int)v5)) & 0x7FFF) + v3); v10 = *(unsigned __int16 *)(v27 + 2LL * ((unsigned int)v9 & (unsigned int)v5)); v11 = *(char *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v9 & (unsigned int)v5)) & 0x7FFF) + v3); v12 = v9 >> *(_BYTE *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v9 & (unsigned int)v5)) & 0x7FFF) + v3); v13 = *(unsigned __int16 *)(v27 + 2LL * ((unsigned int)v12 & (unsigned int)v5)); v14 = *(char *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v12 & (unsigned int)v5)) & 0x7FFF) + v3); v15 = *(unsigned __int16 *)(v27 + 2 * (v5 & (v12 >> *(_BYTE *)((*(_WORD *)(v27 + 2LL * ((unsigned int)v12 & (unsigned int)v5)) & 0x7FFF) + v3)))); v16 = *(char *)((v15 & 0x7FFF) + v3); if ( ((v7 | v10 | v13 | v15) & 0x8000u) != 0 ) { if ( v7 >= 0x8000 ) v7 = sub_180001910(a1, a2, v7, v6); v26 = *(char *)(v7 + v3); v17 = v6 >> v26; v10 = *(unsigned __int16 *)(v27 + 2 * (v17 & v5)); if ( v10 >= 0x8000 ) v10 = sub_180001910(a1, a2, *(_WORD *)(v27 + 2 * (v17 & v5)), v17); v25 = *(char *)(v10 + v3); v18 = v17 >> v25; v13 = *(unsigned __int16 *)(v27 + 2 * (v18 & v5)); if ( v13 >= 0x8000 ) v13 = sub_180001910(a1, a2, v13, v18); v14 = *(char *)(v13 + v3); v19 = v18 >> *(_BYTE *)(v13 + v3); v24 = v14; v15 = *(unsigned __int16 *)(v27 + 2 * (v19 & v5)); if ( v15 >= 0x8000 ) { v20 = sub_180001910(a1, a2, v15, v19); v14 = v24; v15 = v20; } v11 = v25; v8 = v26; v16 = *(char *)(v15 + v3); } v21 = v8 + v11 + v14 + v16 + *(_DWORD *)(a2 + 16); *(_DWORD *)(a2 + 16) = ((_BYTE)v8 + (_BYTE)v11 + (_BYTE)v14 + (_BYTE)v16 + *(_BYTE *)(a2 + 16)) & 7; *(_QWORD *)a2 += (__int64)v21 >> 3; v22 = *(_QWORD *)(a1 + 72); return _mm_unpacklo_epi64( _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(unsigned __int16 *)(v22 + 2LL * (v7 - 1))), _mm_cvtsi32_si128(*(unsigned __int16 *)(v22 + 2LL * (v10 - 1)))), _mm_unpacklo_epi32( _mm_cvtsi32_si128(*(unsigned __int16 *)(v22 + 2LL * (v13 - 1))), _mm_cvtsi32_si128(*(unsigned __int16 *)(v22 + 2LL * (v15 - 1))))); }