diff options
-rw-r--r-- | engines/kyra/script_tim.cpp | 4 | ||||
-rw-r--r-- | engines/kyra/sound.h | 1 | ||||
-rw-r--r-- | engines/kyra/sound_midi.cpp | 35 |
3 files changed, 24 insertions, 16 deletions
diff --git a/engines/kyra/script_tim.cpp b/engines/kyra/script_tim.cpp index 9b215b2c03..b10a6adbba 100644 --- a/engines/kyra/script_tim.cpp +++ b/engines/kyra/script_tim.cpp @@ -559,7 +559,11 @@ int TIMInterpreter::cmd_playVocFile(const uint16 *param) { int TIMInterpreter::cmd_loadSoundFile(const uint16 *param) { const char *file = (const char *)(_currentTim->text + READ_LE_UINT16(_currentTim->text + (param[0]<<1))); + _vm->sound()->loadSoundFile(file); + if (_vm->gameFlags().gameID == GI_LOL) + _vm->sound()->loadSfxFile(file); + return 1; } diff --git a/engines/kyra/sound.h b/engines/kyra/sound.h index 5b8e82bcc4..84aebcf363 100644 --- a/engines/kyra/sound.h +++ b/engines/kyra/sound.h @@ -350,7 +350,6 @@ private: // Midi file related byte *_musicFile, *_sfxFile; - uint32 _musicFileSize, _sfxFileSize; MidiParser *_music; MidiParser *_sfx[3]; diff --git a/engines/kyra/sound_midi.cpp b/engines/kyra/sound_midi.cpp index d611f4b1e2..a1d5b92716 100644 --- a/engines/kyra/sound_midi.cpp +++ b/engines/kyra/sound_midi.cpp @@ -450,7 +450,6 @@ SoundMidiPC::SoundMidiPC(KyraEngine_v1 *vm, Audio::Mixer *mixer, MidiDriver *dri _output = 0; _musicFile = _sfxFile = 0; - _musicFileSize = _sfxFileSize = 0; _music = MidiParser::createParser_XMIDI(); assert(_music); @@ -551,38 +550,44 @@ void SoundMidiPC::loadSoundFile(Common::String file) { for (int i = 0; i < 16; ++i) _output->stopNotesOnChannel(i); - if (_sfxFile != _musicFile) - delete[] _sfxFile; delete[] _musicFile; - - _musicFile = _sfxFile = _vm->resource()->fileData(file.c_str(), &_musicFileSize); - _sfxFileSize = _musicFileSize; + uint32 fileSize = 0; + _musicFile = _vm->resource()->fileData(file.c_str(), &fileSize); _output->setSoundSource(0); - _music->loadMusic(_musicFile, _musicFileSize); + _music->loadMusic(_musicFile, fileSize); _music->stopPlaying(); - for (int i = 0; i < 3; ++i) { - _output->setSoundSource(i+1); - _sfx[i]->loadMusic(_musicFile, _musicFileSize); - _sfx[i]->stopPlaying(); + // Since KYRA1 uses the same file for SFX and Music + // we setup sfx to play from music file as well + if (_vm->gameFlags().gameID == GI_KYRA1) { + for (int i = 0; i < 3; ++i) { + _output->setSoundSource(i+1); + _sfx[i]->loadMusic(_musicFile, fileSize); + _sfx[i]->stopPlaying(); + } } } void SoundMidiPC::loadSfxFile(Common::String file) { Common::StackLock lock(_mutex); + // Kyrandia 1 doesn't use a special sfx file + if (_vm->gameFlags().gameID == GI_KYRA1) + return; + file += _useC55 ? ".C55" : ".XMI"; if (!_vm->resource()->exists(file.c_str())) return; - if (_sfxFile != _musicFile) - delete[] _sfxFile; + delete[] _sfxFile; + + uint32 fileSize = 0; + _sfxFile = _vm->resource()->fileData(file.c_str(), &fileSize); - _sfxFile = _vm->resource()->fileData(file.c_str(), &_sfxFileSize); for (int i = 0; i < 3; ++i) { _output->setSoundSource(i+1); - _sfx[i]->loadMusic(_sfxFile, _sfxFileSize); + _sfx[i]->loadMusic(_sfxFile, fileSize); _sfx[i]->stopPlaying(); } } |