diff options
-rw-r--r-- | engines/parallaction/exec_ns.cpp | 6 | ||||
-rw-r--r-- | engines/parallaction/parallaction.cpp | 16 | ||||
-rw-r--r-- | engines/parallaction/parallaction.h | 11 | ||||
-rw-r--r-- | engines/parallaction/parallaction_br.cpp | 4 | ||||
-rw-r--r-- | engines/parallaction/parallaction_ns.cpp | 8 | ||||
-rw-r--r-- | engines/parallaction/walk.cpp | 18 |
6 files changed, 33 insertions, 30 deletions
diff --git a/engines/parallaction/exec_ns.cpp b/engines/parallaction/exec_ns.cpp index c0d75133f7..071810ad16 100644 --- a/engines/parallaction/exec_ns.cpp +++ b/engines/parallaction/exec_ns.cpp @@ -388,9 +388,13 @@ void Parallaction_ns::eraseAnimations() { } -void Parallaction_ns::jobRunScripts(void *parm, Job *j) { +void Parallaction_ns::runScripts() { debugC(9, kDebugExec, "jobRunScripts"); + if (_engineFlags & kEnginePauseJobs) { + return; + } + static uint16 modCounter = 0; for (AnimationList::iterator it = _animations.begin(); it != _animations.end(); it++) { diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp index 1a61e5c0e0..bb1afe8a2c 100644 --- a/engines/parallaction/parallaction.cpp +++ b/engines/parallaction/parallaction.cpp @@ -288,6 +288,9 @@ void Parallaction::runGame() { eraseLabel(); eraseAnimations(); + runScripts(); + walk(); + runJobs(); drawAnimations(); @@ -364,15 +367,14 @@ void Parallaction::processInput(InputData *data) { if (hitZone(kZoneYou, _mousePos.x, _mousePos.y) == 0) { setArrowCursor(); } - removeJob(_jRunScripts); -// _jDrawInventory = addJob(kJobShowInventory, 0, kPriority2); + pauseJobs(); openInventory(); break; case kEvCloseInventory: // closes inventory and possibly select item closeInventory(); setInventoryCursor(data->_inventoryIndex); - _jRunScripts = addJob(kJobRunScripts, 0, kPriority15); + resumeJobs(); addJob(kJobHideInventory, 0, kPriority20); break; @@ -890,7 +892,7 @@ void Parallaction::doLocationEnterTransition() { pal.makeGrayscale(); _gfx->setPalette(pal); - jobRunScripts(NULL, NULL); + runScripts(); drawAnimations(); _gfx->swapBuffers(); @@ -989,8 +991,10 @@ void Character::scheduleWalk(int16 x, int16 y) { return; } - WalkNodeList *list = _builder.buildPath(x, y); - _vm->addJob(kJobWalk, list, kPriority19 ); + _walkPath = _builder.buildPath(x, y); + +// WalkNodeList *list = _builder.buildPath(x, y); +// _vm->addJob(kJobWalk, list, kPriority19 ); _engineFlags |= kEngineWalking; } diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h index 70cbc22278..b12ee8beeb 100644 --- a/engines/parallaction/parallaction.h +++ b/engines/parallaction/parallaction.h @@ -218,6 +218,7 @@ struct Character { Frames *_talk; Frames *_objs; PathBuilder _builder; + WalkNodeList *_walkPath; Character(Parallaction *vm); void getFoot(Common::Point &foot); @@ -528,7 +529,6 @@ protected: // data BackgroundInfo *_backgroundInfo; Zone *_hoverZone; - Job *_jRunScripts; protected: // members @@ -579,13 +579,12 @@ public: virtual void parseLocation(const char* name) = 0; - virtual void jobRunScripts(void*, Job *j) = 0; virtual void jobDisplayDroppedItem(void*, Job *j) = 0; virtual void jobRemovePickedItem(void*, Job *j) = 0; virtual void jobToggleDoor(void*, Job *j) = 0; - virtual void jobWalk(void*, Job *j) = 0; - + virtual void runScripts() = 0; + virtual void walk() = 0; virtual void drawAnimations() = 0; virtual void eraseAnimations() = 0; virtual void drawLabel() = 0; @@ -735,13 +734,13 @@ private: const Callable *_callables; protected: - void jobRunScripts(void*, Job *j); void jobDisplayDroppedItem(void*, Job *j); void jobRemovePickedItem(void*, Job *j); void jobToggleDoor(void*, Job *j); - void jobWalk(void*, Job *j); void jobHideInventory(void *parm, Job *j); + void runScripts(); + void walk(); void drawAnimations(); void eraseAnimations(); void drawLabel(); diff --git a/engines/parallaction/parallaction_br.cpp b/engines/parallaction/parallaction_br.cpp index c3e12ac605..232e08799e 100644 --- a/engines/parallaction/parallaction_br.cpp +++ b/engines/parallaction/parallaction_br.cpp @@ -362,8 +362,8 @@ void Parallaction_br::initJobs() { 0, &Parallaction_br::jobDisplayDroppedItem, &Parallaction_br::jobRemovePickedItem, - &Parallaction_br::jobRunScripts, - &Parallaction_br::jobWalk, + 0, + 0, 0, 0, &Parallaction_br::jobWaitRemoveLabelJob, diff --git a/engines/parallaction/parallaction_ns.cpp b/engines/parallaction/parallaction_ns.cpp index 9f4fdccceb..1b50074095 100644 --- a/engines/parallaction/parallaction_ns.cpp +++ b/engines/parallaction/parallaction_ns.cpp @@ -256,8 +256,6 @@ int Parallaction_ns::go() { changeLocation(_location._name); - _jRunScripts = addJob(kJobRunScripts, 0, kPriority15); - runGame(); return 0; @@ -446,8 +444,8 @@ void Parallaction_ns::initJobs() { 0, &Parallaction_ns::jobDisplayDroppedItem, &Parallaction_ns::jobRemovePickedItem, - &Parallaction_ns::jobRunScripts, - &Parallaction_ns::jobWalk, + 0, + 0, 0, 0, 0, @@ -457,8 +455,6 @@ void Parallaction_ns::initJobs() { }; _jobsFn = jobs; - - _jRunScripts = 0; } JobOpcode* Parallaction_ns::createJobOpcode(uint functionId, Job *job) { diff --git a/engines/parallaction/walk.cpp b/engines/parallaction/walk.cpp index 8c12395952..d35132fc35 100644 --- a/engines/parallaction/walk.cpp +++ b/engines/parallaction/walk.cpp @@ -381,8 +381,12 @@ void Parallaction::finalizeWalk(WalkNodeList *list) { delete list; } -void Parallaction_ns::jobWalk(void *parm, Job *j) { - WalkNodeList *list = (WalkNodeList*)parm; +void Parallaction_ns::walk() { + if ((_engineFlags & kEngineWalking) == 0) { + return; + } + + WalkNodeList *list = _char._walkPath; _char._ani._oldPos.x = _char._ani._left; _char._ani._oldPos.y = _char._ani._top; @@ -400,11 +404,11 @@ void Parallaction_ns::jobWalk(void *parm, Job *j) { } if (it == list->end()) { debugC(1, kDebugWalk, "jobWalk reached last node"); - j->_finished = 1; +// j->_finished = 1; finalizeWalk(list); return; } - j->_parm = list; + _char._walkPath = list; // selectWalkFrame must be performed before position is changed by clipMove int16 v16 = selectWalkFrame(pos, *it); @@ -416,7 +420,7 @@ void Parallaction_ns::jobWalk(void *parm, Job *j) { if (newpos == _char._ani._oldPos) { debugC(1, kDebugWalk, "jobWalk was blocked by an unforeseen obstacle"); - j->_finished = 1; +// j->_finished = 1; finalizeWalk(list); } else { _char._ani._frame = v16 + walkData2 + 1; @@ -445,7 +449,3 @@ PathBuilder::PathBuilder(Animation *anim) : _anim(anim), _list(0) { } // namespace Parallaction - - - - |