aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorJohannes Schickel2008-03-16 13:31:18 +0000
committerJohannes Schickel2008-03-16 13:31:18 +0000
commit2a95c653ebccc354cdda601f61b63eb2a48216f5 (patch)
tree159df2053eb988bf5f7b81fc4cfc00a620fc7c8c /engines
parentbbecd439c12181fd5efdc33bf514d37559f1fd89 (diff)
downloadscummvm-rg350-2a95c653ebccc354cdda601f61b63eb2a48216f5.tar.gz
scummvm-rg350-2a95c653ebccc354cdda601f61b63eb2a48216f5.tar.bz2
scummvm-rg350-2a95c653ebccc354cdda601f61b63eb2a48216f5.zip
- Impelemented opcode 155: o2_stopSceneAnimation
- fixed crash while switching chapters svn-id: r31139
Diffstat (limited to 'engines')
-rw-r--r--engines/kyra/kyra_v2.cpp4
-rw-r--r--engines/kyra/kyra_v2.h1
-rw-r--r--engines/kyra/script.cpp2
-rw-r--r--engines/kyra/script_v2.cpp20
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);