// // sub_59FEC from 0x59fec to 0x5a244 (600 bytes) // // 6 xrefs: // > sub_59AE8 @ 0x59be4 // > sub_60458 @ 0x6054c // > sub_6E15C @ 0x6e274 // > sub_7C19C @ 0x7c4a0 // > sub_7C19C @ 0x7c560 // > sub_92AE0 @ 0x93170 // // 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_59FEC(__int64 a1, __int64 a2, __int64 a3, char a4, char a5, char a6) { __int64 v6; // x8 __int64 result; // x0 float v13; // s0 __int64 v14; // x8 __int64 v15; // x1 __int64 v16; // x9 __int64 *v17; // x8 __int64 *v18; // x10 __int64 *v19; // x9 __int64 v20; // x10 __int64 v21; // x8 __int64 v22; // x9 __int64 *v23; // x8 __int64 v24; // x8 _BYTE v25[4]; // [xsp+14h] [xbp-3Ch] BYREF __int64 v26; // [xsp+18h] [xbp-38h] BYREF if ( !a2 ) return 31; v6 = *(_QWORD *)(a1 + 472); if ( !v6 ) return 30; if ( *(_DWORD *)(a2 + 176) ) return 60; if ( !a3 && (*(_BYTE *)(v6 + 62) & 1) == 0 ) ((void (*)(void))sub_5C678)(); result = sub_5C50C(a1, 0, &v26); if ( !(_DWORD)result ) { if ( v26 ) *(_QWORD *)(v26 + 512) = a1; result = sub_5C618(a1); if ( !(_DWORD)result ) { result = sub_5AD18(a1, a2, a5 & 1); if ( !(_DWORD)result ) { result = sub_5C54C(); if ( !(_DWORD)result ) { if ( (a5 & 1) == 0 ) goto LABEL_26; v13 = 1.0; if ( (a6 & 1) != 0 ) v13 = 0.0; *(float *)(a1 + 536) = v13; *(float *)(a1 + 540) = v13; result = sub_595BC(); if ( !(_DWORD)result ) { if ( ((**(__int64 (__fastcall ***)(__int64))a2)(a2) & 1) != 0 && (v14 = *(_QWORD *)(a2 + 184)) != 0 ) v15 = *(unsigned int *)(v14 + 404); else v15 = 0; result = sub_5A918(a1, v15, 2); if ( !(_DWORD)result ) { LABEL_26: result = sub_5AF2C(a1); if ( !(_DWORD)result ) { v16 = *(_QWORD *)(a2 + 280); ++*(_DWORD *)(a2 + 312); if ( v16 && (*(_BYTE *)(*(_QWORD *)(a1 + 472) + 62LL) & 1) == 0 ) { FMOD_OS_CriticalSection_Enter(*(_UNKNOWN ***)((char *)off_130 + (_QWORD)off_114000)); v17 = *(__int64 **)(a2 + 280); v18 = (__int64 *)v17[1]; *v18 = *v17; *(_QWORD *)(*v17 + 8) = v18; *v17 = (__int64)v17; v19 = (__int64 *)(*(_QWORD *)(a1 + 8) + 69928LL); v20 = *v19; *v17 = *v19; v17[1] = (__int64)v19; *(_QWORD *)(v20 + 8) = v17; *(_QWORD *)v17[1] = v17; result = FMOD_OS_CriticalSection_Leave(*(_UNKNOWN ***)((char *)off_130 + (_QWORD)off_114000)); } if ( (a5 & 1) == 0 || ((result = (*(__int64 (__fastcall **)(__int64, _BYTE *))(*(_QWORD *)a2 + 288LL))(a2, v25), (v25[0] & 0x10) == 0) || (result = sub_5C694(result), !(_DWORD)result)) && ((result = sub_5C678(result), (*(_BYTE *)(*(_QWORD *)(v21 + v22) + 72LL) & 2) == 0) || (*(_BYTE *)(*(_QWORD *)(a1 + 472) + 62LL) & 1) != 0 || (result = sub_5C5DC(result), !(_DWORD)result)) ) { v23 = *(__int64 **)(a2 + 240); if ( v23 && *(_DWORD *)(a2 + 228) ) { v24 = *v23; *(_DWORD *)(a1 + 504) = 0; *(_QWORD *)(a1 + 496) = v24; } if ( (a4 & 1) != 0 ) return 0; result = sub_5C624(result); if ( !(_DWORD)result ) return 0; } } } } } } } } return result; }