diff options
author | Torbjörn Andersson | 2004-10-16 07:46:52 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2004-10-16 07:46:52 +0000 |
commit | cebce0f5361cc58a4b6c232d042d2daebb2b4088 (patch) | |
tree | 743b49b6db138d9506f3367dd3df1412f6e1c78b /saga/events.cpp | |
parent | 4840c16c1b40146ce4268e3599f6ab3115b51ce4 (diff) | |
download | scummvm-rg350-cebce0f5361cc58a4b6c232d042d2daebb2b4088.tar.gz scummvm-rg350-cebce0f5361cc58a4b6c232d042d2daebb2b4088.tar.bz2 scummvm-rg350-cebce0f5361cc58a4b6c232d042d2daebb2b4088.zip |
Introduced script events to fix the "actors appear before fade-out" bug.
There are some minor music-related changes here as well, but that's just
cleanup.
svn-id: r15567
Diffstat (limited to 'saga/events.cpp')
-rw-r--r-- | saga/events.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/saga/events.cpp b/saga/events.cpp index 4bf1c354d3..99cd2e5f9f 100644 --- a/saga/events.cpp +++ b/saga/events.cpp @@ -261,6 +261,7 @@ int Events::handleImmediate(R_EVENT *event) { break; } break; + case R_SCRIPT_EVENT: case R_BG_EVENT: case R_INTERFACE_EVENT: handleOneShot(event); @@ -280,6 +281,7 @@ int Events::handleImmediate(R_EVENT *event) { int Events::handleOneShot(R_EVENT *event) { R_SURFACE *back_buf; + R_SCRIPT_THREAD *sthread; static SCENE_BGINFO bginfo; @@ -311,7 +313,9 @@ int Events::handleOneShot(R_EVENT *event) { _vm->_sndRes->playVoice(event->param); break; case R_MUSIC_EVENT: - _vm->_music->play(event->param, event->param2); + _vm->_music->stop(); + if (event->op == EVENT_PLAY) + _vm->_music->play(event->param, event->param2); break; case R_BG_EVENT: { @@ -384,6 +388,26 @@ int Events::handleOneShot(R_EVENT *event) { break; } break; + case R_SCRIPT_EVENT: + debug(0, "Starting start script #%d", event->param); + + sthread = _vm->_script->SThreadCreate(); + if (sthread == NULL) { + _vm->_console->print("Thread creation failed."); + break; + } + + sthread->threadVars[kVarAction] = TO_LE_16(event->param2); + sthread->threadVars[kVarObject] = TO_LE_16(event->param3); + sthread->threadVars[kVarWithObject] = TO_LE_16(event->param4); + sthread->threadVars[kVarActor] = TO_LE_16(event->param5); + + _vm->_script->SThreadExecute(sthread, event->param); + + if (event->op == EVENT_BLOCKING) + _vm->_script->SThreadCompleteThread(); + + break; default: break; } |