diff options
-rw-r--r-- | saga/music.cpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/saga/music.cpp b/saga/music.cpp index bf99444571..4425362263 100644 --- a/saga/music.cpp +++ b/saga/music.cpp @@ -383,26 +383,33 @@ void Music::play(uint32 resourceId, MusicFlags flags) { _player->stopMusic(); _mixer->stopHandle(_musicHandle); + int realTrackNumber; + + if (_vm->getGameType() == GType_ITE) { + if (flags == MUSIC_DEFAULT) { + if (resourceId == 13 || resourceId == 19) { + flags = MUSIC_NORMAL; + } else { + flags = MUSIC_LOOP; + } + } + realTrackNumber = resourceId - 8; + } else { + realTrackNumber = resourceId + 1; + } + // Try to open standalone digital track for (int i = 0; i < ARRAYSIZE(TRACK_FORMATS) - 1; ++i) - if (_track = TRACK_FORMATS[i].openTrackFunction(resourceId - 8)) { + if (_track = TRACK_FORMATS[i].openTrackFunction(realTrackNumber)) { break; } if (_track) { - _track->play(_mixer, &_musicHandle, (MUSIC_LOOP ? -1 : 1), 10000); + _track->play(_mixer, &_musicHandle, (flags == MUSIC_LOOP) ? -1 : 1, 10000); return; } if (_vm->getGameType() == GType_ITE) { if (resourceId >= 9 && resourceId <= 34) { - if (flags == MUSIC_DEFAULT) { - if ((resourceId == 13) || (resourceId == 19)) { - flags = MUSIC_NORMAL; - } else { - flags = MUSIC_LOOP; - } - } - if (_musicContext != NULL) { //TODO: check resource size audioStream = new RAWInputStream(_vm, _musicContext, resourceId - 9, flags == MUSIC_LOOP); |