aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Turner2010-02-14 19:01:02 +0000
committerDavid Turner2010-02-14 19:01:02 +0000
commit384acffeb153d631b701de418c753503770f1b14 (patch)
tree238b4cc0cb3694e6da55d64ac08dbb2597a6d2ee
parentbf17ff87dbdd6e4e79785bff153dd96682601d98 (diff)
downloadscummvm-rg350-384acffeb153d631b701de418c753503770f1b14.tar.gz
scummvm-rg350-384acffeb153d631b701de418c753503770f1b14.tar.bz2
scummvm-rg350-384acffeb153d631b701de418c753503770f1b14.zip
Mohawk : Corrected Myst Opcode 200/300 in Intro/Demo stack to correctly call Intro movies.
svn-id: r48062
-rw-r--r--engines/mohawk/myst.cpp32
-rw-r--r--engines/mohawk/myst_scripts.cpp50
2 files changed, 35 insertions, 47 deletions
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index ba656171aa..f7b373b359 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -178,36 +178,10 @@ Common::Error MohawkEngine_Myst::run() {
else
changeToStack(kIntroStack);
- if (getGameType() == GType_MAKINGOF)
+ if (getFeatures() & GF_DEMO)
+ changeToCard(2000);
+ else
changeToCard(1);
- else {
- if ((getFeatures() & GF_ME) && getPlatform() == Common::kPlatformMacintosh) {
- _video->playMovieCentered(wrapMovieFilename("mattel", kIntroStack));
- _video->playMovieCentered(wrapMovieFilename("presto", kIntroStack));
- } else
- _video->playMovieCentered(wrapMovieFilename("broder", kIntroStack));
-
- _video->playMovieCentered(wrapMovieFilename("cyanlogo", kIntroStack));
-
- if (!(getFeatures() & GF_DEMO)) { // The demo doesn't have the intro video
- if ((getFeatures() & GF_ME) && getPlatform() == Common::kPlatformMacintosh)
- // intro.mov uses Sorenson, introc uses Cinepak. Otherwise, they're the same.
- _video->playMovieCentered(wrapMovieFilename("introc", kIntroStack));
- else
- _video->playMovieCentered(wrapMovieFilename("intro", kIntroStack));
- }
-
- if (shouldQuit())
- return Common::kNoError;
-
- if (getFeatures() & GF_DEMO)
- changeToCard(2001);
- else {
- // It should be card 1 for the full game eventually too, but it's not working
- // there at the moment. Card 2 is the card with the book on the ground.
- changeToCard(2);
- }
- }
// Load game from launcher/command line if requested
if (ConfMan.hasKey("save_slot") && !(getFeatures() & GF_DEMO)) {
diff --git a/engines/mohawk/myst_scripts.cpp b/engines/mohawk/myst_scripts.cpp
index 4d6e00d76f..8321963198 100644
--- a/engines/mohawk/myst_scripts.cpp
+++ b/engines/mohawk/myst_scripts.cpp
@@ -3113,6 +3113,10 @@ void MystScriptParser::opcode_200_run() {
if (g_opcode200Parameters.enabled) {
switch (_vm->getCurStack()) {
+ case kIntroStack: // Used on Card 1
+ case kDemoStack: // Used on Card 2000
+ // TODO : Implement function here to play though intro movies and change card?
+ break;
case kSeleniticStack:
// Used on Card 1191 (Maze Runner)
@@ -3178,11 +3182,6 @@ void MystScriptParser::opcode_200_run() {
// TODO: Fill in Function...
// Variable indicates that this is related to Secret Panel State
break;
- case kDemoStack:
- // Used on Card 2000
-
- // TODO: Fill in Function...
- break;
case kDemoSlidesStack:
// Used on Cards...
if (_vm->_system->getMillis() - g_opcode200Parameters.lastCardTime >= 2 * 1000)
@@ -3203,12 +3202,34 @@ void MystScriptParser::opcode_200_disable() {
void MystScriptParser::opcode_200(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
switch (_vm->getCurStack()) {
- case kIntroStack:
+ case kIntroStack: // Used on Card 1
+ case kDemoStack: // Used on Card 2000
varUnusedCheck(op, var);
- // TODO: Play Intro Movies..
- // and then _vm->changeToCard(2);
- unknown(op, var, argc, argv);
+ // TODO : Clicking during the intro movies does not stop them and change to Card 5.
+ // This is due to the movies playing blocking, but making them non-blocking causes
+ // the card change here to prevent them playing. Need to move the following to the
+ // opcode_200_run process and wait for all movies to finish playing before the card
+ // change is performed.
+
+ // Play Intro Movies..
+ if ((_vm->getFeatures() & GF_ME) && _vm->getPlatform() == Common::kPlatformMacintosh) {
+ _vm->_video->playMovieCentered(_vm->wrapMovieFilename("mattel", kIntroStack));
+ _vm->_video->playMovieCentered(_vm->wrapMovieFilename("presto", kIntroStack));
+ } else
+ _vm->_video->playMovieCentered(_vm->wrapMovieFilename("broder", kIntroStack));
+
+ _vm->_video->playMovieCentered(_vm->wrapMovieFilename("cyanlogo", kIntroStack));
+
+ if (!(_vm->getFeatures() & GF_DEMO)) { // The demo doesn't have the intro video
+ if ((_vm->getFeatures() & GF_ME) && _vm->getPlatform() == Common::kPlatformMacintosh)
+ // intro.mov uses Sorenson, introc uses Cinepak. Otherwise, they're the same.
+ _vm->_video->playMovieCentered(_vm->wrapMovieFilename("introc", kIntroStack));
+ else
+ _vm->_video->playMovieCentered(_vm->wrapMovieFilename("intro", kIntroStack));
+ }
+
+ _vm->changeToCard(_vm->getCurCard()+1);
break;
case kSeleniticStack:
varUnusedCheck(op, var);
@@ -3284,13 +3305,6 @@ void MystScriptParser::opcode_200(uint16 op, uint16 var, uint16 argc, uint16 *ar
} else
unknown(op, var, argc, argv);
break;
- case kDemoStack:
- // Used on Card 2000
- if (argc == 0) {
- g_opcode200Parameters.enabled = true;
- } else
- unknown(op, var, argc, argv);
- break;
case kDemoSlidesStack:
// Used on Cards...
if (argc == 1) {
@@ -4665,8 +4679,8 @@ void MystScriptParser::opcode_300(uint16 op, uint16 var, uint16 argc, uint16 *ar
switch (_vm->getCurStack()) {
case kIntroStack:
varUnusedCheck(op, var);
- // TODO: StopSound?
- unknown(op, var, argc, argv);
+ // In the original engine, this opcode stopped Intro Movies if playing,
+ // upon card change, but this behaviour is now default in this engine.
break;
case kDemoPreviewStack:
case kMystStack: