diff options
| -rw-r--r-- | engines/gob/goblin.cpp | 74 | ||||
| -rw-r--r-- | engines/gob/inter_v1.cpp | 110 | ||||
| -rw-r--r-- | engines/gob/map.cpp | 6 | ||||
| -rw-r--r-- | engines/gob/map.h | 20 | 
4 files changed, 114 insertions, 96 deletions
diff --git a/engines/gob/goblin.cpp b/engines/gob/goblin.cpp index 5add0b9cea..55758cdfdc 100644 --- a/engines/gob/goblin.cpp +++ b/engines/gob/goblin.cpp @@ -652,7 +652,7 @@ void Goblin::adjustDest(int16 posX, int16 posY) {  	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::adjustDest(int16 posX, int16 posY) {  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::adjustTarget(void) {  }  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 @@ void Goblin::targetItem(void) {  	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 @@ void Goblin::targetItem(void) {  			_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 @@ void Goblin::targetItem(void) {  			}  			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 @@ void Goblin::moveFindItem(int16 posX, int16 posY) {  		_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 @@ void Goblin::pickItem(int16 indexToPocket, int16 idToPocket) {  	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 @@ void Goblin::swapItems(int16 indexToPick, int16 idToPick) {  	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));  			}  		}  	} diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp index 865d188a2e..18c29ec978 100644 --- a/engines/gob/inter_v1.cpp +++ b/engines/gob/inter_v1.cpp @@ -2443,10 +2443,10 @@ void Inter_v1::o1_getItem(OpGobParams ¶ms) {  	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 ¶ms) { @@ -2468,10 +2468,10 @@ void Inter_v1::o1_getItemIndirect(OpGobParams ¶ms) {  	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 ¶ms) { @@ -3025,88 +3025,88 @@ void Inter_v1::animPalette() {  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));  			}  		}  	} diff --git a/engines/gob/map.cpp b/engines/gob/map.cpp index 75867aaa6c..bb259800c0 100644 --- a/engines/gob/map.cpp +++ b/engines/gob/map.cpp @@ -77,10 +77,10 @@ Map::~Map() {  }  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 { diff --git a/engines/gob/map.h b/engines/gob/map.h index 8a94de8da9..4a211f205d 100644 --- a/engines/gob/map.h +++ b/engines/gob/map.h @@ -101,6 +101,9 @@ public:  	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 @@ public:  	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;  | 
