aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPaul Gilbert2007-11-17 00:19:45 +0000
committerPaul Gilbert2007-11-17 00:19:45 +0000
commitd5dc2e075a1e19ecdb9b7f0791704c1c7d2cafd3 (patch)
tree7d378dad4c9f029fdffc65fcc3fde1c78db6ff45 /engines
parentcec8b9820158d7769898f07f3202adfdcd1e1af6 (diff)
downloadscummvm-rg350-d5dc2e075a1e19ecdb9b7f0791704c1c7d2cafd3.tar.gz
scummvm-rg350-d5dc2e075a1e19ecdb9b7f0791704c1c7d2cafd3.tar.bz2
scummvm-rg350-d5dc2e075a1e19ecdb9b7f0791704c1c7d2cafd3.zip
Bugfixes to restoring or restarting a game from the Restore/Restart dialog
svn-id: r29524
Diffstat (limited to 'engines')
-rw-r--r--engines/lure/game.cpp10
-rw-r--r--engines/lure/room.cpp3
-rw-r--r--engines/lure/room.h1
3 files changed, 11 insertions, 3 deletions
diff --git a/engines/lure/game.cpp b/engines/lure/game.cpp
index c8abff2b92..1026925f32 100644
--- a/engines/lure/game.cpp
+++ b/engines/lure/game.cpp
@@ -135,18 +135,21 @@ void Game::execute() {
screen.setPaletteEmpty();
// Flag for starting game
- setState(GS_RESTART);
+ setState(GS_RESTART);
+ bool initialRestart = true;
while (!events.quitFlag) {
if ((_state & GS_RESTART) != 0) {
res.reset();
+ if (!initialRestart) room.reset();
setState(0);
Script::execute(STARTUP_SCRIPT);
- int bootParam = ConfMan.getInt("boot_param");
+ int bootParam = initialRestart ? ConfMan.getInt("boot_param") : 0;
handleBootParam(bootParam);
+ initialRestart = false;
}
room.update();
@@ -1003,6 +1006,9 @@ void Game::loadFromStream(ReadStream *stream) {
_soundFlag = stream->readByte() != 0;
menu.getMenu(2).entries()[2] = sl.getString(_soundFlag ? S_SOUND_ON : S_SOUND_OFF);
+
+ // Reset game state flags
+ setState(0);
}
diff --git a/engines/lure/room.cpp b/engines/lure/room.cpp
index b5afe377bd..2fca7fbc71 100644
--- a/engines/lure/room.cpp
+++ b/engines/lure/room.cpp
@@ -85,6 +85,7 @@ Room::Room(): _screen(Screen::getReference()) {
_numLayers = 0;
_showInfo = false;
_isExit = false;
+ _roomNumber = 0;
_destRoomNumber = 0;
_cursorState = CS_NONE;
@@ -532,7 +533,7 @@ void Room::setRoomNumber(uint16 newRoomNumber, bool showOverlay) {
_roomData = res.getRoom(newRoomNumber);
if (!_roomData)
error("Tried to change to non-existant room: %d", newRoomNumber);
- bool leaveFlag = (_layers[0] && (newRoomNumber != _roomNumber) && (_roomNumber != 0));
+ bool leaveFlag = (newRoomNumber != _roomNumber) && (_roomNumber != 0);
_roomNumber = _roomData->roomNumber;
_descId = _roomData->descId;
diff --git a/engines/lure/room.h b/engines/lure/room.h
index 1fbe853b72..419b757e2e 100644
--- a/engines/lure/room.h
+++ b/engines/lure/room.h
@@ -127,6 +127,7 @@ public:
char *statusLine() { return _statusLine; }
void saveToStream(Common::WriteStream *stream);
void loadFromStream(Common::ReadStream *stream);
+ void reset() { _roomNumber = 999; }
};
} // end of namespace Lure