[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