From 7e8d970ef53800bc69fbdb7fc8dfa57c11aba18c Mon Sep 17 00:00:00 2001 From: athrxx Date: Sat, 1 May 2021 19:59:49 +0200 Subject: [PATCH] KYRA: change Adlib driver queue to behave more like the original driver (in case of an overflow drop the oldest sound instead of the newest) --- engines/kyra/sound/drivers/adlib.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/engines/kyra/sound/drivers/adlib.cpp b/engines/kyra/sound/drivers/adlib.cpp index c40069ffca1..4b0f7ba3fa0 100644 --- a/engines/kyra/sound/drivers/adlib.cpp +++ b/engines/kyra/sound/drivers/adlib.cpp @@ -449,12 +449,11 @@ void AdLibDriver::startSound(int track, int volume) { if (!trackData) return; - if (_programQueueEnd == _programQueueStart && _programQueue[_programQueueEnd].data != 0) { - // Don't warn when dropping tracks in EoB. The queue is always full there if a couple of monsters are around. - if (_version >= 3) - warning("AdLibDriver: Program queue full, dropping track %d", track); - return; - } + // We used to drop the new sound here, but that isn't the behavior of the original code. + // It would cause more issues than do any good. Now, we just have a debug message and + // then drop the oldest sound, like the original driver... + if (_programQueueEnd == _programQueueStart && _programQueue[_programQueueEnd].data != 0) + debugC(3, kDebugLevelSound, "AdLibDriver: Program queue full, dropping track %d", _programQueue[_programQueueEnd].id); _programQueue[_programQueueEnd] = QueueEntry(trackData, track, volume); ++_programQueueEnd &= 15;