diff options
Diffstat (limited to 'engines/zvision/scripting/sidefx')
-rw-r--r-- | engines/zvision/scripting/sidefx/music_node.cpp | 45 | ||||
-rw-r--r-- | engines/zvision/scripting/sidefx/music_node.h | 3 | ||||
-rw-r--r-- | engines/zvision/scripting/sidefx/timer_node.cpp | 2 |
3 files changed, 30 insertions, 20 deletions
diff --git a/engines/zvision/scripting/sidefx/music_node.cpp b/engines/zvision/scripting/sidefx/music_node.cpp index c79dd0296d..56598189f6 100644 --- a/engines/zvision/scripting/sidefx/music_node.cpp +++ b/engines/zvision/scripting/sidefx/music_node.cpp @@ -47,6 +47,8 @@ MusicNode::MusicNode(ZVision *engine, uint32 key, Common::String &filename, bool _pantrack = false; _pantrackPosition = 0; _sub = NULL; + _stereo = false; + _loaded = false; Audio::RewindableAudioStream *audioStream = NULL; @@ -59,30 +61,35 @@ MusicNode::MusicNode(ZVision *engine, uint32 key, Common::String &filename, bool audioStream = makeRawZorkStream(filename, _engine); } - _stereo = audioStream->isStereo(); + if (audioStream) { + _stereo = audioStream->isStereo(); - if (_loop) { - Audio::LoopingAudioStream *loopingAudioStream = new Audio::LoopingAudioStream(audioStream, 0, DisposeAfterUse::YES); - _engine->_mixer->playStream(Audio::Mixer::kPlainSoundType, &_handle, loopingAudioStream, -1, _volume); - } else { - _engine->_mixer->playStream(Audio::Mixer::kPlainSoundType, &_handle, audioStream, -1, _volume); - } + if (_loop) { + Audio::LoopingAudioStream *loopingAudioStream = new Audio::LoopingAudioStream(audioStream, 0, DisposeAfterUse::YES); + _engine->_mixer->playStream(Audio::Mixer::kPlainSoundType, &_handle, loopingAudioStream, -1, _volume); + } else { + _engine->_mixer->playStream(Audio::Mixer::kPlainSoundType, &_handle, audioStream, -1, _volume); + } - if (_key != StateKey_NotSet) - _engine->getScriptManager()->setStateValue(_key, 1); + if (_key != StateKey_NotSet) + _engine->getScriptManager()->setStateValue(_key, 1); + + // Change filename.raw into filename.sub + Common::String subname = filename; + subname.setChar('s', subname.size() - 3); + subname.setChar('u', subname.size() - 2); + subname.setChar('b', subname.size() - 1); - // Change filename.raw into filename.sub - Common::String subname = filename; - subname.setChar('s', subname.size() - 3); - subname.setChar('u', subname.size() - 2); - subname.setChar('b', subname.size() - 1); + if (_engine->getSearchManager()->hasFile(subname)) + _sub = new Subtitle(_engine, subname); - if (_engine->getSearchManager()->hasFile(subname)) - _sub = new Subtitle(_engine, subname); + _loaded = true; + } } MusicNode::~MusicNode() { - _engine->_mixer->stopHandle(_handle); + if (!_loaded) + _engine->_mixer->stopHandle(_handle); if (_key != StateKey_NotSet) _engine->getScriptManager()->setStateValue(_key, 2); if (_sub) @@ -110,7 +117,7 @@ void MusicNode::setFade(int32 time, uint8 target) { } bool MusicNode::process(uint32 deltaTimeInMillis) { - if (! _engine->_mixer->isSoundHandleActive(_handle)) + if (!_loaded || ! _engine->_mixer->isSoundHandleActive(_handle)) return stop(); else { uint8 _newvol = _volume; @@ -137,6 +144,8 @@ bool MusicNode::process(uint32 deltaTimeInMillis) { } void MusicNode::setVolume(uint8 newVolume) { + if (!_loaded) + return; if (_pantrack) { int curX = _engine->getScriptManager()->getStateValue(StateKey_ViewPos); curX -= _pantrackPosition; diff --git a/engines/zvision/scripting/sidefx/music_node.h b/engines/zvision/scripting/sidefx/music_node.h index c89345f0d0..09bdc3707e 100644 --- a/engines/zvision/scripting/sidefx/music_node.h +++ b/engines/zvision/scripting/sidefx/music_node.h @@ -77,7 +77,6 @@ public: void setFade(int32 time, uint8 target); private: - int32 _timeLeft; bool _pantrack; int32 _pantrackPosition; int32 _attenuate; @@ -89,6 +88,7 @@ private: bool _stereo; Audio::SoundHandle _handle; Subtitle *_sub; + bool _loaded; }; class MusicMidiNode : public MusicNodeBASE { @@ -115,7 +115,6 @@ public: private: int8 _chan; int8 _noteNumber; - int8 _velocity; int8 _pan; int8 _volume; int8 _prog; diff --git a/engines/zvision/scripting/sidefx/timer_node.cpp b/engines/zvision/scripting/sidefx/timer_node.cpp index abf2c90b04..170f6e7472 100644 --- a/engines/zvision/scripting/sidefx/timer_node.cpp +++ b/engines/zvision/scripting/sidefx/timer_node.cpp @@ -33,6 +33,8 @@ namespace ZVision { TimerNode::TimerNode(ZVision *engine, uint32 key, uint timeInSeconds) : SideFX(engine, key, SIDEFX_TIMER) { + _timeLeft = 0; + if (_engine->getGameId() == GID_NEMESIS) _timeLeft = timeInSeconds * 1000; else if (_engine->getGameId() == GID_GRANDINQUISITOR) |