diff options
-rw-r--r-- | engines/kyra/chargen.cpp | 12 | ||||
-rw-r--r-- | engines/kyra/eobcommon.cpp | 19 | ||||
-rw-r--r-- | engines/kyra/eobcommon.h | 2 | ||||
-rw-r--r-- | engines/kyra/sequences_darkmoon.cpp | 43 | ||||
-rw-r--r-- | engines/kyra/sequences_eob.cpp | 42 | ||||
-rw-r--r-- | engines/kyra/sound_adlib.cpp | 2 |
6 files changed, 65 insertions, 55 deletions
diff --git a/engines/kyra/chargen.cpp b/engines/kyra/chargen.cpp index 91a90407b1..ed761e53c6 100644 --- a/engines/kyra/chargen.cpp +++ b/engines/kyra/chargen.cpp @@ -171,7 +171,7 @@ bool CharacterGenerator::start(EoBCharacter *characters, uint8 ***faceShapes) { checkForCompleteParty(); initButtonsFromList(0, 5); - _vm->sound()->playTrack(_vm->game() == GI_EOB1 ? 20 : 13); + _vm->snd_playSong(_vm->game() == GI_EOB1 ? 20 : 13); _activeBox = 0; for (bool loop = true; loop && (!_vm->shouldQuit());) { @@ -186,7 +186,7 @@ bool CharacterGenerator::start(EoBCharacter *characters, uint8 ***faceShapes) { _activeBox ^= 2; } else if (inputFlag == _vm->_keyMap[Common::KEYCODE_ESCAPE]) { // Unlike the original we allow returning to the main menu - _vm->sound()->haltTrack(); + _vm->snd_stopSound(); return false; } _vm->_gui->updateBoxFrameHighLight(-1); @@ -232,7 +232,7 @@ bool CharacterGenerator::start(EoBCharacter *characters, uint8 ***faceShapes) { } if (_vm->game() == GI_EOB2) - _vm->sound()->playTrack(15); + _vm->snd_fadeOut(); *faceShapes = _faceShapes; return true; @@ -372,7 +372,7 @@ void CharacterGenerator::toggleSpecialButton(int index, int bodyCustom, int page void CharacterGenerator::processSpecialButton(int index) { toggleSpecialButton(index, 1, 0); - _vm->sound()->playSoundEffect(76); + _vm->snd_playSoundEffect(76); _vm->_system->delayMillis(80); toggleSpecialButton(index, 0, 0); } @@ -598,13 +598,13 @@ int CharacterGenerator::alignmentMenu(int cClass) { int CharacterGenerator::getInput(Button *buttonList) { if (_vm->game() == GI_EOB1 && _vm->sound()->checkTrigger()) { _vm->sound()->resetTrigger(); - _vm->sound()->playTrack(20); + _vm->snd_playSong(20); } else if (_vm->game() == GI_EOB2 && !_vm->sound()->isPlaying()) { // WORKAROUND for EOB II: The original implements the same sound trigger check as in EOB I. // However, Westwood seems to have forgotten to set the trigger at the end of the AdLib song, // so that the music will not loop. We simply check whether the sound driver is still playing. _vm->delay(3 * _vm->_tickLength); - _vm->sound()->playTrack(13); + _vm->snd_playSong(13); } return _vm->checkInput(buttonList, false, 0); } diff --git a/engines/kyra/eobcommon.cpp b/engines/kyra/eobcommon.cpp index c7d8ed566f..e45bad6d72 100644 --- a/engines/kyra/eobcommon.cpp +++ b/engines/kyra/eobcommon.cpp @@ -1403,7 +1403,7 @@ void EoBCoreEngine::restoreAfterDialogueSequence() { _screen->setScreenDim(7); if (_flags.gameID == GI_EOB2) - _sound->playTrack(2); + snd_playSoundEffect(2); _sceneUpdateRequired = true; } @@ -2377,15 +2377,24 @@ void EoBCoreEngine::explodeMonster(EoBMonsterInPlay *m) { m->flags &= ~2; } -void EoBCoreEngine::snd_playSoundEffect(int id, int volume) { - if ((id < 1) || (_flags.gameID == GI_EOB2 && id > 119) || shouldQuit()) +void EoBCoreEngine::snd_playSong(int track) { + _sound->playTrack(track); +} + +void EoBCoreEngine::snd_playSoundEffect(int track, int volume) { + if ((track < 1) || (_flags.gameID == GI_EOB2 && track > 119) || shouldQuit()) return; - _sound->playSoundEffect(id, volume); + _sound->playSoundEffect(track, volume); } void EoBCoreEngine::snd_stopSound() { - _sound->playSoundEffect(0); + _sound->haltTrack(); + _sound->stopAllSoundEffects(); +} + +void EoBCoreEngine::snd_fadeOut() { + _sound->beginFadeOut(); } } // End of namespace Kyra diff --git a/engines/kyra/eobcommon.h b/engines/kyra/eobcommon.h index e7b3a7357a..851c52076b 100644 --- a/engines/kyra/eobcommon.h +++ b/engines/kyra/eobcommon.h @@ -1127,8 +1127,10 @@ protected: const uint8 *_numSpellsMage; // sound + void snd_playSong(int id); void snd_playSoundEffect(int id, int volume=0xFF); void snd_stopSound(); + void snd_fadeOut(); // keymap static const char *const kKeymapName; diff --git a/engines/kyra/sequences_darkmoon.cpp b/engines/kyra/sequences_darkmoon.cpp index c72bf58f9b..516c71e626 100644 --- a/engines/kyra/sequences_darkmoon.cpp +++ b/engines/kyra/sequences_darkmoon.cpp @@ -177,7 +177,7 @@ void DarkMoonEngine::seq_playIntro() { sq.delay(1); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(12); + snd_playSong(12); _screen->copyRegion(0, 0, 8, 8, 304, 128, 2, 0, Screen::CR_NO_P_CHECK); sq.setPalette(9); @@ -447,18 +447,17 @@ void DarkMoonEngine::seq_playIntro() { sq.waitForSongNotifier(8, true); if (skipFlag() || shouldQuit()) { - _sound->playTrack(15); + snd_fadeOut(); } else { _screen->setScreenDim(17); _screen->clearCurDim(); - _sound->playTrack(14); + snd_playSoundEffect(14); sq.fadePalette(10, 1); _screen->setClearScreenDim(18); sq.delay(6); sq.fadePalette(9, 1); _screen->clearCurPage(); } - sq.fadePalette(9, 10); } @@ -479,7 +478,7 @@ void DarkMoonEngine::seq_playFinale() { sq.delay(18); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(1); + snd_playSong(1); sq.update(2); sq.loadScene(1, 2); @@ -603,7 +602,7 @@ void DarkMoonEngine::seq_playFinale() { sq.waitForSongNotifier(3); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(7); + snd_playSoundEffect(7); sq.delay(8); sq.runSequence(10); @@ -635,7 +634,7 @@ void DarkMoonEngine::seq_playFinale() { sq.waitForSongNotifier(4); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(7); + snd_playSoundEffect(7); sq.delay(8); sq.runSequence(10); @@ -660,7 +659,7 @@ void DarkMoonEngine::seq_playFinale() { sq.delay(36); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(11); + snd_playSoundEffect(11); sq.delay(54); sq.fadeText(); @@ -669,7 +668,7 @@ void DarkMoonEngine::seq_playFinale() { sq.waitForSongNotifier(5); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(6); + snd_playSoundEffect(6); if (!skipFlag() && !shouldQuit()) _screen->crossFadeRegion(0, 0, 8, 8, 304, 128, 2, 0); @@ -680,7 +679,7 @@ void DarkMoonEngine::seq_playFinale() { sq.runSequence(19); sq.runSequence(19, 36); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(12); + snd_playSoundEffect(12); sq.fadeText(); sq.printText(17, 15); // Thank you @@ -690,12 +689,12 @@ void DarkMoonEngine::seq_playFinale() { sq.printText(18, 15); // You have earned my deepest respect if (!skipFlag() && !shouldQuit()) - _sound->playTrack(11); + snd_playSoundEffect(11); sq.runSequence(20); sq.runSequence(19); sq.runSequence(19); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(11); + snd_playSoundEffect(11); sq.delay(36); sq.fadeText(); @@ -703,37 +702,37 @@ void DarkMoonEngine::seq_playFinale() { sq.runSequence(19); sq.runSequence(19, 18); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(11); + snd_playSoundEffect(11); sq.runSequence(20, 18); sq.fadeText(); sq.delay(28); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(12); + snd_playSoundEffect(12); sq.delay(3); sq.loadScene(5, 2); if (skipFlag() || shouldQuit()) { _screen->copyRegion(0, 0, 8, 8, 304, 128, 2, 0, Screen::CR_NO_P_CHECK); } else { - _sound->playTrack(6); + snd_playSoundEffect(6); _screen->crossFadeRegion(0, 0, 8, 8, 304, 128, 2, 0); } if (!skipFlag() && !shouldQuit()) - _sound->playTrack(12); + snd_playSoundEffect(12); sq.delay(5); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(11); + snd_playSoundEffect(11); sq.delay(11); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(12); + snd_playSoundEffect(12); sq.delay(7); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(11); + snd_playSoundEffect(11); sq.delay(12); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(12); + snd_playSoundEffect(12); removeInputTop(); resetSkipFlag(true); @@ -747,7 +746,7 @@ void DarkMoonEngine::seq_playFinale() { sq.delay(18); if (!skipFlag() && !shouldQuit()) - _sound->playTrack(1); + snd_playSong(1); seq_playCredits(&sq, _creditsData, 18, 2, 6, 2); @@ -1121,7 +1120,7 @@ void DarkmoonSequenceHelper::runSequence(int index, int del) { case 6: // play sound effect if (s->obj != 0xff) - _vm->sound()->playSoundEffect(s->obj); + _vm->snd_playSoundEffect(s->obj); break; default: diff --git a/engines/kyra/sequences_eob.cpp b/engines/kyra/sequences_eob.cpp index dc479a8c30..9f54306d59 100644 --- a/engines/kyra/sequences_eob.cpp +++ b/engines/kyra/sequences_eob.cpp @@ -112,7 +112,7 @@ void EoBEngine::seq_playOpeningCredits() { _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0, Screen::CR_NO_P_CHECK); _screen->updateScreen(); - _sound->playTrack(1); + snd_playSong(1); delay(_introOpeningFrmDelay[0] * _tickLength); for (int i = 0; i < 4 && !shouldQuit() && !skipFlag(); i++) { @@ -129,7 +129,7 @@ void EoBEngine::seq_playIntro() { _allowSkip = true; if (!shouldQuit() && !skipFlag()) { - _sound->playTrack(2); + snd_playSong(2); _screen->loadBitmap("TITLE-V.CMP", 5, 3, 0); _screen->crossFadeRegion(0, 0, 0, 0, 320, 200, 2, 0); delay(120 * _tickLength); @@ -295,7 +295,7 @@ void EoBEngine::seq_orb() { _screen->copyPage(3, 4); _screen->clearCurPage(); - _sound->playTrack(6); + snd_playSoundEffect(6); for (int i = -1; i < 4 && !shouldQuit() && !skipFlag(); i++) { uint32 end = _system->getMillis() + 3 * _tickLength; @@ -311,7 +311,7 @@ void EoBEngine::seq_orb() { _screen->updateScreen(); delay(40 * _tickLength); - _sound->playTrack(6); + snd_playSoundEffect(6); for (int i = 3; i > -2 && !shouldQuit() && !skipFlag(); i--) { uint32 end = _system->getMillis() + 3 * _tickLength; @@ -350,7 +350,7 @@ void EoBEngine::seq_waterdeepEntry() { _screen->copyPage(3, 4); _screen->fillRect(0, 168, 319, 199, 12, 0); - _sound->playTrack(6); + snd_playSoundEffect(6); for (int i = 0; i < 4 && !shouldQuit() && !skipFlag(); i++) { uint32 end = _system->getMillis() + 3 * _tickLength; @@ -415,7 +415,7 @@ void EoBEngine::seq_waterdeepEntry() { } if (!(_rnd.getRandomNumber(255) & 7)) - _sound->playTrack(_rnd.getRandomBit() ? 5 : 14); + snd_playSoundEffect(_rnd.getRandomBit() ? 5 : 14); _screen->updateScreen(); delayUntil(end); @@ -502,7 +502,7 @@ void EoBEngine::seq_king() { } if (!(_rnd.getRandomNumber(255) & 3)) - _sound->playTrack(7); + snd_playSoundEffect(7); _screen->updateScreen(); delayUntil(end); @@ -534,7 +534,7 @@ void EoBEngine::seq_hands() { _screen->updateScreen(); delay(15 * _tickLength); - _sound->playTrack(11); + snd_playSoundEffect(11); for (int i = -22; i <= 20 && !shouldQuit() && !skipFlag(); i += 4) { uint32 end = _system->getMillis() + _tickLength; @@ -546,7 +546,7 @@ void EoBEngine::seq_hands() { delayUntil(end); } - _sound->playTrack(10); + snd_playSoundEffect(10); delete[] shp1; delete[] shp2; @@ -574,7 +574,7 @@ void EoBEngine::seq_hands() { delayUntil(end); } - _sound->playTrack(12); + snd_playSoundEffect(12); delay(5 * _tickLength); for (int i = 0; i > -54 && !shouldQuit() && !skipFlag(); i -= 4) { @@ -602,7 +602,7 @@ void EoBEngine::seq_hands() { _screen->drawShape(2, shp2, 52, 49, 0); boxMorphTransition(9, 6, 0, 0, 0, 0, 18, 12, 8, 11, 21, 10); delay(15 * _tickLength); - _sound->playTrack(11); + snd_playSoundEffect(11); for (int i = -56; i <= -8 && !shouldQuit() && !skipFlag(); i += 4) { uint32 end = _system->getMillis() + _tickLength; @@ -614,7 +614,7 @@ void EoBEngine::seq_hands() { delayUntil(end); } - _sound->playTrack(10); + snd_playSoundEffect(10); delete[] shp1; delete[] shp2; delay(30 * _tickLength); @@ -640,7 +640,7 @@ void EoBEngine::seq_hands() { dy -= 5; } - _sound->playTrack(13); + snd_playSoundEffect(13); for (int i = -40; i <= 0 && !shouldQuit() && !skipFlag(); i += 4) { uint32 end = _system->getMillis() + _tickLength; @@ -701,7 +701,7 @@ void EoBEngine::seq_waterdeepExit() { } if (!(_rnd.getRandomNumber(255) & 7)) - _sound->playTrack(_rnd.getRandomBit() ? 5 : 14); + snd_playSoundEffect(_rnd.getRandomBit() ? 5 : 14); _screen->updateScreen(); delayUntil(end); @@ -742,7 +742,7 @@ void EoBEngine::seq_waterdeepExit() { delayUntil(end); } - _sound->playTrack(3); + snd_playSong(3); delay(60 * _tickLength); for (int i = 0; i < 56 && !shouldQuit() && !skipFlag(); i++) { @@ -787,11 +787,11 @@ void EoBEngine::seq_tunnel() { for (int i = 0; i < 3 && !shouldQuit() && !skipFlag(); i++) { uint32 end = _system->getMillis() + 8 * _tickLength; _screen->copyRegion(0, 0, 80, 32, 160, 120, 4, 0, Screen::CR_NO_P_CHECK); - _sound->playTrack(7); + snd_playSoundEffect(7); _screen->updateScreen(); delayUntil(end); _screen->copyRegion(0, 0, 80, 32, 160, 120, 2, 0, Screen::CR_NO_P_CHECK); - _sound->playTrack(7); + snd_playSoundEffect(7); end = _system->getMillis() + 8 * _tickLength; _screen->updateScreen(); delayUntil(end); @@ -820,11 +820,11 @@ void EoBEngine::seq_tunnel() { delay(40 * _tickLength); _screen->copyRegion(264, 0, 136, 56, 48, 48, 4, 0, Screen::CR_NO_P_CHECK); - _sound->playTrack(8); + snd_playSoundEffect(8); _screen->copyRegion(0, 0, 0, 0, 320, 184, 0, 2, Screen::CR_NO_P_CHECK); _screen->updateScreen(); delay(16 * _tickLength); - _sound->playTrack(4); + snd_playSoundEffect(4); for (int i = 0; i < 30 && !shouldQuit() && !skipFlag(); i++) { uint32 end = _system->getMillis() + _tickLength; @@ -835,7 +835,7 @@ void EoBEngine::seq_tunnel() { delayUntil(end); } - _sound->playTrack(9); + snd_playSoundEffect(9); for (int i = 0; i < 6 && !shouldQuit() && !skipFlag(); i++) { uint32 end = _system->getMillis() + _tickLength; @@ -853,7 +853,7 @@ void EoBEngine::seq_tunnel() { _screen->loadBitmap(_introFilesTunnel[1], 5, 3, 0); _screen->copyPage(3, 4); - _sound->playTrack(6); + snd_playSoundEffect(6); _screen->copyRegion(0, 0, 80, 32, 160, 120, 4, 0, Screen::CR_NO_P_CHECK); _screen->updateScreen(); delay(2 * _tickLength); diff --git a/engines/kyra/sound_adlib.cpp b/engines/kyra/sound_adlib.cpp index cce18b5ea4..668e662413 100644 --- a/engines/kyra/sound_adlib.cpp +++ b/engines/kyra/sound_adlib.cpp @@ -2405,7 +2405,7 @@ void SoundAdLibPC::play(uint8 track, uint8 volume) { } void SoundAdLibPC::beginFadeOut() { - play(1, 0xff); + play(_version > 2 ? 1 : 15, 0xff); } int SoundAdLibPC::checkTrigger() { |