// // sub_55DCC from 0x55dcc to 0x55f6c (416 bytes) // // 5 xrefs: // > sub_5704C @ 0x57130 // > sub_58380 @ 0x583ac // > sub_58674 @ 0x58740 // > sub_5B3B0 @ 0x5b3d4 // > sub_5B6D4 @ 0x5b76c // // 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_55DCC(__int64 *a1, __int64 a2, __int64 a3, char a4) { __int64 result; // x0 __int64 v7; // x21 __int64 *v8; // x8 __int64 *v9; // x23 char v10; // w22 float v11; // s8 float v12; // s9 int v13; // w9 __int64 *v14; // x24 __int64 v15; // x25 char v16; // w8 __int64 v17; // x8 __int64 v18; // [xsp+8h] [xbp-58h] BYREF int v19; // [xsp+2Ch] [xbp-34h] BYREF v19 = 0; result = (*(__int64 (__fastcall **)(__int64 *, __int64, __int64 *))(*a1 + 288))(a1, 4294967294LL, &v18); if ( !(_DWORD)result ) { v7 = v18; result = (*(__int64 (__fastcall **)(__int64 *, __int64, int *))(*a1 + 312))(a1, v18, &v19); v8 = (__int64 *)a1[34]; v9 = a1 + 34; if ( v8 == a1 + 34 && (__int64 *)a1[35] == v9 ) { v10 = 0; v11 = 1.0; v12 = 0.0; } else { v10 = 0; v11 = 1.0; v12 = 0.0; v13 = -1; while ( v8 != v9 ) { v14 = (__int64 *)*v8; v15 = v8[2]; result = (__int64)(v8 - 18); if ( v13 < v19 && v19 < (int)v15 >> 16 ) { v10 = 1; result = sub_579B4(result, *(float *)(v7 + 568), *(float *)(v7 + 680), *((float *)a1 + 12)); } v16 = atomic_load((unsigned int *)(result + 100)); if ( (v16 & 1) == 0 ) { result = sub_CC2D4(); if ( (_DWORD)result ) return result; v12 = COERCE_FLOAT(65794) + (float)(13073.0 * v12); v11 = 13073.0 * v11; } v13 = (int)v15 >> 16; v8 = v14; } } if ( v7 && (v10 & 1) == 0 ) sub_579B4(result, *(float *)(v7 + 568), *(float *)(v7 + 680), *((float *)a1 + 12)); if ( *((float *)a1 + 22) == v11 && *((float *)a1 + 23) == v12 && (a4 & 1) == 0 ) return (*(__int64 (__fastcall **)(__int64 *))(*a1 + 528))(a1); v17 = *a1; *((float *)a1 + 22) = v11; *((float *)a1 + 23) = v12; result = (*(__int64 (__fastcall **)(__int64 *))(v17 + 512))(a1); if ( !(_DWORD)result ) return (*(__int64 (__fastcall **)(__int64 *))(*a1 + 528))(a1); } return result; }