[Scummvm-cvs-logs] SF.net SVN: scummvm: [31721] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Fri Apr 25 17:41:07 CEST 2008


Revision: 31721
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31721&view=rev
Author:   lordhoto
Date:     2008-04-25 08:41:06 -0700 (Fri, 25 Apr 2008)

Log Message:
-----------
- Implemented opcodes:
  -> 30: o3_addItemToCurScene
  -> 62: o3_drawSceneShape
- Fixed bug in KyraEngine_v3::exchangeMouseItem, fixes user input after combining items

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/items_v3.cpp
    scummvm/trunk/engines/kyra/kyra_v3.h
    scummvm/trunk/engines/kyra/script_v3.cpp

Modified: scummvm/trunk/engines/kyra/items_v3.cpp
===================================================================
--- scummvm/trunk/engines/kyra/items_v3.cpp	2008-04-25 12:20:06 UTC (rev 31720)
+++ scummvm/trunk/engines/kyra/items_v3.cpp	2008-04-25 15:41:06 UTC (rev 31721)
@@ -391,7 +391,6 @@
 
 void KyraEngine_v3::exchangeMouseItem(int itemPos, int runScript) {
 	debugC(9, kDebugLevelMain, "KyraEngine_v3::exchangeMouseItem(%d, %d)", itemPos, runScript);
-	_screen->hideMouse();
 
 	if (itemListMagic(_itemInHand, itemPos))
 		return;
@@ -401,6 +400,7 @@
 		return;
 	}
 
+	_screen->hideMouse();
 	deleteItemAnimEntry(itemPos);
 
 	int itemId = _itemList[itemPos].id;

Modified: scummvm/trunk/engines/kyra/kyra_v3.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v3.h	2008-04-25 12:20:06 UTC (rev 31720)
+++ scummvm/trunk/engines/kyra/kyra_v3.h	2008-04-25 15:41:06 UTC (rev 31721)
@@ -680,6 +680,7 @@
 	int o3_showSceneFileMessage(ScriptState *script);
 	int o3_showBadConscience(ScriptState *script);
 	int o3_hideBadConscience(ScriptState *script);
+	int o3_addItemToCurScene(ScriptState *script);
 	int o3_objectChat(ScriptState *script);
 	int o3_checkForItem(ScriptState *script);
 	int o3_defineItem(ScriptState *script);
@@ -701,6 +702,7 @@
 	int o3_updateScore(ScriptState *script);
 	int o3_setSceneFilename(ScriptState *script);
 	int o3_removeItemsFromScene(ScriptState *script);
+	int o3_drawSceneShape(ScriptState *script);
 	int o3_drawSceneShapeOnPage(ScriptState *script);
 	int o3_checkInRect(ScriptState *script);
 	int o3_updateConversations(ScriptState *script);

Modified: scummvm/trunk/engines/kyra/script_v3.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v3.cpp	2008-04-25 12:20:06 UTC (rev 31720)
+++ scummvm/trunk/engines/kyra/script_v3.cpp	2008-04-25 15:41:06 UTC (rev 31721)
@@ -162,6 +162,35 @@
 	return 0;
 }
 
+int KyraEngine_v3::o3_addItemToCurScene(ScriptState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_addItemToCurScene(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
+	const uint16 item = stackPos(0);
+	int x = stackPos(1);
+	int y = stackPos(2);
+	int itemSlot = findFreeItem();
+
+	if (x < 20)
+		x = 20;
+	else if (x > 299)
+		x = 299;
+
+	if (y < 18)
+		y = 18;
+	else if (y > 187)
+		y = 187;
+
+	if (itemSlot >= 0) {
+		_itemList[itemSlot].x = x;
+		_itemList[itemSlot].y = y;
+		_itemList[itemSlot].id = item;
+		_itemList[itemSlot].sceneId = _mainCharacter.sceneId;
+		addItemToAnimList(itemSlot);
+		refreshAnimObjectsIfNeed();
+	}
+
+	return itemSlot;
+}
+
 int KyraEngine_v3::o3_objectChat(ScriptState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_objectChat(%p) (%d)", (const void *)script, stackPos(0));
 	int id = stackPos(0);
@@ -349,6 +378,30 @@
 	return retValue;
 }
 
+int KyraEngine_v3::o3_drawSceneShape(ScriptState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o3_drawSceneShape(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+
+	int shape = stackPos(0);
+	int flag = (stackPos(1) != 0) ? 1 : 0;
+
+	_screen->hideMouse();
+	restorePage3();
+
+	const int x = _sceneShapeDescs[shape].drawX;
+	const int y = _sceneShapeDescs[shape].drawY;
+
+	_screen->drawShape(2, _sceneShapes[shape], x, y, 2, flag);
+
+	_screen->copyRegionToBuffer(3, 0, 0, 320, 200, _gamePlayBuffer);
+
+	_screen->drawShape(0, _sceneShapes[shape], x, y, 2, flag);
+
+	flagAnimObjsForRefresh();
+	refreshAnimObjectsIfNeed();
+	_screen->showMouse();
+	return 0;
+}
+
 int KyraEngine_v3::o3_drawSceneShapeOnPage(ScriptState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_drawSceneShapeOnPage(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
 	const int shape = stackPos(0);
@@ -1096,7 +1149,7 @@
 	// 0x1c
 	OpcodeUnImpl();
 	OpcodeUnImpl();
-	OpcodeUnImpl();
+	Opcode(o3_addItemToCurScene);
 	Opcode(o3_objectChat);
 	// 0x20
 	Opcode(o3_checkForItem);
@@ -1136,7 +1189,7 @@
 	// 0x3c
 	Opcode(o3_removeItemsFromScene);
 	OpcodeUnImpl();
-	OpcodeUnImpl();
+	Opcode(o3_drawSceneShape);
 	Opcode(o3_drawSceneShapeOnPage);
 	// 0x40
 	Opcode(o3_checkInRect);


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