X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=snd_main.c;h=e1e03a58c7976d403ca46828011ab2f190de31e0;hb=d24a662a278e76b2cbcf4528dccc6c2196ab1eda;hp=e29b55eb060039efac85467658fed0c046705831;hpb=fb468107b060a8807014662ed251ab6e82ec7f7a;p=xonotic%2Fdarkplaces.git diff --git a/snd_main.c b/snd_main.c index e29b55eb..e1e03a58 100644 --- a/snd_main.c +++ b/snd_main.c @@ -173,7 +173,9 @@ cvar_t snd_soundradius = {0, "snd_soundradius", "2000", "radius of weapon sounds cvar_t _snd_mixahead = {CVAR_SAVE, "_snd_mixahead", "0.1", "how much sound to mix ahead of time"}; cvar_t snd_streaming = { CVAR_SAVE, "snd_streaming", "1", "enables keeping compressed ogg sound files compressed, decompressing them only as needed, otherwise they will be decompressed completely at load (may use a lot of memory)"}; cvar_t snd_swapstereo = {CVAR_SAVE, "snd_swapstereo", "0", "swaps left/right speakers for old ISA soundblaster cards"}; +extern cvar_t v_flipped; cvar_t snd_channellayout = {0, "snd_channellayout", "0", "channel layout. Can be 0 (auto - snd_restart needed), 1 (standard layout), or 2 (ALSA layout)"}; +cvar_t snd_mutewhenidle = {CVAR_SAVE, "snd_mutewhenidle", "1", "whether to disable sound output when game window is inactive"}; // Local cvars static cvar_t nosound = {0, "nosound", "0", "disables sound"}; @@ -400,7 +402,7 @@ static void S_SetChannelLayout (void) listeners = snd_speakerlayout.listeners; // Swap the left and right channels if snd_swapstereo is set - if (snd_swapstereo.integer) + if (boolxor(snd_swapstereo.integer, v_flipped.integer)) { switch (snd_speakerlayout.channels) { @@ -454,7 +456,7 @@ static void S_SetChannelLayout (void) (layout == SND_CHANNELLAYOUT_ALSA) ? "ALSA" : "standard"); } - current_swapstereo = snd_swapstereo.integer; + current_swapstereo = boolxor(snd_swapstereo.integer, v_flipped.integer); current_channellayout = snd_channellayout.integer; current_channellayout_used = layout; } @@ -706,6 +708,7 @@ void S_Init(void) Cvar_RegisterVariable(&snd_speed); Cvar_RegisterVariable(&snd_width); Cvar_RegisterVariable(&snd_channels); + Cvar_RegisterVariable(&snd_mutewhenidle); // COMMANDLINEOPTION: Sound: -nosound disables sound (including CD audio) if (COM_CheckParm("-nosound")) @@ -1099,6 +1102,7 @@ SND_Spatialize Spatializes a channel ================= */ +extern cvar_t cl_gameplayfix_soundsmovewithentities; void SND_Spatialize(channel_t *ch, qboolean isstatic) { int i; @@ -1106,12 +1110,19 @@ void SND_Spatialize(channel_t *ch, qboolean isstatic) vec3_t source_vec; // update sound origin if we know about the entity - if (ch->entnum > 0 && cls.state == ca_connected && cl.entities[ch->entnum].state_current.active) + if (ch->entnum > 0 && cls.state == ca_connected && cl_gameplayfix_soundsmovewithentities.integer) { - //Con_Printf("-- entnum %i origin %f %f %f neworigin %f %f %f\n", ch->entnum, ch->origin[0], ch->origin[1], ch->origin[2], cl.entities[ch->entnum].state_current.origin[0], cl.entities[ch->entnum].state_current.origin[1], cl.entities[ch->entnum].state_current.origin[2]); - VectorCopy(cl.entities[ch->entnum].state_current.origin, ch->origin); - if (cl.entities[ch->entnum].state_current.modelindex && cl.model_precache[cl.entities[ch->entnum].state_current.modelindex] && cl.model_precache[cl.entities[ch->entnum].state_current.modelindex]->soundfromcenter) - VectorMAMAM(1.0f, ch->origin, 0.5f, cl.model_precache[cl.entities[ch->entnum].state_current.modelindex]->normalmins, 0.5f, cl.model_precache[cl.entities[ch->entnum].state_current.modelindex]->normalmaxs, ch->origin); + if (ch->entnum >= 32768) + { + // TODO: sounds that follow CSQC entities? + } + else if (cl.entities[ch->entnum].state_current.active) + { + //Con_Printf("-- entnum %i origin %f %f %f neworigin %f %f %f\n", ch->entnum, ch->origin[0], ch->origin[1], ch->origin[2], cl.entities[ch->entnum].state_current.origin[0], cl.entities[ch->entnum].state_current.origin[1], cl.entities[ch->entnum].state_current.origin[2]); + VectorCopy(cl.entities[ch->entnum].state_current.origin, ch->origin); + if (cl.entities[ch->entnum].state_current.modelindex && cl.model_precache[cl.entities[ch->entnum].state_current.modelindex] && cl.model_precache[cl.entities[ch->entnum].state_current.modelindex]->soundfromcenter) + VectorMAMAM(1.0f, ch->origin, 0.5f, cl.model_precache[cl.entities[ch->entnum].state_current.modelindex]->normalmins, 0.5f, cl.model_precache[cl.entities[ch->entnum].state_current.modelindex]->normalmaxs, ch->origin); + } } mastervol = ch->master_vol; @@ -1192,9 +1203,6 @@ int S_StartSound (int entnum, int entchannel, sfx_t *sfx, vec3_t origin, float f if (sfx->fetcher == NULL) return -1; - if (entnum && entnum >= cl.max_entities) - CL_ExpandEntities(entnum); - // Pick a channel to play on target_chan = SND_PickChannel(entnum, entchannel); if (!target_chan) @@ -1524,7 +1532,7 @@ void S_Update(const matrix4x4_t *listenermatrix) return; // If snd_swapstereo or snd_channellayout has changed, recompute the channel layout - if (current_swapstereo != snd_swapstereo.integer || + if (current_swapstereo != boolxor(snd_swapstereo.integer, v_flipped.integer) || current_channellayout != snd_channellayout.integer) S_SetChannelLayout();