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

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sat Mar 15 21:24:26 CET 2008


Revision: 31132
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31132&view=rev
Author:   athrxx
Date:     2008-03-15 13:24:26 -0700 (Sat, 15 Mar 2008)

Log Message:
-----------
- some more opcodes for wsa and tim sequences
- adding some code to inputSceneChange

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/kyra_v2.cpp
    scummvm/trunk/engines/kyra/kyra_v2.h
    scummvm/trunk/engines/kyra/script_v2.cpp
    scummvm/trunk/engines/kyra/sequences_tim.cpp

Modified: scummvm/trunk/engines/kyra/kyra_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.cpp	2008-03-15 19:55:05 UTC (rev 31131)
+++ scummvm/trunk/engines/kyra/kyra_v2.cpp	2008-03-15 20:24:26 UTC (rev 31132)
@@ -1294,26 +1294,28 @@
 		}
 	}
 
+	int strId = 0;
+	int vocH = _flags.isTalkie ? 131 : -1;
+
 	if (_pathfinderFlag) {
-		if (findItem(curScene, 13) >= 0 && _unk3 <= -3) {
-			//XXX
-			_pathfinderFlag = 0;
-			return 0;
+		if (findItem(curScene, 13) >= 0 && _unk3 <= -3) {			
+			strId = 252;
 		} else if (_itemInHand == 72) {
-			//XXX
-			_pathfinderFlag = 0;
-			return 0;
+			strId = 257;
 		} else if (findItem(curScene, 72) >= 0 && _unk3 <= -3) {
-			//XXX
-			_pathfinderFlag = 0;
-			return 0;
-		} else if (0/*XXX*/) {
-			//XXX
-			_pathfinderFlag = 0;
-			return 0;
+			strId = 256;
+		} else if (getInventoryItemSlot(72) != -1 && _unk3 <= -3) {
+			strId = 257;
 		}
 	}
 
+	if (strId) {
+		updateCharFacing();
+		objectChat(getTableString(strId, _cCodeBuffer, 1), 0, vocH, strId);
+		_pathfinderFlag = 0;
+		return 0;
+	}
+
 	if (ABS(_mainCharacter.x1 - x) < 4 || ABS(_mainCharacter.y1 - y) < 2)
 		return 0;
 
@@ -2111,10 +2113,10 @@
 		OpcodeUnImpl(),
 		Opcode(o2_displayWsaFrame),
 		// 0x18
+		Opcode(o2_displayWsaSequentialFramesLooping),
+		Opcode(o2_wsaOpen),
 		Opcode(o2_displayWsaSequentialFrames),
-		Opcode(o2_wsaOpen),
 		OpcodeUnImpl(),
-		OpcodeUnImpl(),
 		// 0x1c
 		OpcodeUnImpl(),
 		OpcodeUnImpl(),
@@ -2257,7 +2259,7 @@
 		Opcode(o2_npcChat),
 		// 0x8c
 		Opcode(o2_deinitObject),
-		OpcodeUnImpl(),
+		Opcode(o2_playTimSequence),
 		Opcode(o2_makeBookOrCauldronAppear),
 		Opcode(o2_setSpecialSceneScriptState),
 		// 0x90

Modified: scummvm/trunk/engines/kyra/kyra_v2.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.h	2008-03-15 19:55:05 UTC (rev 31131)
+++ scummvm/trunk/engines/kyra/kyra_v2.h	2008-03-15 20:24:26 UTC (rev 31132)
@@ -824,6 +824,7 @@
 	uint8 *tim_loadFile(const char *filename, uint8 *buffer, int32 bufferSize);
 	void tim_releaseBuffer(uint8 *buffer);
 	void tim_processSequence(uint8 *timBuffer, int loop);
+	void tim_playFullSequence(const char *filename);
 
 	int tim_o_dummy_r0(uint8 *ptr);
 	int tim_o_dummy_r1(uint8 *ptr);
@@ -947,8 +948,9 @@
 	int o2_showChapterMessage(ScriptState *script);
 	int o2_wsaClose(ScriptState *script);
 	int o2_displayWsaFrame(ScriptState *script);
+	int o2_displayWsaSequentialFramesLooping(ScriptState *script);
+	int o2_wsaOpen(ScriptState *script);
 	int o2_displayWsaSequentialFrames(ScriptState *script);
-	int o2_wsaOpen(ScriptState *script);
 	int o2_checkForItem(ScriptState *script);
 	int o2_defineItem(ScriptState *script);
 	int o2_removeItemFromInventory(ScriptState *script);
@@ -1015,6 +1017,7 @@
 	int o2_initObject(ScriptState *script);
 	int o2_npcChat(ScriptState *script);
 	int o2_deinitObject(ScriptState *script);
+	int o2_playTimSequence(ScriptState *script);
 	int o2_makeBookOrCauldronAppear(ScriptState *script);
 	int o2_setSpecialSceneScriptState(ScriptState *script);
 	int o2_clearSpecialSceneScriptState(ScriptState *script);

Modified: scummvm/trunk/engines/kyra/script_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v2.cpp	2008-03-15 19:55:05 UTC (rev 31131)
+++ scummvm/trunk/engines/kyra/script_v2.cpp	2008-03-15 20:24:26 UTC (rev 31132)
@@ -190,8 +190,8 @@
 	return 0;
 }
 
-int KyraEngine_v2::o2_displayWsaSequentialFrames(ScriptState *script) {
-	debugC(3, kDebugLevelScriptFuncs, "o2_displayWsaSequentialFrames(%p) (%d, %d, %d, %d, %d, %d, %d, %d)", (const void *)script,
+int KyraEngine_v2::o2_displayWsaSequentialFramesLooping(ScriptState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "o2_displayWsaSequentialFramesLooping(%p) (%d, %d, %d, %d, %d, %d, %d, %d)", (const void *)script,
 			stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6), stackPos(7));
 	int startFrame = stackPos(0);
 	int endFrame = stackPos(1);
@@ -253,6 +253,33 @@
 	return 0;
 }
 
+int KyraEngine_v2::o2_displayWsaSequentialFrames(ScriptState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "o2_displayWsaSequentialFrames(%p) (%d, %d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6));
+	
+	uint16 frameDelay = stackPos(2) * _tickLength;
+	uint16 currentFrame = stackPos(3);
+	uint16 lastFrame = stackPos(4);
+	uint16 index = stackPos(5);
+	uint16 copyParam = stackPos(6) | 0xc000;
+
+	_wsaSlots[index]->setX(stackPos(0));
+	_wsaSlots[index]->setY(stackPos(1));
+	_wsaSlots[index]->setDrawPage(0);
+	
+	_screen->hideMouse();
+
+	while (currentFrame <= lastFrame) {	
+		uint32 endTime = _system->getMillis() + frameDelay;
+		_wsaSlots[index]->displayFrame(currentFrame++, copyParam);
+		_screen->updateScreen();
+		delayUntil(endTime);
+	}
+
+	_screen->showMouse();
+
+	return 0;
+}
+
 int KyraEngine_v2::o2_checkForItem(ScriptState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "o2_checkForItem(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
 	return findItem(stackPos(0), stackPos(1)) == -1 ? 0 : 1;
@@ -924,6 +951,12 @@
 	return 0;
 }
 
+int KyraEngine_v2::o2_playTimSequence(ScriptState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "o2_playTimSequence(%p) ('%s')", (const void *)script, stackPosString(0));
+	tim_playFullSequence(stackPosString(0));
+	return 0;
+}
+
 int KyraEngine_v2::o2_makeBookOrCauldronAppear(ScriptState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "o2_makeBookOrCauldronAppear(%p) (%d)", (const void *)script, stackPos(0));
 	seq_makeBookOrCauldronAppear(stackPos(0));

Modified: scummvm/trunk/engines/kyra/sequences_tim.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sequences_tim.cpp	2008-03-15 19:55:05 UTC (rev 31131)
+++ scummvm/trunk/engines/kyra/sequences_tim.cpp	2008-03-15 20:24:26 UTC (rev 31132)
@@ -176,6 +176,26 @@
 
 }
 
+void KyraEngine_v2::tim_playFullSequence(const char *filename) {
+	uint8 *ptr = tim_loadFile(filename, 0, 0);
+	if (!ptr)
+		return;
+
+	_objectChatFinished = 0;
+
+	while (ptr && !_objectChatFinished) {
+		if (ptr)
+			tim_processSequence(ptr, 0);
+		if (_timChatText)
+			updateWithText();
+		else
+			update();
+	}
+
+	if (ptr)
+		tim_releaseBuffer(ptr);
+}
+
 int KyraEngine_v2::tim_o_dummy_r0(uint8 *ptr) {
 	return 0;
 }


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