diff options
author | Filippos Karapetis | 2010-06-03 22:00:50 +0000 |
---|---|---|
committer | Filippos Karapetis | 2010-06-03 22:00:50 +0000 |
commit | ddf7449b00d15c5419c667f9df553053e8dc0cec (patch) | |
tree | 61e07a218c34038d7178cf49d8528254faf28db2 | |
parent | 1973bd5a71fc2847b123e0f1d769220210eceba4 (diff) | |
download | scummvm-rg350-ddf7449b00d15c5419c667f9df553053e8dc0cec.tar.gz scummvm-rg350-ddf7449b00d15c5419c667f9df553053e8dc0cec.tar.bz2 scummvm-rg350-ddf7449b00d15c5419c667f9df553053e8dc0cec.zip |
Added code to get which channels are used by a sound. Also, fixed a crash when using Sierra's GM patches, a regression from commit #49391.
svn-id: r49415
-rw-r--r-- | engines/sci/resource.h | 2 | ||||
-rw-r--r-- | engines/sci/resource_audio.cpp | 5 |
2 files changed, 7 insertions, 0 deletions
diff --git a/engines/sci/resource.h b/engines/sci/resource.h index f722ca5768..6d9da3c200 100644 --- a/engines/sci/resource.h +++ b/engines/sci/resource.h @@ -512,6 +512,7 @@ public: Track *getDigitalTrack(); int getChannelFilterMask(int hardwareMask, bool wantsRhythm); byte getInitialVoiceCount(byte channel); + bool isChannelUsed(byte channel) { return _usedChannels[channel]; } private: SciVersion _soundVersion; @@ -519,6 +520,7 @@ private: Track *_tracks; Resource *_innerResource; ResourceManager *_resMan; + bool _usedChannels[16]; }; } // End of namespace Sci diff --git a/engines/sci/resource_audio.cpp b/engines/sci/resource_audio.cpp index b626a25989..6dfd190d97 100644 --- a/engines/sci/resource_audio.cpp +++ b/engines/sci/resource_audio.cpp @@ -151,6 +151,7 @@ void ResourceManager::addNewGMPatch(const Common::String &gameId) { if (!gmPatchFile.empty() && Common::File::exists(gmPatchFile)) { ResourceSource *psrcPatch = new ResourceSource; psrcPatch->source_type = kSourcePatch; + psrcPatch->resourceFile = 0; psrcPatch->location_name = gmPatchFile; processPatch(psrcPatch, kResourceTypePatch, 4); } @@ -467,6 +468,9 @@ SoundResource::SoundResource(uint32 resNumber, ResourceManager *resMan, SciVersi byte *dataEnd; Channel *channel, *sampleChannel; + for (int i = 0; i < 16; i++) + _usedChannels[i] = false; + switch (_soundVersion) { case SCI_VERSION_0_EARLY: case SCI_VERSION_0_LATE: @@ -556,6 +560,7 @@ SoundResource::SoundResource(uint32 resNumber, ResourceManager *resMan, SciVersi channel->data = resource->data + READ_LE_UINT16(data + 2) + 2; channel->size = READ_LE_UINT16(data + 4) - 2; // Not counting channel header channel->number = *(channel->data - 2); + _usedChannels[channel->number] = true; channel->poly = *(channel->data - 1); channel->time = channel->prev = 0; if (channel->number == 0xFE) { // Digital channel |