aboutsummaryrefslogtreecommitdiff
path: root/engines/neverhood
diff options
context:
space:
mode:
authorjohndoe1232013-01-29 11:57:06 +0000
committerWillem Jan Palenstijn2013-05-08 20:47:42 +0200
commitc96d2475b100610271c974043a8a9c4322b8e60b (patch)
tree37b68566c61d3e86cde105e3d24845b7876a4de1 /engines/neverhood
parent53a81d11b8e5e34478e75a8797b094ec53976c68 (diff)
downloadscummvm-rg350-c96d2475b100610271c974043a8a9c4322b8e60b.tar.gz
scummvm-rg350-c96d2475b100610271c974043a8a9c4322b8e60b.tar.bz2
scummvm-rg350-c96d2475b100610271c974043a8a9c4322b8e60b.zip
NEVERHOOD: Add Screen::saveParams and Screen::restoreParams, called when etnering/leaving the menu
Diffstat (limited to 'engines/neverhood')
-rw-r--r--engines/neverhood/gamemodule.cpp14
-rw-r--r--engines/neverhood/gamemodule.h2
-rw-r--r--engines/neverhood/screen.cpp18
-rw-r--r--engines/neverhood/screen.h8
4 files changed, 24 insertions, 18 deletions
diff --git a/engines/neverhood/gamemodule.cpp b/engines/neverhood/gamemodule.cpp
index 493d16d7dd..5eaa7e2d64 100644
--- a/engines/neverhood/gamemodule.cpp
+++ b/engines/neverhood/gamemodule.cpp
@@ -286,8 +286,7 @@ void GameModule::initCubeSymbolsPuzzle() {
}
void GameModule::initCrystalColorsPuzzle() {
- // TODO Maybe move this into the GameModule so all puzzle init code is together
- if (getGlobalVar(V_CRYSTAL_COLORS_INIT) == 0) {
+ if (!getGlobalVar(V_CRYSTAL_COLORS_INIT)) {
TextResource textResource(_vm);
const char *textStart, *textEnd;
textResource.load(0x46691611);
@@ -341,10 +340,6 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam &param, Enti
_moduleResult = param.asInteger();
_done = true;
break;
- case 0x100A:
- case 0x1023:
- // Unused resource preloading messages
- break;
}
return messageResult;
}
@@ -829,7 +824,7 @@ void GameModule::updateModule() {
break;
case 3000:
// NOTE _moduleResult 2 never used
- // TODO Check if _moduleResult 4 is used
+ // NOTE Check if _moduleResult 4 is used
if (_moduleResult == 1)
createModule(1900, 0);
else if (_moduleResult == 3)
@@ -854,7 +849,7 @@ void GameModule::openMainMenu() {
// If there's no module, create one so there's something to return to
createModule(1000, 0);
}
- // TODO Save FPS, Smacker handle, screen offsets
+ _vm->_screen->saveParams();
_mainMenuRequested = false;
createMenuModule();
}
@@ -871,9 +866,8 @@ void GameModule::createMenuModule() {
void GameModule::updateMenuModule() {
if (!updateChild()) {
- // TODO Restore FPS?
+ _vm->_screen->restoreParams();
_childObject = _prevChildObject;
- // TODO Restore Smacker handle, screen offsets
sendMessage(_childObject, 0x101E, 0);
_prevChildObject = NULL;
_moduleNum = _prevModuleNum;
diff --git a/engines/neverhood/gamemodule.h b/engines/neverhood/gamemodule.h
index df8f015659..8101d38009 100644
--- a/engines/neverhood/gamemodule.h
+++ b/engines/neverhood/gamemodule.h
@@ -56,13 +56,13 @@ public:
void initCrystalColorsPuzzle();
uint32 getCurrRadioMusicFileHash();
protected:
+ int _moduleNum;
Entity *_prevChildObject;
int _prevModuleNum;
bool _restoreGameRequested;
bool _restartGameRequested;
bool _canRequestMainMenu;
bool _mainMenuRequested;
- int _moduleNum;
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
void createModule(int moduleNum, int which);
void createModuleByHash(uint32 nameHash);
diff --git a/engines/neverhood/screen.cpp b/engines/neverhood/screen.cpp
index 352e59e9b2..3e57422cea 100644
--- a/engines/neverhood/screen.cpp
+++ b/engines/neverhood/screen.cpp
@@ -114,6 +114,18 @@ uint32 Screen::getNextFrameTime() {
return _vm->_system->getMillis() + waitTicks;
}
+void Screen::saveParams() {
+ _savedSmackerDecoder = _smackerDecoder;
+ _savedFrameDelay = _frameDelay;
+ _savedYOffset = _yOffset;
+}
+
+void Screen::restoreParams() {
+ _smackerDecoder = _savedSmackerDecoder;
+ _frameDelay = _savedFrameDelay;
+ _yOffset = _savedYOffset;
+}
+
void Screen::setFps(int fps) {
_frameDelay = 1000 / fps;
}
@@ -270,16 +282,14 @@ void Screen::drawUnk(const Graphics::Surface *surface, NDrawRect &drawRect, NDra
NDrawRect newDrawRect;
x = sysRect.x;
- if (sysRect.width <= x || -sysRect.width >= x) {
+ if (sysRect.width <= x || -sysRect.width >= x)
x = x % sysRect.width;
- }
if (x < 0)
x += sysRect.width;
y = sysRect.y;
- if (y >= sysRect.height || -sysRect.height >= y) {
+ if (y >= sysRect.height || -sysRect.height >= y)
y = y % sysRect.height;
- }
if (y < 0)
y += sysRect.height;
diff --git a/engines/neverhood/screen.h b/engines/neverhood/screen.h
index 33de141ec2..c778066152 100644
--- a/engines/neverhood/screen.h
+++ b/engines/neverhood/screen.h
@@ -63,6 +63,8 @@ public:
~Screen();
void update();
uint32 getNextFrameTime();
+ void saveParams();
+ void restoreParams();
void setFps(int fps);
int getFps();
void setYOffset(int16 yOffset);
@@ -89,12 +91,12 @@ protected:
NeverhoodEngine *_vm;
MicroTileArray *_microTiles;
Graphics::Surface *_backScreen;
- Video::SmackerDecoder *_smackerDecoder;
+ Video::SmackerDecoder *_smackerDecoder, *_savedSmackerDecoder;
int32 _ticks;
- int32 _frameDelay;
+ int32 _frameDelay, _savedFrameDelay;
byte *_paletteData;
bool _paletteChanged;
- int16 _yOffset;
+ int16 _yOffset, _savedYOffset;
bool _fullRefresh;
RenderQueue *_renderQueue, *_prevRenderQueue;
};