[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