return;
}
- // TODO currently the only flag defined in the interface is
- // SOUNDFLAG_RELIABLE. This one makes no sense at all from CSQC.
- // We want to, in a later extension, expose more flags.
-
CL_VM_GetEntitySoundOrigin(MAX_EDICTS + PRVM_NUM_FOR_EDICT(entity), org);
S_StartSound_StartPosition_Flags(MAX_EDICTS + PRVM_NUM_FOR_EDICT(entity), channel, S_FindName(sample), org, volume, attenuation, startposition, flags, pitchchange > 0.0f ? pitchchange * 0.01f : 1.0f);
}
int S_StartSound_StartPosition_Flags (int entnum, int entchannel, sfx_t *sfx, vec3_t origin, float fvol, float attenuation, float startposition, int flags, float fspeed)
{
channel_t *target_chan, *check, *ch;
- int ch_idx, startpos;
+ int ch_idx, startpos, i;
if (snd_renderbuffer == NULL || sfx == NULL || nosound.integer)
return -1;
{
S_SetChannelVolume(ch_idx, fvol);
S_SetChannelSpeed(ch_idx, fspeed);
+ for(i = 1; i > 0 && (i <= flags || i <= (int) channels[ch_idx].flags); i <<= 1)
+ if((flags ^ channels[ch_idx].flags) & i)
+ S_SetChannelFlag(ch_idx, i, flags & i);
ch->distfade = attenuation / snd_soundradius.value;
SND_Spatialize(ch, false);
return ch_idx;
#define DEFAULT_SOUND_PACKET_ATTENUATION 1.0
// Channel flags
-#define CHANNELFLAG_NONE 0
-#define CHANNELFLAG_FORCELOOP (1 << 0) // force looping even if the sound is not looped
-#define CHANNELFLAG_LOCALSOUND (1 << 1) // INTERNAL USE. Not settable by S_SetChannelFlag
-#define CHANNELFLAG_PAUSED (1 << 2)
-#define CHANNELFLAG_FULLVOLUME (1 << 3) // isn't affected by the general volume
-
+// These channel flags can be used for sound() builtins, with SOUNDFLAG_* names
+#define CHANNELFLAG_NONE 0
+#define CHANNELFLAG_RELIABLE (1 << 0) // send as reliable message (only used on server)
+#define CHANNELFLAG_FORCELOOP (1 << 1) // force looping even if the sound is not looped
+#define CHANNELFLAG_LOCALSOUND (1 << 2) // INTERNAL USE. Not settable by S_SetChannelFlag
+#define CHANNELFLAG_PAUSED (1 << 3) // pause status
+#define CHANNELFLAG_FULLVOLUME (1 << 4) // isn't affected by the general volume
// ====================================================================
// Types and variables
qboolean S_IsSoundPrecached (const sfx_t *sfx);
sfx_t *S_FindName(const char *name);
-// for sound() builtins
-#define SOUNDFLAG_RELIABLE 1
-
// these define the "engine" channel namespace
#define CHAN_MIN_AUTO -128
#define CHAN_MAX_AUTO 0
flags = 0;
if(channel >= 8 && channel <= 15) // weird QW feature
{
- flags |= SOUNDFLAG_RELIABLE;
+ flags |= CHANNELFLAG_RELIABLE;
channel -= 8;
}
}
return;
}
- SV_StartSound (entity, channel, sample, volume, attenuation, flags & SOUNDFLAG_RELIABLE, pitchchange);
+ SV_StartSound (entity, channel, sample, volume, attenuation, flags & CHANNELFLAG_RELIABLE, pitchchange);
}
/*