aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/resource.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/engines/sci/resource.cpp b/engines/sci/resource.cpp
index b02c05c2bf..0ec446f141 100644
--- a/engines/sci/resource.cpp
+++ b/engines/sci/resource.cpp
@@ -1948,8 +1948,12 @@ int SoundResource::getChannelFilterMask(int hardwareMask) {
reverseHardwareMask = 0x08;
break;
}
- // Control-Channel -> where bit 0 is not set, bit 3 is set
data++; // Skip over digital sample flag
+ // Now all 16 channels follow. Each one is specified by a single byte
+ // Upper 4 bits of the byte is a voices count
+ // Lower 4 bits -> bit 0 means use as Adlib driver
+ // bit 1 means use as PCjr driver
+ // bit 3 means is control channel (bit 0 needs to be unset)
for (int channelNr = 0; channelNr < 16; channelNr++) {
channelMask = channelMask >> 1;
if (*data & hardwareMask) {
@@ -1969,6 +1973,9 @@ int SoundResource::getChannelFilterMask(int hardwareMask) {
case SCI_VERSION_0_LATE:
data++; // Skip over digital sample flag
+ // Now all 16 channels follow. Each one is specified by 2 bytes
+ // 1st byte is voices count
+ // 2nd byte is play-mask which specifies if the channel is supposed to get played by the corresponding hardware
for (int channelNr = 0; channelNr < 16; channelNr++) {
data++;
channelMask = channelMask >> 1;