diff options
author | Oystein Eftevaag | 2007-10-13 18:47:52 +0000 |
---|---|---|
committer | Oystein Eftevaag | 2007-10-13 18:47:52 +0000 |
commit | 4f93e96d5ff321ad051f0cee9c6083fe85ad1686 (patch) | |
tree | babb7327da4e35b703453a14a87c32f077815e8c /engines/kyra | |
parent | 3f7b4e62ccb9ee97d75aecc773ff7a125903c4bd (diff) | |
download | scummvm-rg350-4f93e96d5ff321ad051f0cee9c6083fe85ad1686.tar.gz scummvm-rg350-4f93e96d5ff321ad051f0cee9c6083fe85ad1686.tar.bz2 scummvm-rg350-4f93e96d5ff321ad051f0cee9c6083fe85ad1686.zip |
Implemented the o2_setCharacterAnimFrame opcode and made sure o2_delay does game updates during the delay
svn-id: r29208
Diffstat (limited to 'engines/kyra')
-rw-r--r-- | engines/kyra/kyra_v2.cpp | 20 | ||||
-rw-r--r-- | engines/kyra/kyra_v2.h | 4 | ||||
-rw-r--r-- | engines/kyra/script_v2.cpp | 14 |
3 files changed, 36 insertions, 2 deletions
diff --git a/engines/kyra/kyra_v2.cpp b/engines/kyra/kyra_v2.cpp index ebde29f4d1..fa1394ba9c 100644 --- a/engines/kyra/kyra_v2.cpp +++ b/engines/kyra/kyra_v2.cpp @@ -671,6 +671,24 @@ void KyraEngine_v2::removeInputTop() { _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 @@ void KyraEngine_v2::setupOpcodeTable() { Opcode(o2_setSceneComment), OpcodeUnImpl(), OpcodeUnImpl(), - OpcodeUnImpl(), + Opcode(o2_setCharacterAnimFrame), // 0x0c OpcodeUnImpl(), Opcode(o2_trySceneChange), diff --git a/engines/kyra/kyra_v2.h b/engines/kyra/kyra_v2.h index c0cdcb0c32..a46e0a0960 100644 --- a/engines/kyra/kyra_v2.h +++ b/engines/kyra/kyra_v2.h @@ -540,6 +540,9 @@ protected: 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 @@ protected: 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); diff --git a/engines/kyra/script_v2.cpp b/engines/kyra/script_v2.cpp index 5b45be410b..deea962690 100644 --- a/engines/kyra/script_v2.cpp +++ b/engines/kyra/script_v2.cpp @@ -90,6 +90,18 @@ int KyraEngine_v2::o2_setSceneComment(ScriptState *script) { 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 @@ int KyraEngine_v2::o2_delay(ScriptState *script) { //if (stackPos(1)) // sub_27100(stackPos(0) * _tickLength); //else - delay(stackPos(0) * _tickLength); + delay(stackPos(0) * _tickLength, true); return 0; } |