diff --git a/src/menus/transient/sound-test.c b/src/menus/transient/sound-test.c index 946ac6aaf..78322d791 100644 --- a/src/menus/transient/sound-test.c +++ b/src/menus/transient/sound-test.c @@ -15,7 +15,7 @@ static void M_SoundTestMainControl(INT32 choice) { soundtest.playing = true; //soundtest.sequence = true; - S_UpdateSoundTestDef(false, false); + S_UpdateSoundTestDef(false, false, false); } else if (cv_soundtest.value != 0) { @@ -44,7 +44,7 @@ static void M_SoundTestNextPrev(INT32 choice) { (void)choice; - S_UpdateSoundTestDef((currentMenu->menuitems[itemOn].mvar1 < 0), false); + S_UpdateSoundTestDef((currentMenu->menuitems[itemOn].mvar1 < 0), true, false); } static void M_SoundTestTrack(INT32 choice) diff --git a/src/s_sound.c b/src/s_sound.c index a837cbf33..6f9fea5fd 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -1475,7 +1475,7 @@ static boolean S_SoundTestDefLocked(musicdef_t *def) return M_MapLocked(def->sequence.map+1); } -void S_UpdateSoundTestDef(boolean reverse, boolean skipnull) +void S_UpdateSoundTestDef(boolean reverse, boolean dotracks, boolean skipnull) { musicdef_t *newdef; @@ -1483,6 +1483,13 @@ void S_UpdateSoundTestDef(boolean reverse, boolean skipnull) if (reverse == false) { + if (dotracks == true && soundtest.current != NULL + && soundtest.currenttrack < soundtest.current->numtracks-1) + { + soundtest.currenttrack++; + goto updatetrackonly; + } + newdef = (soundtest.current != NULL) ? soundtest.current->sequence.next : soundtest.sequence.next; @@ -1499,10 +1506,17 @@ void S_UpdateSoundTestDef(boolean reverse, boolean skipnull) { musicdef_t *def, *lastdef = NULL; + if (dotracks == true && soundtest.current != NULL + && soundtest.currenttrack > 0) + { + soundtest.currenttrack--; + goto updatetrackonly; + } + if (soundtest.current == soundtest.sequence.next && skipnull == false) { - goto conclusion; + goto updatecurrent; } for (def = soundtest.sequence.next; def; def = def->sequence.next) @@ -1522,10 +1536,14 @@ void S_UpdateSoundTestDef(boolean reverse, boolean skipnull) } } -conclusion: +updatecurrent: soundtest.current = newdef; - soundtest.currenttrack = 0; + soundtest.currenttrack = + (reverse == true && dotracks == true && newdef != NULL) + ? newdef->numtracks-1 + : 0; +updatetrackonly: if (soundtest.playing == true) { S_SoundTestPlay(); diff --git a/src/s_sound.h b/src/s_sound.h index b8a20ced3..06286a1b0 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -218,7 +218,7 @@ extern struct soundtest } soundtest; void S_PopulateSoundTestSequence(void); -void S_UpdateSoundTestDef(boolean reverse, boolean skipnull); +void S_UpdateSoundTestDef(boolean reverse, boolean dotracks, boolean skipnull); void S_SoundTestPlay(void); void S_SoundTestStop(boolean pause);