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:
Fabian Greffrath 2022-11-14 09:14:23 +01:00 committed by GitHub
parent 6fcb0fe888
commit d7849c8fa7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 61 additions and 4 deletions

View File

@ -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"}},

View File

@ -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 *) &parallel_sfx, NULL,
{0}, {0, 1}, number, ss_gen, wad_no,
"1 to enable parallel same-sound limit"
},
{
"parallel_sfx_limit",
(config_t *) &parallel_sfx_limit, NULL,
{2}, {0, 32}, number, ss_none, wad_no,
"parallel same-sound limit"
},
{
"parallel_sfx_window",
(config_t *) &parallel_sfx_window, NULL,
{4}, {1, 32}, number, ss_none, wad_no,
"parallel same-sound limit window"
},
// [FG] music backend
{
"midi_player",

View File

@ -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

View File

@ -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.
//