[Scummvm-cvs-logs] scummvm master -> 61f0d247aa5151381fa242327ff219790d25363d

Kirben kirben at optusnet.com.au
Thu May 21 06:26:05 CEST 2015


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
61f0d247aa AGOS: Add proper fix for regression when loading saved games in PC version of Waxworks.


Commit: 61f0d247aa5151381fa242327ff219790d25363d
    https://github.com/scummvm/scummvm/commit/61f0d247aa5151381fa242327ff219790d25363d
Author: Kirben (kirben at optusnet.com.au)
Date: 2015-05-21T14:24:52+10:00

Commit Message:
AGOS: Add proper fix for regression when loading saved games in PC version of Waxworks.

Changed paths:
    engines/agos/saveload.cpp



diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp
index 5c54e48..b968ae6 100644
--- a/engines/agos/saveload.cpp
+++ b/engines/agos/saveload.cpp
@@ -1201,7 +1201,6 @@ bool AGOSEngine_Elvira2::loadGame(const Common::String &filename, bool restartMo
 	char ident[100];
 	Common::SeekableReadStream *f = NULL;
 	uint num, item_index, i, j;
-	uint16 room = _currentRoom;
 
 	_videoLockOut |= 0x100;
 
@@ -1260,7 +1259,49 @@ bool AGOSEngine_Elvira2::loadGame(const Common::String &filename, bool restartMo
 		}
 		f->readUint16BE();
 
+		uint16 room = _currentRoom;
 		_currentRoom = f->readUint16BE();
+		if (_roomsListPtr) {
+			byte *p = _roomsListPtr;
+			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);
+						item->state = _roomStates[num].state;
+						item->classFlags = _roomStates[num].classFlags;
+						SubRoom *subRoom = (SubRoom *)findChildOfType(item, kRoomType);
+						subRoom->roomExitStates = _roomStates[num].roomExitStates;
+					}
+				}
+			} else {
+				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;
+						_itemArrayPtr[itemNum] = 0;
+					}
+				}
+			}
+		}
+
+		if (room != _currentRoom) {
+			_roomsListPtr = 0;
+			loadRoomItems(_currentRoom);
+		}
 	}
 
 	item_index = 1;
@@ -1275,6 +1316,9 @@ bool AGOSEngine_Elvira2::loadGame(const Common::String &filename, bool restartMo
 			uint parent = f->readUint16BE();
 			uint next = f->readUint16BE();
 
+			if (getGameType() == GType_WW && getPlatform() == Common::kPlatformDOS && derefItem(item->parent) == NULL)
+				item->parent = 0;
+						
 			parent_item = derefItem(parent);
 			setItemParent(item, parent_item);
 
@@ -1319,49 +1363,6 @@ bool AGOSEngine_Elvira2::loadGame(const Common::String &filename, bool restartMo
 		}
 	}
 
-	if (getGameType() == GType_WW && getPlatform() == Common::kPlatformDOS) {
-		if (_roomsListPtr) {
-			byte *p = _roomsListPtr;
-			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);
-						item->state = _roomStates[num].state;
-						item->classFlags = _roomStates[num].classFlags;
-						SubRoom *subRoom = (SubRoom *)findChildOfType(item, kRoomType);
-						subRoom->roomExitStates = _roomStates[num].roomExitStates;
-					}
-				}
-			} else {
-				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;
-						_itemArrayPtr[itemNum] = 0;
-					}
-				}
-			}
-		}
-
-		if (room != _currentRoom) {
-			_roomsListPtr = 0;
-			loadRoomItems(_currentRoom);
-		}
-	}
 	// read the variables
 	for (i = 0; i != _numVars; i++) {
 		writeVariable(i, f->readUint16BE());






More information about the Scummvm-git-logs mailing list