[Scummvm-cvs-logs] SF.net SVN: scummvm: [29208] scummvm/trunk/engines/kyra
vinterstum at users.sourceforge.net
vinterstum at users.sourceforge.net
Sat Oct 13 20:47:52 CEST 2007
Revision: 29208
http://scummvm.svn.sourceforge.net/scummvm/?rev=29208&view=rev
Author: vinterstum
Date: 2007-10-13 11:47:52 -0700 (Sat, 13 Oct 2007)
Log Message:
-----------
Implemented the o2_setCharacterAnimFrame opcode and made sure o2_delay does game updates during the delay
Modified Paths:
--------------
scummvm/trunk/engines/kyra/kyra_v2.cpp
scummvm/trunk/engines/kyra/kyra_v2.h
scummvm/trunk/engines/kyra/script_v2.cpp
Modified: scummvm/trunk/engines/kyra/kyra_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.cpp 2007-10-13 18:36:19 UTC (rev 29207)
+++ scummvm/trunk/engines/kyra/kyra_v2.cpp 2007-10-13 18:47:52 UTC (rev 29208)
@@ -671,6 +671,24 @@
_eventList.erase(_eventList.begin());
}
+void KyraEngine_v2::delay(uint32 amount, bool updateGame, bool isMainLoop) {
+
+ uint32 start = _system->getMillis();
+ do {
+ if (updateGame) {
+ if (_chatText)
+ updateWithText();
+ else
+ update();
+ }
+
+
+ if (amount > 0 )
+ _system->delayMillis(amount > 10 ? 10 : amount);
+
+ } while (!_skipFlag && _system->getMillis() < start + amount && !_quitFlag);
+}
+
void KyraEngine_v2::cleanup() {
delete [] _gamePlayBuffer;
delete [] _unkBuf500Bytes;
@@ -1460,7 +1478,7 @@
Opcode(o2_setSceneComment),
OpcodeUnImpl(),
OpcodeUnImpl(),
- OpcodeUnImpl(),
+ Opcode(o2_setCharacterAnimFrame),
// 0x0c
OpcodeUnImpl(),
Opcode(o2_trySceneChange),
Modified: scummvm/trunk/engines/kyra/kyra_v2.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v2.h 2007-10-13 18:36:19 UTC (rev 29207)
+++ scummvm/trunk/engines/kyra/kyra_v2.h 2007-10-13 18:47:52 UTC (rev 29208)
@@ -540,6 +540,9 @@
void setTimer1DelaySecs(int secs);
+ // delay
+ void delay(uint32 millis, bool updateGame = false, bool isMainLoop = false);
+
// opcodes
int o2_setCharacterFacingRefresh(ScriptState *script);
int o2_defineObject(ScriptState *script);
@@ -548,6 +551,7 @@
int o2_getCharacterY(ScriptState *script);
int o2_getCharacterFacing(ScriptState *script);
int o2_setSceneComment(ScriptState *script);
+ int o2_setCharacterAnimFrame(ScriptState *script);
int o2_trySceneChange(ScriptState *script);
int o2_showChapterMessage(ScriptState *script);
int o2_wsaClose(ScriptState *script);
Modified: scummvm/trunk/engines/kyra/script_v2.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v2.cpp 2007-10-13 18:36:19 UTC (rev 29207)
+++ scummvm/trunk/engines/kyra/script_v2.cpp 2007-10-13 18:47:52 UTC (rev 29208)
@@ -90,6 +90,18 @@
return 0;
}
+int KyraEngine_v2::o2_setCharacterAnimFrame(ScriptState *script) {
+ debugC(3, kDebugLevelScriptFuncs, "o2_setCharacterAnimFrame(%p) (-, %d, %d)", (const void *)script, stackPos(1), stackPos(2));
+ int animFrame = stackPos(1);
+ int skipRefresh = stackPos(2);
+
+ _mainCharacter.animFrame = animFrame;
+ if (skipRefresh)
+ updateCharacterAnim(0);
+
+ return 0;
+}
+
int KyraEngine_v2::o2_trySceneChange(ScriptState *script) {
debugC(3, kDebugLevelScriptFuncs, "o2_trySceneChange(%p) (%d, %d, %d, %d)", (const void *)script,
stackPos(0), stackPos(1), stackPos(2), stackPos(3));
@@ -292,7 +304,7 @@
//if (stackPos(1))
// sub_27100(stackPos(0) * _tickLength);
//else
- delay(stackPos(0) * _tickLength);
+ delay(stackPos(0) * _tickLength, true);
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