diff options
-rw-r--r-- | engines/neverhood/diskplayerscene.cpp | 15 | ||||
-rw-r--r-- | engines/neverhood/diskplayerscene.h | 1 |
2 files changed, 12 insertions, 4 deletions
diff --git a/engines/neverhood/diskplayerscene.cpp b/engines/neverhood/diskplayerscene.cpp index d972943759..da1ec984a5 100644 --- a/engines/neverhood/diskplayerscene.cpp +++ b/engines/neverhood/diskplayerscene.cpp @@ -473,8 +473,15 @@ uint32 DiskplayerScene::handleMessage(int messageNum, const MessageParam ¶m, return 0; } +void DiskplayerScene::openSmacker(uint32 fileHash, bool keepLastFrame) { + // The old Smacker surface is deleted when a new Smacker is opened. + removeSurface(_diskSmackerPlayer->getSurface()); + _diskSmackerPlayer->open(fileHash, keepLastFrame); + addSurface(_diskSmackerPlayer->getSurface()); +} + void DiskplayerScene::stop() { - _diskSmackerPlayer->open(0x08288103, true); + openSmacker(0x08288103, true); _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder()); _palette->usePalette(); _ssPlayButton->release(); @@ -483,7 +490,7 @@ void DiskplayerScene::stop() { } void DiskplayerScene::tuneIn() { - _diskSmackerPlayer->open(0x900001C1, false); + openSmacker(0x900001C1, false); _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder()); _palette->usePalette(); _ssPlayButton->release(); @@ -492,7 +499,7 @@ void DiskplayerScene::tuneIn() { } void DiskplayerScene::playDisk() { - _diskSmackerPlayer->open(kDiskplayerSmackerFileHashes[_diskIndex], false); + openSmacker(kDiskplayerSmackerFileHashes[_diskIndex], false); _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder()); _palette->usePalette(); _updateStatus = kUSPlaying; @@ -500,7 +507,7 @@ void DiskplayerScene::playDisk() { } void DiskplayerScene::playStatic() { - _diskSmackerPlayer->open(0x90000101, false); + openSmacker(0x90000101, false); _vm->_screen->setSmackerDecoder(_diskSmackerPlayer->getSmackerDecoder()); _palette->usePalette(); _ssPlayButton->release(); diff --git a/engines/neverhood/diskplayerscene.h b/engines/neverhood/diskplayerscene.h index f3fd9ea874..4afaf8af9f 100644 --- a/engines/neverhood/diskplayerscene.h +++ b/engines/neverhood/diskplayerscene.h @@ -99,6 +99,7 @@ protected: bool _dropKey; void update(); uint32 handleMessage(int messageNum, const MessageParam ¶m, Entity *sender); + void openSmacker(uint32 fileHash, bool keepLastFrame); void stop(); void tuneIn(); void playDisk(); |