// // sub_5A918 from 0x5a918 to 0x5aa6c (340 bytes) // // 6 xrefs: // > sub_59FEC @ 0x5a120 // > sub_5A244 @ 0x5a2b8 // > sub_5A364 @ 0x5a430 // > sub_60458 @ 0x60574 // > sub_8D6F8 @ 0x8eee8 // > FMOD::Channel::setPosition @ 0xceaa0 // // 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_5A918(__int64 a1) { __int64 v1; // x19 unsigned int v2; // w1 unsigned int v3; // w2 __int64 v4; // x8 long double v5; // q0 __int64 v6; // x9 unsigned int v7; // w21 __int64 result; // x0 unsigned int v9; // w20 __int64 v10; // x0 _QWORD *v11; // x0 unsigned int *v12; // x8 __int64 v13; // x2 __int64 v14; // x3 __int64 v15; // x8 __int64 v16; // [xsp+8h] [xbp-28h] BYREF unsigned int v17; // [xsp+1Ch] [xbp-14h] BYREF if ( !*(_QWORD *)(a1 + 472) ) return 30; sub_5C688(a1); if ( !v6 ) return 30; v7 = v3; if ( (v3 & 0x600) != 0 ) return 68; v9 = v2; if ( (v3 & 0x10) == 0 ) { v10 = *(_QWORD *)(v4 + 40); if ( v10 ) { result = (*(__int64 (__fastcall **)(__int64, unsigned int *, _QWORD))(*(_QWORD *)v10 + 152LL))(v10, &v17, v3); if ( (_DWORD)result ) return result; if ( v17 <= v9 ) return 32; } } if ( (v7 & 7) == 0 ) { result = (*(__int64 (__fastcall **)(_QWORD, _QWORD, _QWORD, _QWORD))(**(_QWORD **)(v1 + 472) + 216LL))( *(_QWORD *)(v1 + 472), v9, v7, 0); if ( !(_DWORD)result ) return sub_5C71C(); return result; } v11 = *(_QWORD **)(v1 + 472); v12 = (unsigned int *)v11[5]; if ( v12 ) { v13 = v12[26]; v14 = v12[10]; LODWORD(v5) = v12[27]; if ( (v7 & 2) == 0 ) goto LABEL_12; LABEL_19: HIDWORD(v16) = v9; LABEL_20: LODWORD(v16) = 0; goto LABEL_25; } v15 = v11[6]; if ( !v15 ) return 30; v13 = *(unsigned __int16 *)(v15 + 280); v14 = 5; *(float *)&v5 = (float)*(int *)(*(_QWORD *)(v1 + 8) + 1744LL); if ( (v7 & 2) != 0 ) goto LABEL_19; LABEL_12: if ( (v7 & 4) == 0 ) { if ( (v7 & 1) == 0 ) goto LABEL_25; *(float *)&v5 = (float)((float)((float)v9 * 0.001) * *(float *)&v5) + 0.5; HIDWORD(v16) = (unsigned int)*(float *)&v5; goto LABEL_20; } sub_5C214(v9, (char *)&v16 + 4, v13, v14); LODWORD(v16) = 0; v11 = *(_QWORD **)(v1 + 472); LABEL_25: result = (*(__int64 (__fastcall **)(_QWORD *, __int64, __int64, __int64, long double))(*v11 + 128LL))( v11, v16, v13, v14, v5); if ( !(_DWORD)result ) return sub_5C71C(); return result; }