aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/sthread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/saga/sthread.cpp')
-rw-r--r--engines/saga/sthread.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/engines/saga/sthread.cpp b/engines/saga/sthread.cpp
index be674e5acd..1e0fe52618 100644
--- a/engines/saga/sthread.cpp
+++ b/engines/saga/sthread.cpp
@@ -39,16 +39,18 @@ namespace Saga {
ScriptThread &Script::createThread(uint16 scriptModuleNumber, uint16 scriptEntryPointNumber) {
loadModule(scriptModuleNumber);
- if (_modules[scriptModuleNumber].entryPointsCount <= scriptEntryPointNumber) {
+ if (_modules[scriptModuleNumber].entryPoints.size() <= scriptEntryPointNumber) {
error("Script::createThread wrong scriptEntryPointNumber");
}
- ScriptThread newThread;
+ ScriptThread tmp;
+ _threadList.push_front(tmp);
+ ScriptThread &newThread = _threadList.front();
newThread._instructionOffset = _modules[scriptModuleNumber].entryPoints[scriptEntryPointNumber].offset;
- newThread._commonBase = _commonBuffer;
- newThread._staticBase = _commonBuffer + _modules[scriptModuleNumber].staticOffset;
- newThread._moduleBase = _modules[scriptModuleNumber].moduleBase;
- newThread._moduleBaseSize = _modules[scriptModuleNumber].moduleBaseSize;
+ newThread._commonBase = &_commonBuffer.front();
+ newThread._staticBase = &_commonBuffer.front() + _modules[scriptModuleNumber].staticOffset;
+ newThread._moduleBase = &_modules[scriptModuleNumber].moduleBase.front();
+ newThread._moduleBaseSize = _modules[scriptModuleNumber].moduleBase.size();
newThread._strings = &_modules[scriptModuleNumber].strings;
if (_vm->getGameId() == GID_IHNM)
@@ -56,14 +58,10 @@ ScriptThread &Script::createThread(uint16 scriptModuleNumber, uint16 scriptEntry
else
newThread._voiceLUT = &_modules[scriptModuleNumber].voiceLUT;
- _threadList.push_front(newThread);
-
+ newThread._stackBuf.resize(ScriptThread::THREAD_STACK_SIZE);
+ newThread._stackTopIndex = ScriptThread::THREAD_STACK_SIZE - 2;
debug(3, "createThread(). Total threads: %d", _threadList.size());
-
- ScriptThread &tmp = *_threadList.begin();
- tmp._stackBuf = (int16 *)malloc(ScriptThread::THREAD_STACK_SIZE * sizeof(int16));
- tmp._stackTopIndex = ScriptThread::THREAD_STACK_SIZE - 2;
- return tmp;
+ return newThread;
}
void Script::wakeUpActorThread(int waitType, void *threadObj) {