aboutsummaryrefslogtreecommitdiff
path: root/engines/illusions/scriptman.cpp
diff options
context:
space:
mode:
authorjohndoe1232014-03-19 23:18:25 +0100
committerEugene Sandulenko2018-07-20 06:43:33 +0000
commitc99f40c13d945060f489693d3f533b6ce0b54adb (patch)
treefa4f8c4e973350d5e37d62d3aad5ba0f2b409c01 /engines/illusions/scriptman.cpp
parent48ef46c02dfeb34706f1060f9443bb31c1a56093 (diff)
downloadscummvm-rg350-c99f40c13d945060f489693d3f533b6ce0b54adb.tar.gz
scummvm-rg350-c99f40c13d945060f489693d3f533b6ce0b54adb.tar.bz2
scummvm-rg350-c99f40c13d945060f489693d3f533b6ce0b54adb.zip
ILLUSIONS: Implement TimerThread and script opcode
Diffstat (limited to 'engines/illusions/scriptman.cpp')
-rw-r--r--engines/illusions/scriptman.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/engines/illusions/scriptman.cpp b/engines/illusions/scriptman.cpp
index 95e4ec4454..d94a32316a 100644
--- a/engines/illusions/scriptman.cpp
+++ b/engines/illusions/scriptman.cpp
@@ -24,6 +24,7 @@
#include "illusions/scriptman.h"
#include "illusions/scriptthread.h"
#include "illusions/scriptopcodes.h"
+#include "illusions/timerthread.h"
namespace Illusions {
@@ -157,6 +158,14 @@ uint32 ScriptMan::startTempScriptThread(byte *scriptCodeIp, uint32 callingThread
return tempThreadId;
}
+uint32 ScriptMan::startAbortableTimerThread(uint32 duration, uint32 threadId) {
+ return newTimerThread(duration, threadId, true);
+}
+
+uint32 ScriptMan::startTimerThread(uint32 duration, uint32 threadId) {
+ return newTimerThread(duration, threadId, false);
+}
+
void ScriptMan::setCurrFontId(uint32 fontId) {
_fontId = fontId;
}
@@ -173,8 +182,8 @@ bool ScriptMan::enterScene(uint32 sceneId, uint32 threadId) {
void ScriptMan::newScriptThread(uint32 threadId, uint32 callingThreadId, uint notifyFlags,
byte *scriptCodeIp, uint32 value8, uint32 valueC, uint32 value10) {
- ScriptThread *scriptThread = new ScriptThread(_vm, threadId, callingThreadId,
- notifyFlags, scriptCodeIp, value8, valueC, value10);
+ ScriptThread *scriptThread = new ScriptThread(_vm, threadId, callingThreadId, notifyFlags,
+ scriptCodeIp, value8, valueC, value10);
_threads->startThread(scriptThread);
if (_pauseCtr > 0)
scriptThread->pause();
@@ -185,6 +194,14 @@ void ScriptMan::newScriptThread(uint32 threadId, uint32 callingThreadId, uint no
}
}
+uint32 ScriptMan::newTimerThread(uint32 duration, uint32 callingThreadId, bool isAbortable) {
+ uint32 tempThreadId = newTempThreadId();
+ TimerThread *timerThread = new TimerThread(_vm, tempThreadId, callingThreadId, 0,
+ duration, isAbortable);
+ _threads->startThread(timerThread);
+ return tempThreadId;
+}
+
uint32 ScriptMan::newTempThreadId() {
uint32 threadId = _nextTempThreadId + 2 * _scriptResource->_codeCount;
if (threadId > 65535) {