diff options
author | Bastien Bouclet | 2010-11-29 20:59:17 +0000 |
---|---|---|
committer | Bastien Bouclet | 2010-11-29 20:59:17 +0000 |
commit | ed59b28d0bd8a7eb1f30357d48bbd26cb1b307ff (patch) | |
tree | 8fa4bc87657cdb6ef4ad2799a2b8d6ee2da0c7b3 /engines/mohawk | |
parent | fcc1dd6749ea33bf8c9fd6e15a004bfeb7b3a47e (diff) | |
download | scummvm-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.cpp | 6 | ||||
-rw-r--r-- | engines/mohawk/myst.cpp | 18 | ||||
-rw-r--r-- | engines/mohawk/myst.h | 2 | ||||
-rw-r--r-- | engines/mohawk/myst_areas.cpp | 2 | ||||
-rw-r--r-- | engines/mohawk/myst_scripts.cpp | 27 | ||||
-rw-r--r-- | engines/mohawk/myst_scripts_myst.cpp | 20 | ||||
-rw-r--r-- | engines/mohawk/myst_scripts_selenitic.cpp | 13 |
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); } |