Skip to content

Commit

Permalink
NEVERHOOD: Add support for the demo version
Browse files Browse the repository at this point in the history
- Remove debug resource dumping code
- Fix Scene1501 (pictures without sound weren't displayed/too fast)
- Move main loop to mainLoop method
  • Loading branch information
johndoe123 authored and wjp committed May 8, 2013
1 parent 060287a commit 0f1aa64
Show file tree
Hide file tree
Showing 11 changed files with 139 additions and 137 deletions.
21 changes: 21 additions & 0 deletions engines/neverhood/detection.cpp
Expand Up @@ -55,6 +55,10 @@ uint16 NeverhoodEngine::getVersion() const {
return _gameDescription->version;
}

bool NeverhoodEngine::isDemo() const {
return _gameDescription->desc.flags & ADGF_DEMO;
}

}

static const PlainGameDescriptor neverhoodGames[] = {
Expand Down Expand Up @@ -84,6 +88,23 @@ static const NeverhoodGameDescription gameDescriptions[] = {
0,
},

{
// Neverhood English demo version
{
"neverhood",
"Demo",
AD_ENTRY1s("nevdemo.blb", "05b735cfb1086892bec79b54dca5545b", 22564568),
Common::EN_ANY,
Common::kPlatformWindows,
ADGF_DEMO,
GUIO1(GUIO_NONE)
},
0,
0,
0,
0,
},

{ AD_TABLE_END_MARKER, 0, 0, 0, 0 }
};

Expand Down
50 changes: 30 additions & 20 deletions engines/neverhood/gamemodule.cpp
Expand Up @@ -149,7 +149,9 @@ void GameModule::handleKeyDown(Common::KeyCode keyCode) {
}

void GameModule::handleEscapeKey() {
if (!_prevChildObject /* && _canRequestMainMenu TODO?*/)
if (_vm->isDemo())
_vm->quitGame();
else if (!_prevChildObject /* && _canRequestMainMenu TODO?*/)
_mainMenuRequested = true;
else if (_childObject)
sendMessage(_childObject, 0x000C, 0);
Expand Down Expand Up @@ -316,8 +318,9 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam &param, Enti

void GameModule::startup() {
// TODO: Displaying of error text probably not needed in ScummVM
// createModule(1500, 0); // Logos and intro video //Real

#if 1
createModule(1500, 0); // Logos and intro video //Real
#else
// DEBUG>>>
/*
setGlobalVar(V_SEEN_MUSIC_BOX, 1);
Expand Down Expand Up @@ -417,7 +420,7 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 1;
createModule(2700, -1);
#endif
#if 1
#if 0
_vm->gameState().sceneNum = 1;
createModule(2800, -1);
#endif
Expand All @@ -426,9 +429,11 @@ void GameModule::startup() {
_vm->gameState().sceneNum = 0;
createModule(2500, -1);
#endif
#if 0
#if 1
_vm->gameState().sceneNum = 1;
createModule(2400, -1);
createModule(2300, -1);
#endif
#endif
}

Expand Down Expand Up @@ -528,6 +533,9 @@ void GameModule::createModule(int moduleNum, int which) {
setGlobalVar(V_MODULE_NAME, 0x81293110);
_childObject = new Module3000(_vm, this, which);
break;
case 9999:
createDemoScene();
break;
default:
error("GameModule::createModule() Could not create module %d", moduleNum);
}
Expand Down Expand Up @@ -689,17 +697,18 @@ void GameModule::updateModule() {
createModule(2300, 1);
break;
case 2300:
if (_moduleResult == 1) {
createModule(2200, 0);
} else if (_moduleResult == 2) {
if (_moduleResult == 2)
createModule(1200, 0);
} else if (_moduleResult == 3) {
else if (_moduleResult == 0)
createModule(1000, 1);
else if (_vm->isDemo())
createModule(9999, -1);
else if (_moduleResult == 1)
createModule(2200, 0);
else if (_moduleResult == 3)
createModule(2400, 0);
} else if (_moduleResult == 4) {
else if (_moduleResult == 4)
createModule(3000, 0);
} else {
createModule(1000, 1);
}
break;
case 2400:
createModule(2300, 3);
Expand All @@ -708,21 +717,19 @@ void GameModule::updateModule() {
createModule(2600, 1);
break;
case 2600:
if (_moduleResult == 1) {
if (_moduleResult == 1)
createModule(2500, 0);
} else {
else
createModule(1200, 1);
}
break;
case 2700:
createModule(1800, 2);
break;
case 2800:
if (_moduleResult == 1) {
if (_moduleResult == 1)
createModule(2900, 5);
} else {
else
createModule(1800, 0);
}
break;
case 2900:
if (_moduleResult != 0xFFFFFFFF) {
Expand Down Expand Up @@ -786,6 +793,9 @@ void GameModule::updateModule() {
createModule(2300, 4);
}
break;
case 9999:
createModuleByHash(getGlobalVar(V_MODULE_NAME));
break;
}
}
}
Expand Down
5 changes: 5 additions & 0 deletions engines/neverhood/module.cpp
Expand Up @@ -24,6 +24,7 @@
#include "neverhood/navigationscene.h"
#include "neverhood/smackerscene.h"
#include "neverhood/module1000.h"
#include "neverhood/module1500.h"

namespace Neverhood {

Expand Down Expand Up @@ -98,6 +99,10 @@ void Module::createStaticScene(uint32 backgroundFileHash, uint32 cursorFileHash)
_childObject = new StaticScene(_vm, this, backgroundFileHash, cursorFileHash);
}

void Module::createDemoScene() {
_childObject = new Scene1501(_vm, this, 0x0009B624, 0, 288, 0);
}

bool Module::updateChild() {
if (_childObject) {
_childObject->handleUpdate();
Expand Down
1 change: 1 addition & 0 deletions engines/neverhood/module.h
Expand Up @@ -62,6 +62,7 @@ class Module : public Entity {
void createSmackerScene(uint32 fileHash, bool doubleSurface, bool flag1, bool canAbort);
void createSmackerScene(const uint32 *fileHashList, bool doubleSurface, bool flag1, bool canAbort);
void createStaticScene(uint32 backgroundFileHash, uint32 cursorFileHash);
void createDemoScene();
bool updateChild();
void leaveModule(uint32 result);
};
Expand Down
10 changes: 7 additions & 3 deletions engines/neverhood/module1000.cpp
Expand Up @@ -95,9 +95,13 @@ void Module1000::updateScene() {
case 1:
if (_moduleResult == 1)
leaveModule(0);
else if (_moduleResult == 2)
createScene(3, 0);
else
else if (_moduleResult == 2) {
if (_vm->isDemo())
// Demo version returns to the same scene
createScene(1, 2);
else
createScene(3, 0);
} else
createScene(0, 1);
break;
case 2:
Expand Down
2 changes: 1 addition & 1 deletion engines/neverhood/module1500.cpp
Expand Up @@ -106,7 +106,7 @@ void Scene1501::update() {
_vm->_screen->clear();
leaveScene(0);
}
} else if ((_countdown2 != 0 && (--_countdown2 == 0)) || !isSoundPlaying(0)) {
} else if ((_countdown2 != 0 && (--_countdown2 == 0)) || (_countdown2 == 0 && !isSoundPlaying(0))) {
_countdown1 = 12;
_palette->startFadeToBlack(11);
}
Expand Down
8 changes: 8 additions & 0 deletions engines/neverhood/module2300.cpp
Expand Up @@ -105,6 +105,9 @@ void Module2300::createScene(int sceneNum, int which) {
_vm->_soundMan->setTwoSoundsPlayFlag(true);
createSmackerScene(0x20080A0B, true, true, false);
break;
case 9999:
createDemoScene();
break;
}
SetUpdateHandler(&Module2300::updateScene);
_childObject->handleUpdate();
Expand All @@ -122,6 +125,8 @@ void Module2300::updateScene() {
case 1:
if (_moduleResult == 1)
createScene(0, 0);
else if (_vm->isDemo())
createScene(9999, 0);
else if (_moduleResult == 2)
createScene(2, 1);
else if (_moduleResult == 3)
Expand Down Expand Up @@ -149,6 +154,9 @@ void Module2300::updateScene() {
_vm->_soundMan->setTwoSoundsPlayFlag(false);
createScene(1, 2);
break;
case 9999:
createScene(1, -1);
break;
}
} else {
switch (_sceneNum) {
Expand Down
22 changes: 18 additions & 4 deletions engines/neverhood/module2600.cpp
Expand Up @@ -124,6 +124,9 @@ void Module2600::createScene(int sceneNum, int which) {
else
createSmackerScene(0x42980941, true, true, false);
break;
case 9999:
createDemoScene();
break;
}
SetUpdateHandler(&Module2600::updateScene);
_childObject->handleUpdate();
Expand Down Expand Up @@ -151,8 +154,12 @@ void Module2600::updateScene() {
case 2:
if (_moduleResult == 0)
createScene(1, 0);
else if (_moduleResult == 1)
createScene(1002, -1);
else if (_moduleResult == 1) {
if (_vm->isDemo())
createScene(9999, -1);
else
createScene(1002, -1);
}
break;
case 3:
if (_moduleResult == 0) {
Expand All @@ -178,8 +185,12 @@ void Module2600::updateScene() {
createScene(3, 1);
break;
case 6:
if (_moduleResult == 0)
createScene(1006, -1);
if (_moduleResult == 0) {
if (_vm->isDemo())
createScene(9999, -1);
else
createScene(1006, -1);
}
else if (_moduleResult == 1)
createScene(1, 2);
break;
Expand All @@ -201,6 +212,9 @@ void Module2600::updateScene() {
case 1008:
createScene(6, 0);
break;
case 9999:
createScene(_vm->gameState().sceneNum, -1);
break;
}
}
}
Expand Down

0 comments on commit 0f1aa64

Please sign in to comment.