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

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Fri Apr 27 23:25:05 CEST 2007


Revision: 26629
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26629&view=rev
Author:   drmccoy
Date:     2007-04-27 14:25:03 -0700 (Fri, 27 Apr 2007)

Log Message:
-----------
That should fix another segfault when clicking outside of the screen (bug #1708863)

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

Modified: scummvm/trunk/engines/gob/goblin.cpp
===================================================================
--- scummvm/trunk/engines/gob/goblin.cpp	2007-04-27 21:07:37 UTC (rev 26628)
+++ scummvm/trunk/engines/gob/goblin.cpp	2007-04-27 21:25:03 UTC (rev 26629)
@@ -977,39 +977,48 @@
 			break;
 		}
 
-		_pressedMapX = posX / 12;
-		_pressedMapY = posY / 6;
+		_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->_itemsMap[_pressedMapY + 1][_pressedMapX] != 0) {
+			if ((_pressedMapY < (_vm->_map->_mapHeight - 1)) &&
+					(_vm->_map->_itemsMap[_pressedMapY + 1][_pressedMapX] != 0)) {
 				_pressedMapY++;
-			} else if (_vm->_map->_itemsMap[_pressedMapY + 1][_pressedMapX + 1] != 0) {
+			} else if ((_pressedMapX < (_vm->_map->_mapWidth - 1)) &&
+					(_pressedMapY < (_vm->_map->_mapHeight - 1)) &&
+					(_vm->_map->_itemsMap[_pressedMapY + 1][_pressedMapX + 1] != 0)) {
 				_pressedMapX++;
 				_pressedMapY++;
-			} else if (_vm->_map->_itemsMap[_pressedMapY][_pressedMapX + 1] != 0) {
+			} else if ((_pressedMapX < (_vm->_map->_mapWidth - 1)) &&
+					(_vm->_map->_itemsMap[_pressedMapY][_pressedMapX + 1] != 0)) {
 				_pressedMapX++;
-			} else if (_vm->_map->_itemsMap[_pressedMapY - 1][_pressedMapX + 1] != 0) {
+			} else if ((_pressedMapX < (_vm->_map->_mapWidth - 1)) &&
+					(_pressedMapY > 0) &&
+					(_vm->_map->_itemsMap[_pressedMapY - 1][_pressedMapX + 1] != 0)) {
 				_pressedMapX++;
 				_pressedMapY--;
-			} else if (_vm->_map->_itemsMap[_pressedMapY - 1][_pressedMapX] != 0) {
+			} else if ((_pressedMapY > 0) &&
+					(_vm->_map->_itemsMap[_pressedMapY - 1][_pressedMapX] != 0)) {
 				_pressedMapY--;
-			} else if (_vm->_map->_itemsMap[_pressedMapY - 1][_pressedMapX - 1] != 0) {
+			} else if ((_pressedMapY > 0) && (_pressedMapX > 0) &&
+					(_vm->_map->_itemsMap[_pressedMapY - 1][_pressedMapX - 1] != 0)) {
 				_pressedMapY--;
 				_pressedMapX--;
-			} else if (_vm->_map->_itemsMap[_pressedMapY][_pressedMapX - 1] != 0) {
+			} else if ((_pressedMapX > 0) &&
+					(_vm->_map->_itemsMap[_pressedMapY][_pressedMapX - 1] != 0)) {
 				_pressedMapX--;
-			} else if (_vm->_map->_itemsMap[_pressedMapY + 1][_pressedMapX - 1] != 0) {
+			} else if ((_pressedMapX > 0) &&
+					(_pressedMapY < (_vm->_map->_mapHeight - 1)) &&
+					(_vm->_map->_itemsMap[_pressedMapY + 1][_pressedMapX - 1] != 0)) {
 				_pressedMapX--;
 				_pressedMapY++;
 			}
 		}
 	} else {
-		_pressedMapX = posX / 12;
-		_pressedMapY = posY / 6;
+		_pressedMapX = CLIP(posX / 12, 0, _vm->_map->_mapWidth - 1);
+		_pressedMapY = CLIP(posY / 6, 0, _vm->_map->_mapHeight - 1);
 	}
-	_pressedMapX = CLIP((int) _pressedMapX, 0, _vm->_map->_mapWidth - 1);
-	_pressedMapY = CLIP((int) _pressedMapY, 0, _vm->_map->_mapHeight - 1);
 }
 
 void Goblin::moveCheckSelect(int16 framesCount, Gob_Object *gobDesc,


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