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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Sun Apr 27 00:13:19 CEST 2008


Revision: 31737
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31737&view=rev
Author:   lordhoto
Date:     2008-04-26 15:13:19 -0700 (Sat, 26 Apr 2008)

Log Message:
-----------
Implemented opcodes:
 - 26: o3_setInventorySlot
 - 27: o3_getInventorySlot
 - 28: o3_addItemToInventory

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-26 21:52:15 UTC (rev 31736)
+++ scummvm/trunk/engines/kyra/items_v3.cpp	2008-04-26 22:13:19 UTC (rev 31737)
@@ -64,6 +64,15 @@
 	return -1;
 }
 
+int KyraEngine_v3::findFreeInventorySlot() {
+	debugC(9, kDebugLevelMain, "KyraEngine_v3::findFreeInventorySlot()");
+	for (int i = 0; i < 10; ++i) {
+		if (_mainCharacter.inventory[i] == 0xFFFF)
+			return i;
+	}
+	return -1;
+}
+
 int KyraEngine_v3::findItem(uint16 sceneId, uint16 id) {
 	debugC(9, kDebugLevelMain, "KyraEngine_v3::findItem(%u, %u)", sceneId, id);
 	for (int i = 0; i < 50; ++i) {

Modified: scummvm/trunk/engines/kyra/kyra_v3.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v3.h	2008-04-26 21:52:15 UTC (rev 31736)
+++ scummvm/trunk/engines/kyra/kyra_v3.h	2008-04-26 22:13:19 UTC (rev 31737)
@@ -539,6 +539,8 @@
 
 	void makeCharFacingMouse();
 
+	int findFreeInventorySlot();
+
 	// talk object
 	struct TalkObject {
 		char filename[13];
@@ -704,6 +706,9 @@
 	int o3_setCharacterAnimFrameFromFacing(ScriptState *script);
 	int o3_showBadConscience(ScriptState *script);
 	int o3_hideBadConscience(ScriptState *script);
+	int o3_setInventorySlot(ScriptState *script);
+	int o3_getInventorySlot(ScriptState *script);
+	int o3_addItemToInventory(ScriptState *script);
 	int o3_addItemToCurScene(ScriptState *script);
 	int o3_objectChat(ScriptState *script);
 	int o3_checkForItem(ScriptState *script);

Modified: scummvm/trunk/engines/kyra/script_v3.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v3.cpp	2008-04-26 21:52:15 UTC (rev 31736)
+++ scummvm/trunk/engines/kyra/script_v3.cpp	2008-04-26 22:13:19 UTC (rev 31737)
@@ -185,6 +185,31 @@
 	return 0;
 }
 
+int KyraEngine_v3::o3_setInventorySlot(ScriptState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_setInventorySlot(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+	const int slot = MAX<int16>(0, MIN<int16>(10, stackPos(0)));
+	return (_mainCharacter.inventory[slot] = stackPos(1));
+}
+
+int KyraEngine_v3::o3_getInventorySlot(ScriptState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_getInventorySlot(%p) (%d)", (const void *)script, stackPos(0));
+	return _mainCharacter.inventory[stackPos(0)];
+}
+
+int KyraEngine_v3::o3_addItemToInventory(ScriptState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v3::o3_addItemToInventory(%p) (%d)", (const void *)script, stackPos(0));
+	int slot = findFreeInventorySlot();
+	if (slot >= 0) {
+		_mainCharacter.inventory[slot] = stackPos(0);
+		if (_inventoryState) {
+			_screen->hideMouse();
+			redrawInventory(0);
+			_screen->showMouse();
+		}
+	}
+	return slot;
+}
+
 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);
@@ -1252,11 +1277,11 @@
 	// 0x18
 	OpcodeUnImpl();
 	OpcodeUnImpl();
-	OpcodeUnImpl();
-	OpcodeUnImpl();
+	Opcode(o3_setInventorySlot);
+	Opcode(o3_getInventorySlot);
 	// 0x1c
+	Opcode(o3_addItemToInventory);
 	OpcodeUnImpl();
-	OpcodeUnImpl();
 	Opcode(o3_addItemToCurScene);
 	Opcode(o3_objectChat);
 	// 0x20


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