auto current_tick = g_local_player->controller( )->tick_base( );
auto inaccuracy = g_local_player->prediction( )->inaccuracy( );
auto spread = g_local_player->prediction( )->spread( );
/* iterate all possible seeds */
for ( int i{ }; i < valve::k_max_seeds; i++ ) {
auto spread_angles = sdk::qang_t( { static_cast< float >( i ) / 2.f, aim_angle.y, 0.f } );
auto spread_seed = compute_random_seed( &spread_angles, current_tick );
auto spread = g_local_player->weapon( )->calc_spread( spread_seed + 1u, inaccuracy, spread );
sdk::qang_t no_spread_angles{};
no_spread_angles.x += sdk::to_deg( std::atan( std::sqrt( spread.x * spread.x ) + ( spread.y * spread.y ) ) );
no_spread_angles.z = -sdk::to_deg( std::atan2( spread.x, spread.y ) );
if ( compute_random_seed( &no_spread_angles, current_tick ) == spread_seed ) {
m_angles = no_spread_angles;
m_seed = spread_seed;
break;
}
}