[Scummvm-git-logs] scummvm master -> b0776c8f321ebd3453bd2721a3c9e4926b283b93

dreammaster paulfgilbert at gmail.com
Mon Sep 2 00:29:38 CEST 2019


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:
b0776c8f32 XEEN: Fix crash loading Great Pyramid Level 3


Commit: b0776c8f321ebd3453bd2721a3c9e4926b283b93
    https://github.com/scummvm/scummvm/commit/b0776c8f321ebd3453bd2721a3c9e4926b283b93
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2019-09-01T15:29:33-07:00

Commit Message:
XEEN: Fix crash loading Great Pyramid Level 3

Changed paths:
    engines/xeen/map.cpp


diff --git a/engines/xeen/map.cpp b/engines/xeen/map.cpp
index bc5d55f..9fd967b 100644
--- a/engines/xeen/map.cpp
+++ b/engines/xeen/map.cpp
@@ -417,8 +417,8 @@ void MonsterObjectData::synchronize(XeenSerializer &s, MonsterData &monsterData)
 	if (s.isSaving()) {
 		// Save objects
 		if (_objects.empty()) {
-			MobStruct nullStruct;
-			nullStruct.synchronize(s);
+			mobStruct.endOfList();
+			mobStruct.synchronize(s);
 		} else {
 			for (uint i = 0; i < _objects.size(); ++i) {
 				mobStruct._pos = _objects[i]._position;
@@ -432,8 +432,8 @@ void MonsterObjectData::synchronize(XeenSerializer &s, MonsterData &monsterData)
 
 		// Save monsters
 		if (_monsters.empty()) {
-			MobStruct nullStruct;
-			nullStruct.synchronize(s);
+			mobStruct.endOfList();
+			mobStruct.synchronize(s);
 		} else {
 			for (uint i = 0; i < _monsters.size(); ++i) {
 				mobStruct._pos = _monsters[i]._position;
@@ -446,17 +446,11 @@ void MonsterObjectData::synchronize(XeenSerializer &s, MonsterData &monsterData)
 		mobStruct.synchronize(s);
 
 		// Save wall items
-		if (_wallItems.empty()) {
-			MobStruct nullStruct;
-			nullStruct._pos.x = nullStruct._pos.y = 0x80;
-			nullStruct.synchronize(s);
-		} else {
-			for (uint i = 0; i < _wallItems.size(); ++i) {
-				mobStruct._pos = _wallItems[i]._position;
-				mobStruct._id = _wallItems[i]._id;
-				mobStruct._direction = _wallItems[i]._direction;
-				mobStruct.synchronize(s);
-			}
+		for (uint i = 0; i < _wallItems.size(); ++i) {
+			mobStruct._pos = _wallItems[i]._position;
+			mobStruct._id = _wallItems[i]._id;
+			mobStruct._direction = _wallItems[i]._direction;
+			mobStruct.synchronize(s);
 		}
 		mobStruct.endOfList();
 		mobStruct.synchronize(s);
@@ -465,6 +459,10 @@ void MonsterObjectData::synchronize(XeenSerializer &s, MonsterData &monsterData)
 		// Load monster/obbject data and merge together with sprite Ids
 		// Load objects
 		mobStruct.synchronize(s);
+		if (mobStruct._id == -1 && mobStruct._pos.x == -1)
+			// Empty array has a blank entry
+			mobStruct.synchronize(s);
+
 		do {
 			MazeObject obj;
 			obj._position = mobStruct._pos;
@@ -483,7 +481,11 @@ void MonsterObjectData::synchronize(XeenSerializer &s, MonsterData &monsterData)
 
 		// Load monsters
 		mobStruct.synchronize(s);
-		do {
+		if (mobStruct._id == -1 && mobStruct._pos.x == -1)
+			// Empty array has a blank entry
+			mobStruct.synchronize(s);
+
+		while (mobStruct._id != 255 || mobStruct._pos.x != -1) {
 			MazeMonster mon;
 			mon._position = mobStruct._pos;
 			mon._id = mobStruct._id;
@@ -507,11 +509,11 @@ void MonsterObjectData::synchronize(XeenSerializer &s, MonsterData &monsterData)
 			}
 
 			mobStruct.synchronize(s);
-		} while (mobStruct._id != 255 || mobStruct._pos.x != -1);
+		}
 
-		// Load wall items
+		// Load wall items. Unlike the previous two arrays, this has no dummy entry for an empty array
 		mobStruct.synchronize(s);
-		do {
+		while (mobStruct._id != 255 || mobStruct._pos.x != -1) {
 			if (mobStruct._id < (int)_wallItemSprites.size()) {
 				MazeWallItem wi;
 				wi._position = mobStruct._pos;
@@ -524,7 +526,7 @@ void MonsterObjectData::synchronize(XeenSerializer &s, MonsterData &monsterData)
 			}
 
 			mobStruct.synchronize(s);
-		} while (mobStruct._id != 255 || mobStruct._pos.x != -1);
+		}
 	}
 }
 





More information about the Scummvm-git-logs mailing list