aboutsummaryrefslogtreecommitdiff
path: root/saga/events.cpp
diff options
context:
space:
mode:
authorTorbjörn Andersson2004-10-16 07:46:52 +0000
committerTorbjörn Andersson2004-10-16 07:46:52 +0000
commitcebce0f5361cc58a4b6c232d042d2daebb2b4088 (patch)
tree743b49b6db138d9506f3367dd3df1412f6e1c78b /saga/events.cpp
parent4840c16c1b40146ce4268e3599f6ab3115b51ce4 (diff)
downloadscummvm-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.cpp26
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;
}