[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