-/* implementation */
-#include "player_common.c"
-#include "player_walk.c"
-#include "player_skate.c"
-#include "player_dead.c"
-#include "player_drive.c"
-#include "player_render.c"
-#include "player_ragdoll.c"
-#include "player_replay.c"
-
-#endif /* PLAYER_C */
+void player__networked_sfx( u8 system, u8 priority, u8 id,
+ v3f pos, f32 volume )
+{
+ struct net_sfx sfx,
+ *p_net = find_lower_priority_sfx(
+ localplayer.sfx_buffer, 4,
+ &localplayer.sfx_buffer_count, priority ),
+ *p_replay = find_lower_priority_sfx(
+ localplayer.local_sfx_buffer, 2,
+ &localplayer.local_sfx_buffer_count, priority );
+
+ sfx.id = id;
+ sfx.priority = priority;
+ sfx.volume = volume;
+ v3_copy( pos, sfx.location );
+ sfx.system = system;
+
+ /* we only care about subframe in networked sfx. local replays run at a
+ * high enough framerate. */
+ f32 t = (vg.time_real - network_client.last_frame) / NETWORK_FRAMERATE;
+ sfx.subframe = vg_clampf( t, 0.0f, 1.0f );
+
+ if( p_net ) *p_net = sfx;
+ if( p_replay ) *p_replay = sfx;
+
+ net_sfx_play( &sfx );
+}