[Scummvm-cvs-logs] SF.net SVN: scummvm:[34113] scummvm/trunk/engines/gob

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Sat Aug 23 16:18:13 CEST 2008


Revision: 34113
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34113&view=rev
Author:   drmccoy
Date:     2008-08-23 14:18:12 +0000 (Sat, 23 Aug 2008)

Log Message:
-----------
Fixing _itemsMap access (bug #2069177)

Modified Paths:
--------------
    scummvm/trunk/engines/gob/goblin.cpp
    scummvm/trunk/engines/gob/inter_v1.cpp
    scummvm/trunk/engines/gob/map.cpp
    scummvm/trunk/engines/gob/map.h

Modified: scummvm/trunk/engines/gob/goblin.cpp
===================================================================
--- scummvm/trunk/engines/gob/goblin.cpp	2008-08-23 10:51:29 UTC (rev 34112)
+++ scummvm/trunk/engines/gob/goblin.cpp	2008-08-23 14:18:12 UTC (rev 34113)
@@ -652,7 +652,7 @@
 
 	if ((_vm->_map->getPass(_pressedMapX, _pressedMapY) == 0) &&
 	    ((_gobAction == 0) ||
-			(_vm->_map->_itemsMap[_pressedMapY][_pressedMapX] == 0))) {
+			(_vm->_map->getItem(_pressedMapX, _pressedMapY) == 0))) {
 
 		resDelta = -1;
 		resDeltaDir = 0;
@@ -727,17 +727,17 @@
 
 void Goblin::adjustTarget(void) {
 	if ((_gobAction == 4) &&
-	    (_vm->_map->_itemsMap[_pressedMapY][_pressedMapX] == 0)) {
+	    (_vm->_map->getItem(_pressedMapX, _pressedMapY) == 0)) {
 
 		if ((_pressedMapY > 0) &&
-		    (_vm->_map->_itemsMap[_pressedMapY - 1][_pressedMapX] != 0)) {
+		    (_vm->_map->getItem(_pressedMapX, _pressedMapY - 1) != 0)) {
 			_pressedMapY--;
 		} else if ((_pressedMapX < (_vm->_map->_mapWidth - 1)) &&
-				(_vm->_map->_itemsMap[_pressedMapY][_pressedMapX + 1] != 0)) {
+				(_vm->_map->getItem(_pressedMapX + 1, _pressedMapY) != 0)) {
 			_pressedMapX++;
 		} else if ((_pressedMapX < (_vm->_map->_mapWidth - 1)) &&
 				(_pressedMapY > 0) &&
-				(_vm->_map->_itemsMap[_pressedMapY - 1][_pressedMapX + 1] != 0)) {
+				(_vm->_map->getItem(_pressedMapX + 1, _pressedMapY - 1) != 0)) {
 			_pressedMapY--;
 			_pressedMapX++;
 		}
@@ -747,7 +747,7 @@
 }
 
 void Goblin::targetDummyItem(Gob_Object *gobDesc) {
-	if (_vm->_map->_itemsMap[_pressedMapY][_pressedMapX] == 0 &&
+	if (_vm->_map->getItem(_pressedMapX, _pressedMapY) == 0 &&
 	    _vm->_map->getPass(_pressedMapX, _pressedMapY) == 1) {
 		if (gobDesc->curLookDir == 0) {
 			_vm->_map->_itemPoses[0].x = _pressedMapX;
@@ -771,7 +771,7 @@
 	Gob_Object *itemDesc;
 
 	if ((_gobAction == 3) || (_gobAction == 4)) {
-		items = _vm->_map->_itemsMap[_pressedMapY][_pressedMapX];
+		items = _vm->_map->getItem(_pressedMapX, _pressedMapY);
 		if ((_gobAction == 4) && ((items & 0xFF00) != 0) &&
 		    (_objects[_itemToObject[(items & 0xFF00) >> 8]]->pickable == 1)) {
 			_destItemId = (items & 0xFF00) >> 8;
@@ -802,40 +802,40 @@
 			_gobDestX = _vm->_map->_itemPoses[_destItemId].x;
 		} else if ((items & 0xFF00) != 0) {
 			if (_vm->_map->_itemPoses[_destItemId].orient == 4) {
-				if ((_vm->_map->_itemsMap[_pressedMapY][_pressedMapX - 1] & 0xFF00) ==
-						(_vm->_map->_itemsMap[_pressedMapY][_pressedMapX] & 0xFF00)) {
+				if ((_vm->_map->getItem(_pressedMapX - 1, _pressedMapY) & 0xFF00) ==
+						(_vm->_map->getItem(_pressedMapX, _pressedMapY) & 0xFF00)) {
 					_pressedMapX--;
 					_vm->_map->_destX = _pressedMapX;
 					_gobDestX = _pressedMapX;
 				}
 			} else if (_vm->_map->_itemPoses[_destItemId].orient == 0) {
 
-				if ((_vm->_map->_itemsMap[_pressedMapY][_pressedMapX + 1] & 0xFF00) ==
-						(_vm->_map->_itemsMap[_pressedMapY][_pressedMapX] & 0xFF00)) {
+				if ((_vm->_map->getItem(_pressedMapX + 1, _pressedMapY) & 0xFF00) ==
+						(_vm->_map->getItem(_pressedMapX, _pressedMapY) & 0xFF00)) {
 					_pressedMapX++;
 					_vm->_map->_destX = _pressedMapX;
 					_gobDestX = _pressedMapX;
 				}
 			}
 
-			if ((_vm->_map->_itemsMap[_pressedMapY + 1][_pressedMapX] & 0xFF00) ==
-			    (_vm->_map->_itemsMap[_pressedMapY][_pressedMapX] & 0xFF00)) {
+			if ((_vm->_map->getItem(_pressedMapX, _pressedMapY + 1) & 0xFF00) ==
+			    (_vm->_map->getItem(_pressedMapX, _pressedMapY) & 0xFF00)) {
 				_pressedMapY++;
 				_vm->_map->_destY = _pressedMapY;
 				_gobDestY = _pressedMapY;
 			}
 		} else {
 			if (_vm->_map->_itemPoses[_destItemId].orient == 4) {
-				if ((_vm->_map->_itemsMap[_pressedMapY][_pressedMapX - 1]) ==
-				    (_vm->_map->_itemsMap[_pressedMapY][_pressedMapX])) {
+				if ((_vm->_map->getItem(_pressedMapX - 1, _pressedMapY)) ==
+				    (_vm->_map->getItem(_pressedMapX, _pressedMapY))) {
 					_pressedMapX--;
 					_vm->_map->_destX = _pressedMapX;
 					_gobDestX = _pressedMapX;
 				}
 			} else if (_vm->_map->_itemPoses[_destItemId].orient == 0) {
 
-				if ((_vm->_map->_itemsMap[_pressedMapY][_pressedMapX + 1]) ==
-				    (_vm->_map->_itemsMap[_pressedMapY][_pressedMapX])) {
+				if ((_vm->_map->getItem(_pressedMapX + 1, _pressedMapY)) ==
+				    (_vm->_map->getItem(_pressedMapX, _pressedMapY))) {
 					_pressedMapX++;
 					_vm->_map->_destX = _pressedMapX;
 					_gobDestX = _pressedMapX;
@@ -843,8 +843,8 @@
 			}
 
 			if (_pressedMapY < (_vm->_map->_mapHeight-1)) {
-				if ((_vm->_map->_itemsMap[_pressedMapY + 1][_pressedMapX]) ==
-						(_vm->_map->_itemsMap[_pressedMapY][_pressedMapX])) {
+				if ((_vm->_map->getItem(_pressedMapX, _pressedMapY + 1)) ==
+						(_vm->_map->getItem(_pressedMapX, _pressedMapY))) {
 					_pressedMapY++;
 					_vm->_map->_destY = _pressedMapY;
 					_gobDestY = _pressedMapY;
@@ -931,37 +931,37 @@
 		_pressedMapX = CLIP(posX / 12, 0, _vm->_map->_mapWidth - 1);
 		_pressedMapY = CLIP(posY / 6, 0, _vm->_map->_mapHeight - 1);
 
-		if ((_vm->_map->_itemsMap[_pressedMapY][_pressedMapX] == 0) && (i < 20)) {
+		if ((_vm->_map->getItem(_pressedMapX, _pressedMapY) == 0) && (i < 20)) {
 
 			if ((_pressedMapY < (_vm->_map->_mapHeight - 1)) &&
-					(_vm->_map->_itemsMap[_pressedMapY + 1][_pressedMapX] != 0)) {
+					(_vm->_map->getItem(_pressedMapX, _pressedMapY + 1) != 0)) {
 				_pressedMapY++;
 			} else if ((_pressedMapX < (_vm->_map->_mapWidth - 1)) &&
 					(_pressedMapY < (_vm->_map->_mapHeight - 1)) &&
-					(_vm->_map->_itemsMap[_pressedMapY + 1][_pressedMapX + 1] != 0)) {
+					(_vm->_map->getItem(_pressedMapX + 1, _pressedMapY + 1) != 0)) {
 				_pressedMapX++;
 				_pressedMapY++;
 			} else if ((_pressedMapX < (_vm->_map->_mapWidth - 1)) &&
-					(_vm->_map->_itemsMap[_pressedMapY][_pressedMapX + 1] != 0)) {
+					(_vm->_map->getItem(_pressedMapX + 1, _pressedMapY) != 0)) {
 				_pressedMapX++;
 			} else if ((_pressedMapX < (_vm->_map->_mapWidth - 1)) &&
 					(_pressedMapY > 0) &&
-					(_vm->_map->_itemsMap[_pressedMapY - 1][_pressedMapX + 1] != 0)) {
+					(_vm->_map->getItem(_pressedMapX + 1, _pressedMapY - 1) != 0)) {
 				_pressedMapX++;
 				_pressedMapY--;
 			} else if ((_pressedMapY > 0) &&
-					(_vm->_map->_itemsMap[_pressedMapY - 1][_pressedMapX] != 0)) {
+					(_vm->_map->getItem(_pressedMapX, _pressedMapY - 1) != 0)) {
 				_pressedMapY--;
 			} else if ((_pressedMapY > 0) && (_pressedMapX > 0) &&
-					(_vm->_map->_itemsMap[_pressedMapY - 1][_pressedMapX - 1] != 0)) {
+					(_vm->_map->getItem(_pressedMapX - 1, _pressedMapY - 1) != 0)) {
 				_pressedMapY--;
 				_pressedMapX--;
 			} else if ((_pressedMapX > 0) &&
-					(_vm->_map->_itemsMap[_pressedMapY][_pressedMapX - 1] != 0)) {
+					(_vm->_map->getItem(_pressedMapX - 1, _pressedMapY) != 0)) {
 				_pressedMapX--;
 			} else if ((_pressedMapX > 0) &&
 					(_pressedMapY < (_vm->_map->_mapHeight - 1)) &&
-					(_vm->_map->_itemsMap[_pressedMapY + 1][_pressedMapX - 1] != 0)) {
+					(_vm->_map->getItem(_pressedMapX - 1, _pressedMapY + 1) != 0)) {
 				_pressedMapX--;
 				_pressedMapY++;
 			}
@@ -1384,11 +1384,11 @@
 	for (int y = 0; y < _vm->_map->_mapHeight; y++) {
 		for (int x = 0; x < _vm->_map->_mapWidth; x++) {
 			if (_itemByteFlag == 1) {
-				if (((_vm->_map->_itemsMap[y][x] & 0xFF00) >> 8) == idToPocket)
-					_vm->_map->_itemsMap[y][x] &= 0xFF;
+				if (((_vm->_map->getItem(x, y) & 0xFF00) >> 8) == idToPocket)
+					_vm->_map->setItem(x, y, _vm->_map->getItem(x, y) & 0xFF);
 			} else {
-				if ((_vm->_map->_itemsMap[y][x] & 0xFF) == idToPocket)
-					_vm->_map->_itemsMap[y][x] &= 0xFF00;
+				if ((_vm->_map->getItem(x, y) & 0xFF) == idToPocket)
+					_vm->_map->setItem(x, y, _vm->_map->getItem(x, y) & 0xFF00);
 			}
 		}
 	}
@@ -1494,18 +1494,16 @@
 	if (_itemByteFlag == 0) {
 		for (y = 0; y < _vm->_map->_mapHeight; y++) {
 			for (x = 0; x < _vm->_map->_mapWidth; x++) {
-				if ((_vm->_map->_itemsMap[y][x] & 0xFF) == idToPick)
-					_vm->_map->_itemsMap[y][x] =
-					    (_vm->_map->_itemsMap[y][x] & 0xFF00) + idToPlace;
+				if ((_vm->_map->getItem(x, y) & 0xFF) == idToPick)
+					_vm->_map->setItem(x, y, (_vm->_map->getItem(x, y) & 0xFF00) + idToPlace);
 			}
 		}
 	} else {
 
 		for (y = 0; y < _vm->_map->_mapHeight; y++) {
 			for (x = 0; x < _vm->_map->_mapWidth; x++) {
-				if (((_vm->_map->_itemsMap[y][x] & 0xFF00) >> 8) == idToPick)
-					_vm->_map->_itemsMap[y][x] =
-					    (_vm->_map->_itemsMap[y][x] & 0xFF) + (idToPlace << 8);
+				if (((_vm->_map->getItem(x, y) & 0xFF00) >> 8) == idToPick)
+					_vm->_map->setItem(x, y, (_vm->_map->getItem(x, y) & 0xFF) + (idToPlace << 8));
 			}
 		}
 	}

Modified: scummvm/trunk/engines/gob/inter_v1.cpp
===================================================================
--- scummvm/trunk/engines/gob/inter_v1.cpp	2008-08-23 10:51:29 UTC (rev 34112)
+++ scummvm/trunk/engines/gob/inter_v1.cpp	2008-08-23 14:18:12 UTC (rev 34113)
@@ -2443,10 +2443,10 @@
 	int16 xPos = load16();
 	int16 yPos = load16();
 
-	if ((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) != 0)
-		params.retVarPtr = (uint32) ((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) >> 8);
+	if ((_vm->_map->getItem(xPos, yPos) & 0xFF00) != 0)
+		params.retVarPtr = (uint32) ((_vm->_map->getItem(xPos, yPos) & 0xFF00) >> 8);
 	else
-		params.retVarPtr = (uint32) _vm->_map->_itemsMap[yPos][xPos];
+		params.retVarPtr = (uint32) _vm->_map->getItem(xPos, yPos);
 }
 
 void Inter_v1::o1_manipulateMapIndirect(OpGobParams &params) {
@@ -2468,10 +2468,10 @@
 	xPos = VAR(xPos);
 	yPos = VAR(yPos);
 
-	if ((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) != 0)
-		params.retVarPtr = (uint32) ((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) >> 8);
+	if ((_vm->_map->getItem(xPos, yPos) & 0xFF00) != 0)
+		params.retVarPtr = (uint32) ((_vm->_map->getItem(xPos, yPos) & 0xFF00) >> 8);
 	else
-		params.retVarPtr = (uint32) _vm->_map->_itemsMap[yPos][xPos];
+		params.retVarPtr = (uint32) _vm->_map->getItem(xPos, yPos);
 }
 
 void Inter_v1::o1_setPassMap(OpGobParams &params) {
@@ -3025,88 +3025,88 @@
 void Inter_v1::manipulateMap(int16 xPos, int16 yPos, int16 item) {
 	for (int y = 0; y < _vm->_map->_mapHeight; y++) {
 		for (int x = 0; x < _vm->_map->_mapWidth; x++) {
-			if ((_vm->_map->_itemsMap[y][x] & 0xFF) == item)
-				_vm->_map->_itemsMap[y][x] &= 0xFF00;
-			else if (((_vm->_map->_itemsMap[y][x] & 0xFF00) >> 8) == item)
-				_vm->_map->_itemsMap[y][x] &= 0xFF;
+			if ((_vm->_map->getItem(x, y) & 0xFF) == item)
+				_vm->_map->setItem(x, y, _vm->_map->getItem(x, y) & 0xFF00);
+			else if (((_vm->_map->getItem(x, y) & 0xFF00) >> 8) == item)
+				_vm->_map->setItem(x, y, _vm->_map->getItem(x, y) & 0xFF);
 		}
 	}
 
 	if (xPos < _vm->_map->_mapWidth - 1) {
 		if (yPos > 0) {
-			if (((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) != 0) ||
-					((_vm->_map->_itemsMap[yPos - 1][xPos] & 0xFF00) != 0) ||
-					((_vm->_map->_itemsMap[yPos][xPos + 1] & 0xFF00) != 0) ||
-					((_vm->_map->_itemsMap[yPos - 1][xPos + 1] & 0xFF00) != 0)) {
+			if (((_vm->_map->getItem(xPos, yPos) & 0xFF00) != 0) ||
+					((_vm->_map->getItem(xPos, yPos - 1) & 0xFF00) != 0) ||
+					((_vm->_map->getItem(xPos + 1, yPos) & 0xFF00) != 0) ||
+					((_vm->_map->getItem(xPos + 1, yPos - 1) & 0xFF00) != 0)) {
 
-				_vm->_map->_itemsMap[yPos][xPos] =
-						(_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) + item;
+				_vm->_map->setItem(xPos, yPos,
+						(_vm->_map->getItem(xPos, yPos) & 0xFF00) + item);
 
-				_vm->_map->_itemsMap[yPos - 1][xPos] =
-						(_vm->_map->_itemsMap[yPos - 1][xPos] & 0xFF00) + item;
+				_vm->_map->setItem(xPos, yPos - 1,
+						(_vm->_map->getItem(xPos, yPos - 1) & 0xFF00) + item);
 
-				_vm->_map->_itemsMap[yPos][xPos + 1] =
-						(_vm->_map->_itemsMap[yPos][xPos + 1] & 0xFF00) + item;
+				_vm->_map->setItem(xPos + 1, yPos,
+						(_vm->_map->getItem(xPos + 1, yPos) & 0xFF00) + item);
 
-				_vm->_map->_itemsMap[yPos - 1][xPos + 1] =
-						(_vm->_map->_itemsMap[yPos - 1][xPos + 1] & 0xFF00) + item;
+				_vm->_map->setItem(xPos + 1, yPos - 1,
+						(_vm->_map->getItem(xPos + 1, yPos - 1) & 0xFF00) + item);
 
 			} else {
-				_vm->_map->_itemsMap[yPos][xPos] =
-						(_vm->_map->_itemsMap[yPos][xPos] & 0xFF) + (item << 8);
+				_vm->_map->setItem(xPos, yPos,
+						(_vm->_map->getItem(xPos, yPos) & 0xFF) + (item << 8));
 
-				_vm->_map->_itemsMap[yPos - 1][xPos] =
-						(_vm->_map->_itemsMap[yPos - 1][xPos] & 0xFF) + (item << 8);
+				_vm->_map->setItem(xPos, yPos - 1,
+						(_vm->_map->getItem(xPos, yPos - 1) & 0xFF) + (item << 8));
 
-				_vm->_map->_itemsMap[yPos][xPos + 1] =
-						(_vm->_map->_itemsMap[yPos][xPos + 1] & 0xFF) + (item << 8);
+				_vm->_map->setItem(xPos + 1, yPos,
+						(_vm->_map->getItem(xPos + 1, yPos) & 0xFF) + (item << 8));
 
-				_vm->_map->_itemsMap[yPos - 1][xPos + 1] =
-						(_vm->_map->_itemsMap[yPos - 1][xPos + 1] & 0xFF) + (item << 8);
+				_vm->_map->setItem(xPos + 1, yPos - 1,
+						(_vm->_map->getItem(xPos + 1, yPos - 1) & 0xFF) + (item << 8));
 			}
 		} else {
-			if (((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) != 0) ||
-					((_vm->_map->_itemsMap[yPos][xPos + 1] & 0xFF00) != 0)) {
+			if (((_vm->_map->getItem(xPos, yPos) & 0xFF00) != 0) ||
+					((_vm->_map->getItem(xPos + 1, yPos) & 0xFF00) != 0)) {
 
-				_vm->_map->_itemsMap[yPos][xPos] =
-						(_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) + item;
+				_vm->_map->setItem(xPos, yPos,
+						(_vm->_map->getItem(xPos, yPos) & 0xFF00) + item);
 
-				_vm->_map->_itemsMap[yPos][xPos + 1] =
-						(_vm->_map->_itemsMap[yPos][xPos + 1] & 0xFF00) + item;
+				_vm->_map->setItem(xPos + 1, yPos,
+						(_vm->_map->getItem(xPos + 1, yPos) & 0xFF00) + item);
 
 			} else {
-				_vm->_map->_itemsMap[yPos][xPos] =
-						(_vm->_map->_itemsMap[yPos][xPos] & 0xFF) + (item << 8);
+				_vm->_map->setItem(xPos, yPos,
+						(_vm->_map->getItem(xPos, yPos) & 0xFF) + (item << 8));
 
-				_vm->_map->_itemsMap[yPos][xPos + 1] =
-						(_vm->_map->_itemsMap[yPos][xPos + 1] & 0xFF) + (item << 8);
+				_vm->_map->setItem(xPos + 1, yPos,
+						(_vm->_map->getItem(xPos + 1, yPos) & 0xFF) + (item << 8));
 			}
 		}
 	} else {
 		if (yPos > 0) {
-			if (((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) != 0) ||
-					((_vm->_map->_itemsMap[yPos - 1][xPos] & 0xFF00) != 0)) {
+			if (((_vm->_map->getItem(xPos, yPos) & 0xFF00) != 0) ||
+					((_vm->_map->getItem(xPos, yPos - 1) & 0xFF00) != 0)) {
 
-				_vm->_map->_itemsMap[yPos][xPos] =
-						(_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) + item;
+				_vm->_map->setItem(xPos, yPos,
+						(_vm->_map->getItem(xPos, yPos) & 0xFF00) + item);
 
-				_vm->_map->_itemsMap[yPos - 1][xPos] =
-						(_vm->_map->_itemsMap[yPos - 1][xPos] & 0xFF00) + item;
+				_vm->_map->setItem(xPos, yPos - 1,
+						(_vm->_map->getItem(xPos, yPos - 1) & 0xFF00) + item);
 
 			} else {
-				_vm->_map->_itemsMap[yPos][xPos] =
-						(_vm->_map->_itemsMap[yPos][xPos] & 0xFF) + (item << 8);
+				_vm->_map->setItem(xPos, yPos,
+						(_vm->_map->getItem(xPos, yPos) & 0xFF) + (item << 8));
 
-				_vm->_map->_itemsMap[yPos - 1][xPos] =
-						(_vm->_map->_itemsMap[yPos - 1][xPos] & 0xFF) + (item << 8);
+				_vm->_map->setItem(xPos, yPos - 1,
+						(_vm->_map->getItem(xPos, yPos - 1) & 0xFF) + (item << 8));
 			}
 		} else {
-			if ((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) != 0) {
-				_vm->_map->_itemsMap[yPos][xPos] =
-						(_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) + item;
+			if ((_vm->_map->getItem(xPos, yPos) & 0xFF00) != 0) {
+				_vm->_map->setItem(xPos, yPos,
+						(_vm->_map->getItem(xPos, yPos) & 0xFF00) + item);
 			} else {
-				_vm->_map->_itemsMap[yPos][xPos] =
-						(_vm->_map->_itemsMap[yPos][xPos] & 0xFF) + (item << 8);
+				_vm->_map->setItem(xPos, yPos,
+						(_vm->_map->getItem(xPos, yPos) & 0xFF) + (item << 8));
 			}
 		}
 	}

Modified: scummvm/trunk/engines/gob/map.cpp
===================================================================
--- scummvm/trunk/engines/gob/map.cpp	2008-08-23 10:51:29 UTC (rev 34112)
+++ scummvm/trunk/engines/gob/map.cpp	2008-08-23 14:18:12 UTC (rev 34113)
@@ -77,10 +77,10 @@
 }
 
 void Map::placeItem(int16 x, int16 y, int16 id) {
-	if ((_itemsMap[y][x] & 0xFF00) != 0)
-		_itemsMap[y][x] = (_itemsMap[y][x] & 0xFF00) | id;
+	if ((getItem(x, y) & 0xFF00) != 0)
+		setItem(x, y, (getItem(x, y) & 0xFF00) | id);
 	else
-		_itemsMap[y][x] = (_itemsMap[y][x] & 0x00FF) | (id << 8);
+		setItem(x, y, (getItem(x, y) & 0x00FF) | (id << 8));
 }
 
 enum {

Modified: scummvm/trunk/engines/gob/map.h
===================================================================
--- scummvm/trunk/engines/gob/map.h	2008-08-23 10:51:29 UTC (rev 34112)
+++ scummvm/trunk/engines/gob/map.h	2008-08-23 14:18:12 UTC (rev 34113)
@@ -101,6 +101,9 @@
 
 	void loadMapsInitGobs(void);
 
+	virtual int16 getItem(int x, int y) = 0;
+	virtual void setItem(int x, int y, int16 item) = 0;
+
 	virtual int8 getPass(int x, int y, int heightOff = -1) = 0;
 	virtual void setPass(int x, int y, int8 pass, int heightOff = -1) = 0;
 
@@ -127,6 +130,23 @@
 	virtual void findNearestToDest(Mult::Mult_Object *obj);
 	virtual void optimizePoints(Mult::Mult_Object *obj, int16 x, int16 y);
 
+	virtual int16 getItem(int x, int y) {
+		assert(_itemsMap);
+
+		x = CLIP<int>(x, 0, _mapWidth - 1);
+		y = CLIP<int>(y, 0, _mapHeight - 1);
+
+		return _itemsMap[y][x];
+	}
+	virtual void setItem(int x, int y, int16 item) {
+		assert(_itemsMap);
+
+		x = CLIP<int>(x, 0, _mapWidth - 1);
+		y = CLIP<int>(y, 0, _mapHeight - 1);
+
+		_itemsMap[y][x] = item;
+	}
+
 	virtual int8 getPass(int x, int y, int heightOff = -1) {
 		if (!_passMap)
 			return 0;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list