From 52e247e2397f189667d4637241c25050c6279224 Mon Sep 17 00:00:00 2001 From: David Fioramonti Date: Thu, 26 Apr 2018 14:27:59 -0700 Subject: MOHAWK: MYST: Make Dni/Atrus endings an enum The global variable "ending" tracks various states that Atrus can be in. This variable determines what video of Atrus will be playing and if the brother books have been destroyed. Despite this variable being called ending there are other endings not captured by this variable (like the brother endings). Also change spelling of Dini to Dni for one usage of ActiveAge from a previous commit. --- engines/mohawk/myst.cpp | 2 +- engines/mohawk/myst_stacks/credits.cpp | 2 +- engines/mohawk/myst_stacks/dni.cpp | 24 ++++++++++++------------ engines/mohawk/myst_stacks/myst.cpp | 24 ++++++++++++------------ engines/mohawk/myst_state.cpp | 2 ++ engines/mohawk/myst_state.h | 14 ++++++++++++-- 6 files changed, 40 insertions(+), 28 deletions(-) diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp index c0e3405845..bda69183c3 100644 --- a/engines/mohawk/myst.cpp +++ b/engines/mohawk/myst.cpp @@ -568,7 +568,7 @@ void MohawkEngine_Myst::changeToStack(uint16 stack, uint16 card, uint16 linkSrcS _scriptParser = new MystStacks::Demo(this); break; case kDniStack: - _gameState->_globals.currentAge = kDini; + _gameState->_globals.currentAge = kDni; _scriptParser = new MystStacks::Dni(this); break; case kIntroStack: diff --git a/engines/mohawk/myst_stacks/credits.cpp b/engines/mohawk/myst_stacks/credits.cpp index 5daa73d106..80ccf7fe9a 100644 --- a/engines/mohawk/myst_stacks/credits.cpp +++ b/engines/mohawk/myst_stacks/credits.cpp @@ -83,7 +83,7 @@ uint16 Credits::getVar(uint16 var) { case 0: // Credits Image Control return _curImage; case 1: // Credits Music Control (Good / bad ending) - return _globals.ending != 4; + return _globals.ending != kBooksDestroyed; default: return MystScriptParser::getVar(var); } diff --git a/engines/mohawk/myst_stacks/dni.cpp b/engines/mohawk/myst_stacks/dni.cpp index 6d8dd484f6..96dba7f39c 100644 --- a/engines/mohawk/myst_stacks/dni.cpp +++ b/engines/mohawk/myst_stacks/dni.cpp @@ -80,16 +80,16 @@ void Dni::runPersistentScripts() { uint16 Dni::getVar(uint16 var) { switch(var) { case 0: // Atrus Gone (from across room) - return _globals.ending == 2; + return _globals.ending == kAtrusLeaves; case 1: // Myst Book Status - if (_globals.ending != 4) - return _globals.ending == 3; + if (_globals.ending != kBooksDestroyed) + return _globals.ending == kForgotPage; else return 2; // Linkable case 2: // Music Type if (_notSeenAtrus) { _notSeenAtrus = false; - return _globals.ending != 4 && _globals.heldPage != kWhitePage; + return _globals.ending != kBooksDestroyed && _globals.heldPage != kWhitePage; } else return 2; default: @@ -104,8 +104,8 @@ void Dni::o_handPage(uint16 var, const ArgumentsArray &args) { VideoEntryPtr atrus = _vm->findVideo(_video, kDniStack); // Good ending and Atrus asked to give page - if (_globals.ending == 1 && atrus && atrus->getTime() > (uint)Audio::Timestamp(0, 6801, 600).msecs()) { - _globals.ending = 2; + if (_globals.ending == kAtrusWantsPage && atrus && atrus->getTime() > (uint)Audio::Timestamp(0, 6801, 600).msecs()) { + _globals.ending = kAtrusLeaves; _globals.heldPage = kNoPage; _vm->setMainCursor(kDefaultMystCursor); @@ -132,7 +132,7 @@ void Dni::atrusLeft_run() { _loopEnd = 98000; // Good ending - _globals.ending = 4; + _globals.ending = kBooksDestroyed; _globals.bluePagesInBook = 63; _globals.redPagesInBook = 63; @@ -152,10 +152,10 @@ void Dni::loopVideo_run() { } void Dni::atrus_run() { - if (_globals.ending == 2) { + if (_globals.ending == kAtrusLeaves) { // Wait for atrus to come back _atrusLeft = true; - } else if (_globals.ending == 1) { + } else if (_globals.ending == kAtrusWantsPage) { // Atrus asking for page if (!_vm->_video->isVideoPlaying()) { _video = "atr1page"; @@ -165,7 +165,7 @@ void Dni::atrus_run() { atrus->setLooping(true); atrus->setBounds(Audio::Timestamp(0, 7388, 600), Audio::Timestamp(0, 14700, 600)); } - } else if (_globals.ending != 3 && _globals.ending != 4) { + } else if (_globals.ending != kForgotPage && _globals.ending != kBooksDestroyed) { if (_globals.heldPage == kWhitePage) { _video = "atr1page"; _videoPos = Common::Point(215, 76); @@ -178,7 +178,7 @@ void Dni::atrus_run() { _loopEnd = 14700; // Wait for page - _globals.ending = 1; + _globals.ending = kAtrusWantsPage; } else { _video = "atr1nopg"; @@ -192,7 +192,7 @@ void Dni::atrus_run() { _loopEnd = 46175; // Bad ending - _globals.ending = 3; + _globals.ending = kForgotPage; } } else if (!_vm->_video->isVideoPlaying()) { VideoEntryPtr atrus = _vm->playMovie("atrwrite", kDniStack); diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp index 4a45235143..4adee5fc20 100644 --- a/engines/mohawk/myst_stacks/myst.cpp +++ b/engines/mohawk/myst_stacks/myst.cpp @@ -406,7 +406,7 @@ uint16 Myst::getVar(uint16 var) { case 0: // Myst Library Bookcase Closed return _state.libraryBookcaseDoor; case 1: - if (_globals.ending != 4) + if (_globals.ending != kBooksDestroyed) return _state.libraryBookcaseDoor != 1; else if (_state.libraryBookcaseDoor == 1) return 2; @@ -487,12 +487,12 @@ uint16 Myst::getVar(uint16 var) { && _fireplaceLines[4] == 204 && _fireplaceLines[5] == 250; case 24: // Fireplace Blue Page Present - if (_globals.ending != 4) + if (_globals.ending != kBooksDestroyed) return !(_globals.bluePagesInBook & 32) && (_globals.heldPage != kBlueFirePlacePage); else return 0; case 25: // Fireplace Red Page Present - if (_globals.ending != 4) + if (_globals.ending != kBooksDestroyed) return !(_globals.redPagesInBook & 32) && (_globals.heldPage != kRedFirePlacePage); else return 0; @@ -706,12 +706,12 @@ uint16 Myst::getVar(uint16 var) { case 99: // Cabin Boiler Gas Valve Position return _state.cabinValvePosition % 6; case 102: // Red page - if (_globals.ending != 4) + if (_globals.ending != kBooksDestroyed) return !(_globals.redPagesInBook & 1) && (_globals.heldPage != kRedLibraryPage); else return 0; case 103: // Blue page - if (_globals.ending != 4) + if (_globals.ending != kBooksDestroyed) return !(_globals.bluePagesInBook & 1) && (_globals.heldPage != kBlueLibraryPage); else return 0; @@ -770,7 +770,7 @@ void Myst::toggleVar(uint16 var) { _state.rocketshipMarkerSwitch = (_state.rocketshipMarkerSwitch + 1) % 2; break; case 24: // Fireplace Blue Page - if (_globals.ending != 4 && !(_globals.bluePagesInBook & 32)) { + if (_globals.ending != kBooksDestroyed && !(_globals.bluePagesInBook & 32)) { if (_globals.heldPage == kBlueFirePlacePage) _globals.heldPage = kNoPage; else @@ -778,7 +778,7 @@ void Myst::toggleVar(uint16 var) { } break; case 25: // Fireplace Red page - if (_globals.ending != 4 && !(_globals.redPagesInBook & 32)) { + if (_globals.ending != kBooksDestroyed && !(_globals.redPagesInBook & 32)) { if (_globals.heldPage == kRedFirePlacePage) _globals.heldPage = kNoPage; else @@ -802,7 +802,7 @@ void Myst::toggleVar(uint16 var) { } break; case 41: // Vault white page - if (_globals.ending != 4) { + if (_globals.ending != kBooksDestroyed) { if (_dockVaultState == 1) { _dockVaultState = 2; _globals.heldPage = kNoPage; @@ -813,7 +813,7 @@ void Myst::toggleVar(uint16 var) { } break; case 102: // Red page - if (_globals.ending != 4 && !(_globals.redPagesInBook & 1)) { + if (_globals.ending != kBooksDestroyed && !(_globals.redPagesInBook & 1)) { if (_globals.heldPage == kRedLibraryPage) _globals.heldPage = kNoPage; else @@ -821,7 +821,7 @@ void Myst::toggleVar(uint16 var) { } break; case 103: // Blue page - if (_globals.ending != 4 && !(_globals.bluePagesInBook & 1)) { + if (_globals.ending != kBooksDestroyed && !(_globals.bluePagesInBook & 1)) { if (_globals.heldPage == kBlueLibraryPage) _globals.heldPage = kNoPage; else @@ -1095,7 +1095,7 @@ void Myst::o_dockVaultOpen(uint16 var, const ArgumentsArray &args) { (_state.observatoryMarkerSwitch == 1) && (_state.poolMarkerSwitch == 1) && (_state.rocketshipMarkerSwitch == 1)) { - if (_globals.heldPage != kWhitePage && _globals.ending != 4) + if (_globals.heldPage != kWhitePage && _globals.ending != kBooksDestroyed) _dockVaultState = 2; else _dockVaultState = 1; @@ -3718,7 +3718,7 @@ void Myst::greenBook_run() { VideoEntryPtr book = _vm->playMovie(videoName, kMystStack); book->moveTo(314, 76); - if (_globals.ending != 4) { + if (_globals.ending != kBooksDestroyed) { _tempVar = 2; } else { book->setBounds(Audio::Timestamp(0, loopStart, 600), Audio::Timestamp(0, loopEnd, 600)); diff --git a/engines/mohawk/myst_state.cpp b/engines/mohawk/myst_state.cpp index f1b0b9de39..ab98da1f00 100644 --- a/engines/mohawk/myst_state.cpp +++ b/engines/mohawk/myst_state.cpp @@ -79,7 +79,9 @@ MystGameState::MystGameState(MohawkEngine_Myst *vm, Common::SaveFileManager *sav _globals.u0 = 2; // Current Age / Stack - Start in Myst _globals.currentAge = kMystStart; + _globals.heldPage = kNoPage; _globals.u1 = 1; + _globals.ending = kDniNotVisited; // Library Bookcase Door - Default to Up _myst.libraryBookcaseDoor = 1; diff --git a/engines/mohawk/myst_state.h b/engines/mohawk/myst_state.h index 737db306ab..0eb7d56525 100644 --- a/engines/mohawk/myst_state.h +++ b/engines/mohawk/myst_state.h @@ -79,13 +79,23 @@ enum ActiveAge { kMechanical = 3, kChannelwood = 4, kIntro = 5, - kDini = 6, + kDni = 6, kMystStart = 7, kCredits = 8, kSirrusEnding = 9, kAchenarEnding = 10 }; +// Various states that Atrus can be in when in Dni +enum DniEnding { + kDniNotVisited = 0, // Player hasn't been to Dni/K'veer yet + kAtrusWantsPage = 1, // Player is in Dni with the white page + kAtrusLeaves = 2, // Atrus leaves Dni after receiving the white page + kForgotPage = 3, // Player has entered Dni without bringing the white page + kBooksDestroyed = 4 // Atrus returns to Dni after previously leaving + // and destroying the books of his sons +}; + class MystGameState { public: MystGameState(MohawkEngine_Myst*, Common::SaveFileManager*); @@ -120,7 +130,7 @@ public: uint16 zipMode; uint16 redPagesInBook; uint16 bluePagesInBook; - uint16 ending; + DniEnding ending; } _globals; /* 50 Myst Specific Variables : -- cgit v1.2.3