aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood
diff options
context:
space:
mode:
authorjohndoe1232013-01-22 12:13:34 +0000
committerWillem Jan Palenstijn2013-05-08 20:47:42 +0200
commit490d447ed19d481c9e15847c9bb43223b71c7847 (patch)
treef2f81fa465decd05fc12221f04177ece0d1ac9be /engines/neverhood
parent4389d32974cd0965624d30b6566fcc8e1c2a72b4 (diff)
downloadscummvm-rg350-490d447ed19d481c9e15847c9bb43223b71c7847.tar.gz
scummvm-rg350-490d447ed19d481c9e15847c9bb43223b71c7847.tar.bz2
scummvm-rg350-490d447ed19d481c9e15847c9bb43223b71c7847.zip
NEVERHOOD: Implement restart functionality (from both main menu and game logic)
- Some minor cleanup
Diffstat (limited to 'engines/neverhood')
-rw-r--r--engines/neverhood/gamemodule.cpp29
-rw-r--r--engines/neverhood/gamemodule.h2
-rw-r--r--engines/neverhood/gamevars.cpp5
-rw-r--r--engines/neverhood/gamevars.h1
-rw-r--r--engines/neverhood/menumodule.cpp82
-rw-r--r--engines/neverhood/module1600.cpp8
-rw-r--r--engines/neverhood/module1900.cpp20
-rw-r--r--engines/neverhood/neverhood.cpp2
8 files changed, 74 insertions, 75 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index cf56522fbd..fa8a6d5d29 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -75,7 +75,7 @@ enum {
GameModule::GameModule(NeverhoodEngine *vm)
: Module(vm, NULL), _moduleNum(-1), _prevChildObject(NULL), _prevModuleNum(-1),
- _mainMenuRequested(false), _gameWasLoaded(false) {
+ _restartGameRequested(false), _mainMenuRequested(false), _gameWasLoaded(false) {
// Other initializations moved to actual engine class
_vm->_soundMan->playSoundThree(0x002D0031, 0x8861079);
@@ -400,9 +400,9 @@ void GameModule::startup() {
// <<<DEBUG
#if 1
- _vm->gameState().which = 1;
- _vm->gameState().sceneNum = 1;
- createModule(1000, -1);
+ _vm->gameState().which = 0;
+ _vm->gameState().sceneNum = 8;
+ createModule(1800, -1);
#endif
#if 0
_vm->gameState().sceneNum = 5;
@@ -473,7 +473,17 @@ void GameModule::restoreGame() {
createModuleByHash(getGlobalVar(V_MODULE_NAME));
}
+void GameModule::requestRestartGame(bool requestMainMenu) {
+ _restartGameRequested = true;
+ _mainMenuRequested = requestMainMenu;
+}
+
void GameModule::checkMainMenu() {
+ if (_restartGameRequested) {
+ _restartGameRequested = false;
+ _vm->_gameVars->clear();
+ restoreGame();
+ }
if (_mainMenuRequested)
openMainMenu();
}
@@ -646,7 +656,8 @@ void GameModule::createModuleByHash(uint32 nameHash) {
createModule(3000, -1);
break;
default:
- error("GameModule::createModuleByHash() Unknown module name %08X", nameHash);
+ createModule(1000, 0);
+ break;
}
}
@@ -673,9 +684,7 @@ void GameModule::updateModule() {
case 1300:
if (_moduleResult == 1) {
// The game was successfully finished
- // TODO Restart the game/show main menu
- // TODO _gameState.clear();
- // TODO GameModule_handleKeyEscape
+ requestRestartGame(true);
} else
createModule(2900, 0);
break;
@@ -702,9 +711,7 @@ void GameModule::updateModule() {
case 1800:
if (_moduleResult == 1) {
// Game over, Klaymen jumped into the hole
- // TODO Restart the game/show main menu
- // TODO _gameState.clear();
- // TODO GameModule_handleKeyEscape
+ requestRestartGame(true);
} else if (_moduleResult == 2)
createModule(2700, 0);
else if (_moduleResult == 3)
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index ee6b000533..b212a1905c 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -34,6 +34,7 @@ public:
virtual ~GameModule();
void startup();
void restoreGame();
+ void requestRestartGame(bool requestMainMenu);
void checkMainMenu();
void handleMouseMove(int16 x, int16 y);
void handleMouseDown(int16 x, int16 y);
@@ -57,6 +58,7 @@ protected:
Entity *_prevChildObject;
int _prevModuleNum;
bool _gameWasLoaded;
+ bool _restartGameRequested;
bool _mainMenuRequested;
bool _someFlag1;
bool _field2C;
diff --git a/engines/neverhood/gamevars.cpp b/engines/neverhood/gamevars.cpp
index 57d9547ac2..87f5fe6dd9 100644
--- a/engines/neverhood/gamevars.cpp
+++ b/engines/neverhood/gamevars.cpp
@@ -28,6 +28,11 @@ GameVars::GameVars() {
addVar(0, 0);
}
+void GameVars::clear() {
+ _vars.clear();
+ addVar(0, 0);
+}
+
void GameVars::loadState(Common::InSaveFile *in) {
uint varCount;
_vars.clear();
diff --git a/engines/neverhood/gamevars.h b/engines/neverhood/gamevars.h
index 3672aa6e45..5337c13394 100644
--- a/engines/neverhood/gamevars.h
+++ b/engines/neverhood/gamevars.h
@@ -172,6 +172,7 @@ struct GameVar {
class GameVars {
public:
GameVars();
+ void clear();
void loadState(Common::InSaveFile *in);
void saveState(Common::OutSaveFile *out);
uint32 getGlobalVar(uint32 nameHash);
diff --git a/engines/neverhood/menumodule.cpp b/engines/neverhood/menumodule.cpp
index 71b216b940..b86fc7095a 100644
--- a/engines/neverhood/menumodule.cpp
+++ b/engines/neverhood/menumodule.cpp
@@ -21,6 +21,7 @@
*/
#include "neverhood/menumodule.h"
+#include "neverhood/gamemodule.h"
namespace Neverhood {
@@ -31,6 +32,18 @@ enum {
SAVE_GAME_MENU = 3
};
+enum {
+ kMainMenuRestartGame = 0,
+ kMainMenuLoadGame = 1,
+ kMainMenuSaveGame = 2,
+ kMainMenuResumeGame = 3,
+ kMainMenuQuitGame = 4,
+ kMainMenuCredits = 5,
+ kMainMenuMakingOf = 6,
+ kMainMenuToggleMusic = 7,
+ kMainMenuDeleteGame = 8
+};
+
static const uint32 kMakingOfSmackerFileHashList[] = {
0x21082409,
0x21082809,
@@ -97,42 +110,34 @@ void MenuModule::updateScene() {
case MAIN_MENU:
// TODO
switch (_moduleResult) {
- case 0:
- // 0048A2A5
- debug("RESTART GAME");
+ case kMainMenuRestartGame:
+ _vm->_gameModule->requestRestartGame(false);
+ leaveModule(0);
break;
- case 1:
- debug("LOAD GAME");
+ case kMainMenuLoadGame:
// TODO createLoadGameMenu();
break;
- case 2:
- debug("SAVE GAME");
+ case kMainMenuSaveGame:
createScene(SAVE_GAME_MENU, -1);
break;
- case 3:
- debug("RESUME GAME");
+ case kMainMenuResumeGame:
leaveModule(0);
break;
- case 4:
- debug("QUIT GAME");
+ case kMainMenuQuitGame:
leaveModule(0);
_vm->quitGame();
break;
- case 5:
- debug("CREDITS");
+ case kMainMenuCredits:
createScene(CREDITS_SCENE, -1);
break;
- case 6:
- debug("MAKING OF");
+ case kMainMenuMakingOf:
createScene(MAKING_OF, -1);
break;
- case 7:
- debug("TOGGLE MUSIC");
+ case kMainMenuToggleMusic:
// TODO Toggle music 0048A367
createScene(MAIN_MENU, -1);
break;
- case 8:
- debug("DELETE GAME");
+ case kMainMenuDeleteGame:
// TODO createDeleteGameMenu();
break;
default:
@@ -270,30 +275,14 @@ uint32 MainMenu::handleMessage(int messageNum, const MessageParam &param, Entity
}
static const uint32 kCreditsSceneFileHashes[] = {
- 0x6081128C,
- 0x608112BC,
- 0x608112DC,
- 0x6081121C,
- 0x6081139C,
- 0x6081109C,
- 0x6081169C,
- 0x60811A9C,
- 0x6081029C,
- 0x0081128C,
- 0x008112BC,
- 0x008012BC,
- 0x008112DC,
- 0x0081121C,
- 0x0081139C,
- 0x0081109C,
- 0x0081169C,
- 0x00811A9C,
- 0x0081029C,
- 0x0081329C,
- 0xC08112BC,
- 0xC08112DC,
- 0xC081121C,
- 0xC081139C,
+ 0x6081128C, 0x608112BC, 0x608112DC,
+ 0x6081121C, 0x6081139C, 0x6081109C,
+ 0x6081169C, 0x60811A9C, 0x6081029C,
+ 0x0081128C, 0x008112BC, 0x008012BC,
+ 0x008112DC, 0x0081121C, 0x0081139C,
+ 0x0081109C, 0x0081169C, 0x00811A9C,
+ 0x0081029C, 0x0081329C, 0xC08112BC,
+ 0xC08112DC, 0xC081121C, 0xC081139C,
0
};
@@ -353,7 +342,7 @@ uint32 CreditsScene::handleMessage(int messageNum, const MessageParam &param, En
case 0x0009:
leaveScene(0);
break;
- case 0x000B://TODO Implement this message
+ case 0x000B:
if (param.asInteger() == Common::KEYCODE_ESCAPE && _canAbort)
leaveScene(0);
break;
@@ -388,6 +377,7 @@ void WidgetScene::setCurrWidget(Widget *newWidget) {
}
void WidgetScene::handleEvent(int16 itemID, int eventType) {
+ // Empty
}
Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene *parentScene,
@@ -403,7 +393,7 @@ Widget::Widget(NeverhoodEngine *vm, int16 x, int16 y, int16 itemID, WidgetScene
void Widget::onClick() {
_parentScene->setCurrWidget(this);
- // TODO _parentScene->onClick(_itemID, 0);
+ // TODO? _parentScene->onClick(_itemID, 0);
}
void Widget::setPosition(int16 x, int16 y) {
@@ -490,7 +480,7 @@ void TextLabelWidget::clear() {
void TextLabelWidget::onClick() {
Widget::onClick();
- // TODO Click handler?
+ // TODO? Click handler
}
void TextLabelWidget::setString(const byte *string, int stringLen) {
diff --git a/engines/neverhood/module1600.cpp b/engines/neverhood/module1600.cpp
index bb6874ee03..cc1aa2c3de 100644
--- a/engines/neverhood/module1600.cpp
+++ b/engines/neverhood/module1600.cpp
@@ -28,12 +28,8 @@
namespace Neverhood {
static const uint32 kModule1600SoundList[] = {
- 0x90805C50,
- 0x90804450,
- 0xB4005E60,
- 0x91835066,
- 0x90E14440,
- 0
+ 0x90805C50, 0x90804450, 0xB4005E60,
+ 0x91835066, 0x90E14440, 0
};
Module1600::Module1600(NeverhoodEngine *vm, Module *parentModule, int which)
diff --git a/engines/neverhood/module1900.cpp b/engines/neverhood/module1900.cpp
index 31bf05b6ee..348306f39b 100644
--- a/engines/neverhood/module1900.cpp
+++ b/engines/neverhood/module1900.cpp
@@ -199,9 +199,9 @@ AsScene1907Symbol::AsScene1907Symbol(NeverhoodEngine *vm, Scene1907 *parentScene
}
void AsScene1907Symbol::update() {
- AnimatedSprite::updateAnim();
+ updateAnim();
handleSpriteUpdate();
- AnimatedSprite::updatePosition();
+ updatePosition();
if (_plugInFailed && _plugInTryCount == 0)
_plugInFailed = false;
}
@@ -488,8 +488,8 @@ AsScene1907WaterHint::AsScene1907WaterHint(NeverhoodEngine *vm)
}
void AsScene1907WaterHint::update() {
- AnimatedSprite::updateAnim();
- AnimatedSprite::updatePosition();
+ updateAnim();
+ updatePosition();
}
uint32 AsScene1907WaterHint::hmShowing(int messageNum, const MessageParam &param, Entity *sender) {
@@ -629,19 +629,19 @@ void Scene1907::plugInFailed() {
}
int Scene1907::getRandomPositionIndex() {
- bool flag = false;
+ bool found = false;
int index = 0;
// Check if any position is free
for (int i = 0; i < 9; i++)
if (_positionFree[i])
- flag = true;
- if (flag) {
+ found = true;
+ if (found) {
// Get a random free position
- flag = false;
- while (!flag) {
+ found = false;
+ while (!found) {
index = _vm->_rnd->getRandomNumber(9 - 1);
if (_positionFree[index])
- flag = true;
+ found = true;
}
}
return index;
diff --git a/engines/neverhood/neverhood.cpp b/engines/neverhood/neverhood.cpp
index d4b09844be..bfba0b9b95 100644
--- a/engines/neverhood/neverhood.cpp
+++ b/engines/neverhood/neverhood.cpp
@@ -122,8 +122,6 @@ Common::Error NeverhoodEngine::run() {
delete _gameVars;
delete _staticData;
- debug("Ok.");
-
return Common::kNoError;
}