MOHAWK: Myst: Rewrite the sound code
It now more closely matches the original. Effect sounds are now stopped when resuming background sounds. Fixes #9574, Fixes #9920.
This commit is contained in:
parent
a2fc282e1c
commit
75040819c6
15 changed files with 345 additions and 375 deletions
|
@ -81,7 +81,7 @@ bool MystConsole::Cmd_ChangeCard(int argc, const char **argv) {
|
|||
return true;
|
||||
}
|
||||
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->stopEffect();
|
||||
_vm->changeToCard((uint16)atoi(argv[1]), kTransitionCopy);
|
||||
|
||||
return false;
|
||||
|
@ -169,7 +169,7 @@ bool MystConsole::Cmd_ChangeStack(int argc, const char **argv) {
|
|||
|
||||
// We need to stop any playing sound when we change the stack
|
||||
// as the next card could continue playing it if it.
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->stopEffect();
|
||||
|
||||
uint16 card = 0;
|
||||
if (argc == 3)
|
||||
|
@ -234,7 +234,7 @@ bool MystConsole::Cmd_PlaySound(int argc, const char **argv) {
|
|||
return true;
|
||||
}
|
||||
|
||||
_vm->_sound->replaceSoundMyst((uint16)atoi(argv[1]));
|
||||
_vm->_sound->playEffect((uint16) atoi(argv[1]));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -242,7 +242,7 @@ bool MystConsole::Cmd_PlaySound(int argc, const char **argv) {
|
|||
bool MystConsole::Cmd_StopSound(int argc, const char **argv) {
|
||||
debugPrintf("Stopping Sound\n");
|
||||
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->stopEffect();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -24,10 +24,10 @@ namespace Mohawk {
|
|||
|
||||
#define GAMEOPTION_PLAY_MYST_FLYBY GUIO_GAMEOPTIONS1
|
||||
|
||||
#define GUI_OPTIONS_MYST GUIO3(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOMIDI)
|
||||
#define GUI_OPTIONS_MYST_ME GUIO4(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOMIDI, GAMEOPTION_PLAY_MYST_FLYBY)
|
||||
#define GUI_OPTIONS_MYST GUIO4(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOSPEECH, GUIO_NOMIDI)
|
||||
#define GUI_OPTIONS_MYST_ME GUIO5(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_PLAY_MYST_FLYBY)
|
||||
#define GUI_OPTIONS_MYST_DEMO GUIO4(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOMIDI, GUIO_NOLAUNCHLOAD)
|
||||
#define GUI_OPTIONS_MYST_MAKING_OF GUIO4(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOMIDI, GUIO_NOLAUNCHLOAD)
|
||||
#define GUI_OPTIONS_MYST_MAKING_OF GUIO5(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_NOLAUNCHLOAD)
|
||||
|
||||
#define GUI_OPTIONS_RIVEN GUIO4(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOSPEECH, GUIO_NOMIDI)
|
||||
#define GUI_OPTIONS_RIVEN_DEMO GUIO5(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_NOLAUNCHLOAD)
|
||||
|
|
|
@ -275,11 +275,11 @@ void MohawkEngine_Myst::waitUntilMovieEnds(const VideoEntryPtr &video) {
|
|||
_interactive = true;
|
||||
}
|
||||
|
||||
void MohawkEngine_Myst::playSoundBlocking(uint16 id, byte volume) {
|
||||
void MohawkEngine_Myst::playSoundBlocking(uint16 id) {
|
||||
_interactive = false;
|
||||
_sound->playSound(id, volume);
|
||||
_sound->playEffect(id);
|
||||
|
||||
while (_sound->isPlaying() && !shouldQuit()) {
|
||||
while (_sound->isEffectPlaying() && !shouldQuit()) {
|
||||
doFrame();
|
||||
}
|
||||
_interactive = true;
|
||||
|
@ -472,8 +472,8 @@ void MohawkEngine_Myst::changeToStack(uint16 stack, uint16 card, uint16 linkSrcS
|
|||
else
|
||||
_gfx->clearScreenPalette();
|
||||
|
||||
_sound->stopSound();
|
||||
_sound->stopBackgroundMyst();
|
||||
_sound->stopEffect();
|
||||
_sound->stopBackground();
|
||||
_video->stopVideos();
|
||||
if (linkSrcSound)
|
||||
playSoundBlocking(linkSrcSound);
|
||||
|
@ -1220,7 +1220,7 @@ void MohawkEngine_Myst::dropPage() {
|
|||
bool redPage = page - 7 < 6;
|
||||
|
||||
// Play drop page sound
|
||||
_sound->replaceSoundMyst(800);
|
||||
_sound->playEffect(800);
|
||||
|
||||
// Drop page
|
||||
_gameState->_globals.heldPage = 0;
|
||||
|
@ -1317,13 +1317,13 @@ void MohawkEngine_Myst::applySoundBlock(const MystSoundBlock &block) {
|
|||
debug(2, "Continuing with current sound");
|
||||
else if (soundAction == kMystSoundActionChangeVolume) {
|
||||
debug(2, "Continuing with current sound, changing volume");
|
||||
_sound->changeBackgroundVolumeMyst(soundActionVolume);
|
||||
_sound->changeBackgroundVolume(soundActionVolume);
|
||||
} else if (soundAction == kMystSoundActionStop) {
|
||||
debug(2, "Stopping sound");
|
||||
_sound->stopBackgroundMyst();
|
||||
_sound->stopBackground();
|
||||
} else if (soundAction > 0) {
|
||||
debug(2, "Playing new sound %d", soundAction);
|
||||
_sound->replaceBackgroundMyst(soundAction, soundActionVolume);
|
||||
_sound->playBackground(soundAction, soundActionVolume);
|
||||
} else {
|
||||
error("Unknown sound action %d", soundAction);
|
||||
}
|
||||
|
|
|
@ -232,7 +232,7 @@ public:
|
|||
void playMovieBlockingCentered(const Common::String &filename);
|
||||
void waitUntilMovieEnds(const VideoEntryPtr &video);
|
||||
|
||||
void playSoundBlocking(uint16 id, byte volume = Audio::Mixer::kMaxChannelVolume);
|
||||
void playSoundBlocking(uint16 id);
|
||||
|
||||
GUI::Debugger *getDebugger() override { return _console; }
|
||||
|
||||
|
|
|
@ -640,7 +640,7 @@ void MystAreaSlider::updatePosition(const Common::Point &mouse) {
|
|||
}
|
||||
|
||||
if (positionChanged && _dragSound)
|
||||
_vm->_sound->replaceSoundMyst(_dragSound);
|
||||
_vm->_sound->playEffect(_dragSound);
|
||||
}
|
||||
|
||||
MystAreaDrag::MystAreaDrag(MohawkEngine_Myst *vm, Common::SeekableReadStream *rlstStream, MystArea *parent) :
|
||||
|
|
|
@ -630,12 +630,12 @@ void MystScriptParser::o_playSound(uint16 op, uint16 var, uint16 argc, uint16 *a
|
|||
debugC(kDebugScript, "Opcode %d: playSound", op);
|
||||
debugC(kDebugScript, "\tsoundId: %d", soundId);
|
||||
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
}
|
||||
|
||||
void MystScriptParser::o_stopSoundBackground(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
debugC(kDebugScript, "Opcode %d: stopSoundBackground", op);
|
||||
_vm->_sound->stopBackgroundMyst();
|
||||
_vm->_sound->stopBackground();
|
||||
}
|
||||
|
||||
void MystScriptParser::o_playSoundBlocking(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -644,7 +644,7 @@ void MystScriptParser::o_playSoundBlocking(uint16 op, uint16 var, uint16 argc, u
|
|||
debugC(kDebugScript, "Opcode %d: playSoundBlocking", op);
|
||||
debugC(kDebugScript, "\tsoundId: %d", soundId);
|
||||
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->stopEffect();
|
||||
_vm->playSoundBlocking(soundId);
|
||||
}
|
||||
|
||||
|
@ -729,13 +729,13 @@ void MystScriptParser::o_soundPlaySwitch(uint16 op, uint16 var, uint16 argc, uin
|
|||
debugC(kDebugScript, "\tsoundId: %d", soundId);
|
||||
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
}
|
||||
}
|
||||
|
||||
void MystScriptParser::o_soundResumeBackground(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
debugC(kDebugScript, "Opcode %d: soundResumeBackground", op);
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
}
|
||||
|
||||
void MystScriptParser::o_copyImageToScreen(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -838,7 +838,7 @@ void MystScriptParser::o_changeStack(uint16 op, uint16 var, uint16 argc, uint16
|
|||
debugC(kDebugScript, "\tSource Stack Link Sound: %d", soundIdLinkSrc);
|
||||
debugC(kDebugScript, "\tDestination Stack Link Sound: %d", soundIdLinkDst);
|
||||
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->stopEffect();
|
||||
|
||||
if (_vm->getFeatures() & GF_DEMO) {
|
||||
// No need to have a table for just this data...
|
||||
|
@ -865,7 +865,7 @@ void MystScriptParser::o_changeCardPlaySoundDirectional(uint16 op, uint16 var, u
|
|||
debugC(kDebugScript, "\tanimated update data size: %d", dataSize);
|
||||
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
_vm->changeToCard(cardId, kNoTransition);
|
||||
|
||||
|
@ -884,7 +884,7 @@ void MystScriptParser::o_directionalUpdatePlaySound(uint16 op, uint16 var, uint1
|
|||
debugC(kDebugScript, "\tanimated update data size: %d", dataSize);
|
||||
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
animatedUpdate(dataSize, &argv[3], delayBetweenSteps);
|
||||
}
|
||||
|
@ -907,7 +907,7 @@ void MystScriptParser::o_soundWaitStop(uint16 op, uint16 var, uint16 argc, uint1
|
|||
// Used when Button is pushed...
|
||||
debugC(kDebugScript, "Opcode %d: Wait for foreground sound to finish", op);
|
||||
|
||||
while (_vm->_sound->isPlaying())
|
||||
while (_vm->_sound->isEffectPlaying())
|
||||
_vm->doFrame();
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
#include "mohawk/myst.h"
|
||||
#include "mohawk/resource.h"
|
||||
#include "mohawk/sound.h"
|
||||
|
||||
#include "common/debug.h"
|
||||
|
||||
|
@ -33,13 +34,15 @@
|
|||
namespace Mohawk {
|
||||
|
||||
MystSound::MystSound(MohawkEngine_Myst *vm) :
|
||||
_vm(vm) {
|
||||
_mystBackgroundSound.type = kFreeHandle;
|
||||
_vm(vm),
|
||||
_effectId(0),
|
||||
_speechSamplesPerSecond(0),
|
||||
_backgroundId(0) {
|
||||
}
|
||||
|
||||
MystSound::~MystSound() {
|
||||
stopSound();
|
||||
stopBackgroundMyst();
|
||||
stopEffect();
|
||||
stopBackground();
|
||||
}
|
||||
|
||||
Audio::RewindableAudioStream *MystSound::makeAudioStream(uint16 id, CueList *cueList) {
|
||||
|
@ -49,111 +52,56 @@ Audio::RewindableAudioStream *MystSound::makeAudioStream(uint16 id, CueList *cue
|
|||
return makeMohawkWaveStream(_vm->getResource(ID_MSND, id), cueList);
|
||||
}
|
||||
|
||||
Audio::SoundHandle *MystSound::playSound(uint16 id, byte volume, bool loop, CueList *cueList) {
|
||||
debug (0, "Playing sound %d", id);
|
||||
|
||||
Audio::RewindableAudioStream *rewindStream = makeAudioStream(id, cueList);
|
||||
|
||||
if (rewindStream) {
|
||||
SndHandle *handle = getHandle();
|
||||
handle->type = kUsedHandle;
|
||||
handle->id = id;
|
||||
handle->samplesPerSecond = rewindStream->getRate();
|
||||
|
||||
// Set the stream to loop here if it's requested
|
||||
Audio::AudioStream *audStream = rewindStream;
|
||||
if (loop)
|
||||
audStream = Audio::makeLoopingAudioStream(rewindStream, 0);
|
||||
|
||||
_vm->_mixer->playStream(Audio::Mixer::kPlainSoundType, &handle->handle, audStream, -1, volume);
|
||||
return &handle->handle;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Audio::SoundHandle *MystSound::replaceSoundMyst(uint16 id, byte volume, bool loop) {
|
||||
void MystSound::playEffect(uint16 id, bool loop) {
|
||||
debug (0, "Replacing sound %d", id);
|
||||
|
||||
// The original engine also forces looping for those sounds
|
||||
switch (id) {
|
||||
case 2205:
|
||||
case 2207:
|
||||
case 5378:
|
||||
case 7220:
|
||||
case 9119: // Elevator engine sound in mechanical age is looping.
|
||||
case 9120:
|
||||
case 9327:
|
||||
loop = true;
|
||||
break;
|
||||
case 2205:
|
||||
case 2207:
|
||||
case 5378:
|
||||
case 7220:
|
||||
case 9119: // Elevator engine sound in mechanical age is looping.
|
||||
case 9120:
|
||||
case 9327:
|
||||
loop = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
stopSound();
|
||||
return playSound(id, volume, loop);
|
||||
}
|
||||
stopEffect();
|
||||
|
||||
SndHandle *MystSound::getHandle() {
|
||||
for (uint32 i = 0; i < _handles.size(); i++) {
|
||||
if (_handles[i].type == kFreeHandle)
|
||||
return &_handles[i];
|
||||
|
||||
if (!_vm->_mixer->isSoundHandleActive(_handles[i].handle)) {
|
||||
_handles[i].type = kFreeHandle;
|
||||
_handles[i].id = 0;
|
||||
return &_handles[i];
|
||||
}
|
||||
Audio::RewindableAudioStream *rewindStream = makeAudioStream(id);
|
||||
if (!rewindStream) {
|
||||
warning("Unable to open sound '%d'", id);
|
||||
return;
|
||||
}
|
||||
|
||||
// Let's add a new sound handle!
|
||||
SndHandle handle;
|
||||
handle.handle = Audio::SoundHandle();
|
||||
handle.type = kFreeHandle;
|
||||
handle.id = 0;
|
||||
_handles.push_back(handle);
|
||||
_effectId = id;
|
||||
|
||||
return &_handles[_handles.size() - 1];
|
||||
// Set the stream to loop here if it's requested
|
||||
Audio::AudioStream *audStream = rewindStream;
|
||||
if (loop)
|
||||
audStream = Audio::makeLoopingAudioStream(rewindStream, 0);
|
||||
|
||||
_vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &_effectHandle, audStream);
|
||||
}
|
||||
|
||||
void MystSound::stopSound() {
|
||||
for (uint32 i = 0; i < _handles.size(); i++)
|
||||
if (_handles[i].type == kUsedHandle) {
|
||||
_vm->_mixer->stopHandle(_handles[i].handle);
|
||||
_handles[i].type = kFreeHandle;
|
||||
_handles[i].id = 0;
|
||||
}
|
||||
void MystSound::stopEffect() {
|
||||
_vm->_mixer->stopHandle(_effectHandle);
|
||||
_effectId = 0;
|
||||
_effectHandle = Audio::SoundHandle();
|
||||
}
|
||||
|
||||
void MystSound::stopSound(uint16 id) {
|
||||
for (uint32 i = 0; i < _handles.size(); i++)
|
||||
if (_handles[i].type == kUsedHandle && _handles[i].id == id) {
|
||||
_vm->_mixer->stopHandle(_handles[i].handle);
|
||||
_handles[i].type = kFreeHandle;
|
||||
_handles[i].id = 0;
|
||||
}
|
||||
bool MystSound::isEffectPlaying() {
|
||||
return _vm->_mixer->isSoundHandleActive(_effectHandle);
|
||||
}
|
||||
|
||||
bool MystSound::isPlaying(uint16 id) {
|
||||
for (uint32 i = 0; i < _handles.size(); i++)
|
||||
if (_handles[i].type == kUsedHandle && _handles[i].id == id)
|
||||
return _vm->_mixer->isSoundHandleActive(_handles[i].handle);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MystSound::isPlaying() {
|
||||
for (uint32 i = 0; i < _handles.size(); i++)
|
||||
if (_handles[i].type == kUsedHandle)
|
||||
if (_vm->_mixer->isSoundHandleActive(_handles[i].handle))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
uint MystSound::getNumSamplesPlayed(uint16 id) {
|
||||
for (uint32 i = 0; i < _handles.size(); i++)
|
||||
if (_handles[i].type == kUsedHandle && _handles[i].id == id) {
|
||||
return (_vm->_mixer->getSoundElapsedTime(_handles[i].handle) * _handles[i].samplesPerSecond) / 1000;
|
||||
}
|
||||
uint MystSound::getSpeechNumSamplesPlayed() {
|
||||
if (isSpeechPlaying()) {
|
||||
return (_vm->_mixer->getSoundElapsedTime(_speechHandle) * _speechSamplesPerSecond) / 1000;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -173,10 +121,10 @@ uint16 MystSound::convertMystID(uint16 id) {
|
|||
return id;
|
||||
}
|
||||
|
||||
void MystSound::replaceBackgroundMyst(uint16 id, uint16 volume) {
|
||||
void MystSound::playBackground(uint16 id, uint16 volume) {
|
||||
debug(0, "Replacing background sound with %d", id);
|
||||
|
||||
// TODO: The original engine does fading
|
||||
stopEffect();
|
||||
|
||||
Common::String name = _vm->getResourceName(ID_MSND, convertMystID(id));
|
||||
|
||||
|
@ -188,52 +136,69 @@ void MystSound::replaceBackgroundMyst(uint16 id, uint16 volume) {
|
|||
prefix = name;
|
||||
|
||||
// Check if sound is already playing
|
||||
if (_mystBackgroundSound.type == kUsedHandle && _vm->_mixer->isSoundHandleActive(_mystBackgroundSound.handle)
|
||||
&& _vm->getResourceName(ID_MSND, convertMystID(_mystBackgroundSound.id)).hasPrefix(prefix)) {
|
||||
if (_vm->_mixer->isSoundHandleActive(_backgroundHandle)
|
||||
&& _vm->getResourceName(ID_MSND, convertMystID(_backgroundId)).hasPrefix(prefix)) {
|
||||
// The sound is already playing, just change the volume
|
||||
changeBackgroundVolumeMyst(volume);
|
||||
changeBackgroundVolume(volume);
|
||||
return;
|
||||
}
|
||||
|
||||
// Stop old background sound
|
||||
stopBackgroundMyst();
|
||||
stopBackground();
|
||||
|
||||
// Play new sound
|
||||
Audio::RewindableAudioStream *rewindStream = makeAudioStream(id);
|
||||
|
||||
if (rewindStream) {
|
||||
_mystBackgroundSound.type = kUsedHandle;
|
||||
_mystBackgroundSound.id = id;
|
||||
_mystBackgroundSound.samplesPerSecond = rewindStream->getRate();
|
||||
_backgroundId = id;
|
||||
|
||||
// Set the stream to loop
|
||||
Audio::AudioStream *audStream = Audio::makeLoopingAudioStream(rewindStream, 0);
|
||||
|
||||
_vm->_mixer->playStream(Audio::Mixer::kPlainSoundType, &_mystBackgroundSound.handle, audStream, -1, volume >> 8);
|
||||
_vm->_mixer->playStream(Audio::Mixer::kMusicSoundType, &_backgroundHandle, audStream, -1, volume >> 8);
|
||||
}
|
||||
}
|
||||
|
||||
void MystSound::stopBackgroundMyst() {
|
||||
if (_mystBackgroundSound.type == kUsedHandle) {
|
||||
_vm->_mixer->stopHandle(_mystBackgroundSound.handle);
|
||||
_mystBackgroundSound.type = kFreeHandle;
|
||||
_mystBackgroundSound.id = 0;
|
||||
void MystSound::stopBackground() {
|
||||
_vm->_mixer->stopHandle(_backgroundHandle);
|
||||
_backgroundId = 0;
|
||||
_backgroundHandle = Audio::SoundHandle();
|
||||
}
|
||||
|
||||
void MystSound::pauseBackground() {
|
||||
_vm->_mixer->pauseHandle(_backgroundHandle, true);
|
||||
}
|
||||
|
||||
void MystSound::resumeBackground() {
|
||||
stopEffect();
|
||||
_vm->_mixer->pauseHandle(_backgroundHandle, false);
|
||||
}
|
||||
|
||||
void MystSound::changeBackgroundVolume(uint16 volume) {
|
||||
_vm->_mixer->setChannelVolume(_backgroundHandle, volume >> 8);
|
||||
}
|
||||
|
||||
void MystSound::playSpeech(uint16 id, CueList *cueList) {
|
||||
debug (0, "Playing speech %d", id);
|
||||
|
||||
Audio::RewindableAudioStream *rewindStream = makeAudioStream(id, cueList);
|
||||
if (!rewindStream) {
|
||||
warning("Unable to open sound '%d'", id);
|
||||
return;
|
||||
}
|
||||
|
||||
_speechSamplesPerSecond = rewindStream->getRate();
|
||||
_vm->_mixer->playStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, rewindStream);
|
||||
}
|
||||
|
||||
void MystSound::pauseBackgroundMyst() {
|
||||
if (_mystBackgroundSound.type == kUsedHandle)
|
||||
_vm->_mixer->pauseHandle(_mystBackgroundSound.handle, true);
|
||||
bool MystSound::isSpeechPlaying() {
|
||||
return _vm->_mixer->isSoundHandleActive(_speechHandle);
|
||||
}
|
||||
|
||||
void MystSound::resumeBackgroundMyst() {
|
||||
if (_mystBackgroundSound.type == kUsedHandle)
|
||||
_vm->_mixer->pauseHandle(_mystBackgroundSound.handle, false);
|
||||
}
|
||||
|
||||
void MystSound::changeBackgroundVolumeMyst(uint16 vol) {
|
||||
if (_mystBackgroundSound.type == kUsedHandle)
|
||||
_vm->_mixer->setChannelVolume(_mystBackgroundSound.handle, vol >> 8);
|
||||
void MystSound::stopSpeech() {
|
||||
_vm->_mixer->stopHandle(_speechHandle);
|
||||
_speechHandle = Audio::SoundHandle();
|
||||
_speechSamplesPerSecond = 0;
|
||||
}
|
||||
|
||||
} // End of namespace Mohawk
|
||||
|
|
|
@ -28,14 +28,13 @@
|
|||
|
||||
#include "audio/mixer.h"
|
||||
|
||||
#include "mohawk/sound.h"
|
||||
|
||||
namespace Audio {
|
||||
class RewindableAudioStream;
|
||||
}
|
||||
|
||||
namespace Mohawk {
|
||||
|
||||
struct CueList;
|
||||
class MohawkEngine_Myst;
|
||||
|
||||
class MystSound {
|
||||
|
@ -43,32 +42,38 @@ public:
|
|||
MystSound(MohawkEngine_Myst *vm);
|
||||
~MystSound();
|
||||
|
||||
// Generic sound functions
|
||||
Audio::SoundHandle *playSound(uint16 id, byte volume = Audio::Mixer::kMaxChannelVolume, bool loop = false, CueList *cueList = NULL);
|
||||
void stopSound();
|
||||
void stopSound(uint16 id);
|
||||
bool isPlaying(uint16 id);
|
||||
bool isPlaying();
|
||||
uint getNumSamplesPlayed(uint16 id);
|
||||
// Effect channel
|
||||
void playEffect(uint16 id, bool loop = false);
|
||||
void stopEffect();
|
||||
bool isEffectPlaying();
|
||||
|
||||
// Myst-specific sound functions
|
||||
Audio::SoundHandle *replaceSoundMyst(uint16 id, byte volume = Audio::Mixer::kMaxChannelVolume, bool loop = false);
|
||||
void replaceBackgroundMyst(uint16 id, uint16 volume = 0xFFFF);
|
||||
void pauseBackgroundMyst();
|
||||
void resumeBackgroundMyst();
|
||||
void stopBackgroundMyst();
|
||||
void changeBackgroundVolumeMyst(uint16 vol);
|
||||
// Background channel
|
||||
void playBackground(uint16 id, uint16 volume = 0xFFFF);
|
||||
void pauseBackground();
|
||||
void resumeBackground();
|
||||
void stopBackground();
|
||||
void changeBackgroundVolume(uint16 volume);
|
||||
|
||||
// Speech channel
|
||||
void playSpeech(uint16 id, CueList *cueList = nullptr);
|
||||
bool isSpeechPlaying();
|
||||
uint getSpeechNumSamplesPlayed();
|
||||
void stopSpeech();
|
||||
|
||||
private:
|
||||
MohawkEngine_Myst *_vm;
|
||||
|
||||
Common::Array<SndHandle> _handles;
|
||||
SndHandle *getHandle();
|
||||
Audio::RewindableAudioStream *makeAudioStream(uint16 id, CueList *cueList = NULL);
|
||||
Audio::RewindableAudioStream *makeAudioStream(uint16 id, CueList *cueList = nullptr);
|
||||
uint16 convertMystID(uint16 id);
|
||||
|
||||
// Myst-specific
|
||||
SndHandle _mystBackgroundSound;
|
||||
Audio::SoundHandle _effectHandle;
|
||||
int _speechSamplesPerSecond;
|
||||
uint16 _effectId;
|
||||
|
||||
Audio::SoundHandle _backgroundHandle;
|
||||
uint16 _backgroundId;
|
||||
|
||||
Audio::SoundHandle _speechHandle;
|
||||
};
|
||||
|
||||
} // End of namespace Mohawk
|
||||
|
|
|
@ -323,7 +323,7 @@ void Channelwood::o_pipeExtend(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
uint16 soundId = argv[0];
|
||||
debugC(kDebugScript, "\tsoundId: %d", soundId);
|
||||
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
VideoEntryPtr pipe = _vm->_video->playMovie(_vm->wrapMovieFilename("pipebrid", kChannelwoodStack));
|
||||
if (!pipe)
|
||||
error("Failed to open 'pipebrid' movie");
|
||||
|
@ -337,7 +337,7 @@ void Channelwood::o_pipeExtend(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
pipe->setBounds(Audio::Timestamp(0, 0, 600), Audio::Timestamp(0, 3040, 600));
|
||||
|
||||
_vm->waitUntilMovieEnds(pipe);
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
}
|
||||
|
||||
void Channelwood::o_drawImageChangeCardAndVolume(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -356,7 +356,7 @@ void Channelwood::o_drawImageChangeCardAndVolume(uint16 op, uint16 var, uint16 a
|
|||
|
||||
if (argc == 3) {
|
||||
uint16 volume = argv[2];
|
||||
_vm->_sound->changeBackgroundVolumeMyst(volume);
|
||||
_vm->_sound->changeBackgroundVolume(volume);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -408,7 +408,7 @@ void Channelwood::o_leverMoveFail(uint16 op, uint16 var, uint16 argc, uint16 *ar
|
|||
_leverPulled = true;
|
||||
uint16 soundId = lever->getList2(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
}
|
||||
} else {
|
||||
_leverPulled = false;
|
||||
|
@ -426,13 +426,13 @@ void Channelwood::o_leverEndMove(uint16 op, uint16 var, uint16 argc, uint16 *arg
|
|||
|
||||
uint16 soundId = lever->getList3(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
_vm->checkCursorHints();
|
||||
}
|
||||
|
||||
void Channelwood::o_leverEndMoveResumeBackground(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
o_leverEndMove(op, var, argc, argv);
|
||||
}
|
||||
|
||||
|
@ -442,7 +442,7 @@ void Channelwood::o_leverEndMoveWithSound(uint16 op, uint16 var, uint16 argc, ui
|
|||
MystVideoInfo *lever = getInvokingResource<MystVideoInfo>();
|
||||
uint16 soundId = lever->getList3(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
}
|
||||
|
||||
void Channelwood::o_leverElev3StartMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -455,7 +455,7 @@ void Channelwood::o_leverElev3EndMove(uint16 op, uint16 var, uint16 argc, uint16
|
|||
o_leverEndMove(op, var, argc, argv);
|
||||
_vm->_gfx->copyImageToScreen(3265, Common::Rect(544, 333));
|
||||
_vm->doFrame();
|
||||
_vm->_sound->replaceSoundMyst(5265);
|
||||
_vm->_sound->playEffect(5265);
|
||||
}
|
||||
|
||||
void Channelwood::o_pumpLeverMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -465,10 +465,10 @@ void Channelwood::o_pumpLeverMove(uint16 op, uint16 var, uint16 argc, uint16 *ar
|
|||
|
||||
if (lever->pullLeverV()) {
|
||||
uint16 soundId = lever->getList2(0);
|
||||
_vm->_sound->replaceBackgroundMyst(soundId, 38400);
|
||||
_vm->_sound->playBackground(soundId, 38400);
|
||||
} else {
|
||||
uint16 soundId = lever->getList2(1);
|
||||
_vm->_sound->replaceBackgroundMyst(soundId, 36864);
|
||||
_vm->_sound->playBackground(soundId, 36864);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -478,7 +478,7 @@ void Channelwood::o_pumpLeverEndMove(uint16 op, uint16 var, uint16 argc, uint16
|
|||
MystVideoInfo *lever = getInvokingResource<MystVideoInfo>();
|
||||
uint16 soundId = lever->getList3(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceBackgroundMyst(soundId, 36864);
|
||||
_vm->_sound->playBackground(soundId, 36864);
|
||||
}
|
||||
|
||||
void Channelwood::o_stairsDoorToggle(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -519,7 +519,7 @@ void Channelwood::o_valveHandleMoveStart1(uint16 op, uint16 var, uint16 argc, ui
|
|||
MystVideoInfo *handle = getInvokingResource<MystVideoInfo>();
|
||||
uint16 soundId = handle->getList1(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_vm->_cursor->setCursor(700);
|
||||
|
||||
o_valveHandleMove1(op, var, argc, argv);
|
||||
|
@ -539,7 +539,7 @@ void Channelwood::o_valveHandleMoveStop(uint16 op, uint16 var, uint16 argc, uint
|
|||
// Play release sound
|
||||
uint16 soundId = handle->getList3(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
// Redraw valve
|
||||
_vm->redrawArea(_valveVar);
|
||||
|
@ -570,7 +570,7 @@ void Channelwood::o_valveHandleMoveStart2(uint16 op, uint16 var, uint16 argc, ui
|
|||
MystVideoInfo *handle = getInvokingResource<MystVideoInfo>();
|
||||
uint16 soundId = handle->getList1(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_vm->_cursor->setCursor(700);
|
||||
|
||||
o_valveHandleMove2(op, var, argc, argv);
|
||||
|
@ -598,7 +598,7 @@ void Channelwood::o_valveHandleMoveStart3(uint16 op, uint16 var, uint16 argc, ui
|
|||
MystVideoInfo *handle = getInvokingResource<MystVideoInfo>();
|
||||
uint16 soundId = handle->getList1(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_vm->_cursor->setCursor(700);
|
||||
|
||||
o_valveHandleMove3(op, var, argc, argv);
|
||||
|
@ -661,7 +661,7 @@ void Channelwood::o_drawerOpen(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
void Channelwood::o_hologramTemple(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
debugC(kDebugScript, "Opcode %d: Temple hologram", op);
|
||||
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
// Used on Card 3333 (Temple Hologram)
|
||||
switch (_state.holoprojectorSelection) {
|
||||
|
@ -682,7 +682,7 @@ void Channelwood::o_hologramTemple(uint16 op, uint16 var, uint16 argc, uint16 *a
|
|||
break;
|
||||
}
|
||||
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
}
|
||||
|
||||
void Channelwood::o_executeMouseUp(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -745,9 +745,9 @@ void Channelwood::o_elevatorMovies(uint16 op, uint16 var, uint16 argc, uint16 *a
|
|||
error("Unknown elevator state %d in o_elevatorMovies", elevator);
|
||||
}
|
||||
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
_vm->playMovieBlocking(movie, x, y);
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
}
|
||||
|
||||
void Channelwood::o_soundReplace(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -755,8 +755,8 @@ void Channelwood::o_soundReplace(uint16 op, uint16 var, uint16 argc, uint16 *arg
|
|||
|
||||
uint16 soundId = argv[0];
|
||||
|
||||
if (!_vm->_sound->isPlaying()) {
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
if (!_vm->_sound->isEffectPlaying()) {
|
||||
_vm->_sound->playEffect(soundId);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -283,7 +283,7 @@ void Mechanical::o_birdCrankStart(uint16 op, uint16 var, uint16 argc, uint16 *ar
|
|||
MystAreaDrag *crank = getInvokingResource<MystAreaDrag>();
|
||||
|
||||
uint16 crankSoundId = crank->getList2(0);
|
||||
_vm->_sound->replaceSoundMyst(crankSoundId, Audio::Mixer::kMaxChannelVolume, true);
|
||||
_vm->_sound->playEffect(crankSoundId, true);
|
||||
|
||||
_birdSingEndTime = 0;
|
||||
_birdCrankStartTime = _vm->_system->getMillis();
|
||||
|
@ -301,7 +301,7 @@ void Mechanical::o_birdCrankStop(uint16 op, uint16 var, uint16 argc, uint16 *arg
|
|||
crankMovie->pauseMovie(true);
|
||||
|
||||
uint16 crankSoundId = crank->getList2(1);
|
||||
_vm->_sound->replaceSoundMyst(crankSoundId);
|
||||
_vm->_sound->playEffect(crankSoundId);
|
||||
|
||||
_birdSingEndTime = 2 * _vm->_system->getMillis() - _birdCrankStartTime;
|
||||
_birdSinging = true;
|
||||
|
@ -343,7 +343,7 @@ void Mechanical::o_elevatorRotationStart(uint16 op, uint16 var, uint16 argc, uin
|
|||
_elevatorRotationLeverMoving = true;
|
||||
_elevatorRotationSpeed = 0;
|
||||
|
||||
_vm->_sound->stopBackgroundMyst();
|
||||
_vm->_sound->stopBackground();
|
||||
|
||||
_vm->_cursor->setCursor(700);
|
||||
}
|
||||
|
@ -407,7 +407,7 @@ void Mechanical::o_elevatorRotationStop(uint16 op, uint16 var, uint16 argc, uint
|
|||
// Increment position
|
||||
_state.elevatorRotation = (_state.elevatorRotation + 1) % 10;
|
||||
|
||||
_vm->_sound->replaceSoundMyst(_elevatorRotationSoundId);
|
||||
_vm->_sound->playEffect(_elevatorRotationSoundId);
|
||||
_vm->redrawArea(11);
|
||||
}
|
||||
|
||||
|
@ -626,17 +626,17 @@ void Mechanical::elevatorGoMiddle_run() {
|
|||
_vm->_cursor->hideCursor();
|
||||
_vm->playSoundBlocking(11120);
|
||||
_vm->_gfx->copyImageToBackBuffer(6118, Common::Rect(544, 333));
|
||||
_vm->_sound->replaceSoundMyst(12120);
|
||||
_vm->_sound->playEffect(12120);
|
||||
_vm->_gfx->runTransition(kTransitionSlideToLeft, Common::Rect(177, 0, 370, 333), 25, 0);
|
||||
_vm->playSoundBlocking(13120);
|
||||
_vm->_sound->replaceSoundMyst(8120);
|
||||
_vm->_sound->playEffect(8120);
|
||||
_vm->_gfx->copyImageToBackBuffer(6327, Common::Rect(544, 333));
|
||||
_vm->wait(500);
|
||||
_vm->_sound->replaceSoundMyst(9120);
|
||||
_vm->_sound->playEffect(9120);
|
||||
static uint16 moviePos[2] = { 3540, 5380 };
|
||||
o_elevatorWindowMovie(121, 0, 2, moviePos);
|
||||
_vm->_gfx->copyBackBufferToScreen(Common::Rect(544, 333));
|
||||
_vm->_sound->replaceSoundMyst(10120);
|
||||
_vm->_sound->playEffect(10120);
|
||||
_vm->_cursor->showCursor();
|
||||
|
||||
_elevatorPosition = 1;
|
||||
|
@ -754,7 +754,7 @@ void Mechanical::birdSing_run() {
|
|||
uint32 time = _vm->_system->getMillis();
|
||||
if (_birdSingEndTime < time) {
|
||||
_bird->pauseMovie(true);
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->stopEffect();
|
||||
_birdSinging = false;
|
||||
}
|
||||
}
|
||||
|
@ -784,7 +784,7 @@ void Mechanical::elevatorRotation_run() {
|
|||
|
||||
_state.elevatorRotation = (_state.elevatorRotation + 1) % 10;
|
||||
|
||||
_vm->_sound->replaceSoundMyst(_elevatorRotationSoundId);
|
||||
_vm->_sound->playEffect(_elevatorRotationSoundId);
|
||||
_vm->redrawArea(11);
|
||||
_vm->wait(100);
|
||||
}
|
||||
|
@ -910,15 +910,15 @@ void Mechanical::o_fortressRotation_init(uint16 op, uint16 var, uint16 argc, uin
|
|||
void Mechanical::fortressSimulation_run() {
|
||||
if (_fortressSimulationInit) {
|
||||
// Init sequence
|
||||
_vm->_sound->replaceBackgroundMyst(_fortressSimulationStartSound1, 65535);
|
||||
_vm->_sound->playBackground(_fortressSimulationStartSound1, 65535);
|
||||
_vm->wait(5000, true);
|
||||
|
||||
VideoEntryPtr startup = _fortressSimulationStartup->playMovie();
|
||||
_vm->playSoundBlocking(_fortressSimulationStartSound2);
|
||||
_vm->_sound->replaceBackgroundMyst(_fortressSimulationStartSound1, 65535);
|
||||
_vm->_sound->playBackground(_fortressSimulationStartSound1, 65535);
|
||||
_vm->waitUntilMovieEnds(startup);
|
||||
_vm->_sound->stopBackgroundMyst();
|
||||
_vm->_sound->replaceSoundMyst(_fortressSimulationStartSound2);
|
||||
_vm->_sound->stopBackground();
|
||||
_vm->_sound->playEffect(_fortressSimulationStartSound2);
|
||||
|
||||
|
||||
Common::Rect src = Common::Rect(0, 0, 176, 176);
|
||||
|
|
|
@ -825,9 +825,9 @@ void Myst::o_libraryBookPageTurnLeft(uint16 op, uint16 var, uint16 argc, uint16
|
|||
_vm->_gfx->copyImageToScreen(_libraryBookBaseImage + _libraryBookPage, rect);
|
||||
|
||||
if (_vm->_rnd->getRandomBit())
|
||||
_vm->_sound->replaceSoundMyst(_libraryBookSound1);
|
||||
_vm->_sound->playEffect(_libraryBookSound1);
|
||||
else
|
||||
_vm->_sound->replaceSoundMyst(_libraryBookSound2);
|
||||
_vm->_sound->playEffect(_libraryBookSound2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -841,9 +841,9 @@ void Myst::o_libraryBookPageTurnRight(uint16 op, uint16 var, uint16 argc, uint16
|
|||
_vm->_gfx->copyImageToScreen(_libraryBookBaseImage + _libraryBookPage, rect);
|
||||
|
||||
if (_vm->_rnd->getRandomBit())
|
||||
_vm->_sound->replaceSoundMyst(_libraryBookSound1);
|
||||
_vm->_sound->playEffect(_libraryBookSound1);
|
||||
else
|
||||
_vm->_sound->replaceSoundMyst(_libraryBookSound2);
|
||||
_vm->_sound->playEffect(_libraryBookSound2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -918,7 +918,7 @@ void Myst::o_towerRotationStart(uint16 op, uint16 var, uint16 argc, uint16 *argv
|
|||
towerRotationMapComputeAngle();
|
||||
towerRotationMapDrawLine(center, end);
|
||||
|
||||
_vm->_sound->replaceSoundMyst(5378, Audio::Mixer::kMaxChannelVolume, true);
|
||||
_vm->_sound->playEffect(5378, true);
|
||||
}
|
||||
|
||||
void Myst::o_towerRotationEnd(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -943,7 +943,7 @@ void Myst::o_towerRotationEnd(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
_state.towerRotationAngle = 152;
|
||||
}
|
||||
|
||||
_vm->_sound->replaceSoundMyst(6378);
|
||||
_vm->_sound->playEffect(6378);
|
||||
|
||||
_towerRotationBlinkLabel = true;
|
||||
_towerRotationBlinkLabelCount = 0;
|
||||
|
@ -998,7 +998,7 @@ void Myst::o_dockVaultOpen(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
|||
else
|
||||
_dockVaultState = 1;
|
||||
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_vm->redrawArea(41, false);
|
||||
animatedUpdate(directionalUpdateDataSize, &argv[3], delay);
|
||||
}
|
||||
|
@ -1025,7 +1025,7 @@ void Myst::o_dockVaultClose(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
|||
if (_dockVaultState == 1 || _dockVaultState == 2)
|
||||
_dockVaultState = 0;
|
||||
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_vm->redrawArea(41, false);
|
||||
animatedUpdate(directionalUpdateDataSize, &argv[3], delay);
|
||||
}
|
||||
|
@ -1129,7 +1129,7 @@ void Myst::o_clockWheelsExecute(uint16 op, uint16 var, uint16 argc, uint16 *argv
|
|||
&& _state.clockTowerMinutePosition == 40;
|
||||
|
||||
if (!_state.clockTowerBridgeOpen && correctTime) {
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_vm->wait(500);
|
||||
|
||||
// Gears rise up
|
||||
|
@ -1144,7 +1144,7 @@ void Myst::o_clockWheelsExecute(uint16 op, uint16 var, uint16 argc, uint16 *argv
|
|||
_state.clockTowerBridgeOpen = 1;
|
||||
_vm->redrawArea(12);
|
||||
} else if (_state.clockTowerBridgeOpen && !correctTime) {
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_vm->wait(500);
|
||||
|
||||
// Gears sink down
|
||||
|
@ -1167,7 +1167,7 @@ void Myst::o_imagerPlayButton(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
uint16 video = getVar(51);
|
||||
|
||||
// Press button
|
||||
_vm->_sound->replaceSoundMyst(4698);
|
||||
_vm->_sound->playEffect(4698);
|
||||
|
||||
Common::Rect src = Common::Rect(0, 0, 32, 75);
|
||||
Common::Rect dest = Common::Rect(261, 257, 293, 332);
|
||||
|
@ -1183,7 +1183,7 @@ void Myst::o_imagerPlayButton(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
|
||||
// Play selected video
|
||||
if (!_state.imagerActive && video != 3)
|
||||
_vm->_sound->replaceSoundMyst(argv[0]);
|
||||
_vm->_sound->playEffect(argv[0]);
|
||||
|
||||
switch (video) {
|
||||
case 0: // Nothing
|
||||
|
@ -1220,7 +1220,7 @@ void Myst::o_imagerPlayButton(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
_imagerMovie->setBlocking(false);
|
||||
|
||||
if (_state.imagerActive) {
|
||||
_vm->_sound->replaceSoundMyst(argv[1]);
|
||||
_vm->_sound->playEffect(argv[1]);
|
||||
|
||||
// Water disappearing
|
||||
VideoEntryPtr water = _imagerMovie->playMovie();
|
||||
|
@ -1301,11 +1301,11 @@ void Myst::imagerValidation_run() {
|
|||
_imagerRedButton->drawConditionalDataToScreen(1);
|
||||
|
||||
if (_imagerValidationStep < 6)
|
||||
_vm->_sound->replaceSoundMyst(_imagerSound[0]);
|
||||
_vm->_sound->playEffect(_imagerSound[0]);
|
||||
else if (_imagerValidationStep < 10)
|
||||
_vm->_sound->replaceSoundMyst(_imagerSound[1]);
|
||||
_vm->_sound->playEffect(_imagerSound[1]);
|
||||
else if (_imagerValidationStep == 10)
|
||||
_vm->_sound->replaceSoundMyst(_imagerSound[2]);
|
||||
_vm->_sound->playEffect(_imagerSound[2]);
|
||||
|
||||
_imagerValidationStep++;
|
||||
|
||||
|
@ -1328,8 +1328,8 @@ void Myst::o_towerElevatorAnimation(uint16 op, uint16 var, uint16 argc, uint16 *
|
|||
_treeStopped = true;
|
||||
|
||||
_vm->_cursor->hideCursor();
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->stopEffect();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
switch (argv[0]) {
|
||||
case 0:
|
||||
|
@ -1342,7 +1342,7 @@ void Myst::o_towerElevatorAnimation(uint16 op, uint16 var, uint16 argc, uint16 *
|
|||
break;
|
||||
}
|
||||
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
_vm->_cursor->showCursor();
|
||||
_treeStopped = false;
|
||||
}
|
||||
|
@ -1366,17 +1366,17 @@ void Myst::o_generatorButtonPressed(uint16 op, uint16 var, uint16 argc, uint16 *
|
|||
_state.generatorVoltage -= value;
|
||||
|
||||
if (_state.generatorVoltage)
|
||||
_vm->_sound->replaceSoundMyst(8297);
|
||||
_vm->_sound->playEffect(8297);
|
||||
else {
|
||||
_vm->_sound->replaceSoundMyst(9297);
|
||||
_vm->_sound->stopBackgroundMyst();
|
||||
_vm->_sound->playEffect(9297);
|
||||
_vm->_sound->stopBackground();
|
||||
}
|
||||
} else {
|
||||
if (_generatorVoltage)
|
||||
_vm->_sound->replaceSoundMyst(6297);
|
||||
_vm->_sound->playEffect(6297);
|
||||
else {
|
||||
_vm->_sound->replaceSoundMyst(7297);
|
||||
_vm->_sound->replaceBackgroundMyst(4297);
|
||||
_vm->_sound->playBackground(4297);
|
||||
_vm->_sound->playEffect(7297);
|
||||
}
|
||||
|
||||
_state.generatorButtons |= mask;
|
||||
|
@ -1482,13 +1482,13 @@ void Myst::o_cabinSafeHandleMove(uint16 op, uint16 var, uint16 argc, uint16 *arg
|
|||
if (_tempVar == 0) {
|
||||
uint16 soundId = handle->getList2(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
}
|
||||
// Combination is right
|
||||
if (_state.cabinSafeCombination == 724) {
|
||||
uint16 soundId = handle->getList2(1);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
_vm->changeToCard(4103, kNoTransition);
|
||||
|
||||
|
@ -1513,7 +1513,7 @@ void Myst::o_cabinSafeHandleEndMove(uint16 op, uint16 var, uint16 argc, uint16 *
|
|||
void Myst::o_observatoryMonthChangeStart(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
debugC(kDebugScript, "Opcode %d: Observatory month change start", op);
|
||||
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
if (op == 129 || op == 131) {
|
||||
// Increase
|
||||
|
@ -1561,7 +1561,7 @@ void Myst::observatoryIncrementMonth(int16 increment) {
|
|||
_state.observatoryMonthSlider = _observatoryMonthSlider->_pos.y;
|
||||
}
|
||||
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
}
|
||||
|
||||
void Myst::observatoryMonthChange_run() {
|
||||
|
@ -1572,7 +1572,7 @@ void Myst::observatoryMonthChange_run() {
|
|||
void Myst::o_observatoryDayChangeStart(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
debugC(kDebugScript, "Opcode %d: Observatory day change start", op);
|
||||
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
if (op == 129 || op == 131) {
|
||||
// Increase
|
||||
|
@ -1621,7 +1621,7 @@ void Myst::observatoryIncrementDay(int16 increment) {
|
|||
_state.observatoryDaySlider = _observatoryDaySlider->_pos.y;
|
||||
}
|
||||
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
}
|
||||
|
||||
void Myst::observatoryDayChange_run() {
|
||||
|
@ -1632,7 +1632,7 @@ void Myst::observatoryDayChange_run() {
|
|||
void Myst::o_observatoryYearChangeStart(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
debugC(kDebugScript, "Opcode %d: Observatory year change start", op);
|
||||
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
if (op == 196) {
|
||||
// Increase
|
||||
|
@ -1675,7 +1675,7 @@ void Myst::observatoryIncrementYear(int16 increment) {
|
|||
_state.observatoryYearSlider = _observatoryYearSlider->_pos.y;
|
||||
}
|
||||
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
}
|
||||
|
||||
void Myst::observatoryYearChange_run() {
|
||||
|
@ -1686,7 +1686,7 @@ void Myst::observatoryYearChange_run() {
|
|||
void Myst::o_observatoryTimeChangeStart(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
debugC(kDebugScript, "Opcode %d: Observatory time change start", op);
|
||||
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
if (op == 192) {
|
||||
// Increase
|
||||
|
@ -1734,7 +1734,7 @@ void Myst::observatoryIncrementTime(int16 increment) {
|
|||
_state.observatoryTimeSlider = _observatoryTimeSlider->_pos.y;
|
||||
}
|
||||
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
}
|
||||
|
||||
void Myst::observatoryTimeChange_run() {
|
||||
|
@ -1751,7 +1751,7 @@ void Myst::o_observatoryGoButton(uint16 op, uint16 var, uint16 argc, uint16 *arg
|
|||
|| _state.observatoryYearTarget != _state.observatoryYearSetting
|
||||
|| _state.observatoryTimeTarget != _state.observatoryTimeSetting) {
|
||||
uint16 soundId = argv[0];
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
int16 distance = _state.observatoryYearTarget - _state.observatoryYearSetting;
|
||||
uint32 end = _vm->_system->getMillis() + 32 * ABS(distance) / 50 + 800;
|
||||
|
@ -1764,7 +1764,7 @@ void Myst::o_observatoryGoButton(uint16 op, uint16 var, uint16 argc, uint16 *arg
|
|||
_vm->redrawResource(_observatoryVisualizer);
|
||||
}
|
||||
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
|
||||
// Redraw visualizer
|
||||
observatorySetTargetToSetting();
|
||||
|
@ -1832,11 +1832,11 @@ void Myst::o_circuitBreakerMove(uint16 op, uint16 var, uint16 argc, uint16 *argv
|
|||
if (_state.generatorVoltage > 59 || _state.generatorBreakers != 1) {
|
||||
uint16 soundId = breaker->getList2(1);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
} else {
|
||||
uint16 soundId = breaker->getList2(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
// Reset breaker state
|
||||
_state.generatorBreakers = 0;
|
||||
|
@ -1846,11 +1846,11 @@ void Myst::o_circuitBreakerMove(uint16 op, uint16 var, uint16 argc, uint16 *argv
|
|||
if (_state.generatorVoltage > 59 || _state.generatorBreakers != 2) {
|
||||
uint16 soundId = breaker->getList2(1);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
} else {
|
||||
uint16 soundId = breaker->getList2(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
// Reset breaker state
|
||||
_state.generatorBreakers = 0;
|
||||
|
@ -1873,7 +1873,7 @@ void Myst::o_boilerIncreasePressureStart(uint16 op, uint16 var, uint16 argc, uin
|
|||
|
||||
_treeStopped = true;
|
||||
if (_state.cabinValvePosition < 25)
|
||||
_vm->_sound->stopBackgroundMyst();
|
||||
_vm->_sound->stopBackground();
|
||||
|
||||
_boilerPressureIncreasing = true;
|
||||
}
|
||||
|
@ -1892,7 +1892,7 @@ void Myst::o_boilerLightPilot(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
_matchGoOutTime = _vm->_system->getMillis();
|
||||
|
||||
if (_state.cabinValvePosition > 0)
|
||||
_vm->_sound->replaceBackgroundMyst(8098, 49152);
|
||||
_vm->_sound->playBackground(8098, 49152);
|
||||
|
||||
if (_state.cabinValvePosition > 12) {
|
||||
// Compute the speed of the gauge to synchronize it with the next tree move
|
||||
|
@ -1949,7 +1949,7 @@ void Myst::o_boilerIncreasePressureStop(uint16 op, uint16 var, uint16 argc, uint
|
|||
|
||||
if (_state.cabinPilotLightLit == 1) {
|
||||
if (_state.cabinValvePosition > 0)
|
||||
_vm->_sound->replaceBackgroundMyst(8098, 49152);
|
||||
_vm->_sound->playBackground(8098, 49152);
|
||||
|
||||
if (_cabinGaugeMovie && !_cabinGaugeMovie->endOfVideo()) {
|
||||
uint16 delay = treeNextMoveDelay(_state.cabinValvePosition);
|
||||
|
@ -1958,12 +1958,12 @@ void Myst::o_boilerIncreasePressureStop(uint16 op, uint16 var, uint16 argc, uint
|
|||
}
|
||||
|
||||
} else if (_state.cabinValvePosition > 0)
|
||||
_vm->_sound->replaceBackgroundMyst(4098, _state.cabinValvePosition << 10);
|
||||
_vm->_sound->playBackground(4098, _state.cabinValvePosition << 10);
|
||||
}
|
||||
|
||||
void Myst::boilerPressureIncrease_run() {
|
||||
// Allow increasing pressure if sound has stopped
|
||||
if (!_vm->_sound->isPlaying(5098) && _state.cabinValvePosition < 25) {
|
||||
if (!_vm->_sound->isEffectPlaying() && _state.cabinValvePosition < 25) {
|
||||
_state.cabinValvePosition++;
|
||||
if (_state.cabinValvePosition == 1) {
|
||||
// Set fire to high
|
||||
|
@ -1973,13 +1973,13 @@ void Myst::boilerPressureIncrease_run() {
|
|||
_vm->redrawArea(305);
|
||||
} else if (_state.cabinValvePosition == 25) {
|
||||
if (_state.cabinPilotLightLit == 1)
|
||||
_vm->_sound->replaceBackgroundMyst(8098, 49152);
|
||||
_vm->_sound->playBackground(8098, 49152);
|
||||
else
|
||||
_vm->_sound->replaceBackgroundMyst(4098, 25600);
|
||||
_vm->_sound->playBackground(4098, 25600);
|
||||
}
|
||||
|
||||
// Pressure increasing sound
|
||||
_vm->_sound->replaceSoundMyst(5098);
|
||||
_vm->_sound->playEffect(5098);
|
||||
|
||||
// Redraw wheel
|
||||
_vm->redrawArea(99);
|
||||
|
@ -1988,7 +1988,7 @@ void Myst::boilerPressureIncrease_run() {
|
|||
|
||||
void Myst::boilerPressureDecrease_run() {
|
||||
// Allow decreasing pressure if sound has stopped
|
||||
if (!_vm->_sound->isPlaying(5098) && _state.cabinValvePosition > 0) {
|
||||
if (!_vm->_sound->isEffectPlaying() && _state.cabinValvePosition > 0) {
|
||||
_state.cabinValvePosition--;
|
||||
if (_state.cabinValvePosition == 0) {
|
||||
// Set fire to low
|
||||
|
@ -1999,7 +1999,7 @@ void Myst::boilerPressureDecrease_run() {
|
|||
}
|
||||
|
||||
// Pressure increasing sound
|
||||
_vm->_sound->replaceSoundMyst(5098);
|
||||
_vm->_sound->playEffect(5098);
|
||||
|
||||
// Redraw wheel
|
||||
_vm->redrawArea(99);
|
||||
|
@ -2010,7 +2010,7 @@ void Myst::o_boilerDecreasePressureStart(uint16 op, uint16 var, uint16 argc, uin
|
|||
debugC(kDebugScript, "Opcode %d: Boiler decrease pressure start", op);
|
||||
|
||||
_treeStopped = true;
|
||||
_vm->_sound->stopBackgroundMyst();
|
||||
_vm->_sound->stopBackground();
|
||||
|
||||
_boilerPressureDecreasing = true;
|
||||
}
|
||||
|
@ -2024,7 +2024,7 @@ void Myst::o_boilerDecreasePressureStop(uint16 op, uint16 var, uint16 argc, uint
|
|||
|
||||
if (_state.cabinPilotLightLit == 1) {
|
||||
if (_state.cabinValvePosition > 0)
|
||||
_vm->_sound->replaceBackgroundMyst(8098, 49152);
|
||||
_vm->_sound->playBackground(8098, 49152);
|
||||
|
||||
if (_cabinGaugeMovie && !_cabinGaugeMovie->endOfVideo()) {
|
||||
uint16 delay = treeNextMoveDelay(_state.cabinValvePosition);
|
||||
|
@ -2034,7 +2034,7 @@ void Myst::o_boilerDecreasePressureStop(uint16 op, uint16 var, uint16 argc, uint
|
|||
|
||||
} else {
|
||||
if (_state.cabinValvePosition > 0)
|
||||
_vm->_sound->replaceBackgroundMyst(4098, _state.cabinValvePosition << 10);
|
||||
_vm->_sound->playBackground(4098, _state.cabinValvePosition << 10);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2055,11 +2055,11 @@ void Myst::o_basementIncreasePressureStop(uint16 op, uint16 var, uint16 argc, ui
|
|||
|
||||
void Myst::basementPressureIncrease_run() {
|
||||
// Allow increasing pressure if sound has stopped
|
||||
if (!_vm->_sound->isPlaying(4642) && _state.cabinValvePosition < 25) {
|
||||
if (!_vm->_sound->isEffectPlaying() && _state.cabinValvePosition < 25) {
|
||||
_state.cabinValvePosition++;
|
||||
|
||||
// Pressure increasing sound
|
||||
_vm->_sound->replaceSoundMyst(4642);
|
||||
_vm->_sound->playEffect(4642);
|
||||
|
||||
// Redraw wheel
|
||||
_vm->redrawArea(99);
|
||||
|
@ -2068,11 +2068,11 @@ void Myst::basementPressureIncrease_run() {
|
|||
|
||||
void Myst::basementPressureDecrease_run() {
|
||||
// Allow decreasing pressure if sound has stopped
|
||||
if (!_vm->_sound->isPlaying(4642) && _state.cabinValvePosition > 0) {
|
||||
if (!_vm->_sound->isEffectPlaying() && _state.cabinValvePosition > 0) {
|
||||
_state.cabinValvePosition--;
|
||||
|
||||
// Pressure decreasing sound
|
||||
_vm->_sound->replaceSoundMyst(4642);
|
||||
_vm->_sound->playEffect(4642);
|
||||
|
||||
// Redraw wheel
|
||||
_vm->redrawArea(99);
|
||||
|
@ -2117,18 +2117,18 @@ void Myst::tree_run() {
|
|||
// Tree movement
|
||||
if (goingDown) {
|
||||
_state.treePosition--;
|
||||
_vm->_sound->replaceSoundMyst(2);
|
||||
_vm->_sound->playEffect(2);
|
||||
} else {
|
||||
_state.treePosition++;
|
||||
_vm->_sound->replaceSoundMyst(1);
|
||||
_vm->_sound->playEffect(1);
|
||||
}
|
||||
|
||||
// Stop background music if going up from book room
|
||||
if (_vm->getCurCard() == 4630) {
|
||||
if (_state.treePosition > 0)
|
||||
_vm->_sound->stopBackgroundMyst();
|
||||
_vm->_sound->stopBackground();
|
||||
else
|
||||
_vm->_sound->replaceBackgroundMyst(4630, 24576);
|
||||
_vm->_sound->playBackground(4630, 24576);
|
||||
}
|
||||
|
||||
// Redraw tree
|
||||
|
@ -2168,7 +2168,7 @@ void Myst::o_rocketSoundSliderStartMove(uint16 op, uint16 var, uint16 argc, uint
|
|||
|
||||
_rocketSliderSound = 0;
|
||||
_vm->_cursor->setCursor(700);
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
rocketSliderMove();
|
||||
}
|
||||
|
||||
|
@ -2184,7 +2184,7 @@ void Myst::o_rocketSoundSliderEndMove(uint16 op, uint16 var, uint16 argc, uint16
|
|||
_vm->checkCursorHints();
|
||||
|
||||
if (_state.generatorVoltage == 59 && !_state.generatorBreakers && _rocketSliderSound)
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->stopEffect();
|
||||
|
||||
if (getInvokingResource<MystArea>() == _rocketSlider1)
|
||||
_state.rocketSliderPosition[0] = _rocketSlider1->_pos.y;
|
||||
|
@ -2197,7 +2197,7 @@ void Myst::o_rocketSoundSliderEndMove(uint16 op, uint16 var, uint16 argc, uint16
|
|||
else if (getInvokingResource<MystArea>() == _rocketSlider5)
|
||||
_state.rocketSliderPosition[4] = _rocketSlider5->_pos.y;
|
||||
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
}
|
||||
|
||||
void Myst::rocketSliderMove() {
|
||||
|
@ -2207,7 +2207,7 @@ void Myst::rocketSliderMove() {
|
|||
uint16 soundId = rocketSliderGetSound(slider->_pos.y);
|
||||
if (soundId != _rocketSliderSound) {
|
||||
_rocketSliderSound = soundId;
|
||||
_vm->_sound->replaceSoundMyst(soundId, Audio::Mixer::kMaxChannelVolume, true);
|
||||
_vm->_sound->playEffect(soundId, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2223,41 +2223,41 @@ void Myst::rocketCheckSolution() {
|
|||
bool solved = true;
|
||||
|
||||
soundId = rocketSliderGetSound(_rocketSlider1->_pos.y);
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_rocketSlider1->drawConditionalDataToScreen(2);
|
||||
_vm->wait(250);
|
||||
if (soundId != 9558)
|
||||
solved = false;
|
||||
|
||||
soundId = rocketSliderGetSound(_rocketSlider2->_pos.y);
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_rocketSlider2->drawConditionalDataToScreen(2);
|
||||
_vm->wait(250);
|
||||
if (soundId != 9546)
|
||||
solved = false;
|
||||
|
||||
soundId = rocketSliderGetSound(_rocketSlider3->_pos.y);
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_rocketSlider3->drawConditionalDataToScreen(2);
|
||||
_vm->wait(250);
|
||||
if (soundId != 9543)
|
||||
solved = false;
|
||||
|
||||
soundId = rocketSliderGetSound(_rocketSlider4->_pos.y);
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_rocketSlider4->drawConditionalDataToScreen(2);
|
||||
_vm->wait(250);
|
||||
if (soundId != 9553)
|
||||
solved = false;
|
||||
|
||||
soundId = rocketSliderGetSound(_rocketSlider5->_pos.y);
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_rocketSlider5->drawConditionalDataToScreen(2);
|
||||
_vm->wait(250);
|
||||
if (soundId != 9560)
|
||||
solved = false;
|
||||
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->stopEffect();
|
||||
|
||||
if (solved) {
|
||||
// Reset lever position
|
||||
|
@ -2313,9 +2313,9 @@ void Myst::o_rocketPianoStart(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
// Play note
|
||||
_rocketPianoSound = 0;
|
||||
if (_state.generatorVoltage == 59 && !_state.generatorBreakers) {
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
_rocketPianoSound = key->getList1(0);
|
||||
_vm->_sound->replaceSoundMyst(_rocketPianoSound, Audio::Mixer::kMaxChannelVolume, true);
|
||||
_vm->_sound->playEffect(_rocketPianoSound, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2355,13 +2355,13 @@ void Myst::o_rocketPianoMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
|||
uint16 soundId = key->getList1(0);
|
||||
if (soundId != _rocketPianoSound) {
|
||||
_rocketPianoSound = soundId;
|
||||
_vm->_sound->replaceSoundMyst(soundId, Audio::Mixer::kMaxChannelVolume, true);
|
||||
_vm->_sound->playEffect(soundId, true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Not pressing a key anymore
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->stopEffect();
|
||||
_vm->_sound->resumeBackground();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2379,8 +2379,8 @@ void Myst::o_rocketPianoStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
|||
// Draw unpressed piano key
|
||||
_vm->_gfx->copyImageSectionToScreen(key->getSubImage(0).wdib, src, dest);
|
||||
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->stopEffect();
|
||||
_vm->_sound->resumeBackground();
|
||||
}
|
||||
|
||||
void Myst::o_rocketLeverStartMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -2422,7 +2422,7 @@ void Myst::o_rocketLeverMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
|||
uint16 soundId = lever->getList2(0);
|
||||
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
// If rocket correctly powered
|
||||
if (_state.generatorVoltage == 59 && !_state.generatorBreakers)
|
||||
|
@ -2484,7 +2484,7 @@ void Myst::o_observatoryMonthSliderStartMove(uint16 op, uint16 var, uint16 argc,
|
|||
debugC(kDebugScript, "Opcode %d: Month slider start move", op);
|
||||
|
||||
_vm->_cursor->setCursor(700);
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
observatoryUpdateMonth();
|
||||
}
|
||||
|
@ -2493,7 +2493,7 @@ void Myst::o_observatoryMonthSliderEndMove(uint16 op, uint16 var, uint16 argc, u
|
|||
debugC(kDebugScript, "Opcode %d: Month slider end move", op);
|
||||
|
||||
_vm->checkCursorHints();
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
|
||||
observatoryUpdateMonth();
|
||||
}
|
||||
|
@ -2504,7 +2504,7 @@ void Myst::observatoryUpdateMonth() {
|
|||
if (month != _state.observatoryMonthSetting) {
|
||||
_state.observatoryMonthSetting = month;
|
||||
_state.observatoryMonthSlider = _observatoryMonthSlider->_pos.y;
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
|
||||
// Redraw digits
|
||||
_vm->redrawArea(73);
|
||||
|
@ -2515,7 +2515,7 @@ void Myst::o_observatoryDaySliderStartMove(uint16 op, uint16 var, uint16 argc, u
|
|||
debugC(kDebugScript, "Opcode %d: Day slider start move", op);
|
||||
|
||||
_vm->_cursor->setCursor(700);
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
observatoryUpdateDay();
|
||||
}
|
||||
|
@ -2524,7 +2524,7 @@ void Myst::o_observatoryDaySliderEndMove(uint16 op, uint16 var, uint16 argc, uin
|
|||
debugC(kDebugScript, "Opcode %d: Day slider end move", op);
|
||||
|
||||
_vm->checkCursorHints();
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
|
||||
observatoryUpdateDay();
|
||||
}
|
||||
|
@ -2535,7 +2535,7 @@ void Myst::observatoryUpdateDay() {
|
|||
if (day != _state.observatoryDaySetting) {
|
||||
_state.observatoryDaySetting = day;
|
||||
_state.observatoryDaySlider = _observatoryDaySlider->_pos.y;
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
|
||||
// Redraw digits
|
||||
_vm->redrawArea(75);
|
||||
|
@ -2547,7 +2547,7 @@ void Myst::o_observatoryYearSliderStartMove(uint16 op, uint16 var, uint16 argc,
|
|||
debugC(kDebugScript, "Opcode %d: Year slider start move", op);
|
||||
|
||||
_vm->_cursor->setCursor(700);
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
observatoryUpdateYear();
|
||||
}
|
||||
|
@ -2556,7 +2556,7 @@ void Myst::o_observatoryYearSliderEndMove(uint16 op, uint16 var, uint16 argc, ui
|
|||
debugC(kDebugScript, "Opcode %d: Year slider end move", op);
|
||||
|
||||
_vm->checkCursorHints();
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
|
||||
observatoryUpdateYear();
|
||||
}
|
||||
|
@ -2567,7 +2567,7 @@ void Myst::observatoryUpdateYear() {
|
|||
if (year != _state.observatoryYearSetting) {
|
||||
_state.observatoryYearSetting = year;
|
||||
_state.observatoryYearSlider = _observatoryYearSlider->_pos.y;
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
|
||||
// Redraw digits
|
||||
_vm->redrawArea(79);
|
||||
|
@ -2581,7 +2581,7 @@ void Myst::o_observatoryTimeSliderStartMove(uint16 op, uint16 var, uint16 argc,
|
|||
debugC(kDebugScript, "Opcode %d: Time slider start move", op);
|
||||
|
||||
_vm->_cursor->setCursor(700);
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
observatoryUpdateTime();
|
||||
}
|
||||
|
@ -2590,7 +2590,7 @@ void Myst::o_observatoryTimeSliderEndMove(uint16 op, uint16 var, uint16 argc, ui
|
|||
debugC(kDebugScript, "Opcode %d: Time slider end move", op);
|
||||
|
||||
_vm->checkCursorHints();
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
|
||||
observatoryUpdateTime();
|
||||
}
|
||||
|
@ -2601,7 +2601,7 @@ void Myst::observatoryUpdateTime() {
|
|||
if (time != _state.observatoryTimeSetting) {
|
||||
_state.observatoryTimeSetting = time;
|
||||
_state.observatoryTimeSlider = _observatoryTimeSlider->_pos.y;
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
|
||||
// Redraw digits
|
||||
_vm->redrawArea(80);
|
||||
|
@ -2622,7 +2622,7 @@ void Myst::o_libraryCombinationBookStop(uint16 op, uint16 var, uint16 argc, uint
|
|||
|
||||
void Myst::o_cabinMatchLight(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
if (!_cabinMatchState) {
|
||||
_vm->_sound->replaceSoundMyst(4103);
|
||||
_vm->_sound->playEffect(4103);
|
||||
|
||||
// Match is lit
|
||||
_cabinMatchState = 1;
|
||||
|
@ -2662,7 +2662,7 @@ void Myst::matchBurn_run() {
|
|||
void Myst::o_courtyardBoxEnter(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
debugC(kDebugScript, "Opcode %d: Mouse enters courtyard box", op);
|
||||
_tempVar = 1;
|
||||
_vm->_sound->playSound(_courtyardBoxSound);
|
||||
_vm->_sound->playEffect(_courtyardBoxSound);
|
||||
_vm->redrawArea(var);
|
||||
}
|
||||
|
||||
|
@ -2714,7 +2714,7 @@ void Myst::clockWheelStartTurn(uint16 wheel) {
|
|||
uint16 soundId = resource->getList1(0);
|
||||
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
// Turn wheel one step
|
||||
if (wheel == 1)
|
||||
|
@ -2775,9 +2775,9 @@ void Myst::libraryCombinationBookTurnLeft() {
|
|||
_vm->_gfx->copyImageToScreen(_libraryBookBaseImage + _libraryBookPage, rect);
|
||||
|
||||
if (_vm->_rnd->getRandomBit())
|
||||
_vm->_sound->replaceSoundMyst(_libraryBookSound1);
|
||||
_vm->_sound->playEffect(_libraryBookSound1);
|
||||
else
|
||||
_vm->_sound->replaceSoundMyst(_libraryBookSound2);
|
||||
_vm->_sound->playEffect(_libraryBookSound2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2799,9 +2799,9 @@ void Myst::libraryCombinationBookTurnRight() {
|
|||
_vm->_gfx->copyImageToScreen(_libraryBookBaseImage + _libraryBookPage, rect);
|
||||
|
||||
if (_vm->_rnd->getRandomBit())
|
||||
_vm->_sound->replaceSoundMyst(_libraryBookSound1);
|
||||
_vm->_sound->playEffect(_libraryBookSound1);
|
||||
else
|
||||
_vm->_sound->replaceSoundMyst(_libraryBookSound2);
|
||||
_vm->_sound->playEffect(_libraryBookSound2);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2834,7 +2834,7 @@ void Myst::o_observatoryChangeSettingStop(uint16 op, uint16 var, uint16 argc, ui
|
|||
_vm->redrawResource(_observatoryCurrentSlider);
|
||||
_observatoryCurrentSlider = nullptr;
|
||||
}
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
}
|
||||
|
||||
void Myst::o_dockVaultForceClose(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -2850,12 +2850,12 @@ void Myst::o_dockVaultForceClose(uint16 op, uint16 var, uint16 argc, uint16 *arg
|
|||
if (_dockVaultState) {
|
||||
// Open switch
|
||||
_state.dockMarkerSwitch = 1;
|
||||
_vm->_sound->replaceSoundMyst(4143);
|
||||
_vm->_sound->playEffect(4143);
|
||||
_vm->redrawArea(4);
|
||||
|
||||
// Close vault
|
||||
_dockVaultState = 0;
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
_vm->redrawArea(41, false);
|
||||
animatedUpdate(directionalUpdateDataSize, &argv[3], delay);
|
||||
}
|
||||
|
@ -2885,7 +2885,7 @@ void Myst::o_clockLeverMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
|||
if (lever->pullLeverV()) {
|
||||
// Start videos for first step
|
||||
if (_clockWeightPosition < 2214) {
|
||||
_vm->_sound->replaceSoundMyst(5113);
|
||||
_vm->_sound->playEffect(5113);
|
||||
clockGearForwardOneStep(1);
|
||||
|
||||
// Left lever
|
||||
|
@ -2947,7 +2947,7 @@ void Myst::clockWeightDownOneStep() {
|
|||
void Myst::clockGears_run() {
|
||||
if (!_vm->_video->isVideoPlaying() && _clockWeightPosition < 2214) {
|
||||
_clockMiddleGearMovedAlone = true;
|
||||
_vm->_sound->replaceSoundMyst(5113);
|
||||
_vm->_sound->playEffect(5113);
|
||||
clockGearForwardOneStep(1);
|
||||
clockWeightDownOneStep();
|
||||
}
|
||||
|
@ -2968,7 +2968,7 @@ void Myst::o_clockLeverEndMove(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
}
|
||||
|
||||
if (_clockMiddleGearMovedAlone)
|
||||
_vm->_sound->replaceSoundMyst(8113);
|
||||
_vm->_sound->playEffect(8113);
|
||||
|
||||
// Release lever
|
||||
MystVideoInfo *lever = getInvokingResource<MystVideoInfo>();
|
||||
|
@ -2987,7 +2987,7 @@ void Myst::clockGearsCheckSolution() {
|
|||
&& !_state.gearsOpen) {
|
||||
|
||||
// Make weight go down
|
||||
_vm->_sound->replaceSoundMyst(9113);
|
||||
_vm->_sound->playEffect(9113);
|
||||
_clockWeightVideo = _vm->_video->playMovie(_vm->wrapMovieFilename("cl1wlfch", kMystStack));
|
||||
if (!_clockWeightVideo)
|
||||
error("Failed to open cl1wlfch movie");
|
||||
|
@ -2999,16 +2999,16 @@ void Myst::clockGearsCheckSolution() {
|
|||
_vm->waitUntilMovieEnds(_clockWeightVideo);
|
||||
_clockWeightPosition = 2214;
|
||||
|
||||
_vm->_sound->replaceSoundMyst(6113);
|
||||
_vm->_sound->playEffect(6113);
|
||||
_vm->wait(1000);
|
||||
_vm->_sound->replaceSoundMyst(7113);
|
||||
_vm->_sound->playEffect(7113);
|
||||
|
||||
// Gear opening video
|
||||
_vm->playMovieBlocking(_vm->wrapMovieFilename("cl1wggat", kMystStack), 195, 225);
|
||||
_state.gearsOpen = 1;
|
||||
_vm->redrawArea(40);
|
||||
|
||||
_vm->_sound->replaceBackgroundMyst(4113, 16384);
|
||||
_vm->_sound->playBackground(4113, 16384);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3035,8 +3035,8 @@ void Myst::clockReset() {
|
|||
|
||||
_vm->_cursor->hideCursor();
|
||||
|
||||
_vm->_sound->stopBackgroundMyst();
|
||||
_vm->_sound->replaceSoundMyst(5113);
|
||||
_vm->_sound->stopBackground();
|
||||
_vm->_sound->playEffect(5113);
|
||||
|
||||
// Play reset videos
|
||||
clockResetWeight();
|
||||
|
@ -3051,13 +3051,13 @@ void Myst::clockReset() {
|
|||
_vm->waitUntilMovieEnds(handle);
|
||||
}
|
||||
|
||||
_vm->_sound->replaceSoundMyst(10113);
|
||||
_vm->_sound->playEffect(10113);
|
||||
|
||||
// Close gear
|
||||
if (_state.gearsOpen) {
|
||||
_vm->_sound->replaceSoundMyst(6113);
|
||||
_vm->_sound->playEffect(6113);
|
||||
_vm->wait(1000);
|
||||
_vm->_sound->replaceSoundMyst(7113);
|
||||
_vm->_sound->playEffect(7113);
|
||||
|
||||
// Gear closing movie
|
||||
VideoEntryPtr handle = _vm->_video->playMovie(_vm->wrapMovieFilename("cl1wggat", kMystStack));
|
||||
|
@ -3078,7 +3078,7 @@ void Myst::clockReset() {
|
|||
}
|
||||
|
||||
void Myst::clockResetWeight() {
|
||||
_vm->_sound->replaceSoundMyst(9113);
|
||||
_vm->_sound->playEffect(9113);
|
||||
|
||||
_clockWeightVideo = _vm->_video->playMovie(_vm->wrapMovieFilename("cl1wlfch", kMystStack));
|
||||
if (!_clockWeightVideo)
|
||||
|
@ -3145,7 +3145,7 @@ void Myst::o_courtyardBox_init(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
void Myst::towerRotationMap_run() {
|
||||
if (!_towerRotationMapInitialized) {
|
||||
_towerRotationMapInitialized = true;
|
||||
_vm->_sound->replaceSoundMyst(4378);
|
||||
_vm->_sound->playEffect(4378);
|
||||
|
||||
towerRotationDrawBuildings();
|
||||
|
||||
|
@ -3159,7 +3159,7 @@ void Myst::towerRotationMap_run() {
|
|||
towerRotationMapRotate();
|
||||
_startTime = time + 100;
|
||||
} else if (_towerRotationBlinkLabel
|
||||
&& _vm->_sound->isPlaying(6378)) {
|
||||
&& _vm->_sound->isEffectPlaying()) {
|
||||
// Blink tower rotation label while sound is playing
|
||||
_towerRotationBlinkLabelCount = (_towerRotationBlinkLabelCount + 1) % 14;
|
||||
|
||||
|
@ -3350,19 +3350,19 @@ void Myst::libraryBookcaseTransform_run(void) {
|
|||
_vm->_cursor->hideCursor();
|
||||
|
||||
// Play transform sound and video
|
||||
_vm->_sound->replaceSoundMyst(_libraryBookcaseSoundId);
|
||||
_vm->_sound->playEffect(_libraryBookcaseSoundId);
|
||||
_libraryBookcaseMovie->playMovie();
|
||||
|
||||
if (_state.libraryBookcaseDoor) {
|
||||
_vm->_gfx->copyImageSectionToBackBuffer(11179, Common::Rect(0, 0, 106, 81), Common::Rect(0, 72, 106, 153));
|
||||
_vm->_gfx->runTransition(kTransitionBottomToTop, Common::Rect(0, 72, 106, 153), 5, 10);
|
||||
_vm->playSoundBlocking(7348);
|
||||
_vm->_sound->replaceBackgroundMyst(4348, 16384);
|
||||
_vm->_sound->playBackground(4348, 16384);
|
||||
} else {
|
||||
_vm->_gfx->copyImageSectionToBackBuffer(11178, Common::Rect(0, 0, 107, 67), Common::Rect(437, 84, 544, 151));
|
||||
_vm->_gfx->copyBackBufferToScreen(Common::Rect(437, 84, 544, 151));
|
||||
_vm->playSoundBlocking(7348);
|
||||
_vm->_sound->replaceBackgroundMyst(4334, 16384);
|
||||
_vm->_sound->playBackground(4334, 16384);
|
||||
}
|
||||
|
||||
_vm->_cursor->showCursor();
|
||||
|
@ -3529,33 +3529,33 @@ void Myst::observatory_run() {
|
|||
|
||||
// Make sliders "initialize"
|
||||
if (observatoryIsDDMMYYYY2400()) {
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
_observatoryDaySlider->drawConditionalDataToScreen(2);
|
||||
_vm->wait(200);
|
||||
_vm->redrawResource(_observatoryDaySlider);
|
||||
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
_observatoryMonthSlider->drawConditionalDataToScreen(2);
|
||||
_vm->wait(200);
|
||||
_vm->redrawResource(_observatoryMonthSlider);
|
||||
} else {
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
_observatoryMonthSlider->drawConditionalDataToScreen(2);
|
||||
_vm->wait(200);
|
||||
_vm->redrawResource(_observatoryMonthSlider);
|
||||
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
_observatoryDaySlider->drawConditionalDataToScreen(2);
|
||||
_vm->wait(200);
|
||||
_vm->redrawResource(_observatoryDaySlider);
|
||||
}
|
||||
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
_observatoryYearSlider->drawConditionalDataToScreen(2);
|
||||
_vm->wait(200);
|
||||
_vm->redrawResource(_observatoryYearSlider);
|
||||
|
||||
_vm->_sound->replaceSoundMyst(8500);
|
||||
_vm->_sound->playEffect(8500);
|
||||
_observatoryTimeSlider->drawConditionalDataToScreen(2);
|
||||
_vm->wait(200);
|
||||
_vm->redrawResource(_observatoryTimeSlider);
|
||||
|
@ -3747,8 +3747,8 @@ void Myst::greenBook_run() {
|
|||
}
|
||||
|
||||
if (_tempVar == 1) {
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->stopEffect();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
VideoEntryPtr book = _vm->_video->playMovie(file);
|
||||
if (!book)
|
||||
|
|
|
@ -87,9 +87,7 @@ void Preview::o_fadeToBlack(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
|||
void Preview::o_fadeFromBlack(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
debugC(kDebugScript, "Opcode %d: Fade from black", op);
|
||||
|
||||
// FIXME: This glitches when enabled. The backbuffer is drawn to screen,
|
||||
// and then the fading occurs, causing the background to appear for one frame.
|
||||
// _vm->_gfx->fadeFromBlack();
|
||||
_vm->_gfx->fadeFromBlack();
|
||||
}
|
||||
|
||||
void Preview::o_stayHere(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -103,18 +101,18 @@ void Preview::o_stayHere(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
|||
void Preview::o_speechStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
debugC(kDebugScript, "Opcode %d: Speech stop", op);
|
||||
|
||||
_vm->_sound->stopSound(3001);
|
||||
_vm->_sound->stopSpeech();
|
||||
_speechRunning = false;
|
||||
_globals.currentAge = 2;
|
||||
}
|
||||
|
||||
void Preview::speechUpdateCue() {
|
||||
// This is a callback in the original, handling audio events.
|
||||
if (!_vm->_sound->isPlaying(3001)) {
|
||||
if (!_vm->_sound->isSpeechPlaying()) {
|
||||
return;
|
||||
}
|
||||
|
||||
uint samples = _vm->_sound->getNumSamplesPlayed(3001);
|
||||
uint samples = _vm->_sound->getSpeechNumSamplesPlayed();
|
||||
for (int16 i = 0; i < _cueList.pointCount; i++) {
|
||||
if (_cueList.points[i].sampleFrame > samples)
|
||||
return;
|
||||
|
@ -134,7 +132,7 @@ void Preview::speech_run() {
|
|||
switch (_speechStep) {
|
||||
case 0: // Start Voice Over... which controls book opening
|
||||
_currentCue = 0;
|
||||
_vm->_sound->playSound(3001, Audio::Mixer::kMaxChannelVolume, false, &_cueList);
|
||||
_vm->_sound->playSpeech(3001, &_cueList);
|
||||
|
||||
_speechStep++;
|
||||
break;
|
||||
|
|
|
@ -23,9 +23,11 @@
|
|||
#ifndef MYST_SCRIPTS_PREVIEW_H
|
||||
#define MYST_SCRIPTS_PREVIEW_H
|
||||
|
||||
#include "mohawk/sound.h"
|
||||
#include "mohawk/myst_stacks/myst.h"
|
||||
|
||||
#include "common/scummsys.h"
|
||||
#include "common/util.h"
|
||||
#include "mohawk/myst_stacks/myst.h"
|
||||
|
||||
namespace Mohawk {
|
||||
|
||||
|
|
|
@ -561,7 +561,7 @@ void Selenitic::mazeRunnerPlaySoundHelp() {
|
|||
soundId = 2191;
|
||||
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
_mazeRunnerLight->drawConditionalDataToScreen(0);
|
||||
}
|
||||
|
@ -603,17 +603,17 @@ void Selenitic::o_soundReceiverSigma(uint16 op, uint16 var, uint16 argc, uint16
|
|||
}
|
||||
|
||||
_soundReceiverPosition = &_state.soundReceiverPositions[source];
|
||||
_vm->_sound->stopBackgroundMyst();
|
||||
_vm->_sound->replaceSoundMyst(2287);
|
||||
_vm->_sound->stopBackground();
|
||||
_vm->_sound->playEffect(2287);
|
||||
soundReceiverDrawView();
|
||||
uint16 soundId = soundReceiverCurrentSound(source, *_soundReceiverPosition);
|
||||
_vm->_sound->replaceBackgroundMyst(soundId);
|
||||
_vm->_sound->playBackground(soundId);
|
||||
_vm->wait(1000);
|
||||
}
|
||||
|
||||
_soundReceiverPosition = oldPosition;
|
||||
_soundReceiverSigmaPressed = true;
|
||||
_vm->_sound->stopBackgroundMyst();
|
||||
_vm->_sound->stopBackground();
|
||||
|
||||
_soundReceiverSources[_state.soundReceiverCurrentSource]->drawConditionalDataToScreen(1);
|
||||
|
||||
|
@ -652,7 +652,7 @@ void Selenitic::soundReceiverLeftRight(uint direction) {
|
|||
else
|
||||
_soundReceiverLeftButton->drawConditionalDataToScreen(1);
|
||||
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->stopEffect();
|
||||
|
||||
_soundReceiverDirection = direction;
|
||||
_soundReceiverSpeed = 1;
|
||||
|
@ -717,11 +717,11 @@ void Selenitic::o_soundReceiverSource(uint16 op, uint16 var, uint16 argc, uint16
|
|||
_soundReceiverPosition = &_state.soundReceiverPositions[pressedButton];
|
||||
_soundReceiverCurrentSource = _soundReceiverSources[pressedButton];
|
||||
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->stopEffect();
|
||||
|
||||
uint16 soundId = argv[0];
|
||||
_vm->_sound->stopBackgroundMyst();
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->stopBackground();
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
_soundReceiverCurrentSource->drawConditionalDataToScreen(1);
|
||||
|
||||
|
@ -738,11 +738,11 @@ void Selenitic::o_mazeRunnerDoorButton(uint16 op, uint16 var, uint16 argc, uint1
|
|||
|
||||
if (_mazeRunnerPosition == 288) {
|
||||
_vm->changeToCard(cardIdEntry, kNoTransition);
|
||||
_vm->_sound->replaceSoundMyst(cardIdEntry);
|
||||
_vm->_sound->playEffect(cardIdEntry);
|
||||
animatedUpdate(argv[2], &argv[3], 10);
|
||||
} else if (_mazeRunnerPosition == 289) {
|
||||
_vm->changeToCard(cardIdExit, kNoTransition);
|
||||
_vm->_sound->replaceSoundMyst(cardIdExit);
|
||||
_vm->_sound->playEffect(cardIdExit);
|
||||
animatedUpdate(argv[2], &argv[3], 10);
|
||||
}
|
||||
}
|
||||
|
@ -803,7 +803,7 @@ void Selenitic::o_soundLockMove(uint16 op, uint16 var, uint16 argc, uint16 *argv
|
|||
uint16 soundId = soundLockCurrentSound(slider->_pos.y, true);
|
||||
if (_soundLockSoundId != soundId) {
|
||||
_soundLockSoundId = soundId;
|
||||
_vm->_sound->replaceSoundMyst(soundId, Audio::Mixer::kMaxChannelVolume, true);
|
||||
_vm->_sound->playEffect(soundId, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -813,10 +813,10 @@ void Selenitic::o_soundLockStartMove(uint16 op, uint16 var, uint16 argc, uint16
|
|||
MystAreaSlider *slider = soundLockSliderFromVar(var);
|
||||
|
||||
_vm->_cursor->setCursor(700);
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
_soundLockSoundId = soundLockCurrentSound(slider->_pos.y, true);
|
||||
_vm->_sound->replaceSoundMyst(_soundLockSoundId, Audio::Mixer::kMaxChannelVolume, true);
|
||||
_vm->_sound->playEffect(_soundLockSoundId, true);
|
||||
}
|
||||
|
||||
void Selenitic::o_soundLockEndMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -861,21 +861,21 @@ void Selenitic::o_soundLockEndMove(uint16 op, uint16 var, uint16 argc, uint16 *a
|
|||
|
||||
uint16 soundId = slider->getList3(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
}
|
||||
|
||||
void Selenitic::soundLockCheckSolution(MystAreaSlider *slider, uint16 value, uint16 solution, bool &solved) {
|
||||
slider->drawConditionalDataToScreen(2);
|
||||
_vm->_sound->replaceSoundMyst(soundLockCurrentSound(value / 12, false));
|
||||
_vm->_sound->playEffect(soundLockCurrentSound(value / 12, false));
|
||||
_vm->wait(1500);
|
||||
|
||||
if (value / 12 != solution)
|
||||
solved = false;
|
||||
|
||||
slider->drawConditionalDataToScreen(1);
|
||||
_vm->_sound->stopSound();
|
||||
_vm->_sound->stopEffect();
|
||||
}
|
||||
|
||||
void Selenitic::o_soundLockButton(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -883,8 +883,8 @@ void Selenitic::o_soundLockButton(uint16 op, uint16 var, uint16 argc, uint16 *ar
|
|||
|
||||
bool solved = true;
|
||||
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->replaceSoundMyst(1147);
|
||||
_vm->_sound->pauseBackground();
|
||||
_vm->_sound->playEffect(1147);
|
||||
_soundLockButton->drawConditionalDataToScreen(1);
|
||||
_vm->_cursor->hideCursor();
|
||||
|
||||
|
@ -894,8 +894,8 @@ void Selenitic::o_soundLockButton(uint16 op, uint16 var, uint16 argc, uint16 *ar
|
|||
soundLockCheckSolution(_soundLockSlider4, _state.soundLockSliderPositions[3], 6, solved);
|
||||
soundLockCheckSolution(_soundLockSlider5, _state.soundLockSliderPositions[4], 7, solved);
|
||||
|
||||
_vm->_sound->replaceSoundMyst(1148);
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->playEffect(1148);
|
||||
_vm->_sound->resumeBackground();
|
||||
|
||||
if (solved) {
|
||||
_soundLockButton->drawConditionalDataToScreen(2);
|
||||
|
@ -906,7 +906,7 @@ void Selenitic::o_soundLockButton(uint16 op, uint16 var, uint16 argc, uint16 *ar
|
|||
_vm->changeToCard(cardIdClosed, kTransitionDissolve);
|
||||
|
||||
_vm->changeToCard(cardIdOpen, kNoTransition);
|
||||
_vm->_sound->replaceSoundMyst(argv[2]);
|
||||
_vm->_sound->playEffect(argv[2]);
|
||||
|
||||
animatedUpdate(argv[4], &argv[5], argv[3]);
|
||||
} else {
|
||||
|
@ -982,7 +982,7 @@ void Selenitic::soundReceiverIncreaseSpeed() {
|
|||
|
||||
void Selenitic::soundReceiverUpdateSound() {
|
||||
uint16 soundId = soundReceiverCurrentSound(_state.soundReceiverCurrentSource, *_soundReceiverPosition);
|
||||
_vm->_sound->replaceBackgroundMyst(soundId);
|
||||
_vm->_sound->playBackground(soundId);
|
||||
}
|
||||
|
||||
uint16 Selenitic::soundReceiverCurrentSound(uint16 source, uint16 position) {
|
||||
|
|
|
@ -494,7 +494,7 @@ void Stoneship::o_generatorStart(uint16 op, uint16 var, uint16 argc, uint16 *arg
|
|||
|
||||
uint16 soundId = handle->getList1(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
|
||||
if (_state.generatorDuration)
|
||||
_state.generatorDuration -= _vm->_system->getMillis() - _state.generatorDepletionTime;
|
||||
|
@ -510,7 +510,7 @@ void Stoneship::o_generatorStart(uint16 op, uint16 var, uint16 argc, uint16 *arg
|
|||
|
||||
soundId = handle->getList2(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId, Audio::Mixer::kMaxChannelVolume, true);
|
||||
_vm->_sound->playEffect(soundId, true);
|
||||
}
|
||||
|
||||
void Stoneship::o_generatorStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -537,7 +537,7 @@ void Stoneship::o_generatorStop(uint16 op, uint16 var, uint16 argc, uint16 *argv
|
|||
|
||||
uint16 soundId = handle->getList3(0);
|
||||
if (soundId)
|
||||
_vm->_sound->replaceSoundMyst(soundId);
|
||||
_vm->_sound->playEffect(soundId);
|
||||
}
|
||||
|
||||
void Stoneship::chargeBattery_run() {
|
||||
|
@ -674,7 +674,7 @@ void Stoneship::o_chestValveVideos(uint16 op, uint16 var, uint16 argc, uint16 *a
|
|||
|
||||
Common::String movie = _vm->wrapMovieFilename("ligspig", kStoneshipStack);
|
||||
|
||||
_vm->_sound->playSound(2132);
|
||||
_vm->_sound->playEffect(2132);
|
||||
|
||||
if (_state.chestValveState) {
|
||||
// Valve closing
|
||||
|
@ -695,7 +695,7 @@ void Stoneship::o_chestValveVideos(uint16 op, uint16 var, uint16 argc, uint16 *a
|
|||
valve->setBounds(Audio::Timestamp(0, 350, 600), Audio::Timestamp(0, 650, 600));
|
||||
_vm->waitUntilMovieEnds(valve);
|
||||
|
||||
_vm->_sound->playSound(3132);
|
||||
_vm->_sound->playEffect(3132);
|
||||
|
||||
for (uint i = 0; i < 25; i++) {
|
||||
valve = _vm->_video->playMovie(movie);
|
||||
|
@ -707,7 +707,7 @@ void Stoneship::o_chestValveVideos(uint16 op, uint16 var, uint16 argc, uint16 *a
|
|||
_vm->waitUntilMovieEnds(valve);
|
||||
}
|
||||
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
} else {
|
||||
// Valve opening
|
||||
VideoEntryPtr valve = _vm->_video->playMovie(movie);
|
||||
|
@ -745,7 +745,7 @@ void Stoneship::o_trapLockOpen(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
lock->setBounds(Audio::Timestamp(0, 0, 600), Audio::Timestamp(0, 750, 600));
|
||||
_vm->waitUntilMovieEnds(lock);
|
||||
|
||||
_vm->_sound->playSound(2143);
|
||||
_vm->_sound->playEffect(2143);
|
||||
|
||||
lock = _vm->_video->playMovie(movie);
|
||||
if (!lock)
|
||||
|
@ -756,7 +756,7 @@ void Stoneship::o_trapLockOpen(uint16 op, uint16 var, uint16 argc, uint16 *argv)
|
|||
_vm->waitUntilMovieEnds(lock);
|
||||
|
||||
if (_state.pumpState != 4)
|
||||
_vm->_sound->playSound(4143);
|
||||
_vm->_sound->playEffect(4143);
|
||||
}
|
||||
|
||||
void Stoneship::o_sideDoorsMovies(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
|
@ -767,7 +767,7 @@ void Stoneship::o_sideDoorsMovies(uint16 op, uint16 var, uint16 argc, uint16 *ar
|
|||
debugC(kDebugScript, "\tmovieId: %d", movieId);
|
||||
|
||||
_vm->_cursor->hideCursor();
|
||||
_vm->_sound->pauseBackgroundMyst();
|
||||
_vm->_sound->pauseBackground();
|
||||
|
||||
switch (movieId) {
|
||||
case 0:
|
||||
|
@ -791,14 +791,14 @@ void Stoneship::o_sideDoorsMovies(uint16 op, uint16 var, uint16 argc, uint16 *ar
|
|||
break;
|
||||
}
|
||||
|
||||
_vm->_sound->resumeBackgroundMyst();
|
||||
_vm->_sound->resumeBackground();
|
||||
_vm->_cursor->showCursor();
|
||||
}
|
||||
|
||||
void Stoneship::o_cloudOrbEnter(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
|
||||
debugC(kDebugScript, "Opcode %d: Cloud orb enter", op);
|
||||
|
||||
_vm->_sound->replaceSoundMyst(_cloudOrbSound, Audio::Mixer::kMaxChannelVolume, true);
|
||||
_vm->_sound->playEffect(_cloudOrbSound, true);
|
||||
_cloudOrbMovie->playMovie();
|
||||
}
|
||||
|
||||
|
@ -806,7 +806,7 @@ void Stoneship::o_cloudOrbLeave(uint16 op, uint16 var, uint16 argc, uint16 *argv
|
|||
debugC(kDebugScript, "Opcode %d: Cloud orb leave", op);
|
||||
|
||||
_cloudOrbMovie->pauseMovie(true);
|
||||
_vm->_sound->replaceSoundMyst(_cloudOrbStopSound);
|
||||
_vm->_sound->playEffect(_cloudOrbStopSound);
|
||||
_vm->_gfx->runTransition(kTransitionTopToBottom, getInvokingResource<MystArea>()->getRect(), 4, 0);
|
||||
}
|
||||
|
||||
|
@ -920,7 +920,7 @@ void Stoneship::tunnel_run() {
|
|||
_vm->_gfx->copyImageToScreen(_tunnelImages[1], Common::Rect(544, 333));
|
||||
}
|
||||
|
||||
_vm->_sound->replaceSoundMyst(_tunnelAlarmSound);
|
||||
_vm->_sound->playEffect(_tunnelAlarmSound);
|
||||
|
||||
// Draw tunnel dark
|
||||
if (_tunnelImagesCount) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue