[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