aboutsummaryrefslogtreecommitdiff
path: root/engines/prince/prince.cpp
diff options
context:
space:
mode:
authorlukaslw2014-07-26 20:49:42 +0200
committerlukaslw2014-07-26 20:58:35 +0200
commitc1456d273469d3eb876ae5b3d4fd602bf2c488ba (patch)
tree926639f67e8edb690135f0a5129a12b06a654195 /engines/prince/prince.cpp
parentc224455e1bd2573e7399206020c057645a9d80bc (diff)
downloadscummvm-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.cpp27
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;