aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorathrxx2012-01-04 17:53:56 +0100
committerunknown2012-01-06 14:45:38 +0100
commiteaa5d50c3f66865a76a5d20f257061b6b79a88f6 (patch)
treedcfbeb6fc40ace13a0a206c647226528c045acf7
parent6e45741b17ec17ec1c2081557df043d5d4f2ff73 (diff)
downloadscummvm-rg350-eaa5d50c3f66865a76a5d20f257061b6b79a88f6.tar.gz
scummvm-rg350-eaa5d50c3f66865a76a5d20f257061b6b79a88f6.tar.bz2
scummvm-rg350-eaa5d50c3f66865a76a5d20f257061b6b79a88f6.zip
KYRA: (EOB) - add basic distinction between music and sound effects
(The original code of the DOS version does not distinguish here, but we do it anyway so as to make more sense of the GMM volume settings)
-rw-r--r--engines/kyra/chargen.cpp12
-rw-r--r--engines/kyra/eobcommon.cpp19
-rw-r--r--engines/kyra/eobcommon.h2
-rw-r--r--engines/kyra/sequences_darkmoon.cpp43
-rw-r--r--engines/kyra/sequences_eob.cpp42
-rw-r--r--engines/kyra/sound_adlib.cpp2
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() {