diff options
author | lukaslw | 2014-07-26 20:49:42 +0200 |
---|---|---|
committer | lukaslw | 2014-07-26 20:58:35 +0200 |
commit | c1456d273469d3eb876ae5b3d4fd602bf2c488ba (patch) | |
tree | 926639f67e8edb690135f0a5129a12b06a654195 /engines/prince/prince.cpp | |
parent | c224455e1bd2573e7399206020c057645a9d80bc (diff) | |
download | scummvm-rg350-c1456d273469d3eb876ae5b3d4fd602bf2c488ba.tar.gz scummvm-rg350-c1456d273469d3eb876ae5b3d4fd602bf2c488ba.tar.bz2 scummvm-rg350-c1456d273469d3eb876ae5b3d4fd602bf2c488ba.zip |
PRINCE: MIDI music - update. loadMusic(), stopMusic(), O_SETMUSIC, O_STOPMUSIC
Diffstat (limited to 'engines/prince/prince.cpp')
-rw-r--r-- | engines/prince/prince.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index 62df0c7cb0..e3b274d674 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -93,7 +93,7 @@ PrinceEngine::PrinceEngine(OSystem *syst, const PrinceGameDescription *gameDesc) _traceLineLen(0), _rembBitmapTemp(nullptr), _rembBitmap(nullptr), _rembMask(0), _rembX(0), _rembY(0), _checkBitmapTemp(nullptr), _checkBitmap(nullptr), _checkMask(0), _checkX(0), _checkY(0), _traceLineFirstPointFlag(false), _tracePointFirstPointFlag(false), _coordsBuf2(nullptr), _coords2(nullptr), _coordsBuf3(nullptr), _coords3(nullptr), - _shanLen1(0), _directionTable(nullptr) { + _shanLen1(0), _directionTable(nullptr), _currentMidi(0) { // Debug/console setup DebugMan.addDebugChannel(DebugChannel::kScript, "script", "Prince Script debug channel"); @@ -405,8 +405,7 @@ bool PrinceEngine::loadLocation(uint16 locationNr) { SearchMan.add(locationNrStr, locationArchive); - const char *musName = MusicPlayer::_musTable[MusicPlayer::_musRoomTable[locationNr]]; - _midiPlayer->loadMidi(musName); + loadMusic(_locationNr); // load location background, replace old one Resource::loadResource(_roomBmp, "room", true); @@ -573,6 +572,28 @@ void PrinceEngine::makeInvCursor(int itemNr) { } } +bool PrinceEngine::loadMusic(int musNumber) { + uint8 midiNumber = MusicPlayer::_musRoomTable[musNumber]; + if (midiNumber) { + if (midiNumber != 100) { + if (_currentMidi != midiNumber) { + _currentMidi = midiNumber; + const char *musName = MusicPlayer::_musTable[_currentMidi]; + _midiPlayer->loadMidi(musName); + } + } + } else { + stopMusic(); + } + return true; +} + +void PrinceEngine::stopMusic() { + if (_midiPlayer->isPlaying()) { + _midiPlayer->stop(); + } +} + bool PrinceEngine::playNextFrame() { if (!_flicPlayer.isVideoLoaded()) return false; |