diff options
-rw-r--r-- | engines/kyra/kyra_v2.cpp | 4 | ||||
-rw-r--r-- | engines/kyra/kyra_v2.h | 1 | ||||
-rw-r--r-- | engines/kyra/script.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/script_v2.cpp | 20 |
4 files changed, 24 insertions, 3 deletions
diff --git a/engines/kyra/kyra_v2.cpp b/engines/kyra/kyra_v2.cpp index 295c917c83..12743311d2 100644 --- a/engines/kyra/kyra_v2.cpp +++ b/engines/kyra/kyra_v2.cpp @@ -799,10 +799,8 @@ void KyraEngine_v2::delay(uint32 amount, bool updateGame, bool isMainLoop) { update(); } - if (amount > 0 ) _system->delayMillis(amount > 10 ? 10 : amount); - } while (!_skipFlag && _system->getMillis() < start + amount && !_quitFlag); } @@ -2275,7 +2273,7 @@ void KyraEngine_v2::setupOpcodeTable() { Opcode(o2_customChat), Opcode(o2_customChatFinish), OpcodeUnImpl(), - OpcodeUnImpl(), + Opcode(o2_stopSceneAnimation), // 0x9c OpcodeUnImpl(), OpcodeUnImpl(), diff --git a/engines/kyra/kyra_v2.h b/engines/kyra/kyra_v2.h index 1aad6f6160..dc8f19d19e 100644 --- a/engines/kyra/kyra_v2.h +++ b/engines/kyra/kyra_v2.h @@ -1031,6 +1031,7 @@ protected: int o2_mushroomEffect(ScriptState *script); int o2_customChat(ScriptState *script); int o2_customChatFinish(ScriptState *script); + int o2_stopSceneAnimation(ScriptState *script); int o2_processPaletteIndex(ScriptState *script); int o2_getBoolFromStack(ScriptState *script); int o2_setVocHigh(ScriptState *script); diff --git a/engines/kyra/script.cpp b/engines/kyra/script.cpp index 5558a397e4..af5151f25f 100644 --- a/engines/kyra/script.cpp +++ b/engines/kyra/script.cpp @@ -72,6 +72,8 @@ bool ScriptHelper::loadScript(const char *filename, ScriptData *scriptData, cons return false; } + memset(scriptData, 0, sizeof(ScriptData)); + uint32 formBlockSize = file.getFORMBlockSize(); if (formBlockSize == (uint32)-1) { error("No FORM chunk found in file: '%s'", filename); diff --git a/engines/kyra/script_v2.cpp b/engines/kyra/script_v2.cpp index 954b887aa0..e46fdc0ed5 100644 --- a/engines/kyra/script_v2.cpp +++ b/engines/kyra/script_v2.cpp @@ -1100,6 +1100,26 @@ int KyraEngine_v2::o2_customChatFinish(ScriptState *script) { return 0; } +int KyraEngine_v2::o2_stopSceneAnimation(ScriptState *script) { + debugC(3, kDebugLevelScriptFuncs, "o2_stopSceneAnimation(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1)); + const int index = 1+stackPos(0); + AnimObj &obj = _animObjects[index]; + restorePage3(); + obj.shapeIndex3 = 0xFFFF; + obj.animNum = 0xFFFF; + obj.needRefresh = 1; + obj.unk8 = 1; + if (stackPos(1)) + refreshAnimObjectsIfNeed(); + obj.enabled = false; + _animList = deleteAnimListEntry(_animList, &_animObjects[index]); + + if (_sceneAnimMovie[index]->opened()) + _sceneAnimMovie[index]->close(); + + return 0; +} + int KyraEngine_v2::o2_processPaletteIndex(ScriptState *script) { debugC(3, kDebugLevelScriptFuncs, "o2_processPaletteIndex(%p) (%d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5)); uint8 *palette = _screen->getPalette(0); |