diff options
author | Bastien Bouclet | 2010-12-14 19:11:16 +0000 |
---|---|---|
committer | Bastien Bouclet | 2010-12-14 19:11:16 +0000 |
commit | d4ce60336166f2a18632e4bb3fe54d5bdff59651 (patch) | |
tree | a2f75bc39cc74313767af3222ec646a79513fe76 /engines/mohawk/myst_stacks | |
parent | c2e48f5c085b9ae4ddeb2e6be21071fe4d1cc8bb (diff) | |
download | scummvm-rg350-d4ce60336166f2a18632e4bb3fe54d5bdff59651.tar.gz scummvm-rg350-d4ce60336166f2a18632e4bb3fe54d5bdff59651.tar.bz2 scummvm-rg350-d4ce60336166f2a18632e4bb3fe54d5bdff59651.zip |
MOHAWK: Rework Myst GFX updates
- Initial card state is drawn to the back buffer
- Script driven updates are drawn to the front buffer
Allows opcode 28 (copy back buffer to screen) and opcodes 29/33 (copy image to screen / back buffer) to work properly.
Fixes among others the generator room lights, and the matchbox.
svn-id: r54907
Diffstat (limited to 'engines/mohawk/myst_stacks')
-rw-r--r-- | engines/mohawk/myst_stacks/credits.cpp | 2 | ||||
-rw-r--r-- | engines/mohawk/myst_stacks/intro.cpp | 9 | ||||
-rw-r--r-- | engines/mohawk/myst_stacks/myst.cpp | 20 | ||||
-rw-r--r-- | engines/mohawk/myst_stacks/preview.cpp | 4 | ||||
-rw-r--r-- | engines/mohawk/myst_stacks/selenitic.cpp | 6 |
5 files changed, 23 insertions, 18 deletions
diff --git a/engines/mohawk/myst_stacks/credits.cpp b/engines/mohawk/myst_stacks/credits.cpp index 152740139a..7bd652079b 100644 --- a/engines/mohawk/myst_stacks/credits.cpp +++ b/engines/mohawk/myst_stacks/credits.cpp @@ -75,7 +75,7 @@ void MystScriptParser_Credits::runPersistentScripts() { // Note: The modulus by 6 is because the 6th image is the one at imageBaseId _vm->_gfx->copyImageToScreen(_baseImageId + curImageIndex % 6, Common::Rect(0, 0, 544, 333)); - _vm->_gfx->updateScreen(); + _vm->_system->updateScreen(); _vm->_varStore->setVar(_creditsVar, curImageIndex + 1); _lastCardTime = _vm->_system->getMillis(); diff --git a/engines/mohawk/myst_stacks/intro.cpp b/engines/mohawk/myst_stacks/intro.cpp index 0741c22e1f..b2f5d927cb 100644 --- a/engines/mohawk/myst_stacks/intro.cpp +++ b/engines/mohawk/myst_stacks/intro.cpp @@ -173,13 +173,16 @@ void MystScriptParser_Intro::o_playIntroMovies(uint16 op, uint16 var, uint16 arg void MystScriptParser_Intro::opcode_201(uint16 op, uint16 var, uint16 argc, uint16 *argv) { varUnusedCheck(op, var); - _vm->_gfx->updateScreen(); + _vm->_gfx->copyBackBufferToScreen(Common::Rect(544, 333)); + _vm->_system->updateScreen(); _vm->_system->delayMillis(4 * 1000); - _vm->_gfx->copyImageToScreen(4, Common::Rect(0, 0, 544, 333)); + _vm->_gfx->copyImageToBackBuffer(4, Common::Rect(544, 333)); + _vm->_gfx->copyBackBufferToScreen(Common::Rect(544, 333)); + _vm->_system->updateScreen(); MystResourceType6 *resource = static_cast<MystResourceType6 *>(_invokingResource); resource->playMovie(); - // TODO: Complete + // TODO: Complete / Fix } void MystScriptParser_Intro::opcode_300(uint16 op, uint16 var, uint16 argc, uint16 *argv) { diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp index 89793c7bdf..2fc763ade9 100644 --- a/engines/mohawk/myst_stacks/myst.cpp +++ b/engines/mohawk/myst_stacks/myst.cpp @@ -579,7 +579,7 @@ void MystScriptParser_Myst::o_libraryBookPageTurnLeft(uint16 op, uint16 var, uin else _vm->_sound->playSound(_libraryBookSound2); - _vm->_gfx->updateScreen(); + _vm->_system->updateScreen(); } } @@ -597,7 +597,7 @@ void MystScriptParser_Myst::o_libraryBookPageTurnRight(uint16 op, uint16 var, ui else _vm->_sound->playSound(_libraryBookSound2); - _vm->_gfx->updateScreen(); + _vm->_system->updateScreen(); } } @@ -615,7 +615,7 @@ void MystScriptParser_Myst::o_fireplaceToggleButton(uint16 op, uint16 var, uint1 // Unset button for (uint i = 4795; i >= 4779; i--) { _vm->_gfx->copyImageToScreen(i, _invokingResource->getRect()); - _vm->_gfx->updateScreen(); + _vm->_system->updateScreen(); _vm->_system->delayMillis(1); } _fireplaceLines[var - 17] &= ~bitmask; @@ -623,7 +623,7 @@ void MystScriptParser_Myst::o_fireplaceToggleButton(uint16 op, uint16 var, uint1 // Set button for (uint i = 4779; i <= 4795; i++) { _vm->_gfx->copyImageToScreen(i, _invokingResource->getRect()); - _vm->_gfx->updateScreen(); + _vm->_system->updateScreen(); _vm->_system->delayMillis(1); } _fireplaceLines[var - 17] |= bitmask; @@ -1698,7 +1698,7 @@ void MystScriptParser_Myst::libraryCombinationBookTurnLeft() { else _vm->_sound->playSound(_libraryBookSound2); - _vm->_gfx->updateScreen(); + _vm->_system->updateScreen(); } } @@ -1724,7 +1724,7 @@ void MystScriptParser_Myst::libraryCombinationBookTurnRight() { else _vm->_sound->playSound(_libraryBookSound2); - _vm->_gfx->updateScreen(); + _vm->_system->updateScreen(); } } @@ -1879,7 +1879,8 @@ void MystScriptParser_Myst::towerRotationMap_run() { towerRotationDrawBuildings(); // Draw to screen - _vm->_gfx->updateScreen(); + _vm->_gfx->copyBackBufferToScreen(Common::Rect(106, 42, 459, 273)); + _vm->_system->updateScreen(); } uint32 time = _vm->_system->getMillis(); @@ -1998,7 +1999,7 @@ void MystScriptParser_Myst::towerRotationMapDrawLine(const Common::Point ¢er src.bottom = 333 - rect.top; // Redraw background - _vm->_gfx->copyImageSectionToScreen(_vm->getCardBackgroundId(), src, rect); + _vm->_gfx->copyImageSectionToBackBuffer(_vm->getCardBackgroundId(), src, rect); // Draw buildings towerRotationDrawBuildings(); @@ -2011,7 +2012,8 @@ void MystScriptParser_Myst::towerRotationMapDrawLine(const Common::Point ¢er // Draw line _vm->_gfx->drawLine(center, end, color); - _vm->_gfx->updateScreen(); + _vm->_gfx->copyBackBufferToScreen(rect); + _vm->_system->updateScreen(); } void MystScriptParser_Myst::towerRotationMapRotate() { diff --git a/engines/mohawk/myst_stacks/preview.cpp b/engines/mohawk/myst_stacks/preview.cpp index 169411cc00..64d0898000 100644 --- a/engines/mohawk/myst_stacks/preview.cpp +++ b/engines/mohawk/myst_stacks/preview.cpp @@ -115,12 +115,12 @@ void MystScriptParser_Preview::opcode_298(uint16 op, uint16 var, uint16 argc, ui // TODO: Flash Library Red // TODO: Move to run process based delay to prevent // blocking... - _vm->_gfx->updateScreen(); + _vm->_system->updateScreen(); _vm->_system->delayMillis(20 * 1000); for (uint16 imageId = 3001; imageId <= 3012; imageId++) { _vm->_gfx->copyImageToScreen(imageId, Common::Rect(0, 0, 544, 333)); - _vm->_gfx->updateScreen(); + _vm->_system->updateScreen(); _vm->_system->delayMillis(5 * 1000); } } diff --git a/engines/mohawk/myst_stacks/selenitic.cpp b/engines/mohawk/myst_stacks/selenitic.cpp index 183c92745d..161c90b6f5 100644 --- a/engines/mohawk/myst_stacks/selenitic.cpp +++ b/engines/mohawk/myst_stacks/selenitic.cpp @@ -872,12 +872,12 @@ void MystScriptParser_Selenitic::o_soundLockEndMove(uint16 op, uint16 var, uint1 *value = stepped; slider->setStep(stepped); - slider->drawDataToScreen(); - _vm->_gfx->updateScreen(); + slider->restoreBackground(); + slider->drawConditionalDataToScreen(1); uint16 soundId = slider->getList3(0); if (soundId) - _vm->_sound->playSoundBlocking(soundId); + _vm->_sound->playSound(soundId); _vm->_sound->stopSound(); _vm->_sound->resumeBackground(); |