// // sub_5B13C from 0x5b13c to 0x5b3b0 (628 bytes) // // 2 xrefs: // > sub_5C6D0 @ 0x5c6d8 // > sub_5C71C @ 0x5c724 // // 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_5B13C(__int64 a1, char a2) { __int64 v2; // x21 _QWORD *v3; // x8 __int64 result; // x0 float v7; // s0 _QWORD *v8; // x8 _BOOL4 v9; // w20 __int64 *v10; // x8 char v11; // cf char v12; // zf int v13; // w9 __int64 *v14; // x22 __int64 v15; // x8 __int64 *v16; // x22 __int64 *v17; // x8 unsigned int v18; // w9 unsigned int v19; // w10 __int64 v20; // x8 __int64 v21; // x10 unsigned int v22; // [xsp+Ch] [xbp-24h] BYREF v2 = *(_QWORD *)(*(_QWORD *)(a1 + 472) + 40LL); if ( v2 ) { v3 = *(_QWORD **)(v2 + 240); if ( v3 && *(_DWORD *)(v2 + 228) && !*(_QWORD *)(a1 + 496) ) *(_QWORD *)(a1 + 496) = *v3; if ( *(_QWORD *)(a1 + 496) ) { result = sub_5A4DC(a1, &v22, 2u); if ( (_DWORD)result ) { LABEL_8: *(_DWORD *)(a1 + 504) = v22; return 0; } v7 = *(float *)(a1 + 556); if ( (a2 & 1) != 0 ) { if ( v7 <= 0.0 ) v8 = (_QWORD *)(*(_QWORD *)(v2 + 248) + 8LL); else v8 = *(_QWORD **)(v2 + 240); *(_QWORD *)(a1 + 496) = *v8; while ( 1 ) { if ( v7 > 0.0 && (result = ((__int64 (*)(void))sub_5C704)(), !v12 & v11) ) { v19 = *((_DWORD *)v17 + 11); } else { if ( v7 >= 0.0 ) goto LABEL_8; result = sub_5C704(result); if ( v11 ) goto LABEL_8; v19 = *((_DWORD *)v17 + 11); if ( v7 <= 0.0 ) { if ( v19 <= v18 ) goto LABEL_8; v20 = v17[1]; *(_QWORD *)(a1 + 496) = v20; v21 = *(_QWORD *)(v2 + 240); goto LABEL_66; } } if ( v19 >= v18 ) goto LABEL_8; v20 = *v17; *(_QWORD *)(a1 + 496) = v20; v21 = *(_QWORD *)(v2 + 248); LABEL_66: if ( v21 == v20 ) goto LABEL_8; } } v9 = v7 > 0.0 && v22 < *(_DWORD *)(a1 + 504) || v7 < 0.0 && v22 > *(_DWORD *)(a1 + 504); while ( 1 ) { if ( v7 > 0.0 ) { result = ((__int64 (*)(void))sub_5C704)(); if ( !v12 & v11 ) goto LABEL_31; } if ( v7 >= 0.0 ) { if ( !v9 ) goto LABEL_8; v10 = *(__int64 **)(a1 + 496); } else { result = ((__int64 (*)(void))sub_5C704)(); if ( v11 ) v13 = 0; else v13 = 1; if ( ((v9 | v13) & 1) == 0 ) goto LABEL_8; } if ( v7 > 0.0 ) { LABEL_31: if ( v10 != *(__int64 **)(v2 + 248) ) { v14 = (__int64 *)*v10; if ( !*(_QWORD *)(v2 + 168) || *(_DWORD *)(v2 + 192) == *((unsigned __int16 *)v10 + 24) ) { if ( *(_QWORD *)(a1 + 368) ) { result = sub_5C594(result); if ( (_DWORD)result ) return result; } } v10 = v14; *(_QWORD *)(a1 + 496) = v14; } if ( !v9 ) goto LABEL_49; if ( v10 != *(__int64 **)(v2 + 248) ) goto LABEL_48; v9 = 0; v15 = **(_QWORD **)(v2 + 240); } else { if ( v10 != *(__int64 **)(v2 + 240) ) { v16 = (__int64 *)v10[1]; if ( !*(_QWORD *)(v2 + 168) || *(_DWORD *)(v2 + 192) == *((unsigned __int16 *)v10 + 24) ) { if ( *(_QWORD *)(a1 + 368) ) { result = sub_5C594(result); if ( (_DWORD)result ) return result; } } v10 = v16; *(_QWORD *)(a1 + 496) = v16; } if ( !v9 ) { LABEL_49: v9 = 0; goto LABEL_52; } if ( v10 != *(__int64 **)(v2 + 240) ) { LABEL_48: v9 = 1; goto LABEL_52; } v9 = 0; v15 = *(_QWORD *)(*(_QWORD *)(v2 + 248) + 8LL); } *(_QWORD *)(a1 + 496) = v15; LABEL_52: v7 = *(float *)(a1 + 556); } } } return 0; }