// // sub_53EB0 from 0x53eb0 to 0x54100 (592 bytes) // // 1 xrefs: // > @ 0x10c328 // // 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_53EB0(__int64 a1) { __int64 v2; // x21 __int64 v3; // x0 unsigned int *v4; // x8 unsigned int v5; // w9 unsigned int v6; // w9 unsigned int v7; // w9 __int64 v8; // x9 __int64 v9; // x10 unsigned int *v10; // x10 unsigned int v11; // w11 int v12; // w9 float *v13; // x0 __int64 v14; // x20 unsigned int v15; // w9 unsigned int v16; // w9 __int64 v17; // x9 unsigned int v18; // w20 __int64 v19; // x0 __int64 v20; // x9 __int64 v21; // x19 unsigned int v23; // w10 __int64 v24; // x1 v2 = *(_QWORD *)(a1 + 40); sub_7B9D0(*(_QWORD *)(a1 + 8), 8); v3 = *(_QWORD *)(a1 + 8); *(_DWORD *)(a1 + 60) &= ~0x80u; sub_7B9F0(v3, 8); *(_QWORD *)(a1 + 8) = *(_QWORD *)(v2 + 216); v4 = (unsigned int *)(v2 + 88); *(_BYTE *)(a1 + 136) = 0; *(_QWORD *)(a1 + 144) = 0; *(_DWORD *)(a1 + 152) = 0; do v5 = __ldaxr(v4); while ( __stlxr(v5 & 0xFFFFFFBF, v4) ); do v6 = __ldaxr(v4); while ( __stlxr(v6 | 0x800, v4) ); if ( *(_QWORD *)(a1 + 72) ) { do v7 = __ldaxr(v4); while ( __stlxr(v7 | 0x10, v4) ); } v8 = *(_QWORD *)(v2 + 184); v9 = v2; if ( v8 ) { v10 = (unsigned int *)(v8 + 88); do v11 = __ldaxr(v10); while ( __stlxr(v11 & 0xFFFFFFBF, v10) ); v9 = v8; } v12 = *(_DWORD *)(v9 + 404); v13 = *(float **)(a1 + 192); *(_DWORD *)(a1 + 156) = 0; *(_DWORD *)(a1 + 160) = 0; *(_DWORD *)(a1 + 76) = v12; *(float *)(a1 + 104) = fmaxf(v13[26], 100.0); *(float *)(a1 + 100) = v13[25]; v14 = *(_QWORD *)(v2 + 384); if ( v14 ) { if ( (*(_BYTE *)(v2 + 45) & 4) != 0 || (v15 = *(_DWORD *)(v2 + 36), v15 <= 0x10) && ((1 << v15) & 0x121C0) != 0 || *(_DWORD *)(v2 + 68) > *(_DWORD *)(v14 + 68) ) { do v16 = __ldaxr(v4); while ( __stlxr(v16 & 0xFFFFFF7F, v4) ); (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)v14 + 280LL))(v14, 2); (*(void (__fastcall **)(__int64, _QWORD, __int64, _QWORD, __int64))(*(_QWORD *)v14 + 312LL))( v14, 0, 2, (unsigned int)(*(_DWORD *)(v14 + 68) - 1), 2); } else { do v23 = __ldaxr(v4); while ( __stlxr(v23 | 0x88, v4) ); if ( (*(_DWORD *)(a1 + 56) & 6) != 0 ) v24 = 2; else v24 = 1; (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)v14 + 280LL))(v14, v24); (*(void (__fastcall **)(__int64, _QWORD, __int64, _QWORD, __int64))(*(_QWORD *)v14 + 312LL))( v14, *(unsigned int *)(v2 + 76), 2, (unsigned int)(*(_DWORD *)(v2 + 76) + *(_DWORD *)(v2 + 80) - 1), 2); } *(_QWORD *)(v14 + 184) = v2; v13 = *(float **)(a1 + 192); v13[14] = *(float *)(v14 + 44); *((_QWORD *)v13 + 11) = *(_QWORD *)(v14 + 76); v13[24] = *(float *)(v14 + 68); } *((_QWORD *)v13 + 5) = v14; *((_QWORD *)v13 + 6) = 0; v13[21] = NAN; v17 = *(_QWORD *)v13; *((_QWORD *)v13 + 3) = *(_QWORD *)(a1 + 24); v18 = (*(__int64 (**)(void))(v17 + 40))(); if ( !v18 ) { sub_54CDC(); v19 = *(_QWORD *)(a1 + 8); *(_QWORD *)(a1 + 184) = a1; v20 = *(_QWORD *)(v19 + 72680); *(_QWORD *)(a1 + 168) = v19 + 72672; v21 = a1 + 168; *(_QWORD *)(v21 + 8) = v20; *(_QWORD *)(v19 + 72680) = v21; **(_QWORD **)(v21 + 8) = v21; sub_7B9F0(v19, 10); } return v18; }