diff options
Diffstat (limited to 'engines/parallaction/parallaction_ns.cpp')
-rw-r--r-- | engines/parallaction/parallaction_ns.cpp | 67 |
1 files changed, 51 insertions, 16 deletions
diff --git a/engines/parallaction/parallaction_ns.cpp b/engines/parallaction/parallaction_ns.cpp index 0075664a42..9a8419fffb 100644 --- a/engines/parallaction/parallaction_ns.cpp +++ b/engines/parallaction/parallaction_ns.cpp @@ -257,28 +257,60 @@ int Parallaction_ns::go() { guiStart(); - _engineFlags &= ~kEngineChangeLocation; + changeLocation(_location._name); - LocationName locname; - locname.bind(_location._name); + addJob(kJobEraseAnimations, (void*)1, kPriority20); + _jRunScripts = addJob(kJobRunScripts, 0, kPriority15); + addJob(kJobDisplayAnimations, 0, kPriority3); - changeCharacter(locname.character()); + runGame(); - strcpy(_location._name, locname.location()); - strcpy(_saveData1, _location._name); - parseLocation(_location._name); + return 0; +} - if (_location._startPosition.x != -1000) { - _char._ani._left = _location._startPosition.x; - _char._ani._top = _location._startPosition.y; - _char._ani._frame = _location._startFrame; - _location._startPosition.y = -1000; - _location._startPosition.x = -1000; - }; +void Parallaction_ns::switchBackground(const char* background, const char* mask) { +// printf("switchBackground(%s)", name); - runGame(); + Palette pal; - return 0; + uint16 v2 = 0; + if (!scumm_stricmp(background, "final")) { + _gfx->clearScreen(Gfx::kBitBack); + for (uint16 _si = 0; _si < 32; _si++) { + pal.setEntry(_si, v2, v2, v2); + v2 += 4; + } + + g_system->delayMillis(20); + _gfx->setPalette(pal); + _gfx->updateScreen(); + } + + setBackground(background, mask, mask); + + return; +} + + +void Parallaction_ns::showSlide(const char *name) { + + BackgroundInfo info; + + _disk->loadSlide(info, name); + + // TODO: avoid using screen buffers for displaying slides. Using a generic buffer + // allows for positioning of graphics as needed by Big Red Adventure. + // The main problem lies with menu, which relies on multiple buffers, mainly because + // it is crappy code. + _gfx->setBackground(&info.bg); + _gfx->setPalette(info.palette); + _gfx->copyScreen(Gfx::kBitBack, Gfx::kBitFront); + + info.bg.free(); + info.mask.free(); + info.path.free(); + + return; } // changeLocation handles transitions between locations, and is able to display slides @@ -441,6 +473,9 @@ void Parallaction_ns::initJobs() { }; _jobsFn = jobs; + + _jDrawInventory = 0; + _jRunScripts = 0; } JobOpcode* Parallaction_ns::createJobOpcode(uint functionId, Job *job) { |