// // sub_5D078 from 0x5d078 to 0x5d1cc (340 bytes) // // 1 xrefs: // > sub_54DB0 @ 0x54ed8 // // 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_5D078(__int64 a1, __int64 a2, __int64 a3) { __int64 result; // x0 __int64 v7; // x8 __int64 v8; // x10 __int64 v9; // x9 __int64 v10; // x10 __int64 v11; // x9 __int64 v12; // x10 __int64 v13; // x8 bool v14; // zf __int64 v15; // x9 _QWORD *v16; // x9 __int64 v17; // t1 __int64 v18; // [xsp+8h] [xbp-38h] BYREF _BYTE v19[8]; // [xsp+10h] [xbp-30h] BYREF char v20; // [xsp+18h] [xbp-28h] __int64 v21; // [xsp+28h] [xbp-18h] BYREF v21 = 0; if ( (unsigned int)FMOD::ChannelI::validate(a2, &v21, 0) ) { result = sub_579DC(a2, &v18, nullptr); if ( (_DWORD)result ) return result; sub_5D4C8(); v7 = v18; v20 = 1; if ( *(_DWORD *)(v18 + 544) != 1 ) { *(_DWORD *)(v18 + 544) = 0; *(_QWORD *)(v7 + 552) = a2; v8 = *(_QWORD *)(v7 + 520); *(_QWORD *)(v7 + 560) = *(_QWORD *)a3; v9 = v7 + 520; *(_DWORD *)(v7 + 568) = *(_DWORD *)(a3 + 8); if ( v8 == v7 + 520 && *(_QWORD *)(v7 + 528) == v9 ) { v10 = *(_QWORD *)(a1 + 352); *(_QWORD *)(v7 + 520) = a1 + 344; *(_QWORD *)(v7 + 528) = v10; *(_QWORD *)(a1 + 352) = v9; **(_QWORD **)(v7 + 528) = v9; } } } else { sub_5D4C8(); v20 = 1; v11 = *(_QWORD *)(a1 + 336); v12 = *(int *)((char *)&qword_1D0 + v21); v13 = v11 + (v12 << 6); if ( *(_DWORD *)(v13 + 24) != 1 ) { *(_DWORD *)(v13 + 24) = 0; *(_QWORD *)(v13 + 32) = a2; *(_QWORD *)(v13 + 40) = *(_QWORD *)a3; v14 = *(_QWORD *)v13 == v13; *(_DWORD *)(v13 + 48) = *(_DWORD *)(a3 + 8); if ( v14 ) { v15 = v11 + (v12 << 6); v17 = *(_QWORD *)(v15 + 8); v16 = (_QWORD *)(v15 + 8); if ( v17 == v13 ) { *v16 = *(_QWORD *)(a1 + 352); *(_QWORD *)v13 = a1 + 344; *(_QWORD *)(a1 + 352) = v13; *(_QWORD *)*v16 = v13; } } } } return sub_52090((__int64)v19); }