// // sub_57F50 from 0x57f50 to 0x581c4 (628 bytes) // // 3 xrefs: // > sub_57F28 @ 0x57f44 // > sub_57F50 @ 0x57f88 // > sub_6A544 @ 0x6a76c // // 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_57F50(_QWORD *a1, char a2) { _QWORD *v3; // x8 _QWORD *v4; // x20 _QWORD *v5; // x21 __int64 result; // x0 __int64 v7; // x0 _QWORD *v8; // x8 __int64 v9; // x20 __int64 v10; // x21 _QWORD *v11; // x8 _QWORD *i; // x20 _QWORD *v13; // x9 __int64 v14; // x8 unsigned int *v15; // x8 unsigned int v16; // w9 unsigned int *v17; // x8 unsigned int v18; // w9 __int64 v19; // x1 _QWORD *v20; // x8 _QWORD *j; // x8 _QWORD *v22; // x23 _QWORD *v23; // x9 if ( (a2 & 1) != 0 ) { v3 = (_QWORD *)a1[50]; v4 = a1 + 50; while ( v3 != v4 ) { v5 = (_QWORD *)*v3; result = sub_57F50(v3[2], 1); v3 = v5; if ( (_DWORD)result ) return result; } } v7 = (*(__int64 (__fastcall **)(_QWORD *, _QWORD, __int64))(*a1 + 256LL))(a1, 0, -1048576); result = sub_59394(v7); if ( v8 != a1 ) { v9 = 0; v10 = 73664; while ( v9 != 4 ) { if ( *(_QWORD *)(a1[1] + v10) ) { result = (*(__int64 (__fastcall **)(_QWORD *, _QWORD, float))(*a1 + 104LL))(a1, (unsigned int)v9, 0.0); if ( (_DWORD)result ) return result; } ++v9; v10 += 24; } result = sub_59394(result); if ( v11 && v11 != a1 ) { for ( i = a1 + 53; (_QWORD *)*i != i; result = sub_5BE98(*(_QWORD *)(*i + 16LL), *(_QWORD *)(a1[1] + 69856LL)) ) ; } } if ( *((__int16 *)a1 + 254) == -1 || (result = sub_6E864(a1[1], a1), !(_DWORD)result) ) { v13 = (_QWORD *)a1[57]; *v13 = a1[56]; *(_QWORD *)(a1[56] + 8LL) = v13; v14 = a1[14]; a1[56] = a1 + 56; a1[57] = a1 + 56; if ( v14 ) { v15 = (unsigned int *)(v14 + 100); do v16 = __ldaxr(v15); while ( __stlxr(v16 & 0xFFFFFFDF, v15) ); v17 = (unsigned int *)(a1[14] + 100LL); do v18 = __ldaxr(v17); while ( __stlxr(v18 & 0xFFFFFFBF, v17) ); result = (*(__int64 (__fastcall **)(_QWORD))(*(_QWORD *)a1[14] + 16LL))(a1[14]); if ( (_DWORD)result ) return result; a1[14] = 0; } v19 = a1[60]; if ( v19 ) result = sub_E2D74( *(__int64 *)((char *)&qword_1B0 + (_QWORD)off_114000), v19, "../../src/fmod_channelgroupi.cpp", 452, 1); if ( a1[8] ) { result = sub_59360(result); *((_DWORD *)a1 + 14) = 0; a1[8] = 0; } if ( a1[2] ) { result = sub_59360(result); a1[2] = 0; } sub_59394(result); if ( v20 && v20 != a1 ) { for ( j = (_QWORD *)a1[50]; j != a1 + 50; j = v22 ) { v22 = (_QWORD *)*j; sub_581C4(*(_QWORD *)(a1[1] + 69856LL), j[2], 1, 0); } } v23 = (_QWORD *)a1[48]; *v23 = a1[47]; *(_QWORD *)(a1[47] + 8LL) = v23; a1[47] = a1 + 47; a1[48] = a1 + 47; *((_DWORD *)a1 + 118) = -559039983; sub_E2D74(*(__int64 *)((char *)&qword_1B0 + (_QWORD)off_114000), a1, "../../src/fmod_channelgroupi.cpp", 489, 1); return 0; } return result; }