[Scummvm-cvs-logs] CVS: scummvm/kyra kyra.cpp,1.77,1.78 screen.cpp,1.29,1.30 script_v1.cpp,1.31,1.32

Johannes Schickel lordhoto at users.sourceforge.net
Fri Dec 9 09:38:00 CET 2005


Update of /cvsroot/scummvm/scummvm/kyra
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23867

Modified Files:
	kyra.cpp screen.cpp script_v1.cpp 
Log Message:
Finished item pick up code.
Changed writing of stack access in the script functions.
Also fixed typo with cmdPoisonBrandonAndRemaps.


Index: kyra.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/kyra.cpp,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -d -r1.77 -r1.78
--- kyra.cpp	9 Dec 2005 14:52:31 -0000	1.77
+++ kyra.cpp	9 Dec 2005 17:36:56 -0000	1.78
@@ -2536,24 +2536,24 @@
 byte KyraEngine::findItemAtPos(int x, int y) {
 	debug(9, "findItemAtPos(%d, %d)", x, y);
 	assert(_currentCharacter->sceneId < _roomTableSize);
-	uint8 *itemsTable = _roomTable[_currentCharacter->sceneId].itemsTable;
-	uint16 *xposOffset = _roomTable[_currentCharacter->sceneId].itemsXPos;
-	uint8 *yposOffset = _roomTable[_currentCharacter->sceneId].itemsYPos;
+	const uint8 *itemsTable = _roomTable[_currentCharacter->sceneId].itemsTable;
+	const uint16 *xposOffset = _roomTable[_currentCharacter->sceneId].itemsXPos;
+	const uint8 *yposOffset = _roomTable[_currentCharacter->sceneId].itemsYPos;
 	
 	int highestYPos = -1;
 	byte returnValue = 0xFF;
 	
 	for (int i = 0; i < 12; ++i) {
 		if (*itemsTable != 0xFF) {
-			int xpos = *xposOffset - 8;
+			int xpos = *xposOffset - 11;
 			int xpos2 = *xposOffset + 10;
 			if (x > xpos && x < xpos2) {
 				assert(*itemsTable < ARRAYSIZE(_itemTable));
 				int itemHeight = _itemTable[*itemsTable].height;
-				int ypos = *yposOffset;
+				int ypos = *yposOffset + 3;
 				int ypos2 = ypos - itemHeight - 3;
 				
-				if (y < ypos2 && (ypos+3) > y) {
+				if (y > ypos2 && ypos > y) {
 					if (highestYPos <= ypos) {
 						returnValue = i;
 						highestYPos = ypos;
@@ -2561,9 +2561,9 @@
 				}
 			}
 		}
-		xposOffset += 2;
-		yposOffset += 1;
-		itemsTable += 1;
+		++xposOffset;
+		++yposOffset;
+		++itemsTable;
 	}
 	
 	return returnValue;
@@ -2906,7 +2906,7 @@
 	assert(sceneId < _roomTableSize);
 	Room *currentRoom = &_roomTable[sceneId];
 	
-	uint8 item = currentRoom->itemsTable[itemIndex];
+	int item = currentRoom->itemsTable[itemIndex];
 	currentRoom->itemsTable[itemIndex] = _itemInHand;
 	_itemInHand = item;
 	animAddGameItem(itemIndex, sceneId);
@@ -4540,13 +4540,32 @@
 			handleSceneChange(xpos, ypos, 1, 1);
 			return;
 		}
-	}
-	
-	
+	}	
 }
 
 int KyraEngine::processInputHelper(int xpos, int ypos) {
 	debug(9, "processInputHelper(%d, %d)", xpos, ypos);
+	uint8 item = findItemAtPos(xpos, ypos);
+	if (item != 0xFF) {
+		if (_itemInHand == -1) {
+			_screen->hideMouse();
+			animRemoveGameItem(item);
+			// XXX call kyraPlaySound(53)
+			assert(_currentCharacter->sceneId < _roomTableSize);
+			Room *currentRoom = &_roomTable[_currentCharacter->sceneId];
+			int item2 = currentRoom->itemsTable[item];
+			currentRoom->itemsTable[item] = 0xFF;
+			setMouseItem(item2);
+			// XXX updateSentenceCommand
+			_itemInHand = item2;
+			_screen->showMouse();
+			clickEventHandler2();
+			return 1;
+		} else {
+			exchangeItemWithMouseItem(_currentCharacter->sceneId, item);
+			return 1;
+		}
+	}
 	return 0;
 }
 

Index: screen.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/screen.cpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- screen.cpp	8 Dec 2005 17:19:18 -0000	1.29
+++ screen.cpp	9 Dec 2005 17:36:57 -0000	1.30
@@ -567,7 +567,8 @@
 
 void Screen::drawShape(uint8 pageNum, const uint8 *shapeData, int x, int y, int sd, int flags, ...) {
 	debug(9, "Screen::drawShape(%d, 0x%X, %d, %d, %d, 0x%.04X, ...)", pageNum, shapeData, x, y, sd, flags);
-	assert(shapeData);
+	if (!shapeData)
+		return;
 	va_list args;
 	va_start(args, flags);
 	

Index: script_v1.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/kyra/script_v1.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- script_v1.cpp	9 Dec 2005 14:52:31 -0000	1.31
+++ script_v1.cpp	9 Dec 2005 17:36:57 -0000	1.32
@@ -74,7 +74,7 @@
 void ScriptHelper::c1_popRetOrPos() {
 	switch (_parameter) {
 		case 0:
-			_curScript->retValue = _curScript->stack[++_curScript->sp-1];
+			_curScript->retValue = _curScript->stack[_curScript->sp++];
 		break;
 		
 		case 1:
@@ -82,8 +82,8 @@
 				_continue = false;
 				_curScript->ip = 0;
 			} else {
-				_curScript->bp = _curScript->stack[++_curScript->sp-1];
-				_curScript->ip = _curScript->dataPtr->data + (_curScript->stack[++_curScript->sp-1] << 1);
+				_curScript->bp = _curScript->stack[_curScript->sp++];
+				_curScript->ip = _curScript->dataPtr->data + (_curScript->stack[_curScript->sp++] << 1);
 			}
 		break;
 		
@@ -95,15 +95,15 @@
 }
 
 void ScriptHelper::c1_popVar() {
-	_curScript->variables[_parameter] = _curScript->stack[++_curScript->sp-1];
+	_curScript->variables[_parameter] = _curScript->stack[_curScript->sp++];
 }
 
 void ScriptHelper::c1_popBPNeg() {
-	_curScript->stack[(-(int32)(_parameter + 2)) + _curScript->bp] = _curScript->stack[++_curScript->sp-1];
+	_curScript->stack[(-(int32)(_parameter + 2)) + _curScript->bp] = _curScript->stack[_curScript->sp++];
 }
 
 void ScriptHelper::c1_popBPAdd() {
-	_curScript->stack[(_parameter - 1) + _curScript->bp] = _curScript->stack[++_curScript->sp-1];
+	_curScript->stack[(_parameter - 1) + _curScript->bp] = _curScript->stack[_curScript->sp++];
 }
 
 void ScriptHelper::c1_addSP() {
@@ -157,8 +157,8 @@
 	int16 ret = 0;
 	bool error = false;
 	
-	int16 val1 = _curScript->stack[++_curScript->sp-1];
-	int16 val2 = _curScript->stack[++_curScript->sp-1];
+	int16 val1 = _curScript->stack[_curScript->sp++];
+	int16 val2 = _curScript->stack[_curScript->sp++];
 	
 	switch (_parameter) {
 		case 0:
@@ -284,8 +284,8 @@
 		_continue = false;
 		_curScript->ip = 0;
 	} else {
-		_curScript->retValue = _curScript->stack[++_curScript->sp-1];
-		uint16 temp = _curScript->stack[++_curScript->sp-1];
+		_curScript->retValue = _curScript->stack[_curScript->sp++];
+		uint16 temp = _curScript->stack[_curScript->sp++];
 		_curScript->stack[60] = 0;
 		_curScript->ip = &_curScript->dataPtr->data[temp*2];
 	}
@@ -1277,7 +1277,7 @@
 }
 
 int KyraEngine::cmd_poisonBrandonAndRemaps(ScriptState *script) {
-	warning("STUB: cmdPoisonBrandonAndRemaps");
+	warning("STUB: cmd_poisonBrandonAndRemaps");
 	return 0;
 }
 





More information about the Scummvm-git-logs mailing list