// // sub_581C4 from 0x581c4 to 0x5836c (424 bytes) // // 3 xrefs: // > sub_57F50 @ 0x58168 // > sub_762B0 @ 0x764a4 // > FMOD::ChannelGroup::addGroup @ 0xd20cc // // 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_581C4(__int64 a1, _QWORD *a2, char a3, __int64 a4) { unsigned int v4; // w23 __int64 v7; // x8 _QWORD *v10; // x9 _QWORD *v11; // x24 __int64 v13; // x0 __int16 v14; // w8 __int64 v15; // x8 __int64 v16; // [xsp+0h] [xbp-50h] BYREF int v17; // [xsp+8h] [xbp-48h] char v18; // [xsp+Ch] [xbp-44h] __int64 v19; // [xsp+10h] [xbp-40h] BYREF __int64 v20; // [xsp+18h] [xbp-38h] BYREF v4 = 31; if ( a2 && a2 != (_QWORD *)a1 ) { if ( a2[4] == a1 ) return 0; v7 = *(_QWORD *)(a1 + 8); v18 = 0; v16 = v7; v17 = 2; sub_520A0((__int64)&v16); v10 = (_QWORD *)a2[48]; v11 = a2 + 47; *v10 = a2[47]; *(_QWORD *)(a2[47] + 8LL) = v10; a2[47] = a2 + 47; a2[48] = a2 + 47; v4 = sub_59358(a2, 0, &v20); if ( v4 ) goto LABEL_5; v13 = a2[4]; if ( v13 ) { v19 = 0; v4 = sub_59358(v13, 4294967293LL, &v19); if ( v4 ) goto LABEL_5; v14 = atomic_load((unsigned int *)(v19 + 100)); if ( (v14 & 0x400) == 0 ) { v4 = sub_CB928(v19, v20, 0, 0); if ( v4 ) goto LABEL_5; } } v15 = *(_QWORD *)(a1 + 408); a2[47] = a1 + 400; a2[48] = v15; *(_QWORD *)(a1 + 408) = v11; *(_QWORD *)a2[48] = v11; a2[49] = a2; v4 = sub_59358(a1, 4294967293LL, &v19); if ( v4 ) goto LABEL_5; if ( v20 ) { v4 = sub_59400(v19, v20, a4, 0); if ( v4 ) { LABEL_5: sub_51F94((__int64)&v16); return v4; } if ( (a3 & 1) != 0 ) sub_57C48((__int64)a2, (_OWORD *)(v19 + 8)); } a2[4] = a1; sub_585B0(a2, (*(_DWORD *)(a1 + 72) >> 4) & 1); v4 = sub_57CC0((__int64)a2); if ( !v4 ) sub_58828(a2); goto LABEL_5; } return v4; }