aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sound/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/sound/drivers')
-rw-r--r--engines/sci/sound/drivers/cms.cpp19
-rw-r--r--engines/sci/sound/drivers/mididriver.h8
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;
};