aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/neverhood/gamemodule.cpp9
-rw-r--r--engines/neverhood/gamemodule.h1
-rw-r--r--engines/neverhood/neverhood.cpp7
-rw-r--r--engines/neverhood/smackerplayer.cpp4
-rw-r--r--engines/neverhood/smackerscene.cpp9
-rw-r--r--engines/neverhood/smackerscene.h2
6 files changed, 25 insertions, 7 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 1b9c9f361d..0c2e0907a7 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -85,6 +85,13 @@ void GameModule::handleMouseDown(int16 x, int16 y) {
}
}
+void GameModule::handleSpaceKey() {
+ if (_childObject) {
+ debug(2, "GameModule::handleSpaceKey()");
+ sendMessage(_childObject, 9, 0);
+ }
+}
+
void GameModule::initScene1307Vars() {
// Exit if it's already initialized
@@ -314,7 +321,7 @@ void GameModule::startup() {
#if 1
_vm->gameState().which = 0;
_vm->gameState().sceneNum = 1;
- createModule(2200, -1);
+ createModule(3000, -1);
#endif
#if 0
_vm->gameState().sceneNum = 0;
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index af72d53fc9..7031bbbe16 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -37,6 +37,7 @@ public:
void startup();
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
+ void handleSpaceKey();
void initScene1307Vars();
void initScene1405Vars();
void initScene2401Vars();
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index e5c07b5b8d..4b75f68c3e 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -116,6 +116,13 @@ Common::Error NeverhoodEngine::run() {
switch (event.type) {
case Common::EVENT_KEYDOWN:
_keyState = event.kbd.keycode;
+ switch (_keyState) {
+ case Common::KEYCODE_SPACE:
+ _gameModule->handleSpaceKey();
+ break;
+ default:
+ break;
+ }
break;
case Common::EVENT_KEYUP:
_keyState = Common::KEYCODE_INVALID;
diff --git a/engines/neverhood/smackerplayer.cpp b/engines/neverhood/smackerplayer.cpp
index 799f04f09a..0ed6748e45 100644
--- a/engines/neverhood/smackerplayer.cpp
+++ b/engines/neverhood/smackerplayer.cpp
@@ -103,10 +103,14 @@ void SmackerPlayer::open(uint32 fileHash, bool keepLastFrame) {
_palette = new Palette(_vm);
_palette->usePalette();
+
+ _smackerDecoder->start();
}
void SmackerPlayer::close() {
+ if (_smackerDecoder)
+ _smackerDecoder->stop();
delete _smackerDecoder;
delete _palette;
// NOTE: The SmackerDecoder deletes the _stream
diff --git a/engines/neverhood/smackerscene.cpp b/engines/neverhood/smackerscene.cpp
index e2cb7cdfa3..d4f65b3652 100644
--- a/engines/neverhood/smackerscene.cpp
+++ b/engines/neverhood/smackerscene.cpp
@@ -25,7 +25,7 @@
namespace Neverhood {
SmackerScene::SmackerScene(NeverhoodEngine *vm, Module *parentModule, bool doubleSurface, bool flag1, bool canAbort)
- : Scene(vm, parentModule, true), _doubleSurface(doubleSurface), _flag1(flag1), _canAbort(canAbort), _fieldDF(false),
+ : Scene(vm, parentModule, true), _doubleSurface(doubleSurface), _flag1(flag1), _canAbort(canAbort), _videoPlayedBefore(false),
_fileHashListIndex(-1), _fileHashList(NULL), _playNextVideoFlag(false) {
debug("SmackerScene::SmackerScene(%d, %d, %d)", doubleSurface, flag1, canAbort);
@@ -77,10 +77,9 @@ void SmackerScene::nextVideo() {
sendMessage(_parentModule, 0x1009, 0);
return;
}
- _fieldDF = getSubVar(VA_SMACKER_PLAYED, smackerFileHash);
- if (!_fieldDF) {
+ _videoPlayedBefore = getSubVar(VA_SMACKER_PLAYED, smackerFileHash);
+ if (!_videoPlayedBefore)
setSubVar(VA_SMACKER_PLAYED, smackerFileHash, 1);
- }
if (_fileHashListIndex == 0)
_smackerPlayer = addSmackerPlayer(new SmackerPlayer(_vm, this, smackerFileHash, _doubleSurface, false));
else
@@ -105,7 +104,7 @@ uint32 SmackerScene::handleMessage(int messageNum, const MessageParam &param, En
uint32 messageResult = Scene::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x0009:
- if ((_fieldDF && _flag1) || (_canAbort && _flag1))
+ if ((_videoPlayedBefore && _flag1) || (_canAbort && _flag1))
_playNextVideoFlag = true;
break;
case 0x000C:
diff --git a/engines/neverhood/smackerscene.h b/engines/neverhood/smackerscene.h
index 05237664c3..54de28a720 100644
--- a/engines/neverhood/smackerscene.h
+++ b/engines/neverhood/smackerscene.h
@@ -40,7 +40,7 @@ protected:
bool _doubleSurface;
bool _flag1;
bool _canAbort;
- bool _fieldDF;
+ bool _videoPlayedBefore;
bool _playNextVideoFlag;
int _fileHashListIndex;
const uint32 *_fileHashList;