for ( auto i = 0; i < sound_info.count( ); i++ )
{
auto& m_sound = sound_info[ i ];
if ( m_sound.m_sound_source <= 0 || m_sound.m_sound_source >= values::m_max_players )
continue;
if ( m_sound.origin->is_zero( ) || !is_sound_valid( m_sound ) )
continue;
c_cs_player* player = c_cs_player::get_player_by_index( m_sound.m_sound_source );
if ( !player || !player->is_alive( ) || !player->is_dormant( ) )
continue;
vec3_t from, to;
trace_t tr;
trace_filter filter;
from = *m_sound.origin + vec3_t( 0, 0, 1 );
to = from - vec3_t( 0, 0, 100 );
filter.skip = player;
interfaces::trace->trace_ray( ray_t( from, to ), mask_playersolid, &filter, &tr );
if ( tr.allsolid )
continue;
*m_sound.origin = tr.fraction <= 0.97f ? tr.end : *m_sound.origin;
footsteps.at( m_sound.m_sound_source ).push_back( *m_sound.origin, ctx::m_time )
}