aboutsummaryrefslogtreecommitdiff
path: root/engines/agos/saveload.cpp
diff options
context:
space:
mode:
authorTravis Howell2009-08-22 01:53:25 +0000
committerTravis Howell2009-08-22 01:53:25 +0000
commit3c9d22aa95d71ac88bb2a71dc87887d422f55277 (patch)
tree3f6fb14eae5ca5580ca89621a4a03e8abefc4e6f /engines/agos/saveload.cpp
parentcb56c27b9a2f3a4b3f0fb487cbc62205855062ea (diff)
downloadscummvm-rg350-3c9d22aa95d71ac88bb2a71dc87887d422f55277.tar.gz
scummvm-rg350-3c9d22aa95d71ac88bb2a71dc87887d422f55277.tar.bz2
scummvm-rg350-3c9d22aa95d71ac88bb2a71dc87887d422f55277.zip
Correct errors in load/save code for PC version of Waxworks.
svn-id: r43628
Diffstat (limited to 'engines/agos/saveload.cpp')
-rw-r--r--engines/agos/saveload.cpp46
1 files changed, 30 insertions, 16 deletions
diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp
index 8a54151f91..8470203640 100644
--- a/engines/agos/saveload.cpp
+++ b/engines/agos/saveload.cpp
@@ -1252,23 +1252,38 @@ bool AGOSEngine_Elvira2::loadGame(const char *filename, bool restartMode) {
if (_roomsListPtr) {
byte *p = _roomsListPtr;
- for (;;) {
- uint16 minNum = READ_BE_UINT16(p); p += 2;
- if (minNum == 0)
- break;
-
- uint16 maxNum = READ_BE_UINT16(p); p += 2;
+ if (room == _currentRoom) {
+ for (;;) {
+ uint16 minNum = READ_BE_UINT16(p); p += 2;
+ if (minNum == 0)
+ break;
+
+ uint16 maxNum = READ_BE_UINT16(p); p += 2;
+
+ for (uint16 z = minNum; z <= maxNum; z++) {
+ uint16 itemNum = z + 2;
+ Item *item = derefItem(itemNum);
+
+ num = (itemNum - _itemArrayInited);
+ _roomStates[num].state = item->state;
+ _roomStates[num].classFlags = item->classFlags;
+ SubRoom *subRoom = (SubRoom *)findChildOfType(item, kRoomType);
+ _roomStates[num].roomExitStates = subRoom->roomExitStates;
+ }
+ }
+ } else {
+ for (;;) {
+ uint16 minNum = READ_BE_UINT16(p); p += 2;
+ if (minNum == 0)
+ break;
- for (uint16 z = minNum; z <= maxNum; z++) {
- uint16 itemNum = z + 2;
- Item *item = derefItem(itemNum);
- item->parent = 0;
+ uint16 maxNum = READ_BE_UINT16(p); p += 2;
- num = (itemNum - _itemArrayInited);
- item->state = _roomStates[num].state;
- item->classFlags = _roomStates[num].classFlags;
- SubRoom *subRoom = (SubRoom *)findChildOfType(item, kRoomType);
- subRoom->roomExitStates = _roomStates[num].roomExitStates;
+ for (uint16 z = minNum; z <= maxNum; z++) {
+ uint16 itemNum = z + 2;
+ Item *item = derefItem(itemNum);
+ item->parent = 0;
+ }
}
}
}
@@ -1439,7 +1454,6 @@ bool AGOSEngine_Elvira2::saveGame(uint slot, const char *caption) {
for (uint16 z = minNum; z <= maxNum; z++) {
uint16 itemNum = z + 2;
Item *item = derefItem(itemNum);
- item->parent = 0;
uint16 num = (itemNum - _itemArrayInited);
_roomStates[num].state = item->state;