aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Hoops2010-12-07 01:37:43 +0000
committerMatthew Hoops2010-12-07 01:37:43 +0000
commita789ee11c2116d190bc0f2f2051ad931fb53d478 (patch)
tree965da206d9f7cec985ca3439e006efc7582a4c27
parent65f218dce04d7bf82d08b440e2e14d37a80aa71c (diff)
downloadscummvm-rg350-a789ee11c2116d190bc0f2f2051ad931fb53d478.tar.gz
scummvm-rg350-a789ee11c2116d190bc0f2f2051ad931fb53d478.tar.bz2
scummvm-rg350-a789ee11c2116d190bc0f2f2051ad931fb53d478.zip
MOHAWK: Implement loading to different ages in Myst
svn-id: r54807
-rw-r--r--engines/mohawk/myst.cpp6
-rw-r--r--engines/mohawk/myst_stacks/intro.cpp16
-rw-r--r--engines/mohawk/myst_stacks/intro.h1
3 files changed, 20 insertions, 3 deletions
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index f0c63f90f7..ed92f6081e 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -388,6 +388,7 @@ void MohawkEngine_Myst::changeToStack(uint16 stack) {
switch (_curStack) {
case kChannelwoodStack:
+ _saveLoad->_v->globals.currentAge = 4;
_scriptParser = new MystScriptParser_Channelwood(this);
break;
case kCreditsStack:
@@ -397,6 +398,7 @@ void MohawkEngine_Myst::changeToStack(uint16 stack) {
_scriptParser = new MystScriptParser_Demo(this);
break;
case kDniStack:
+ _saveLoad->_v->globals.currentAge = 6;
_scriptParser = new MystScriptParser_Dni(this);
break;
case kIntroStack:
@@ -406,21 +408,25 @@ void MohawkEngine_Myst::changeToStack(uint16 stack) {
_scriptParser = new MystScriptParser_MakingOf(this);
break;
case kMechanicalStack:
+ _saveLoad->_v->globals.currentAge = 3;
_scriptParser = new MystScriptParser_Mechanical(this);
break;
case kMystStack:
+ _saveLoad->_v->globals.currentAge = 2;
_scriptParser = new MystScriptParser_Myst(this);
break;
case kDemoPreviewStack:
_scriptParser = new MystScriptParser_Preview(this);
break;
case kSeleniticStack:
+ _saveLoad->_v->globals.currentAge = 0;
_scriptParser = new MystScriptParser_Selenitic(this);
break;
case kDemoSlidesStack:
_scriptParser = new MystScriptParser_Slides(this);
break;
case kStoneshipStack:
+ _saveLoad->_v->globals.currentAge = 1;
_scriptParser = new MystScriptParser_Stoneship(this);
break;
default:
diff --git a/engines/mohawk/myst_stacks/intro.cpp b/engines/mohawk/myst_stacks/intro.cpp
index a0df5cf2e2..0741c22e1f 100644
--- a/engines/mohawk/myst_stacks/intro.cpp
+++ b/engines/mohawk/myst_stacks/intro.cpp
@@ -26,6 +26,7 @@
#include "mohawk/myst.h"
#include "mohawk/graphics.h"
#include "mohawk/myst_areas.h"
+#include "mohawk/myst_saveload.h"
#include "mohawk/sound.h"
#include "mohawk/video.h"
#include "mohawk/myst_stacks/intro.h"
@@ -63,6 +64,15 @@ void MystScriptParser_Intro::disablePersistentScripts() {
void MystScriptParser_Intro::runPersistentScripts() {
}
+uint16 MystScriptParser_Intro::getVar(uint16 var) {
+ switch(var) {
+ case 0:
+ return _vm->_saveLoad->_v->globals.currentAge;
+ default:
+ return MystScriptParser::getVar(var);
+ }
+}
+
void MystScriptParser_Intro::o_useLinkBook(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
// Hard coded SoundId valid only for Intro Stack.
// Other stacks use Opcode 40, which takes SoundId values as arguments.
@@ -72,7 +82,7 @@ void MystScriptParser_Intro::o_useLinkBook(uint16 op, uint16 var, uint16 argc, u
debugC(kDebugScript, "\tvar: %d", var);
// TODO: Merge with changeStack (Opcode 40) Implementation?
- if (_vm->_varStore->getVar(var) == 5 || _vm->_varStore->getVar(var) > 7) {
+ if (getVar(var) == 5 || getVar(var) > 7) {
// TODO: Dead Book i.e. Released Sirrus/Achenar
} else {
// Play Linking Sound, blocking...
@@ -84,7 +94,7 @@ void MystScriptParser_Intro::o_useLinkBook(uint16 op, uint16 var, uint16 argc, u
// Play Flyby Entry Movie on Masterpiece Edition. The Macintosh version is currently hooked
// up to the Cinepak versions of the video (the 'c' suffix) until the SVQ1 decoder is completed.
if ((_vm->getFeatures() & GF_ME)) {
- switch (_stackMap[_vm->_varStore->getVar(var)]) {
+ switch (_stackMap[getVar(var)]) {
case kSeleniticStack:
if (_vm->getPlatform() == Common::kPlatformMacintosh)
_vm->_video->playMovieCentered(_vm->wrapMovieFilename("FLY_SEc", kMasterpieceOnly));
@@ -123,7 +133,7 @@ void MystScriptParser_Intro::o_useLinkBook(uint16 op, uint16 var, uint16 argc, u
}
}
- uint16 varValue = _vm->_varStore->getVar(var);
+ uint16 varValue = getVar(var);
_vm->changeToStack(_stackMap[varValue]);
_vm->changeToCard(_startCard[varValue], true);
diff --git a/engines/mohawk/myst_stacks/intro.h b/engines/mohawk/myst_stacks/intro.h
index 78dc3bcaee..fc2ae5e1e7 100644
--- a/engines/mohawk/myst_stacks/intro.h
+++ b/engines/mohawk/myst_stacks/intro.h
@@ -47,6 +47,7 @@ public:
private:
void setupOpcodes();
+ uint16 getVar(uint16 var);
DECLARE_OPCODE(o_useLinkBook);