// // sub_5D78C from 0x5d78c to 0x5d92c (416 bytes) // // 2 xrefs: // > sub_5EFBC @ 0x5f078 // > sub_5EFBC @ 0x5f080 // // 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 // bool __fastcall sub_5D78C(__int64 a1, float32x2_t *a2) { float v2; // s0 float v3; // s20 float v4; // s4 float v5; // s1 float v6; // s2 float v7; // s5 float v8; // s17 float v9; // s7 float v10; // s16 float v11; // s18 float v12; // s6 float v13; // s19 bool v14; // nf float v15; // s20 float v16; // s6 __int64 v17; // x8 unsigned __int64 v18; // x9 float *v19; // x11 float v20; // s3 float v21; // s4 float v22; // s5 __int64 v23; // x13 __int64 v24; // x14 float *v25; // x14 float v26; // s6 float v27; // s7 float v28; // t1 float32x2_t v29; // d0 float32x2_t v30; // d1 float v31; // s2 v3 = *(float *)(a1 + 160); v2 = *(float *)(a1 + 164); v4 = a2->n64_f32[1]; v5 = *(float *)(a1 + 168); v6 = *(float *)(a1 + 172); v7 = a2[1].n64_f32[0]; v8 = a2[1].n64_f32[1]; v10 = a2[2].n64_f32[0]; v9 = a2[2].n64_f32[1]; v11 = (float)((float)(a2->n64_f32[0] * v2) + (float)(v4 * v5)) + (float)(v7 * v6); v12 = v11 - v3; v13 = (float)((float)(v8 * v2) + (float)(v10 * v5)) + (float)(v9 * v6); v14 = (float)(v11 - v3) < 0.0; v15 = v13 - v3; if ( !v14 && v15 >= 0.0 || v12 <= 0.0 && v15 <= 0.0 || v12 > 0.0 && (*(_DWORD *)(a1 + 184) & 0x10000) == 0 ) return 1; v16 = v12 / (float)(v11 - v13); v17 = 0; v18 = (unsigned __int16)*(_DWORD *)(a1 + 184); v19 = (float *)(a1 + 196); v20 = a2->n64_f32[0] + (float)(v16 * (float)(v8 - a2->n64_f32[0])); v21 = v4 + (float)(v16 * (float)(v10 - v4)); v22 = v7 + (float)(v16 * (float)(v9 - v7)); do { v23 = v17; if ( v18 == v17 ) break; ++v17; v24 = v23 + 1 < v18 ? v23 + 1 : 0LL; v25 = (float *)(a1 + 188 + 12 * v24); v26 = *(v19 - 2); v27 = *(v19 - 1); v28 = *v19; v19 += 3; } while ( (float)((float)((float)((float)-(float)((float)(v5 * (float)(v25[2] - v28)) - (float)(v6 * (float)(v25[1] - v27))) * (float)(v20 - v26)) + (float)((float)-(float)((float)(v6 * (float)(*v25 - v26)) - (float)(v2 * (float)(v25[2] - v28))) * (float)(v21 - v27))) + (float)((float)-(float)((float)(v2 * (float)(v25[1] - v27)) - (float)(v5 * (float)(*v25 - v26))) * (float)(v22 - v28))) <= 0.0 ); if ( (_DWORD)v18 != (_DWORD)v23 ) return 1; v29.n64_f32[0] = 1.0 - *(float *)(a1 + 176); if ( (*(_BYTE *)(**(_QWORD **)(a2[4].n64_u64[0] + 24) + 122LL) & 4) != 0 ) { v30.n64_u32[0] = a2[3].n64_u32[0]; v31 = 1.0 - *(float *)(a1 + 180); if ( v29.n64_f32[0] < v30.n64_f32[0] || v29.n64_f32[0] == v30.n64_f32[0] && v31 < a2[3].n64_f32[1] ) { a2[3].n64_u32[0] = v29.n64_u32[0]; a2[3].n64_f32[1] = v31; v30.n64_u32[0] = v29.n64_u32[0]; } } else { v29.n64_f32[1] = 1.0 - *(float *)(a1 + 180); v30.n64_u64[0] = vmul_f32(a2[3], v29).n64_u64[0]; a2[3].n64_u64[0] = v30.n64_u64[0]; } return v30.n64_f32[0] >= 0.05 || a2[3].n64_f32[1] >= 0.05; }