aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sound/soundcmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/sound/soundcmd.cpp')
-rw-r--r--engines/sci/sound/soundcmd.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/engines/sci/sound/soundcmd.cpp b/engines/sci/sound/soundcmd.cpp
index e8fd20d2e5..0bb295d41e 100644
--- a/engines/sci/sound/soundcmd.cpp
+++ b/engines/sci/sound/soundcmd.cpp
@@ -514,8 +514,19 @@ void SoundCommandParser::processUpdateCues(reg_t obj) {
if (musicSlot->isSample) {
#ifdef ENABLE_SCI32
if (_soundVersion >= SCI_VERSION_2) {
- const int position = g_sci->_audio32->getPosition(ResourceId(kResourceTypeAudio, musicSlot->resourceId), musicSlot->soundObj);
+ const ResourceId audioId = ResourceId(kResourceTypeAudio, musicSlot->resourceId);
+
+ if (getSciVersion() == SCI_VERSION_3) {
+ // In SSCI the volume is first set to -1 and then reset later if
+ // a sample is playing in the audio player, but since our audio
+ // code returns -1 for not-found samples, the extra check is not
+ // needed and we can just always set it to the return value of
+ // the getVolume call
+ const int16 volume = g_sci->_audio32->getVolume(audioId, musicSlot->soundObj);
+ writeSelectorValue(_segMan, musicSlot->soundObj, SELECTOR(vol), volume);
+ }
+ const int16 position = g_sci->_audio32->getPosition(audioId, musicSlot->soundObj);
if (position == -1) {
processStopSound(musicSlot->soundObj, true);
}