aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk
diff options
context:
space:
mode:
authorBastien Bouclet2010-11-29 20:59:17 +0000
committerBastien Bouclet2010-11-29 20:59:17 +0000
commited59b28d0bd8a7eb1f30357d48bbd26cb1b307ff (patch)
tree8fa4bc87657cdb6ef4ad2799a2b8d6ee2da0c7b3 /engines/mohawk
parentfcc1dd6749ea33bf8c9fd6e15a004bfeb7b3a47e (diff)
downloadscummvm-rg350-ed59b28d0bd8a7eb1f30357d48bbd26cb1b307ff.tar.gz
scummvm-rg350-ed59b28d0bd8a7eb1f30357d48bbd26cb1b307ff.tar.bz2
scummvm-rg350-ed59b28d0bd8a7eb1f30357d48bbd26cb1b307ff.zip
MOHAWK: Do not always update the screen after a card change. Necessary for "animated card changes" to work.
svn-id: r54630
Diffstat (limited to 'engines/mohawk')
-rw-r--r--engines/mohawk/console.cpp6
-rw-r--r--engines/mohawk/myst.cpp18
-rw-r--r--engines/mohawk/myst.h2
-rw-r--r--engines/mohawk/myst_areas.cpp2
-rw-r--r--engines/mohawk/myst_scripts.cpp27
-rw-r--r--engines/mohawk/myst_scripts_myst.cpp20
-rw-r--r--engines/mohawk/myst_scripts_selenitic.cpp13
7 files changed, 46 insertions, 42 deletions
diff --git a/engines/mohawk/console.cpp b/engines/mohawk/console.cpp
index 613826e895..e6eab0b495 100644
--- a/engines/mohawk/console.cpp
+++ b/engines/mohawk/console.cpp
@@ -69,7 +69,7 @@ bool MystConsole::Cmd_ChangeCard(int argc, const char **argv) {
}
_vm->_sound->stopSound();
- _vm->changeToCard((uint16)atoi(argv[1]));
+ _vm->changeToCard((uint16)atoi(argv[1]), true);
return false;
}
@@ -161,9 +161,9 @@ bool MystConsole::Cmd_ChangeStack(int argc, const char **argv) {
_vm->changeToStack(stackNum - 1);
if (argc == 3)
- _vm->changeToCard((uint16)atoi(argv[2]));
+ _vm->changeToCard((uint16)atoi(argv[2]), true);
else
- _vm->changeToCard(default_start_card[stackNum - 1]);
+ _vm->changeToCard(default_start_card[stackNum - 1], true);
return false;
}
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index ce6b5e8bc6..275f3bf3f3 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -253,9 +253,9 @@ Common::Error MohawkEngine_Myst::run() {
changeToStack(kSeleniticStack);
if (getFeatures() & GF_DEMO)
- changeToCard(2000);
+ changeToCard(2000, true);
else
- changeToCard(1285);
+ changeToCard(1285, true);
// Load game from launcher/command line if requested
if (ConfMan.hasKey("save_slot") && !(getFeatures() & GF_DEMO)) {
@@ -416,7 +416,7 @@ void MohawkEngine_Myst::drawCardBackground() {
_gfx->copyImageToScreen(getCardBackgroundId(), Common::Rect(0, 0, 544, 333));
}
-void MohawkEngine_Myst::changeToCard(uint16 card) {
+void MohawkEngine_Myst::changeToCard(uint16 card, bool updateScreen) {
debug(2, "changeToCard(%d)", card);
_scriptParser->disableInitOpcodes();
@@ -503,6 +503,11 @@ void MohawkEngine_Myst::changeToCard(uint16 card) {
// Debug: Show resource rects
if (_showResourceRects)
drawResourceRects();
+
+ // Make sure the screen is updated
+ if (updateScreen) {
+ _gfx->updateScreen();
+ }
}
void MohawkEngine_Myst::drawResourceRects() {
@@ -756,7 +761,6 @@ void MohawkEngine_Myst::runInitScript() {
delete initStream;
_scriptParser->runScript(script);
- _gfx->updateScreen();
}
void MohawkEngine_Myst::runExitScript() {
@@ -772,7 +776,6 @@ void MohawkEngine_Myst::runExitScript() {
delete exitStream;
_scriptParser->runScript(script);
- _gfx->updateScreen();
}
void MohawkEngine_Myst::loadHelp(uint16 id) {
@@ -915,9 +918,6 @@ void MohawkEngine_Myst::drawResourceImages() {
for (uint16 i = 0; i < _resources.size(); i++)
if (_resources[i]->isDrawSubimages())
_resources[i]->drawDataToScreen();
-
- // Make sure the screen is updated
- _gfx->updateScreen();
}
void MohawkEngine_Myst::redrawResource(MystResourceType8 *_resource) {
@@ -1009,7 +1009,7 @@ void MohawkEngine_Myst::runLoadDialog() {
Common::Error MohawkEngine_Myst::loadGameState(int slot) {
if (_saveLoad->loadGame(_saveLoad->generateSaveGameList()[slot])) {
changeToStack(kIntroStack);
- changeToCard(5);
+ changeToCard(5, true);
return Common::kNoError;
} else
return Common::kUnknownError;
diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h
index 24653e6a6c..1d81a7d17c 100644
--- a/engines/mohawk/myst.h
+++ b/engines/mohawk/myst.h
@@ -174,7 +174,7 @@ public:
void runSaveDialog();
void changeToStack(uint16 stack);
- void changeToCard(uint16 card);
+ void changeToCard(uint16 card, bool updateScreen);
uint16 getCurCard() { return _curCard; }
uint16 getCurStack() { return _curStack; }
void setMainCursor(uint16 cursor);
diff --git a/engines/mohawk/myst_areas.cpp b/engines/mohawk/myst_areas.cpp
index 37e96beb90..d04bb3a771 100644
--- a/engines/mohawk/myst_areas.cpp
+++ b/engines/mohawk/myst_areas.cpp
@@ -70,7 +70,7 @@ MystResource::~MystResource() {
void MystResource::handleMouseUp(Common::Point *mouse) {
if (_dest != 0)
- _vm->changeToCard(_dest);
+ _vm->changeToCard(_dest, true);
else
warning("Movement type resource with null destination at position (%d, %d), (%d, %d)", _rect.left, _rect.top, _rect.right, _rect.bottom);
}
diff --git a/engines/mohawk/myst_scripts.cpp b/engines/mohawk/myst_scripts.cpp
index b1e67f6632..533bda8ba9 100644
--- a/engines/mohawk/myst_scripts.cpp
+++ b/engines/mohawk/myst_scripts.cpp
@@ -300,9 +300,9 @@ void MystScriptParser::o_2_changeCardSwitch(uint16 op, uint16 var, uint16 argc,
debugC(kDebugScript, "Opcode %d: changeCardSwitch var %d: %d", op, var, value);
if (value)
- _vm->changeToCard(argv[value -1 ]);
+ _vm->changeToCard(argv[value -1 ], true);
else if (_invokingResource != NULL)
- _vm->changeToCard(_invokingResource->getDest());
+ _vm->changeToCard(_invokingResource->getDest(), true);
else
warning("Missing invokingResource in altDest call");
}
@@ -338,13 +338,14 @@ void MystScriptParser::o_4_redrawCard(uint16 op, uint16 var, uint16 argc, uint16
// TODO: Is redrawing the background correct ?
_vm->drawCardBackground();
_vm->drawResourceImages();
+ _vm->_gfx->updateScreen();
}
void MystScriptParser::o_6_goToDest(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
debugC(kDebugScript, "Opcode %d: Change To Dest of Invoking Resource", op);
if (_invokingResource != NULL)
- _vm->changeToCard(_invokingResource->getDest());
+ _vm->changeToCard(_invokingResource->getDest(), true);
else
warning("Opcode %d: Missing invokingResource", op);
}
@@ -395,8 +396,7 @@ void MystScriptParser::o_16_changeCardDirectional(uint16 op, uint16 var, uint16
debugC(kDebugScript, "\tcardId: %d", cardId);
debugC(kDebugScript, "\tdirectonal update data size: %d", directionalUpdateDataSize);
- // TODO: Change to card should not update the screen
- _vm->changeToCard(cardId);
+ _vm->changeToCard(cardId, false);
animatedUpdate(directionalUpdateDataSize, &argv[2], 0);
}
@@ -424,7 +424,7 @@ void MystScriptParser::o_17_changeCardPush(uint16 op, uint16 var, uint16 argc, u
debugC(kDebugScript, "\tCurrent CardId: %d", _savedCardId);
- _vm->changeToCard(cardId);
+ _vm->changeToCard(cardId, true);
} else
unknown(op, var, argc, argv);
}
@@ -439,7 +439,7 @@ void MystScriptParser::o_18_changeCardPop(uint16 op, uint16 var, uint16 argc, ui
uint16 u0 = argv[0];
debugC(kDebugScript, "\tu0: %d", u0);
- _vm->changeToCard(_savedCardId);
+ _vm->changeToCard(_savedCardId, true);
} else
unknown(op, var, argc, argv);
}
@@ -738,7 +738,7 @@ void MystScriptParser::o_34_changeCard(uint16 op, uint16 var, uint16 argc, uint1
debugC(kDebugScript, "\tTarget Card: %d", cardId);
//debugC(kDebugScript, "\tu0: %d", u0); // Unused data
- _vm->changeToCard(cardId);
+ _vm->changeToCard(cardId, true);
}
void MystScriptParser::o_35_drawImageChangeCard(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
@@ -758,7 +758,7 @@ void MystScriptParser::o_35_drawImageChangeCard(uint16 op, uint16 var, uint16 ar
_vm->_gfx->copyImageToScreen(imageId, Common::Rect(0, 0, 544, 333));
_vm->_gfx->updateScreen();
_vm->_system->delayMillis(delay * 100);
- _vm->changeToCard(cardId);
+ _vm->changeToCard(cardId, true);
} else
unknown(op, var, argc, argv);
}
@@ -826,10 +826,10 @@ void MystScriptParser::o_40_changeStack(uint16 op, uint16 var, uint16 argc, uint
// No need to have a table for just this data...
if (targetStack == 1) {
_vm->changeToStack(kDemoSlidesStack);
- _vm->changeToCard(1000);
+ _vm->changeToCard(1000, true);
} else if (targetStack == 2) {
_vm->changeToStack(kDemoPreviewStack);
- _vm->changeToCard(3000);
+ _vm->changeToCard(3000, true);
}
if (!_vm->_tweaksEnabled) {
@@ -844,7 +844,7 @@ void MystScriptParser::o_40_changeStack(uint16 op, uint16 var, uint16 argc, uint
// TODO: Play Flyby Entry Movie on Masterpiece Edition..? Only on Myst to Age Link?
_vm->changeToStack(stack_map[targetStack]);
- _vm->changeToCard(start_card[targetStack]);
+ _vm->changeToCard(start_card[targetStack], true);
handle = _vm->_sound->playSound(soundIdLinkDst);
while (_vm->_mixer->isSoundHandleActive(*handle))
@@ -870,8 +870,7 @@ void MystScriptParser::o_41_changeCardPlaySoundDirectional(uint16 op, uint16 var
if (soundId)
_vm->_sound->playSound(soundId);
- // TODO: Change to card should not update the screen
- _vm->changeToCard(cardId);
+ _vm->changeToCard(cardId, false);
animatedUpdate(dataSize, &argv[4], delayBetweenSteps);
}
diff --git a/engines/mohawk/myst_scripts_myst.cpp b/engines/mohawk/myst_scripts_myst.cpp
index 4aa48535f7..33ce2f88f2 100644
--- a/engines/mohawk/myst_scripts_myst.cpp
+++ b/engines/mohawk/myst_scripts_myst.cpp
@@ -296,7 +296,7 @@ void MystScriptParser_Myst::opcode_100(uint16 op, uint16 var, uint16 argc, uint1
uint16 varValue = _vm->_varStore->getVar(var);
_vm->changeToStack(stack_map[varValue]);
- _vm->changeToCard(start_card[varValue]);
+ _vm->changeToCard(start_card[varValue], true);
// TODO: No soundIdLinkDst for Opcode 100 link? Check Original.
}
@@ -330,7 +330,7 @@ void MystScriptParser_Myst::opcode_100(uint16 op, uint16 var, uint16 argc, uint1
case kDemoSlidesStack:
// TODO: Change to changeStack call?
_vm->changeToStack(kDemoStack);
- _vm->changeToCard(2001);
+ _vm->changeToCard(2001, true);
break;
default:
unknown(op, var, argc, argv);
@@ -487,7 +487,7 @@ void MystScriptParser_Myst::opcode_102(uint16 op, uint16 var, uint16 argc, uint1
_vm->_gfx->copyImageToScreen(imageId, Common::Rect(0, 0, 544, 333));
_vm->_system->delayMillis(delay / 100);
- _vm->changeToCard(cardId);
+ _vm->changeToCard(cardId, true);
} else
unknown(op, var, argc, argv);
break;
@@ -822,7 +822,7 @@ void MystScriptParser_Myst::opcode_110(uint16 op, uint16 var, uint16 argc, uint1
// TODO: Finish Implementing Logic...
// HACK: Bypass Higher Logic for now...
- _vm->changeToCard(argv[1]);
+ _vm->changeToCard(argv[1], true);
} else
unknown(op, var, argc, argv);
break;
@@ -1037,7 +1037,7 @@ void MystScriptParser_Myst::opcode_115(uint16 op, uint16 var, uint16 argc, uint1
// TODO: Fix Logic...
// HACK: Bypass Door Lock For Now
- _vm->changeToCard(cardIdOpen);
+ _vm->changeToCard(cardIdOpen, true);
} else
unknown(op, var, argc, argv);
break;
@@ -1069,9 +1069,9 @@ void MystScriptParser_Myst::opcode_115(uint16 op, uint16 var, uint16 argc, uint1
if ((var == 100 && !_vm->_varStore->getVar(25)) ||
(var == 101 && !_vm->_varStore->getVar(24))) {
// TODO: Clear mainCursor back to nominal..
- _vm->changeToCard(cardIdLose);
+ _vm->changeToCard(cardIdLose, true);
} else
- _vm->changeToCard(cardIdBookCover);
+ _vm->changeToCard(cardIdBookCover, true);
// TODO: Is this logic here?
// i.e. If was holding page, wait then auto open and play book...
@@ -1617,7 +1617,7 @@ void MystScriptParser_Myst::opcode_129(uint16 op, uint16 var, uint16 argc, uint1
debugC(kDebugScript, "\tcardId: %d", cardId);
// TODO: Fill in Code...
- _vm->changeToCard(cardId);
+ _vm->changeToCard(cardId, true);
} else
unknown(op, var, argc, argv);
break;
@@ -2103,7 +2103,7 @@ void MystScriptParser_Myst::opcode_200_run() {
case kDemoSlidesStack:
// Used on Cards...
if (_vm->_system->getMillis() - g_opcode200Parameters.lastCardTime >= 2 * 1000)
- _vm->changeToCard(g_opcode200Parameters.cardId);
+ _vm->changeToCard(g_opcode200Parameters.cardId, true);
break;
}
}
@@ -2147,7 +2147,7 @@ void MystScriptParser_Myst::opcode_200(uint16 op, uint16 var, uint16 argc, uint1
// _vm->_video->playMovieCentered(_vm->wrapMovieFilename("intro", kIntroStack));
// }
- _vm->changeToCard(_vm->getCurCard()+1);
+ _vm->changeToCard(_vm->getCurCard()+1, true);
break;
case kSeleniticStack:
varUnusedCheck(op, var);
diff --git a/engines/mohawk/myst_scripts_selenitic.cpp b/engines/mohawk/myst_scripts_selenitic.cpp
index ac46e05815..9e765b17bb 100644
--- a/engines/mohawk/myst_scripts_selenitic.cpp
+++ b/engines/mohawk/myst_scripts_selenitic.cpp
@@ -549,7 +549,7 @@ void MystScriptParser_Selenitic::opcode_110(uint16 op, uint16 var, uint16 argc,
// TODO: Finish Implementing Logic...
// HACK: Bypass Higher Logic for now...
- _vm->changeToCard(argv[1]);
+ _vm->changeToCard(argv[1], true);
} else
unknown(op, var, argc, argv);
}
@@ -709,10 +709,15 @@ void MystScriptParser_Selenitic::o_115_soundLockButton(uint16 op, uint16 var, ui
if (solved) {
_sound_lock_button->drawConditionalDataToScreen(2);
- uint16 cardIdOpen = argv[2];
+ uint16 cardIdClosed = argv[0];
+ uint16 cardIdOpen = argv[1];
- //TODO: Change card with directional update playing sound
- _vm->changeToCard(cardIdOpen);
+ _vm->changeToCard(cardIdClosed, true);
+
+ _vm->changeToCard(cardIdOpen, false);
+ _vm->_sound->playSound(argv[2]);
+
+ animatedUpdate(argv[4], &argv[5], argv[3]);
} else {
_sound_lock_button->drawConditionalDataToScreen(0);
}