aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk/myst_stacks
diff options
context:
space:
mode:
authorBastien Bouclet2010-12-14 19:11:16 +0000
committerBastien Bouclet2010-12-14 19:11:16 +0000
commitd4ce60336166f2a18632e4bb3fe54d5bdff59651 (patch)
treea2f75bc39cc74313767af3222ec646a79513fe76 /engines/mohawk/myst_stacks
parentc2e48f5c085b9ae4ddeb2e6be21071fe4d1cc8bb (diff)
downloadscummvm-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.cpp2
-rw-r--r--engines/mohawk/myst_stacks/intro.cpp9
-rw-r--r--engines/mohawk/myst_stacks/myst.cpp20
-rw-r--r--engines/mohawk/myst_stacks/preview.cpp4
-rw-r--r--engines/mohawk/myst_stacks/selenitic.cpp6
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 &center
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 &center
// 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();