diff options
| author | Johannes Schickel | 2008-03-16 13:31:18 +0000 | 
|---|---|---|
| committer | Johannes Schickel | 2008-03-16 13:31:18 +0000 | 
| commit | 2a95c653ebccc354cdda601f61b63eb2a48216f5 (patch) | |
| tree | 159df2053eb988bf5f7b81fc4cfc00a620fc7c8c | |
| parent | bbecd439c12181fd5efdc33bf514d37559f1fd89 (diff) | |
| download | scummvm-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
| -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); | 
