diff options
Diffstat (limited to 'scumm/resource.cpp')
-rw-r--r-- | scumm/resource.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/scumm/resource.cpp b/scumm/resource.cpp index cf20931e8c..8b9087c35b 100644 --- a/scumm/resource.cpp +++ b/scumm/resource.cpp @@ -848,6 +848,7 @@ int Scumm::readSoundResource(int type, int idx) { // Specifies a seperate file to be used for music from what I gather. int tmpsize; int i = 0; + File dmuFile; char buffer[128]; debug(1, "Found base tag FMUS in sound %d, size %d", idx, total_size); debug(1, "It was at position %d", _fileHandle.pos()); @@ -861,15 +862,23 @@ int Scumm::readSoundResource(int type, int idx) { tmpsize = _fileHandle.readUint32BE(); // SDAT contains name of file we want - do { + for (i = 0; (buffer[i] != ' ') && (i < tmpsize - 8) ; i++) { buffer[i] = _fileHandle.readByte(); - i++; - } while (i < tmpsize && i < 128 && buffer[i] != ' '); - buffer[i] = '\0'; + } + buffer[tmpsize - 11] = '\0'; debug(1, "FMUS file %s", buffer); - - res.roomoffs[type][idx] = 0xFFFFFFFF; - return 0; + if (dmuFile.open(buffer, getGameDataPath()) == false) { + warning("Can't open music file %s*", buffer); + res.roomoffs[type][idx] = 0xFFFFFFFF; + return 0; + } + dmuFile.seek(4, SEEK_SET); + total_size = dmuFile.readUint32BE(); + debug(1, "dmu file size %d", total_size); + dmuFile.seek(-8, SEEK_CUR); + dmuFile.read(createResource(type, idx, total_size), total_size); + dmuFile.close(); + return 1; } else if (basetag == MKID('Crea')) { _fileHandle.seek(-12, SEEK_CUR); total_size = _fileHandle.readUint32BE(); |