aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood
diff options
context:
space:
mode:
Diffstat (limited to 'engines/neverhood')
-rw-r--r--engines/neverhood/modules/module1000.cpp2
-rw-r--r--engines/neverhood/navigationscene.cpp11
-rw-r--r--engines/neverhood/navigationscene.h1
3 files changed, 11 insertions, 3 deletions
diff --git a/engines/neverhood/modules/module1000.cpp b/engines/neverhood/modules/module1000.cpp
index ef2872ba2e..415d0f72b1 100644
--- a/engines/neverhood/modules/module1000.cpp
+++ b/engines/neverhood/modules/module1000.cpp
@@ -719,7 +719,7 @@ void AsScene1002DoorSpy::stDoorSpyBoxingGlove() {
}
SsCommonPressButton::SsCommonPressButton(NeverhoodEngine *vm, Scene *parentScene, uint32 fileHash1, uint32 fileHash2, int surfacePriority, uint32 soundFileHash)
- : StaticSprite(vm, 1100), _parentScene(parentScene), _status(0) {
+ : StaticSprite(vm, 1100), _parentScene(parentScene), _status(0), _countdown(0) {
_soundFileHash = soundFileHash != 0 ? soundFileHash : 0x44141000;
_fileHashes[0] = fileHash1;
diff --git a/engines/neverhood/navigationscene.cpp b/engines/neverhood/navigationscene.cpp
index d802322858..9752ee618c 100644
--- a/engines/neverhood/navigationscene.cpp
+++ b/engines/neverhood/navigationscene.cpp
@@ -69,7 +69,7 @@ int NavigationScene::getNavigationAreaType() {
void NavigationScene::update() {
if (_smackerFileHash != 0) {
showMouse(false);
- _smackerPlayer->open(_smackerFileHash, false);
+ openSmacker(_smackerFileHash, false);
_vm->_screen->clear();
_vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
_smackerDone = false;
@@ -92,7 +92,7 @@ void NavigationScene::update() {
_vm->_soundMan->setTwoSoundsPlayFlag(false);
_vm->_soundMan->setSoundThreePlayFlag(false);
_smackerDone = false;
- _smackerPlayer->open(navigationItem.fileHash, true);
+ openSmacker(navigationItem.fileHash, true);
_vm->_screen->clear();
_vm->_screen->setSmackerDecoder(_smackerPlayer->getSmackerDecoder());
sendMessage(_parentModule, 0x100A, _navigationIndex);
@@ -101,6 +101,13 @@ void NavigationScene::update() {
Scene::update();
}
+void NavigationScene::openSmacker(uint32 fileHash, bool keepLastFrame) {
+ // The old Smacker surface is deleted when a new Smacker is opened.
+ removeSurface(_smackerPlayer->getSurface());
+ _smackerPlayer->open(fileHash, keepLastFrame);
+ addSurface(_smackerPlayer->getSurface());
+}
+
uint32 NavigationScene::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
switch (messageNum) {
case 0x0000:
diff --git a/engines/neverhood/navigationscene.h b/engines/neverhood/navigationscene.h
index ebe9a3597c..767b3f5d20 100644
--- a/engines/neverhood/navigationscene.h
+++ b/engines/neverhood/navigationscene.h
@@ -50,6 +50,7 @@ protected:
bool _leaveSceneAfter;
const byte *_itemsTypes;
void update();
+ void openSmacker(uint32 fileHash, bool keepLastFrame);
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
void createMouseCursor();
void handleNavigation(const NPoint &mousePos);