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

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sun Apr 5 01:35:00 CEST 2009


Revision: 39854
          http://scummvm.svn.sourceforge.net/scummvm/?rev=39854&view=rev
Author:   athrxx
Date:     2009-04-04 23:35:00 +0000 (Sat, 04 Apr 2009)

Log Message:
-----------
LOL: implemented opcode for throwing items into or out of the thug's cave

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/lol.h
    scummvm/trunk/engines/kyra/script_lol.cpp

Modified: scummvm/trunk/engines/kyra/lol.h
===================================================================
--- scummvm/trunk/engines/kyra/lol.h	2009-04-04 22:49:14 UTC (rev 39853)
+++ scummvm/trunk/engines/kyra/lol.h	2009-04-04 23:35:00 UTC (rev 39854)
@@ -630,6 +630,7 @@
 	int olol_setPaletteBrightness(EMCState *script);
 	int olol_printMessage(EMCState *script);
 	int olol_deleteLevelItem(EMCState *script);
+	int olol_objectLeavesLevel(EMCState *script);
 	int olol_playDialogueTalkText(EMCState *script);
 	int olol_checkMonsterTypeHostility(EMCState *script);
 	int olol_setNextFunc(EMCState *script);

Modified: scummvm/trunk/engines/kyra/script_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lol.cpp	2009-04-04 22:49:14 UTC (rev 39853)
+++ scummvm/trunk/engines/kyra/script_lol.cpp	2009-04-04 23:35:00 UTC (rev 39854)
@@ -1185,6 +1185,52 @@
 	return 1;
 }
 
+int LoLEngine::olol_objectLeavesLevel(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_objectLeavesLevel(%p) (%d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
+	int o = _levelBlockProperties[stackPos(0)].assignedObjects;
+	int res = 0;
+	int level = stackPos(2);
+	int block = stackPos(1);
+	int runScript = stackPos(4);
+	int includeMonsters = stackPos(3);
+	int includeItems = stackPos(5);
+
+	while (o) {
+		int l = o;
+		o = findObject(o)->nextAssignedObject;
+		if (l & 0x8000) {
+			if (!includeMonsters)
+				continue;
+
+			l &= 0x7fff;
+
+			MonsterInPlay *m = &_monsters[l];
+
+			setMonsterMode(m, 14);
+			checkSceneUpdateNeed(m->blockPropertyIndex);
+			placeMonster(m, 0, 0);
+
+			res = 1;
+
+		} else {
+			if (!(_itemsInPlay[l].shpCurFrame_flg & 0x4000) || !includeItems)
+				continue;
+
+			placeMoveLevelItem(l, level, block, _itemsInPlay[l].x & 0xff, _itemsInPlay[l].y & 0xff, _itemsInPlay[l].flyingHeight);
+
+			if (!runScript || level != _currentLevel) {
+				res = 1;
+				continue;
+			}
+
+			runLevelScriptCustom(block, 0x80, -1, l, 0, 0);
+			res = 1;
+		}
+	}
+
+	return res;
+}
+
 int LoLEngine::olol_playDialogueTalkText(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_playDialogueTalkText(%p) (%d)", (const void *)script, stackPos(0));
 	int track = stackPos(0);
@@ -1764,9 +1810,9 @@
 
 	// 0x74
 	OpcodeUnImpl();
+	Opcode(olol_objectLeavesLevel);
 	OpcodeUnImpl();
 	OpcodeUnImpl();
-	OpcodeUnImpl();
 
 	// 0x78
 	OpcodeUnImpl();


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