mirror of
https://github.com/fabiangreffrath/woof.git
synced 2025-09-23 03:52:12 -04:00
add parallel same-sound limit from DSDA-Doom (#796)
* add parallel same-sound limit from DSDA-Doom Fixes #546 * remove redundant declaration * rearrange menu item into General menu
This commit is contained in:
parent
6fcb0fe888
commit
d7849c8fa7
@ -3710,7 +3710,6 @@ enum {
|
||||
// [FG] uncapped rendering frame rate
|
||||
general_uncapped,
|
||||
general_vsync,
|
||||
general_stub1,
|
||||
general_trans,
|
||||
general_transpct,
|
||||
general_gamma,
|
||||
@ -3718,6 +3717,7 @@ enum {
|
||||
|
||||
general_title2,
|
||||
general_sndchan,
|
||||
general_parallelsfx,
|
||||
general_pitch,
|
||||
// [FG] play sounds in full length
|
||||
general_fullsnd,
|
||||
@ -3789,8 +3789,6 @@ setup_menu_t gen_settings1[] = { // General Settings screen1
|
||||
{"Vertical Sync", S_YESNO, m_null, M_X,
|
||||
M_Y+ general_vsync*M_SPC, {"use_vsync"}, 0, I_ResetScreen},
|
||||
|
||||
{"", S_SKIP, m_null, M_X, M_Y + general_stub1*M_SPC},
|
||||
|
||||
{"Enable predefined translucency", S_YESNO, m_null, M_X,
|
||||
M_Y+ general_trans*M_SPC, {"translucency"}, 0, M_Trans},
|
||||
|
||||
@ -3808,6 +3806,10 @@ setup_menu_t gen_settings1[] = { // General Settings screen1
|
||||
{"Number of Sound Channels", S_NUM|S_PRGWARN, m_null, M_X,
|
||||
M_Y + general_sndchan*M_SPC, {"snd_channels"}},
|
||||
|
||||
// [FG] parallel same-sound limit from DSDA-Doom
|
||||
{"Parallel Same-Sound Limit", S_YESNO, m_null, M_X,
|
||||
M_Y + general_parallelsfx*M_SPC, {"parallel_sfx"}},
|
||||
|
||||
{"Enable v1.1 Pitch Effects", S_YESNO, m_null, M_X,
|
||||
M_Y + general_pitch*M_SPC, {"pitched_sounds"}},
|
||||
|
||||
|
24
src/m_misc.c
24
src/m_misc.c
@ -1493,7 +1493,7 @@ default_t defaults[] = {
|
||||
{ // killough
|
||||
"snd_channels",
|
||||
(config_t *) &default_numChannels, NULL,
|
||||
{MAX_CHANNELS}, {1, MAX_CHANNELS}, 0, ss_gen, wad_no,
|
||||
{16}, {1, MAX_CHANNELS}, 0, ss_gen, wad_no,
|
||||
"number of sound effects handled simultaneously"
|
||||
},
|
||||
|
||||
@ -2253,6 +2253,28 @@ default_t defaults[] = {
|
||||
"1 to play sounds in full length"
|
||||
},
|
||||
|
||||
// [FG] parallel same-sound limit
|
||||
{
|
||||
"parallel_sfx",
|
||||
(config_t *) ¶llel_sfx, NULL,
|
||||
{0}, {0, 1}, number, ss_gen, wad_no,
|
||||
"1 to enable parallel same-sound limit"
|
||||
},
|
||||
|
||||
{
|
||||
"parallel_sfx_limit",
|
||||
(config_t *) ¶llel_sfx_limit, NULL,
|
||||
{2}, {0, 32}, number, ss_none, wad_no,
|
||||
"parallel same-sound limit"
|
||||
},
|
||||
|
||||
{
|
||||
"parallel_sfx_window",
|
||||
(config_t *) ¶llel_sfx_window, NULL,
|
||||
{4}, {1, 32}, number, ss_none, wad_no,
|
||||
"parallel same-sound limit window"
|
||||
},
|
||||
|
||||
// [FG] music backend
|
||||
{
|
||||
"midi_player",
|
||||
|
@ -276,6 +276,27 @@ static int S_getChannel(const mobj_t *origin, sfxinfo_t *sfxinfo,
|
||||
return cnum;
|
||||
}
|
||||
|
||||
// [FG] parallel same-sound limit from DSDA-Doom
|
||||
|
||||
boolean parallel_sfx;
|
||||
int parallel_sfx_limit;
|
||||
int parallel_sfx_window;
|
||||
|
||||
static boolean BlockSFX(sfxinfo_t *sfx)
|
||||
{
|
||||
if (!parallel_sfx)
|
||||
return false;
|
||||
|
||||
if (gametic - sfx->parallel_tic >= parallel_sfx_window)
|
||||
{
|
||||
sfx->parallel_tic = gametic;
|
||||
sfx->parallel_count = 0;
|
||||
}
|
||||
|
||||
++sfx->parallel_count;
|
||||
|
||||
return sfx->parallel_count > parallel_sfx_limit;
|
||||
}
|
||||
|
||||
void S_StartSound(const mobj_t *origin, int sfx_id)
|
||||
{
|
||||
@ -342,6 +363,10 @@ void S_StartSound(const mobj_t *origin, int sfx_id)
|
||||
sep = NORM_SEP;
|
||||
}
|
||||
|
||||
// [FG] parallel same-sound limit from DSDA-Doom
|
||||
if (BlockSFX(sfx))
|
||||
return;
|
||||
|
||||
if(pitched_sounds)
|
||||
{
|
||||
// hacks to vary the sfx pitches
|
||||
|
@ -78,8 +78,16 @@ typedef struct sfxinfo_struct {
|
||||
|
||||
// haleyjd 04/23/08: additional caching data
|
||||
unsigned int alen; // length of converted sound pointed to by data
|
||||
|
||||
// [FG] parallel same-sound limit from DSDA-Doom
|
||||
int parallel_tic;
|
||||
int parallel_count;
|
||||
} sfxinfo_t;
|
||||
|
||||
extern boolean parallel_sfx;
|
||||
extern int parallel_sfx_limit;
|
||||
extern int parallel_sfx_window;
|
||||
|
||||
//
|
||||
// MusicInfo struct.
|
||||
//
|
||||
|
Loading…
x
Reference in New Issue
Block a user