diff options
Diffstat (limited to 'engines/sci/sound/drivers')
-rw-r--r-- | engines/sci/sound/drivers/cms.cpp | 19 | ||||
-rw-r--r-- | engines/sci/sound/drivers/mididriver.h | 8 |
2 files changed, 22 insertions, 5 deletions
diff --git a/engines/sci/sound/drivers/cms.cpp b/engines/sci/sound/drivers/cms.cpp index 0f79251ea7..091aab2414 100644 --- a/engines/sci/sound/drivers/cms.cpp +++ b/engines/sci/sound/drivers/cms.cpp @@ -740,7 +740,7 @@ int MidiDriver_CMS::open() { Resource *res = _resMan->findResource(ResourceId(kResourceTypePatch, 101), false); if (!res) return -1; - + _patchData->allocateFromSpan(_version < SCI_VERSION_1_EARLY ? res->subspan(30) : *res); _rate = _mixer->getOutputRate(); @@ -1294,7 +1294,7 @@ void MidiDriver_CMS::generateSamples(int16 *buffer, int len) { class MidiPlayer_CMS : public MidiPlayer { public: - MidiPlayer_CMS(SciVersion version) : MidiPlayer(version) {} + MidiPlayer_CMS(SciVersion version) : MidiPlayer(version), _filesMissing(false) {} int open(ResourceManager *resMan); void close(); @@ -1306,6 +1306,12 @@ public: int getPolyphony() const { return 12; } void playSwitch(bool play) { _driver->property(MidiDriver_CMS::MIDI_PROP_PLAYSWITCH, play ? 1 : 0); } + + const char *reportMissingFiles() { return _filesMissing ? _requiredFiles : 0; } + +private: + bool _filesMissing; + static const char _requiredFiles[]; }; int MidiPlayer_CMS::open(ResourceManager *resMan) { @@ -1314,10 +1320,11 @@ int MidiPlayer_CMS::open(ResourceManager *resMan) { _driver = new MidiDriver_CMS(g_system->getMixer(), resMan, _version); int driverRetVal = _driver->open(); - if (driverRetVal != 0) - return driverRetVal; - return 0; + if (driverRetVal == -1) + _filesMissing = true; + + return driverRetVal; } void MidiPlayer_CMS::close() { @@ -1332,6 +1339,8 @@ void MidiPlayer_CMS::initTrack(SciSpan<const byte>& header) { static_cast<MidiDriver_CMS*>(_driver)->initTrack(header); } +const char MidiPlayer_CMS::_requiredFiles[] = "'PATCH.101'"; + MidiPlayer *MidiPlayer_CMS_create(SciVersion version) { return new MidiPlayer_CMS(version); } diff --git a/engines/sci/sound/drivers/mididriver.h b/engines/sci/sound/drivers/mididriver.h index 73c2fd5737..de87d9dbdb 100644 --- a/engines/sci/sound/drivers/mididriver.h +++ b/engines/sci/sound/drivers/mididriver.h @@ -126,6 +126,14 @@ public: // Some drivers also do other things in here. virtual void initTrack(SciSpan<const byte> &) {} + // There are several sound drivers which weren' part of the + // original game setup and came in the form of aftermarket patches. + // This method allows each driver to report missing patch or other + // required files which will then be displayed in an error dialog box. + // The method returns only a single string (instead of a string list), + // because no more than two files will be required. + virtual const char *reportMissingFiles() { return 0; } + protected: SciVersion _version; }; |