// // sub_5B3B0 from 0x5b3b0 to 0x5b530 (384 bytes) // // 3 xrefs: // > sub_5B538 @ 0x5b5c0 // > sub_5BCF8 @ 0x5bd68 // > sub_7C19C @ 0x7c21c // // 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_5B3B0(__int64 a1, __int64 a2, char a3) { unsigned int v4; // w20 __int64 result; // x0 int v7; // w8 unsigned int v8; // w8 int v9; // w8 char v10; // w2 __int64 v11; // x8 _BYTE v12[8]; // [xsp+8h] [xbp-18h] BYREF v4 = a2; result = sub_55DCC((__int64 *)a1, a2, a3 & 1, 0); if ( (_DWORD)result ) return result; if ( !*(_QWORD *)(a1 + 472) ) return 30; result = (*(__int64 (__fastcall **)(__int64, _BYTE *))(*(_QWORD *)a1 + 24LL))(a1, v12); if ( (_DWORD)result ) return result; if ( v12[0] ) goto LABEL_6; result = (*(__int64 (__fastcall **)(_QWORD, _BYTE *))(**(_QWORD **)(a1 + 472) + 96LL))(*(_QWORD *)(a1 + 472), v12); if ( (_DWORD)result ) return result; if ( v12[0] || (v9 = *(_DWORD *)(a1 + 72), (v9 & 0x40000) != 0) ) { LABEL_6: v7 = *(_DWORD *)(a1 + 72); if ( (v7 & 0x400000) != 0 ) { if ( (v7 & 0x20000) == 0 ) { result = sub_5C64C(); if ( (_DWORD)result ) return result; v7 = *(_DWORD *)(a1 + 72); } if ( (v7 & 0x40000) != 0 ) return 0; goto LABEL_19; } v8 = v7 | 0x400000; } else { v8 = v9 & 0xFF3FFFFF; } *(_DWORD *)(a1 + 72) = v8; if ( (v8 & 0x40000) != 0 ) return 0; LABEL_19: result = sub_5C658(); if ( !(_DWORD)result ) { if ( (v12[4] & 8) != 0 || ((a3 & 1) == 0 ? (v10 = (~*(_DWORD *)(*(_QWORD *)(a1 + 472) + 60LL) & 0x60) == 0) : (v10 = 1), result = sub_54DB0(a1, v4, v10), !(_DWORD)result) ) { result = (*(__int64 (__fastcall **)(_QWORD, _QWORD))(**(_QWORD **)(a1 + 472) + 64LL))(*(_QWORD *)(a1 + 472), v4); if ( !(_DWORD)result ) { result = sub_5C6D0(); if ( !(_DWORD)result ) { v11 = *(_QWORD *)(a1 + 472); if ( v11 ) { if ( (*(_BYTE *)(v11 + 60) & 0x80) != 0 ) return 0; } if ( (*(_DWORD *)(a1 + 72) & 0x1000004) == 0 && (sub_55C5C(*(_QWORD *)(a1 + 8)) & 1) == 0 ) return 0; result = sub_5C64C(); if ( !(_DWORD)result ) return 0; } } } } return result; }