// // sub_180007410 from 0x180007410 to 0x180007764 (852 bytes) // // 5 xrefs: // > @ 0x18017d840 // > @ 0x18017d880 // > @ 0x1801a4210 // > @ 0x1801a4228 // > @ 0x1801f6360 // // 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_180007410(int *a1, __int64 a2, _DWORD *a3, float *a4) { __int64 v4; // r13 int v6; // edx int v7; // r10d int v8; // ebp int v9; // esi int v10; // r12d __int64 v11; // r15 __int64 v12; // rcx int v13; // ebx int v14; // ebx int v15; // r11d unsigned int v16; // edi unsigned int v17; // r9d __m128i v18; // xmm0 __m128i v19; // xmm2 __m128i v20; // xmm3 int v21; // r11d __int64 v22; // rax int v23; // esi __m128 *v24; // r10 __m128i v25; // xmm6 __m128i v26; // xmm5 __m128 v27; // xmm4 __m128i v28; // xmm1 int v29; // r11d __int32 v30; // ecx __int64 v31; // rax __int64 v32; // rcx __int64 v33; // rax unsigned __int64 v34; // r8 float v35; // xmm0_4 float v36; // xmm0_4 float v37; // xmm1_4 int v39; // [rsp+70h] [rbp+8h] _DWORD *v41; // [rsp+80h] [rbp+18h] v41 = a3; v4 = a2; v6 = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)a1 + 32LL) + 4LL * a1[10]) / 2; v39 = v6; if ( a3 ) { v7 = *a3 * *(_DWORD *)(v4 + 56); v8 = 1; v9 = 0; v10 = 0; if ( *(int *)(v4 + 52) > 1 ) { v11 = 1; do { v12 = *(char *)(*(_QWORD *)(v4 + 24) + v11); v13 = a3[v12] & 0x7FFF; if ( v13 == a3[v12] ) { v14 = *(_DWORD *)(v4 + 56) * v13; v10 = *(unsigned __int16 *)(*(_QWORD *)(v4 + 16) + 2 * v12); v15 = v10; v16 = ((v14 - v7) << 20) / (v10 - v9); v17 = (((v14 - v7) >> 31) & 0xFF800) + (v7 << 20) + 1024; v18 = _mm_cvtsi32_si128(2 * v16); v6 = v39; v19 = _mm_cvtsi32_si128(v16); v20 = _mm_cvtsi32_si128(3 * v16); if ( v39 <= v10 ) v15 = v39; v21 = v15 - v9; v22 = v9; v23 = v21 >> 2; v24 = (__m128 *)&a4[v22]; v25 = _mm_shuffle_epi32(_mm_cvtsi32_si128(4 * v16), 0); v26 = _mm_add_epi32( _mm_shuffle_epi32(_mm_cvtsi32_si128(v17), 0), _mm_unpacklo_epi64(_mm_unpacklo_epi32(v20, v18), _mm_unpacklo_epi32(v19, _mm_cvtsi32_si128(0)))); if ( v21 >> 2 ) { do { v27 = *v24; v28 = v26; v26 = _mm_add_epi32(v26, v25); xmmword_1801B2390 = (__int128)_mm_srai_epi32(v28, 0x14u); *v24++ = _mm_mul_ps( _mm_movelh_ps( _mm_unpacklo_ps( (__m128)dword_180144700[SHIDWORD(xmmword_1801B2390)], (__m128)dword_180144700[SDWORD2(xmmword_1801B2390)]), _mm_unpacklo_ps( (__m128)dword_180144700[SDWORD1(xmmword_1801B2390)], (__m128)dword_180144700[_mm_cvtsi128_si32((__m128i)xmmword_1801B2390)])), v27); --v23; } while ( v23 ); v4 = a2; v6 = v39; } v29 = v21 & 3; if ( v29 ) { v30 = v26.m128i_i32[3]; do { v24 = (__m128 *)((char *)v24 + 4); v31 = (__int64)v30 >> 20; v30 += v16; v24[-1].m128_f32[3] = *(float *)&dword_180144700[v31] * v24[-1].m128_f32[3]; --v29; } while ( v29 ); } a3 = v41; v9 = v10; v7 = v14; } else { v6 = v39; } ++v8; ++v11; } while ( v8 < *(_DWORD *)(v4 + 52) ); } v32 = v10; if ( v10 < (__int64)v6 ) { if ( v6 - (__int64)v10 < 4 ) goto LABEL_26; v33 = (__int64)&a4[v10 + 2]; v34 = ((unsigned __int64)(v6 - (__int64)v10 - 4) >> 2) + 1; v32 = v10 + 4 * v34; do { v35 = *(float *)(v33 - 8); v33 += 16; *(float *)(v33 - 24) = v35 * *(float *)&dword_180144700[v7]; v36 = *(float *)(v33 - 16); *(float *)(v33 - 20) = *(float *)&dword_180144700[v7] * *(float *)(v33 - 20); v37 = *(float *)(v33 - 12); *(float *)(v33 - 16) = v36 * *(float *)&dword_180144700[v7]; *(float *)(v33 - 12) = v37 * *(float *)&dword_180144700[v7]; --v34; } while ( v34 ); if ( v32 < v6 ) { LABEL_26: do { a4[v32] = a4[v32] * *(float *)&dword_180144700[v7]; ++v32; } while ( v32 < v6 ); } } return 1; } else { memset(a4, 0, 4LL * (*(_DWORD *)(*(_QWORD *)(*(_QWORD *)a1 + 32LL) + 4LL * a1[10]) / 2)); return 0; } }