diff options
| -rw-r--r-- | engines/mohawk/myst.cpp | 30 | ||||
| -rw-r--r-- | engines/mohawk/myst.h | 4 | ||||
| -rw-r--r-- | engines/mohawk/myst_saveload.cpp | 278 | ||||
| -rw-r--r-- | engines/mohawk/myst_saveload.h | 50 | ||||
| -rw-r--r-- | engines/mohawk/myst_scripts.cpp | 17 | ||||
| -rw-r--r-- | engines/mohawk/myst_scripts.h | 3 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/channelwood.cpp | 70 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/channelwood.h | 2 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/dni.cpp | 6 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/dni.h | 2 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/intro.cpp | 2 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/mechanical.cpp | 26 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/mechanical.h | 2 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/myst.cpp | 676 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/myst.h | 2 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/selenitic.cpp | 176 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/selenitic.h | 2 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/stoneship.cpp | 10 | ||||
| -rw-r--r-- | engines/mohawk/myst_stacks/stoneship.h | 2 | 
19 files changed, 624 insertions, 736 deletions
| diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp index 0a4f127138..5ce47848d1 100644 --- a/engines/mohawk/myst.cpp +++ b/engines/mohawk/myst.cpp @@ -87,7 +87,7 @@ MohawkEngine_Myst::MohawkEngine_Myst(OSystem *syst, const MohawkGameDescription  	_console = NULL;  	_scriptParser = NULL;  	_varStore = NULL; -	_saveLoad = NULL; +	_gameState = NULL;  	_loadDialog = NULL;  	_optionsDialog = NULL; @@ -116,7 +116,7 @@ MohawkEngine_Myst::~MohawkEngine_Myst() {  	delete _console;  	delete _scriptParser;  	delete _varStore; -	delete _saveLoad; +	delete _gameState;  	delete _loadDialog;  	delete _optionsDialog;  	delete _prevStack; @@ -255,7 +255,7 @@ Common::Error MohawkEngine_Myst::run() {  	_gfx = new MystGraphics(this);  	_console = new MystConsole(this);  	_varStore = new MystVar(this); -	_saveLoad = new MystSaveLoad(this, _saveFileMan); +	_gameState = new MystGameState(this, _saveFileMan);  	_loadDialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"));  	_loadDialog->setSaveMode(false);  	_optionsDialog = new MystOptionsDialog(this); @@ -266,10 +266,10 @@ Common::Error MohawkEngine_Myst::run() {  	// Load game from launcher/command line if requested  	if (ConfMan.hasKey("save_slot") && canLoadGameStateCurrently()) {  		uint32 gameToLoad = ConfMan.getInt("save_slot"); -		Common::StringArray savedGamesList = _saveLoad->generateSaveGameList(); +		Common::StringArray savedGamesList = _gameState->generateSaveGameList();  		if (gameToLoad > savedGamesList.size())  			error ("Could not find saved game"); -		_saveLoad->loadGame(savedGamesList[gameToLoad]); +		_gameState->load(savedGamesList[gameToLoad]);  	} else {  		// Start us on the first stack.  		if (getGameType() == GType_MAKINGOF) @@ -390,7 +390,7 @@ void MohawkEngine_Myst::changeToStack(uint16 stack) {  	switch (_curStack) {  	case kChannelwoodStack: -		_saveLoad->_v->globals.currentAge = 4; +		_gameState->_globals.currentAge = 4;  		_scriptParser = new MystScriptParser_Channelwood(this);  		break;  	case kCreditsStack: @@ -400,7 +400,7 @@ void MohawkEngine_Myst::changeToStack(uint16 stack) {  		_scriptParser = new MystScriptParser_Demo(this);  		break;  	case kDniStack: -		_saveLoad->_v->globals.currentAge = 6; +		_gameState->_globals.currentAge = 6;  		_scriptParser = new MystScriptParser_Dni(this);  		break;  	case kIntroStack: @@ -410,25 +410,25 @@ void MohawkEngine_Myst::changeToStack(uint16 stack) {  		_scriptParser = new MystScriptParser_MakingOf(this);  		break;  	case kMechanicalStack: -		_saveLoad->_v->globals.currentAge = 3; +		_gameState->_globals.currentAge = 3;  		_scriptParser = new MystScriptParser_Mechanical(this);  		break;  	case kMystStack: -		_saveLoad->_v->globals.currentAge = 2; +		_gameState->_globals.currentAge = 2;  		_scriptParser = new MystScriptParser_Myst(this);  		break;  	case kDemoPreviewStack:  		_scriptParser = new MystScriptParser_Preview(this);  		break;  	case kSeleniticStack: -		_saveLoad->_v->globals.currentAge = 0; +		_gameState->_globals.currentAge = 0;  		_scriptParser = new MystScriptParser_Selenitic(this);  		break;  	case kDemoSlidesStack:  		_scriptParser = new MystScriptParser_Slides(this);  		break;  	case kStoneshipStack: -		_saveLoad->_v->globals.currentAge = 1; +		_gameState->_globals.currentAge = 1;  		_scriptParser = new MystScriptParser_Stoneship(this);  		break;  	default: @@ -1069,19 +1069,19 @@ void MohawkEngine_Myst::runLoadDialog() {  }  Common::Error MohawkEngine_Myst::loadGameState(int slot) { -	if (_saveLoad->loadGame(_saveLoad->generateSaveGameList()[slot])) +	if (_gameState->load(_gameState->generateSaveGameList()[slot]))  		return Common::kNoError;  	return Common::kUnknownError;  }  Common::Error MohawkEngine_Myst::saveGameState(int slot, const char *desc) { -	Common::StringArray saveList = _saveLoad->generateSaveGameList(); +	Common::StringArray saveList = _gameState->generateSaveGameList();  	if ((uint)slot < saveList.size()) -		_saveLoad->deleteSave(saveList[slot]); +		_gameState->deleteSave(saveList[slot]); -	return _saveLoad->saveGame(Common::String(desc)) ? Common::kNoError : Common::kUnknownError; +	return _gameState->save(Common::String(desc)) ? Common::kNoError : Common::kUnknownError;  }  bool MohawkEngine_Myst::canLoadGameStateCurrently() { diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h index fb42938ec3..d7a6528f68 100644 --- a/engines/mohawk/myst.h +++ b/engines/mohawk/myst.h @@ -43,7 +43,7 @@ class VideoManager;  class MystGraphics;  class MystScriptParser;  class MystConsole; -class MystSaveLoad; +class MystGameState;  class MystOptionsDialog;  class MystResource;  class MystResourceType8; @@ -172,7 +172,7 @@ public:  	MystView _view;  	MystGraphics *_gfx; -	MystSaveLoad *_saveLoad; +	MystGameState *_gameState;  	MystScriptParser *_scriptParser;  	Common::Array<MystResource*> _resources;  	MystResource *_dragResource; diff --git a/engines/mohawk/myst_saveload.cpp b/engines/mohawk/myst_saveload.cpp index b99d020449..6496693592 100644 --- a/engines/mohawk/myst_saveload.cpp +++ b/engines/mohawk/myst_saveload.cpp @@ -32,39 +32,45 @@  namespace Mohawk { -MystSaveLoad::MystSaveLoad(MohawkEngine_Myst *vm, Common::SaveFileManager *saveFileMan) : _vm(vm), _saveFileMan(saveFileMan) { -	_v = new MystVariables(); - +MystGameState::MystGameState(MohawkEngine_Myst *vm, Common::SaveFileManager *saveFileMan) : _vm(vm), _saveFileMan(saveFileMan) {  	// Most of the variables are zero at game start. -	_v->globals.u0 = 2; +	memset(&_globals, 0, sizeof(_globals)); +	memset(&_myst, 0, sizeof(_myst)); +	memset(&_channelwood, 0, sizeof(_channelwood)); +	memset(&_mechanical, 0, sizeof(_mechanical)); +	memset(&_selenitic, 0, sizeof(_selenitic)); +	memset(&_stoneship, 0, sizeof(_stoneship)); +	memset(&_dni, 0, sizeof(_dni)); + +	// Unknown +	_globals.u0 = 2;  	// Current Age / Stack - Start in Myst -	_v->globals.currentAge = 7; -	_v->globals.u1 = 1; +	_globals.currentAge = 7; +	_globals.u1 = 1;  	// Library Bookcase Door - Default to Up -	_v->myst.libraryBookcaseDoor = 1; +	_myst.libraryBookcaseDoor = 1;  	// Dock Imager Numeric Selection - Default to 67 -	_v->myst.imagerSelection = 67; +	_myst.imagerSelection = 67;  	// Dock Imager Active - Default to Active -	_v->myst.imagerActive = 1; +	_myst.imagerActive = 1;  	// Stellar Observatory Lights - Default to On -	_v->myst.observatoryLights = 1; +	_myst.observatoryLights = 1;  	// Lighthouse Trapdoor State - Default to Locked -	_v->stoneship.trapdoorState = 2; +	_stoneship.trapdoorState = 2;  	// Lighthouse Chest Water State - Default to Full -	_v->stoneship.chestWaterState = 1; +	_stoneship.chestWaterState = 1;  } -MystSaveLoad::~MystSaveLoad() { -	delete _v; +MystGameState::~MystGameState() {  } -Common::StringArray MystSaveLoad::generateSaveGameList() { +Common::StringArray MystGameState::generateSaveGameList() {  	return _saveFileMan->listSavefiles("*.mys");  } -bool MystSaveLoad::loadGame(const Common::String &filename) { +bool MystGameState::load(const Common::String &filename) {  	Common::InSaveFile *loadFile = _saveFileMan->openForLoading(filename);  	if (!loadFile)  		return false; @@ -88,13 +94,13 @@ bool MystSaveLoad::loadGame(const Common::String &filename) {  	_vm->changeToStack(kIntroStack);  	// Set our default cursor -	if (_v->globals.heldPage == 0 || _v->globals.heldPage > 13) +	if (_globals.heldPage == 0 || _globals.heldPage > 13)  		_vm->setMainCursor(kDefaultMystCursor); -	else if (_v->globals.heldPage < 7) +	else if (_globals.heldPage < 7)  		_vm->setMainCursor(kBluePageCursor); -	else if (_v->globals.heldPage < 13) +	else if (_globals.heldPage < 13)  		_vm->setMainCursor(kRedPageCursor); -	else // if (_v->globals.heldPage == 13) +	else // if (globals.heldPage == 13)  		_vm->setMainCursor(kWhitePageCursor);  	// Set us to the linking book @@ -103,7 +109,7 @@ bool MystSaveLoad::loadGame(const Common::String &filename) {  	return true;  } -bool MystSaveLoad::saveGame(const Common::String &fname) { +bool MystGameState::save(const Common::String &fname) {  	Common::String filename(fname);  	// Make sure we have the right extension  	if (!filename.hasSuffix(".mys") && !filename.hasSuffix(".MYS")) @@ -123,95 +129,95 @@ bool MystSaveLoad::saveGame(const Common::String &fname) {  	return true;  } -void MystSaveLoad::syncGameState(Common::Serializer &s, bool isME) { +void MystGameState::syncGameState(Common::Serializer &s, bool isME) {  	// Globals first -	s.syncAsUint16LE(_v->globals.u0); -	s.syncAsUint16LE(_v->globals.currentAge); -	s.syncAsUint16LE(_v->globals.heldPage); -	s.syncAsUint16LE(_v->globals.u1); -	s.syncAsUint16LE(_v->globals.transitions); -	s.syncAsUint16LE(_v->globals.ending); -	s.syncAsUint16LE(_v->globals.redPagesInBook); -	s.syncAsUint16LE(_v->globals.bluePagesInBook); +	s.syncAsUint16LE(_globals.u0); +	s.syncAsUint16LE(_globals.currentAge); +	s.syncAsUint16LE(_globals.heldPage); +	s.syncAsUint16LE(_globals.u1); +	s.syncAsUint16LE(_globals.transitions); +	s.syncAsUint16LE(_globals.ending); +	s.syncAsUint16LE(_globals.redPagesInBook); +	s.syncAsUint16LE(_globals.bluePagesInBook);  	// Onto Myst  	if (isME) { -		s.syncAsUint32LE(_v->myst.cabinMarkerSwitch); -		s.syncAsUint32LE(_v->myst.clockTowerMarkerSwitch); -		s.syncAsUint32LE(_v->myst.dockMarkerSwitch); -		s.syncAsUint32LE(_v->myst.poolMarkerSwitch); -		s.syncAsUint32LE(_v->myst.gearsMarkerSwitch); -		s.syncAsUint32LE(_v->myst.generatorMarkerSwitch); -		s.syncAsUint32LE(_v->myst.observatoryMarkerSwitch); -		s.syncAsUint32LE(_v->myst.rocketshipMarkerSwitch); +		s.syncAsUint32LE(_myst.cabinMarkerSwitch); +		s.syncAsUint32LE(_myst.clockTowerMarkerSwitch); +		s.syncAsUint32LE(_myst.dockMarkerSwitch); +		s.syncAsUint32LE(_myst.poolMarkerSwitch); +		s.syncAsUint32LE(_myst.gearsMarkerSwitch); +		s.syncAsUint32LE(_myst.generatorMarkerSwitch); +		s.syncAsUint32LE(_myst.observatoryMarkerSwitch); +		s.syncAsUint32LE(_myst.rocketshipMarkerSwitch);  	} else { -		s.syncAsByte(_v->myst.cabinMarkerSwitch); -		s.syncAsByte(_v->myst.clockTowerMarkerSwitch); -		s.syncAsByte(_v->myst.dockMarkerSwitch); -		s.syncAsByte(_v->myst.poolMarkerSwitch); -		s.syncAsByte(_v->myst.gearsMarkerSwitch); -		s.syncAsByte(_v->myst.generatorMarkerSwitch); -		s.syncAsByte(_v->myst.observatoryMarkerSwitch); -		s.syncAsByte(_v->myst.rocketshipMarkerSwitch); +		s.syncAsByte(_myst.cabinMarkerSwitch); +		s.syncAsByte(_myst.clockTowerMarkerSwitch); +		s.syncAsByte(_myst.dockMarkerSwitch); +		s.syncAsByte(_myst.poolMarkerSwitch); +		s.syncAsByte(_myst.gearsMarkerSwitch); +		s.syncAsByte(_myst.generatorMarkerSwitch); +		s.syncAsByte(_myst.observatoryMarkerSwitch); +		s.syncAsByte(_myst.rocketshipMarkerSwitch);  	} -	s.syncAsUint16LE(_v->myst.greenBookOpenedBefore); -	s.syncAsUint16LE(_v->myst.shipFloating); -	s.syncAsUint16LE(_v->myst.cabinValvePosition); -	s.syncAsUint16LE(_v->myst.clockTowerHourPosition); -	s.syncAsUint16LE(_v->myst.clockTowerMinutePosition); -	s.syncAsUint16LE(_v->myst.gearsOpen); -	s.syncAsUint16LE(_v->myst.clockTowerBridgeOpen); -	s.syncAsUint16LE(_v->myst.generatorBreakers); -	s.syncAsUint16LE(_v->myst.generatorButtons); -	s.syncAsUint16LE(_v->myst.generatorVoltage); -	s.syncAsUint16LE(_v->myst.libraryBookcaseDoor); -	s.syncAsUint16LE(_v->myst.imagerSelection); -	s.syncAsUint16LE(_v->myst.imagerActive); -	s.syncAsUint16LE(_v->myst.imagerWaterErased); -	s.syncAsUint16LE(_v->myst.imagerMountainErased); -	s.syncAsUint16LE(_v->myst.imagerAtrusErased); -	s.syncAsUint16LE(_v->myst.imagerMarkerErased); -	s.syncAsUint16LE(_v->myst.towerRotationAngle); -	s.syncAsUint16LE(_v->myst.courtyardImageBoxes); -	s.syncAsUint16LE(_v->myst.cabinPilotLightLit); -	s.syncAsUint16LE(_v->myst.observatoryDaySetting); -	s.syncAsUint16LE(_v->myst.observatoryLights); -	s.syncAsUint16LE(_v->myst.observatoryMonthSetting); -	s.syncAsUint16LE(_v->myst.observatoryTimeSetting); -	s.syncAsUint16LE(_v->myst.observatoryYearSetting); -	s.syncAsUint16LE(_v->myst.observatoryDayTarget); -	s.syncAsUint16LE(_v->myst.observatoryMonthTarget); -	s.syncAsUint16LE(_v->myst.observatoryTimeTarget); -	s.syncAsUint16LE(_v->myst.observatoryYearTarget); -	s.syncAsUint16LE(_v->myst.cabinSafeCombination); -	s.syncAsUint16LE(_v->myst.treePosition); -	s.syncAsUint32LE(_v->myst.treeLastMoveTime); +	s.syncAsUint16LE(_myst.greenBookOpenedBefore); +	s.syncAsUint16LE(_myst.shipFloating); +	s.syncAsUint16LE(_myst.cabinValvePosition); +	s.syncAsUint16LE(_myst.clockTowerHourPosition); +	s.syncAsUint16LE(_myst.clockTowerMinutePosition); +	s.syncAsUint16LE(_myst.gearsOpen); +	s.syncAsUint16LE(_myst.clockTowerBridgeOpen); +	s.syncAsUint16LE(_myst.generatorBreakers); +	s.syncAsUint16LE(_myst.generatorButtons); +	s.syncAsUint16LE(_myst.generatorVoltage); +	s.syncAsUint16LE(_myst.libraryBookcaseDoor); +	s.syncAsUint16LE(_myst.imagerSelection); +	s.syncAsUint16LE(_myst.imagerActive); +	s.syncAsUint16LE(_myst.imagerWaterErased); +	s.syncAsUint16LE(_myst.imagerMountainErased); +	s.syncAsUint16LE(_myst.imagerAtrusErased); +	s.syncAsUint16LE(_myst.imagerMarkerErased); +	s.syncAsUint16LE(_myst.towerRotationAngle); +	s.syncAsUint16LE(_myst.courtyardImageBoxes); +	s.syncAsUint16LE(_myst.cabinPilotLightLit); +	s.syncAsUint16LE(_myst.observatoryDaySetting); +	s.syncAsUint16LE(_myst.observatoryLights); +	s.syncAsUint16LE(_myst.observatoryMonthSetting); +	s.syncAsUint16LE(_myst.observatoryTimeSetting); +	s.syncAsUint16LE(_myst.observatoryYearSetting); +	s.syncAsUint16LE(_myst.observatoryDayTarget); +	s.syncAsUint16LE(_myst.observatoryMonthTarget); +	s.syncAsUint16LE(_myst.observatoryTimeTarget); +	s.syncAsUint16LE(_myst.observatoryYearTarget); +	s.syncAsUint16LE(_myst.cabinSafeCombination); +	s.syncAsUint16LE(_myst.treePosition); +	s.syncAsUint32LE(_myst.treeLastMoveTime);  	for (int i = 0; i < 5; i++) -		s.syncAsUint16LE(_v->myst.rocketSliderPosition[i]); +		s.syncAsUint16LE(_myst.rocketSliderPosition[i]); -	s.syncAsUint16LE(_v->myst.u6); -	s.syncAsUint16LE(_v->myst.u7); -	s.syncAsUint16LE(_v->myst.u8); -	s.syncAsUint16LE(_v->myst.u9); +	s.syncAsUint16LE(_myst.u6); +	s.syncAsUint16LE(_myst.u7); +	s.syncAsUint16LE(_myst.u8); +	s.syncAsUint16LE(_myst.u9);  	// Channelwood  	if (isME) { -		s.syncAsUint32LE(_v->channelwood.waterPumpBridgeState); -		s.syncAsUint32LE(_v->channelwood.elevatorState); -		s.syncAsUint32LE(_v->channelwood.stairsLowerDoorState); -		s.syncAsUint32LE(_v->channelwood.pipeState); +		s.syncAsUint32LE(_channelwood.waterPumpBridgeState); +		s.syncAsUint32LE(_channelwood.elevatorState); +		s.syncAsUint32LE(_channelwood.stairsLowerDoorState); +		s.syncAsUint32LE(_channelwood.pipeState);  	} else { -		s.syncAsByte(_v->channelwood.waterPumpBridgeState); -		s.syncAsByte(_v->channelwood.elevatorState); -		s.syncAsByte(_v->channelwood.stairsLowerDoorState); -		s.syncAsByte(_v->channelwood.pipeState); +		s.syncAsByte(_channelwood.waterPumpBridgeState); +		s.syncAsByte(_channelwood.elevatorState); +		s.syncAsByte(_channelwood.stairsLowerDoorState); +		s.syncAsByte(_channelwood.pipeState);  	} -	s.syncAsUint16LE(_v->channelwood.waterValveStates); -	s.syncAsUint16LE(_v->channelwood.holoprojectorSelection); -	s.syncAsUint16LE(_v->channelwood.stairsUpperDoorState); +	s.syncAsUint16LE(_channelwood.waterValveStates); +	s.syncAsUint16LE(_channelwood.holoprojectorSelection); +	s.syncAsUint16LE(_channelwood.stairsUpperDoorState);  	if (isME)  		s.skip(4); @@ -220,93 +226,93 @@ void MystSaveLoad::syncGameState(Common::Serializer &s, bool isME) {  	// Mechanical -	s.syncAsUint16LE(_v->mechanical.achenarPanelState); -	s.syncAsUint16LE(_v->mechanical.sirrusPanelState); -	s.syncAsUint16LE(_v->mechanical.staircaseState); -	s.syncAsUint16LE(_v->mechanical.elevatorRotation); +	s.syncAsUint16LE(_mechanical.achenarPanelState); +	s.syncAsUint16LE(_mechanical.sirrusPanelState); +	s.syncAsUint16LE(_mechanical.staircaseState); +	s.syncAsUint16LE(_mechanical.elevatorRotation);  	for (int i = 0; i < 4; i++) -		s.syncAsUint16LE(_v->mechanical.codeShape[i]); +		s.syncAsUint16LE(_mechanical.codeShape[i]);  	// Selenitic  	if (isME) { -		s.syncAsUint32LE(_v->selenitic.emitterEnabledWater); -		s.syncAsUint32LE(_v->selenitic.emitterEnabledVolcano); -		s.syncAsUint32LE(_v->selenitic.emitterEnabledClock); -		s.syncAsUint32LE(_v->selenitic.emitterEnabledCrystal); -		s.syncAsUint32LE(_v->selenitic.emitterEnabledWind); -		s.syncAsUint32LE(_v->selenitic.soundReceiverOpened); -		s.syncAsUint32LE(_v->selenitic.tunnelLightsSwitchedOn); +		s.syncAsUint32LE(_selenitic.emitterEnabledWater); +		s.syncAsUint32LE(_selenitic.emitterEnabledVolcano); +		s.syncAsUint32LE(_selenitic.emitterEnabledClock); +		s.syncAsUint32LE(_selenitic.emitterEnabledCrystal); +		s.syncAsUint32LE(_selenitic.emitterEnabledWind); +		s.syncAsUint32LE(_selenitic.soundReceiverOpened); +		s.syncAsUint32LE(_selenitic.tunnelLightsSwitchedOn);  	} else { -		s.syncAsByte(_v->selenitic.emitterEnabledWater); -		s.syncAsByte(_v->selenitic.emitterEnabledVolcano); -		s.syncAsByte(_v->selenitic.emitterEnabledClock); -		s.syncAsByte(_v->selenitic.emitterEnabledCrystal); -		s.syncAsByte(_v->selenitic.emitterEnabledWind); -		s.syncAsByte(_v->selenitic.soundReceiverOpened); -		s.syncAsByte(_v->selenitic.tunnelLightsSwitchedOn); +		s.syncAsByte(_selenitic.emitterEnabledWater); +		s.syncAsByte(_selenitic.emitterEnabledVolcano); +		s.syncAsByte(_selenitic.emitterEnabledClock); +		s.syncAsByte(_selenitic.emitterEnabledCrystal); +		s.syncAsByte(_selenitic.emitterEnabledWind); +		s.syncAsByte(_selenitic.soundReceiverOpened); +		s.syncAsByte(_selenitic.tunnelLightsSwitchedOn);  	} -	s.syncAsUint16LE(_v->selenitic.soundReceiverCurrentSource); +	s.syncAsUint16LE(_selenitic.soundReceiverCurrentSource);  	for (byte i = 0; i < 5; i++) -		s.syncAsUint16LE(_v->selenitic.soundReceiverPositions[i]); +		s.syncAsUint16LE(_selenitic.soundReceiverPositions[i]);  	for (byte i = 0; i < 5; i++) -		s.syncAsUint16LE(_v->selenitic.soundLockSliderPositions[i]); +		s.syncAsUint16LE(_selenitic.soundLockSliderPositions[i]);  	// Stoneship  	if (isME) { -		s.syncAsUint16LE(_v->stoneship.lightState); -		s.syncAsUint16LE(_v->stoneship.u0); -		s.syncAsUint16LE(_v->stoneship.u1); +		s.syncAsUint16LE(_stoneship.lightState); +		s.syncAsUint16LE(_stoneship.u0); +		s.syncAsUint16LE(_stoneship.u1);  	} else { -		s.syncAsByte(_v->stoneship.lightState); -		s.syncAsByte(_v->stoneship.u0); -		s.syncAsByte(_v->stoneship.u1); +		s.syncAsByte(_stoneship.lightState); +		s.syncAsByte(_stoneship.u0); +		s.syncAsByte(_stoneship.u1);  	} -	s.syncAsUint16LE(_v->stoneship.pumpState); -	s.syncAsUint16LE(_v->stoneship.trapdoorState); -	s.syncAsUint16LE(_v->stoneship.chestWaterState); -	s.syncAsUint16LE(_v->stoneship.chestValveState); -	s.syncAsUint16LE(_v->stoneship.chestOpenState); -	s.syncAsUint16LE(_v->stoneship.trapdoorKeyState); +	s.syncAsUint16LE(_stoneship.pumpState); +	s.syncAsUint16LE(_stoneship.trapdoorState); +	s.syncAsUint16LE(_stoneship.chestWaterState); +	s.syncAsUint16LE(_stoneship.chestValveState); +	s.syncAsUint16LE(_stoneship.chestOpenState); +	s.syncAsUint16LE(_stoneship.trapdoorKeyState);  	for (int i = 0; i < 5; i++) -		s.syncAsUint16LE(_v->stoneship.generatorPowerLevel[i]); +		s.syncAsUint16LE(_stoneship.generatorPowerLevel[i]);  	// D'ni -	s.syncAsUint16LE(_v->dni.outcomeState); +	s.syncAsUint16LE(_dni.outcomeState);  	// Reading unknown region...  	// When Zero Value regions are included, these are 5 blocks of  	// 41 uint16 values.  	for (byte i = 0; i < 31; i++) -		s.syncAsUint16LE(_v->unknownMyst[i]); +		s.syncAsUint16LE(unknownMyst[i]);  	s.skip(20);  	for (byte i = 0; i < 37; i++) -		s.syncAsUint16LE(_v->unknownChannelwood[i]); +		s.syncAsUint16LE(unknownChannelwood[i]);  	s.skip(8);  	for (byte i = 0; i < 18; i++) -		s.syncAsUint16LE(_v->unknownMech[i]); +		s.syncAsUint16LE(unknownMech[i]);  	s.skip(46);  	for (byte i = 0; i < 30; i++) -		s.syncAsUint16LE(_v->unknownSelenitic[i]); +		s.syncAsUint16LE(unknownSelenitic[i]);  	s.skip(22);  	for (byte i = 0; i < 22; i++) -		s.syncAsUint16LE(_v->unknownStoneship[i]); +		s.syncAsUint16LE(unknownStoneship[i]);  	s.skip(38); @@ -314,7 +320,7 @@ void MystSaveLoad::syncGameState(Common::Serializer &s, bool isME) {  		warning("Unexpected File Position 0x%03X At End of Save/Load", s.bytesSynced());  } -void MystSaveLoad::deleteSave(const Common::String &saveName) { +void MystGameState::deleteSave(const Common::String &saveName) {  	debugC(kDebugSaveLoad, "Deleting save file \'%s\'", saveName.c_str());  	_saveFileMan->removeSavefile(saveName.c_str());  } diff --git a/engines/mohawk/myst_saveload.h b/engines/mohawk/myst_saveload.h index b8f0bd739f..0f90d5093c 100644 --- a/engines/mohawk/myst_saveload.h +++ b/engines/mohawk/myst_saveload.h @@ -36,13 +36,17 @@ namespace Common {  namespace Mohawk { -// These are left as uint16 currently, rather than -// being changed to bool etc. to save memory. -// This is because the exact structure -// is subject to change and the code to implement -// opcodes to access them is simpler this way.. -struct MystVariables { -	MystVariables() { memset(this, 0, sizeof(MystVariables)); } +class MohawkEngine_Myst; + +class MystGameState { +public: +	MystGameState(MohawkEngine_Myst*, Common::SaveFileManager*); +	~MystGameState(); + +	Common::StringArray generateSaveGameList(); +	bool load(const Common::String &); +	bool save(const Common::String &); +	void deleteSave(const Common::String &);  	/* 8 Game Global Variables :  	   0 = Unknown - Fixed at 2 @@ -63,7 +67,7 @@ struct MystVariables {  		uint16 ending;  		uint16 redPagesInBook;  		uint16 bluePagesInBook; -	} globals; +	} _globals;  	/* 50 Myst Specific Variables :  	   0  = Marker Switch Near Cabin @@ -163,7 +167,7 @@ struct MystVariables {  		uint16 u7;  		uint16 u8;  		uint16 u9; -	} myst; +	} _myst;  	/* 7 Channelwood Specific Variables :  	    0 = Water Pump Bridge State @@ -182,7 +186,7 @@ struct MystVariables {  		uint16 waterValveStates;  		uint16 holoprojectorSelection;  		uint16 stairsUpperDoorState; -	} channelwood; +	} _channelwood;  	/* 8 Mech Specific Variables :  	    0 = Achenar's Room Secret Panel State @@ -200,7 +204,7 @@ struct MystVariables {  		uint16 staircaseState;  		uint16 elevatorRotation;  		uint16 codeShape[4]; -	} mechanical; +	} _mechanical;  	/* 18 Selenitic Specific Variables :  	    0 = Sound Pickup At Water Pool @@ -233,14 +237,14 @@ struct MystVariables {  		uint16 soundReceiverCurrentSource;  		uint16 soundReceiverPositions[5];  		uint16 soundLockSliderPositions[5]; -	} selenitic; +	} _selenitic;  	/* 14 Stoneship Specific Variables :  	    0 = Light State  	    1 = Unknown #1  	    2 = Unknown #2  	    3 = Water Pump State -	    4 = Lighthouse Trapdoor State +	    4 = Lighthouse Trapdoor St_v->ate  	    5 = Lighthouse Chest Water State  	    6 = Lighthouse Chest Valve State  	    7 = Lighthouse Chest Open State @@ -262,14 +266,14 @@ struct MystVariables {  		uint16 chestOpenState;  		uint16 trapdoorKeyState;  		uint16 generatorPowerLevel[5]; -	} stoneship; +	} _stoneship;  	/* 1 Dunny Specific Variable :  	    0 = Outcome State  	*/  	struct Dni {  		uint16 outcomeState; -	} dni; +	} _dni;  	// The values in these regions seem to be lists of resource IDs  	// which correspond to VIEW resources i.e. cards @@ -282,23 +286,9 @@ struct MystVariables {  	uint16 unknownSelenitic[30];  	uint16 unknownStoneship[22]; -}; - -class MohawkEngine_Myst; - -class MystSaveLoad { -public: -	MystSaveLoad(MohawkEngine_Myst*, Common::SaveFileManager*); -	~MystSaveLoad(); - -	Common::StringArray generateSaveGameList(); -	bool loadGame(const Common::String &); -	bool saveGame(const Common::String &); -	void deleteSave(const Common::String &); +private:  	void syncGameState(Common::Serializer &s, bool isME); -	MystVariables *_v; -private:  	MohawkEngine_Myst *_vm;  	Common::SaveFileManager *_saveFileMan;  }; diff --git a/engines/mohawk/myst_scripts.cpp b/engines/mohawk/myst_scripts.cpp index bf1aadcea0..f463014e61 100644 --- a/engines/mohawk/myst_scripts.cpp +++ b/engines/mohawk/myst_scripts.cpp @@ -27,7 +27,6 @@  #include "mohawk/myst.h"  #include "mohawk/graphics.h"  #include "mohawk/myst_areas.h" -#include "mohawk/myst_saveload.h"  #include "mohawk/myst_scripts.h"  #include "mohawk/sound.h"  #include "mohawk/video.h" @@ -79,7 +78,9 @@ const uint16 MystScriptParser::_startCard[11] = {  // NOTE: Credits Start Card is 10000 -MystScriptParser::MystScriptParser(MohawkEngine_Myst *vm) : _vm(vm) { +MystScriptParser::MystScriptParser(MohawkEngine_Myst *vm) : +		_vm(vm), +		_globals(vm->_gameState->_globals) {  	setupCommonOpcodes();  	_invokingResource = NULL;  	_savedCardId = 0; @@ -225,13 +226,11 @@ MystScript MystScriptParser::readScript(Common::SeekableReadStream *stream, Myst  }  uint16 MystScriptParser::getVar(uint16 var) { -	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -  	switch(var) {  	case 105:  		return _tempVar;  	case 106: -		return globals.ending; +		return _globals.ending;  	default:  		warning("Unimplemented var getter 0x%02x (%d)", var, var);  		return _vm->_varStore->getVar(var); @@ -333,22 +332,20 @@ void MystScriptParser::o_changeCardSwitch(uint16 op, uint16 var, uint16 argc, ui  }  void MystScriptParser::o_takePage(uint16 op, uint16 var, uint16 argc, uint16 *argv) { -	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -  	uint16 cursorId = argv[0]; -	uint16 oldPage = globals.heldPage; +	uint16 oldPage = _globals.heldPage;  	debugC(kDebugScript, "Opcode %d: takePage Var %d CursorId %d", op, var, cursorId);  	// Take / drop page  	toggleVar(var); -	if (oldPage != globals.heldPage) { +	if (oldPage != _globals.heldPage) {  		_vm->_cursor->hideCursor();  		_vm->redrawArea(var);  		// Set new cursor -		if (globals.heldPage) +		if (_globals.heldPage)  			_vm->setMainCursor(cursorId);  		else  			_vm->setMainCursor(kDefaultMystCursor); diff --git a/engines/mohawk/myst_scripts.h b/engines/mohawk/myst_scripts.h index f16c4fcbd9..96e10293ef 100644 --- a/engines/mohawk/myst_scripts.h +++ b/engines/mohawk/myst_scripts.h @@ -30,6 +30,8 @@  #include "common/scummsys.h"  #include "common/util.h" +#include "mohawk/myst_saveload.h" +  namespace Mohawk {  #define DECLARE_OPCODE(x) void x(uint16 op, uint16 var, uint16 argc, uint16 *argv) @@ -124,6 +126,7 @@ public:  protected:  	MohawkEngine_Myst *_vm; +	MystGameState::Globals &_globals;  	typedef void (MystScriptParser::*OpcodeProcMyst)(uint16 op, uint16 var, uint16 argc, uint16* argv); diff --git a/engines/mohawk/myst_stacks/channelwood.cpp b/engines/mohawk/myst_stacks/channelwood.cpp index a43353c441..fff6664cd7 100644 --- a/engines/mohawk/myst_stacks/channelwood.cpp +++ b/engines/mohawk/myst_stacks/channelwood.cpp @@ -35,7 +35,8 @@  namespace Mohawk { -MystScriptParser_Channelwood::MystScriptParser_Channelwood(MohawkEngine_Myst *vm) : MystScriptParser(vm) { +MystScriptParser_Channelwood::MystScriptParser_Channelwood(MohawkEngine_Myst *vm) : +		MystScriptParser(vm), _state(vm->_gameState->_channelwood) {  	setupOpcodes();  } @@ -78,74 +79,71 @@ void MystScriptParser_Channelwood::runPersistentScripts() {  }  uint16 MystScriptParser_Channelwood::getVar(uint16 var) { -//	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -	MystVariables::Channelwood &channelwood = _vm->_saveLoad->_v->channelwood; -  	switch(var) {  	case 1: // Water Pump Bridge Raised -		return channelwood.waterPumpBridgeState; +		return _state.waterPumpBridgeState;  	case 2: // Lower Walkway to Upper Walkway Elevator Raised -		return channelwood.elevatorState; +		return _state.elevatorState;  	case 3: // Water Flowing To Lower Walkway To Upper Walkway Elevator -		return (channelwood.waterValveStates & 0xc0) ? 1 : 0; +		return (_state.waterValveStates & 0xc0) ? 1 : 0;  	case 4: // Water Flowing To Book Room Elevator -		return ((channelwood.waterValveStates & 0xf8) == 0xb0 && channelwood.pipeState) ? 1 : 0; +		return ((_state.waterValveStates & 0xf8) == 0xb0 && _state.pipeState) ? 1 : 0;  	case 5: // Lower Walkway to Upper Walkway Spiral Stair Lower Door State -		return channelwood.stairsLowerDoorState; +		return _state.stairsLowerDoorState;  	case 6: // Pipe Bridge Extended -		return channelwood.pipeState; +		return _state.pipeState;  	case 7: // Water Flowing To Water Pump For Bridge -		return ((channelwood.waterValveStates & 0xe2) == 0xc2 || (channelwood.waterValveStates & 0xf4) == 0xa0) ? 1 : 0; +		return ((_state.waterValveStates & 0xe2) == 0xc2 || (_state.waterValveStates & 0xf4) == 0xa0) ? 1 : 0;  	case 8: // Water Tank Valve -		return (channelwood.waterValveStates & 0x80) ? 1 : 0; +		return (_state.waterValveStates & 0x80) ? 1 : 0;  	case 9: // State of First Water Valve -		return (channelwood.waterValveStates & 0x40) ? 1 : 0; +		return (_state.waterValveStates & 0x40) ? 1 : 0;  	case 10: // State of Second Water Valve -		return (channelwood.waterValveStates & 0x20) ? 1 : 0; +		return (_state.waterValveStates & 0x20) ? 1 : 0;  	case 11: // State of Right Third Water Valve -		return (channelwood.waterValveStates & 0x10) ? 1 : 0; +		return (_state.waterValveStates & 0x10) ? 1 : 0;  	case 12: // State of Right-Right Fourth Water Valve -		return (channelwood.waterValveStates & 0x08) ? 1 : 0; +		return (_state.waterValveStates & 0x08) ? 1 : 0;  	case 13: // State of Right-Left Fourth Water Valve -		return (channelwood.waterValveStates & 0x04) ? 1 : 0; +		return (_state.waterValveStates & 0x04) ? 1 : 0;  	case 14: // State of Left Third Water Valve -		return (channelwood.waterValveStates & 0x02) ? 1 : 0; +		return (_state.waterValveStates & 0x02) ? 1 : 0;  	case 15: // Water Flowing To Lower Walkway To Upper Walkway Elevator -		return ((channelwood.waterValveStates & 0xf8) == 0xb8) ? 1 : 0; +		return ((_state.waterValveStates & 0xf8) == 0xb8) ? 1 : 0;  	case 16: // Channelwood Lower Walkway to Upper Walkway Spiral Stair Upper Door State -		return channelwood.stairsUpperDoorState; +		return _state.stairsUpperDoorState;  	case 17: // Achenar's Holoprojector Selection -		return channelwood.holoprojectorSelection; +		return _state.holoprojectorSelection;  //	case 18: // Sirrus's Room Bed Drawer Open  //		return 0;  //		return 1;  	case 19: // Sound - Water Tank Valve -		return (channelwood.waterValveStates & 0x80) ? 1 : 0; +		return (_state.waterValveStates & 0x80) ? 1 : 0;  	case 20: // Sound - First Water Valve Water Flowing To Left -		return ((channelwood.waterValveStates & 0xc0) == 0x80) ? 1 : 0; +		return ((_state.waterValveStates & 0xc0) == 0x80) ? 1 : 0;  	case 21: // Sound - Second Water Valve Water Flowing To Right -		return ((channelwood.waterValveStates & 0xe0) == 0xa0) ? 1 : 0; +		return ((_state.waterValveStates & 0xe0) == 0xa0) ? 1 : 0;  	case 22: // Sound - Right Third Water Valve Water Flowing To Right -		return ((channelwood.waterValveStates & 0xf0) == 0xb0) ? 1 : 0; +		return ((_state.waterValveStates & 0xf0) == 0xb0) ? 1 : 0;  	case 23: // Sound - Right Third Water Valve Water Flowing To Left -		return ((channelwood.waterValveStates & 0xf0) == 0xa0) ? 1 : 0; +		return ((_state.waterValveStates & 0xf0) == 0xa0) ? 1 : 0;  	case 24: // Sound - Second Water Valve Water Flowing To Left -		return ((channelwood.waterValveStates & 0xe0) == 0xc0) ? 1 : 0; +		return ((_state.waterValveStates & 0xe0) == 0xc0) ? 1 : 0;  	case 25: // Sound - Right-Right Fourth Valve Water Flowing To Left (To Pipe Bridge) -		return ((channelwood.waterValveStates & 0xf8) == 0xb0) ? 1 : 0; +		return ((_state.waterValveStates & 0xf8) == 0xb0) ? 1 : 0;  	case 26: // Sound - Right-Left Fourth Valve Water Flowing To Right (To Pipe Down Tree) -		return ((channelwood.waterValveStates & 0xf4) == 0xa4) ? 1 : 0; +		return ((_state.waterValveStates & 0xf4) == 0xa4) ? 1 : 0;  	case 27: // Sound - Right-Left Fourth Valve Water Flowing To Left (To Pipe Fork) -		return ((channelwood.waterValveStates & 0xf4) == 0xa0) ? 1 : 0; +		return ((_state.waterValveStates & 0xf4) == 0xa0) ? 1 : 0;  	case 28: // Sound - Left Third Water Valve Flowing To Right (To Pipe Fork) -		return ((channelwood.waterValveStates & 0xe2) == 0xc2) ? 1 : 0; +		return ((_state.waterValveStates & 0xe2) == 0xc2) ? 1 : 0;  	case 29: // Sound - Left Third Water Valve Flowing To Left (To Pipe In Water) -		return ((channelwood.waterValveStates & 0xe2) == 0xc0) ? 1 : 0; +		return ((_state.waterValveStates & 0xe2) == 0xc0) ? 1 : 0;  //	case 30: // Temple Door State  //		return 0;  //		return 1;  	case 32: // Sound - Water Flowing in Pipe to Book Room Elevator -		return ((channelwood.waterValveStates & 0xf8) == 0xb0 && channelwood.pipeState) ? 1 : 0; +		return ((_state.waterValveStates & 0xf8) == 0xb0 && _state.pipeState) ? 1 : 0;  //	case 102: // Sirrus's Desk Drawer / Red Page State  //		return 0; // Drawer Closed  //		return 1; // Drawer Open, Red Page Taken @@ -159,12 +157,9 @@ uint16 MystScriptParser_Channelwood::getVar(uint16 var) {  }  void MystScriptParser_Channelwood::toggleVar(uint16 var) { -//	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -	MystVariables::Channelwood &channelwood = _vm->_saveLoad->_v->channelwood; -  	switch(var) {  	case 6: // Pipe Bridge Extended -		channelwood.pipeState ^= 1; +		_state.pipeState ^= 1;  	default:  		MystScriptParser::toggleVar(var);  		break; @@ -172,7 +167,6 @@ void MystScriptParser_Channelwood::toggleVar(uint16 var) {  }  bool MystScriptParser_Channelwood::setVarValue(uint16 var, uint16 value) { -//	MystVariables::Channelwood &channelwood = _vm->_saveLoad->_v->channelwood;  	bool refresh = false;  	switch (var) { diff --git a/engines/mohawk/myst_stacks/channelwood.h b/engines/mohawk/myst_stacks/channelwood.h index 2c88f72442..cf1da35baf 100644 --- a/engines/mohawk/myst_stacks/channelwood.h +++ b/engines/mohawk/myst_stacks/channelwood.h @@ -71,6 +71,8 @@ private:  	DECLARE_OPCODE(opcode_203);  	DECLARE_OPCODE(opcode_300); + +	MystGameState::Channelwood &_state;  };  } // End of namespace Mohawk diff --git a/engines/mohawk/myst_stacks/dni.cpp b/engines/mohawk/myst_stacks/dni.cpp index 9eaf8b1bb3..e14ecc4b90 100644 --- a/engines/mohawk/myst_stacks/dni.cpp +++ b/engines/mohawk/myst_stacks/dni.cpp @@ -34,7 +34,8 @@  namespace Mohawk { -MystScriptParser_Dni::MystScriptParser_Dni(MohawkEngine_Myst *vm) : MystScriptParser(vm) { +MystScriptParser_Dni::MystScriptParser_Dni(MohawkEngine_Myst *vm) : +		MystScriptParser(vm), _state(_vm->_gameState->_dni) {  	setupOpcodes();  } @@ -64,9 +65,6 @@ void MystScriptParser_Dni::runPersistentScripts() {  }  uint16 MystScriptParser_Dni::getVar(uint16 var) { -//	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -//	MystVariables::Dni &dni = _vm->_saveLoad->_v->dni; -  	switch(var) {  //	case 0: // Atrus Gone (from across room)  //		return 0; // Present diff --git a/engines/mohawk/myst_stacks/dni.h b/engines/mohawk/myst_stacks/dni.h index a3ddedd70d..f376fb2025 100644 --- a/engines/mohawk/myst_stacks/dni.h +++ b/engines/mohawk/myst_stacks/dni.h @@ -55,6 +55,8 @@ private:  	DECLARE_OPCODE(opcode_200);  	DECLARE_OPCODE(opcode_300); + +	MystGameState::Dni &_state;  };  } // End of namespace Mohawk diff --git a/engines/mohawk/myst_stacks/intro.cpp b/engines/mohawk/myst_stacks/intro.cpp index 875eb6fce1..318edf57e9 100644 --- a/engines/mohawk/myst_stacks/intro.cpp +++ b/engines/mohawk/myst_stacks/intro.cpp @@ -67,7 +67,7 @@ void MystScriptParser_Intro::runPersistentScripts() {  uint16 MystScriptParser_Intro::getVar(uint16 var) {  	switch(var) {  	case 0: -		return _vm->_saveLoad->_v->globals.currentAge; +		return _vm->_gameState->_globals.currentAge;  	default:  		return MystScriptParser::getVar(var);  	} diff --git a/engines/mohawk/myst_stacks/mechanical.cpp b/engines/mohawk/myst_stacks/mechanical.cpp index e1933fbc28..714ec199f5 100644 --- a/engines/mohawk/myst_stacks/mechanical.cpp +++ b/engines/mohawk/myst_stacks/mechanical.cpp @@ -35,7 +35,8 @@  namespace Mohawk { -MystScriptParser_Mechanical::MystScriptParser_Mechanical(MohawkEngine_Myst *vm) : MystScriptParser(vm) { +MystScriptParser_Mechanical::MystScriptParser_Mechanical(MohawkEngine_Myst *vm) : +		MystScriptParser(vm), _state(vm->_gameState->_mechanical) {  	setupOpcodes();  } @@ -100,14 +101,11 @@ void MystScriptParser_Mechanical::runPersistentScripts() {  }  uint16 MystScriptParser_Mechanical::getVar(uint16 var) { -//	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -	MystVariables::Mechanical &mechanical = _vm->_saveLoad->_v->mechanical; -  	switch(var) {  	case 0: // Sirrus's Secret Panel State -		return mechanical.sirrusPanelState; +		return _state.sirrusPanelState;  	case 1: // Achenar's Secret Panel State -		return mechanical.achenarPanelState; +		return _state.achenarPanelState;  //	case 3: // Sirrus's Secret Room Crate State  //		return 0;  //		return 1; @@ -123,14 +121,14 @@ uint16 MystScriptParser_Mechanical::getVar(uint16 var) {  //		return 0;  //		return 1;  	case 7: // Fortress Elevator Open -		if (mechanical.elevatorRotation == 4) +		if (_state.elevatorRotation == 4)  			return 1; // Open  		else  			return 0; // Closed  	case 10: // Fortress Staircase State -		return mechanical.staircaseState; +		return _state.staircaseState;  	case 11: // Fortress Elevator Rotation Position -		return mechanical.elevatorRotation; +		return _state.elevatorRotation;  //	case 12: // Fortress Elevator Rotation Cog Position  //		return 0;  //		return 1; @@ -146,7 +144,7 @@ uint16 MystScriptParser_Mechanical::getVar(uint16 var) {  	case 17: // Code Lock Shape #2  	case 18: // Code Lock Shape #3  	case 19: // Code Lock Shape #4 - Right -		return mechanical.codeShape[var - 16]; +		return _state.codeShape[var - 16];  //	case 20: // Crystal Lit Flag - Yellow  //		return 0;  //		return 1; @@ -170,21 +168,18 @@ uint16 MystScriptParser_Mechanical::getVar(uint16 var) {  }  void MystScriptParser_Mechanical::toggleVar(uint16 var) { -//	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -	MystVariables::Mechanical &mechanical = _vm->_saveLoad->_v->mechanical; -  	switch(var) {  //	case 3: // Sirrus's Secret Room Crate State  //		temp ^= 1;  //	case 4: // Code Lock Puzzle Correct / Myst Book Room Staircase State  //		temp ^= 1;  	case 10: // Fortress Staircase State -		mechanical.staircaseState ^= 1; +		_state.staircaseState ^= 1;  	case 16: // Code Lock Shape #1 - Left  	case 17: // Code Lock Shape #2  	case 18: // Code Lock Shape #3  	case 19: // Code Lock Shape #4 - Right -		mechanical.codeShape[var - 16] = (mechanical.codeShape[var - 16] + 1) % 10; +		_state.codeShape[var - 16] = (_state.codeShape[var - 16] + 1) % 10;  		break;  //	case 102: // Red Page Grab/Release  //		globals.heldPage? @@ -197,7 +192,6 @@ void MystScriptParser_Mechanical::toggleVar(uint16 var) {  }  bool MystScriptParser_Mechanical::setVarValue(uint16 var, uint16 value) { -//	MystVariables::Mechanical &mechanical = _vm->_saveLoad->_v->mechanical;  	bool refresh = false;  	switch (var) { diff --git a/engines/mohawk/myst_stacks/mechanical.h b/engines/mohawk/myst_stacks/mechanical.h index 086986a2b2..6ea1bc6fd7 100644 --- a/engines/mohawk/myst_stacks/mechanical.h +++ b/engines/mohawk/myst_stacks/mechanical.h @@ -93,6 +93,8 @@ private:  	DECLARE_OPCODE(opcode_209);  	DECLARE_OPCODE(opcode_300); + +	MystGameState::Mechanical &_state;  };  } // End of namespace Mohawk diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp index a01f98c318..bc77f150e2 100644 --- a/engines/mohawk/myst_stacks/myst.cpp +++ b/engines/mohawk/myst_stacks/myst.cpp @@ -40,9 +40,8 @@ namespace Mohawk {  // NOTE: Credits Start Card is 10000 -MystScriptParser_Myst::MystScriptParser_Myst(MohawkEngine_Myst *vm) : MystScriptParser(vm) { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; - +MystScriptParser_Myst::MystScriptParser_Myst(MohawkEngine_Myst *vm) : +		MystScriptParser(vm), _state(_vm->_gameState->_myst) {  	setupOpcodes();  	// Card ID preinitialized by the engine for use by opcode 18 @@ -58,7 +57,7 @@ MystScriptParser_Myst::MystScriptParser_Myst(MohawkEngine_Myst *vm) : MystScript  	_treeStopped = false;  	_treeMinPosition = 0;  	_imagerValidationStep = 0; -	myst.treeLastMoveTime = _vm->_system->getMillis(); +	_state.treeLastMoveTime = _vm->_system->getMillis();  }  MystScriptParser_Myst::~MystScriptParser_Myst() { @@ -256,49 +255,46 @@ void MystScriptParser_Myst::runPersistentScripts() {  }  uint16 MystScriptParser_Myst::getVar(uint16 var) { -	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	switch(var) {  	case 0: // Myst Library Bookcase Closed -		return myst.libraryBookcaseDoor; +		return _state.libraryBookcaseDoor;  	case 1: -		if (globals.ending != 4) { -			return myst.libraryBookcaseDoor != 1; -		} else if (myst.libraryBookcaseDoor == 1) { +		if (_globals.ending != 4) { +			return _state.libraryBookcaseDoor != 1; +		} else if (_state.libraryBookcaseDoor == 1) {  			return 2;  		} else {  			return 3;  		}  	case 2: // Marker Switch Near Cabin -		return myst.cabinMarkerSwitch; +		return _state.cabinMarkerSwitch;  	case 3: // Marker Switch Near Clock Tower -		return myst.clockTowerMarkerSwitch; +		return _state.clockTowerMarkerSwitch;  	case 4: // Marker Switch on Dock -		return myst.dockMarkerSwitch; +		return _state.dockMarkerSwitch;  	case 5: // Marker Switch Near Ship Pool -		return myst.poolMarkerSwitch; +		return _state.poolMarkerSwitch;  	case 6: // Marker Switch Near Cogs -		return myst.gearsMarkerSwitch; +		return _state.gearsMarkerSwitch;  	case 7: // Marker Switch Near Generator Room -		return myst.generatorMarkerSwitch; +		return _state.generatorMarkerSwitch;  	case 8: // Marker Switch Near Stellar Observatory -		return myst.observatoryMarkerSwitch; +		return _state.observatoryMarkerSwitch;  	case 9: // Marker Switch Near Rocket Ship -		return myst.rocketshipMarkerSwitch; +		return _state.rocketshipMarkerSwitch;  	case 10: // Ship Floating State -		return myst.shipFloating; +		return _state.shipFloating;  	case 11: // Cabin Door Open State  		return _cabinDoorOpened;  	case 12: // Clock tower gears bridge -		return myst.clockTowerBridgeOpen; +		return _state.clockTowerBridgeOpen;  	case 13: // Tower in right position -		return myst.towerRotationAngle == 271 -				|| myst.towerRotationAngle == 83 -				|| myst.towerRotationAngle == 129 -				|| myst.towerRotationAngle == 152; +		return _state.towerRotationAngle == 271 +				|| _state.towerRotationAngle == 83 +				|| _state.towerRotationAngle == 129 +				|| _state.towerRotationAngle == 152;  	case 14: // Tower Solution (Key) Plaque -		switch (myst.towerRotationAngle) { +		switch (_state.towerRotationAngle) {  		case 271:  			return 1;  		case 83: @@ -311,16 +307,16 @@ uint16 MystScriptParser_Myst::getVar(uint16 var) {  			return 0;  		}  	case 15: // Tower Window (Book) View -		switch (myst.towerRotationAngle) { +		switch (_state.towerRotationAngle) {  		case 271:  			return 1;  		case 83: -			if (myst.gearsOpen) +			if (_state.gearsOpen)  				return 6;  			else  				return 2;  		case 129: -			if (myst.shipFloating) +			if (_state.shipFloating)  				return 5;  			else  				return 3; @@ -330,10 +326,10 @@ uint16 MystScriptParser_Myst::getVar(uint16 var) {  			return 0;  		}  	case 16: // Tower Window (Book) View From Ladder Top -		if (myst.towerRotationAngle != 271 -						&& myst.towerRotationAngle != 83 -						&& myst.towerRotationAngle != 129) { -			if (myst.towerRotationAngle == 152) +		if (_state.towerRotationAngle != 271 +						&& _state.towerRotationAngle != 83 +						&& _state.towerRotationAngle != 129) { +			if (_state.towerRotationAngle == 152)  				return 2;  			else  				return 0; @@ -349,14 +345,14 @@ uint16 MystScriptParser_Myst::getVar(uint16 var) {  				&& _fireplaceLines[4] == 204  				&& _fireplaceLines[5] == 250;  	case 24: // Fireplace Blue Page Present -		if (globals.ending != 4) { -			return !(globals.bluePagesInBook & 32) && (globals.heldPage != 6); +		if (_globals.ending != 4) { +			return !(_globals.bluePagesInBook & 32) && (_globals.heldPage != 6);  		} else {  			return 0;  		}  	case 25: // Fireplace Red Page Present -		if (globals.ending != 4) { -			return !(globals.redPagesInBook & 32) && (globals.heldPage != 12); +		if (_globals.ending != 4) { +			return !(_globals.redPagesInBook & 32) && (_globals.heldPage != 12);  		} else {  			return 0;  		} @@ -370,16 +366,16 @@ uint16 MystScriptParser_Myst::getVar(uint16 var) {  	case 33: // Courtyard Image Box - Ostrich  		if (!_tempVar) {  			return 0; -		} else if (myst.courtyardImageBoxes & (0x01 << (var - 26))) { +		} else if (_state.courtyardImageBoxes & (0x01 << (var - 26))) {  			return 2;  		} else {  			return 1;  		}  	case 34: // Sound Control In Dock forechamber -		if (myst.imagerActive) { -			if (myst.imagerSelection == 40 && !myst.imagerMountainErased) +		if (_state.imagerActive) { +			if (_state.imagerSelection == 40 && !_state.imagerMountainErased)  				return 1; -			else if (myst.imagerSelection == 67 && !myst.imagerWaterErased) +			else if (_state.imagerSelection == 67 && !_state.imagerWaterErased)  				return 2;  			else  				return 0; @@ -387,50 +383,50 @@ uint16 MystScriptParser_Myst::getVar(uint16 var) {  			return 0;  		}  	case 35: // Dock Forechamber Imager Control Left Digit -		if (myst.imagerSelection > 9) -			return myst.imagerSelection / 10 - 1; +		if (_state.imagerSelection > 9) +			return _state.imagerSelection / 10 - 1;  		else  			return 9;  	case 36: // Dock Forechamber Imager Control Right Digit -		return (10 + myst.imagerSelection - 1) % 10; +		return (10 + _state.imagerSelection - 1) % 10;  	case 37: // Clock Tower Control Wheels Position -		return 3 * ((myst.clockTowerMinutePosition / 5) % 3) + myst.clockTowerHourPosition % 3; +		return 3 * ((_state.clockTowerMinutePosition / 5) % 3) + _state.clockTowerHourPosition % 3;  	case 40: // Gears Open State -		return myst.gearsOpen; +		return _state.gearsOpen;  	case 41: // Dock Marker Switch Vault State  		return _dockVaultState;  	case 43: // Clock Tower Time -		return myst.clockTowerHourPosition * 12 + myst.clockTowerMinutePosition / 5; +		return _state.clockTowerHourPosition * 12 + _state.clockTowerMinutePosition / 5;  	case 44: // Rocket ship power state -		if (myst.generatorBreakers || myst.generatorVoltage == 0) +		if (_state.generatorBreakers || _state.generatorVoltage == 0)  			return 0; -		else if (myst.generatorVoltage != 59) +		else if (_state.generatorVoltage != 59)  			return 1;  		else  			return 2;  	case 45: // Dock Vault Imager Active On Water -		return myst.imagerActive && myst.imagerSelection == 67 && !myst.imagerWaterErased; +		return _state.imagerActive && _state.imagerSelection == 67 && !_state.imagerWaterErased;  	case 46:  		return bookCountPages(100);  	case 47:  		return bookCountPages(101);  	case 48: -		if (myst.dockMarkerSwitch && !myst.shipFloating) +		if (_state.dockMarkerSwitch && !_state.shipFloating)  			return 1; -		else if (!myst.dockMarkerSwitch && myst.shipFloating) +		else if (!_state.dockMarkerSwitch && _state.shipFloating)  			return 2;  		else  			return 0;  	case 49: // Generator running -		return myst.generatorVoltage > 0; +		return _state.generatorVoltage > 0;  	case 51: // Forechamber Imager Movie Control -		if (myst.imagerSelection == 40 && !myst.imagerMountainErased) +		if (_state.imagerSelection == 40 && !_state.imagerMountainErased)  			return 1; -		else if (myst.imagerSelection == 67 && !myst.imagerWaterErased) +		else if (_state.imagerSelection == 67 && !_state.imagerWaterErased)  			return 2; -		else if (myst.imagerSelection == 8 && !myst.imagerAtrusErased) +		else if (_state.imagerSelection == 8 && !_state.imagerAtrusErased)  			return 3; -		else if (myst.imagerSelection == 47 && !myst.imagerMarkerErased) +		else if (_state.imagerSelection == 47 && !_state.imagerMarkerErased)  			return 4;  		else  			return 0; @@ -444,65 +440,65 @@ uint16 MystScriptParser_Myst::getVar(uint16 var) {  	case 59: // Generator Switch #8  	case 60: // Generator Switch #9  	case 61: // Generator Switch #10 -		return (myst.generatorButtons & (1 << (var - 52))) != 0; +		return (_state.generatorButtons & (1 << (var - 52))) != 0;  	case 62: // Generator Power Dial Left LED Digit  		return _generatorVoltage / 10;  	case 63: // Generator Power Dial Right LED Digit  		return _generatorVoltage % 10;  	case 64: // Generator Power To Spaceship Dial Left LED Digit -		if (myst.generatorVoltage > 59 || myst.generatorBreakers) +		if (_state.generatorVoltage > 59 || _state.generatorBreakers)  			return 0;  		else -			return myst.generatorVoltage / 10; +			return _state.generatorVoltage / 10;  	case 65: // Generator Power To Spaceship Dial Right LED Digit -		if (myst.generatorVoltage > 59 || myst.generatorBreakers) +		if (_state.generatorVoltage > 59 || _state.generatorBreakers)  			return 0;  		else -			return myst.generatorVoltage % 10; +			return _state.generatorVoltage % 10;  	case 66: // Generators lights on  		return 0;  	case 67: // Cabin Safe Lock Number #1 - Left -		return myst.cabinSafeCombination / 100; +		return _state.cabinSafeCombination / 100;  	case 68: // Cabin Safe Lock Number #2 -		return (myst.cabinSafeCombination / 10) % 10; +		return (_state.cabinSafeCombination / 10) % 10;  	case 69: // Cabin Safe Lock Number #3 - Right -		return myst.cabinSafeCombination % 10; +		return _state.cabinSafeCombination % 10;  	case 70: // Cabin Safe Matchbox State  		return _cabinMatchState;  	case 71: // Stellar Observatory Lights -		return myst.observatoryLights; +		return _state.observatoryLights;  	case 72: // Channelwood tree position -		return myst.treePosition; +		return _state.treePosition;  	case 73: // Stellar Observatory Date - Month -		return myst.observatoryMonthSetting; +		return _state.observatoryMonthSetting;  	case 74: // Stellar Observatory Date - Day #1 (Left) -		if (myst.observatoryDaySetting / 10 == 0) +		if (_state.observatoryDaySetting / 10 == 0)  			return 10;  		else -			return myst.observatoryDaySetting / 10; +			return _state.observatoryDaySetting / 10;  	case 75: // Stellar Observatory Date - Day #2 (Right) -		return myst.observatoryDaySetting % 10; +		return _state.observatoryDaySetting % 10;  	case 76: // Stellar Observatory Date - Year #1 (Left) -		return (myst.observatoryYearSetting >> 12) & 0x0f; +		return (_state.observatoryYearSetting >> 12) & 0x0f;  	case 77: // Stellar Observatory Date - Year #2 -		return (myst.observatoryYearSetting >> 8) & 0x0f; +		return (_state.observatoryYearSetting >> 8) & 0x0f;  	case 78: // Stellar Observatory Date - Year #3 -		return (myst.observatoryYearSetting >> 4) & 0x0f; +		return (_state.observatoryYearSetting >> 4) & 0x0f;  	case 79: // Stellar Observatory Date - Year #4 (Right) -		return (myst.observatoryYearSetting >> 0) & 0x0f; +		return (_state.observatoryYearSetting >> 0) & 0x0f;  	case 80: // Stellar Observatory Hour #1 - Left ( Number 1 (0) or Blank (10)) -		if (myst.observatoryTimeSetting % (12 * 60) < (10 * 60)) +		if (_state.observatoryTimeSetting % (12 * 60) < (10 * 60))  			return 10;  		else  			return 0;  	case 81: // Stellar Observatory Hour #2 - Right -		return ((myst.observatoryTimeSetting % (12 * 60)) / 60) % 10; +		return ((_state.observatoryTimeSetting % (12 * 60)) / 60) % 10;  	case 82: // Stellar Observatory Minutes #1 - Left -		return (myst.observatoryTimeSetting % 60) / 10; +		return (_state.observatoryTimeSetting % 60) / 10;  	case 83: // Stellar Observatory Minutes #2 - Right -		return (myst.observatoryTimeSetting % 60) % 10; +		return (_state.observatoryTimeSetting % 60) % 10;  	case 88: // Stellar Observatory AM/PM -		if (myst.observatoryTimeSetting < (12 * 60)) +		if (_state.observatoryTimeSetting < (12 * 60))  			return 0; // AM  		else  			return 1; // PM @@ -512,107 +508,104 @@ uint16 MystScriptParser_Myst::getVar(uint16 var) {  	case 92: // Stellar observatory sliders state  		return 1;  	case 93: // Breaker nearest Generator Room Blown -		return myst.generatorBreakers == 1; +		return _state.generatorBreakers == 1;  	case 94: // Breaker nearest Rocket Ship Blown -		return myst.generatorBreakers == 2; +		return _state.generatorBreakers == 2;  	case 95: // Going out of tree destination selection -		if (myst.treePosition == 0) +		if (_state.treePosition == 0)  			return 0; -		else if (myst.treePosition == 4 || myst.treePosition == 5) +		else if (_state.treePosition == 4 || _state.treePosition == 5)  			return 1;  		else  			return 2;  	case 96: // Generator Power Dial Needle Position -		return myst.generatorVoltage / 4; +		return _state.generatorVoltage / 4;  	case 97: // Generator Power To Spaceship Dial Needle Position -		if (myst.generatorVoltage > 59 || myst.generatorBreakers) +		if (_state.generatorVoltage > 59 || _state.generatorBreakers)  			return 0;  		else -			return myst.generatorVoltage / 4; +			return _state.generatorVoltage / 4;  	case 98: // Cabin Boiler Pilot Light Lit -		return myst.cabinPilotLightLit; +		return _state.cabinPilotLightLit;  	case 99: // Cabin Boiler Gas Valve Position -		return myst.cabinValvePosition % 6; +		return _state.cabinValvePosition % 6;  	case 102: // Red page -		if (globals.ending != 4) { -			return !(globals.redPagesInBook & 1) && (globals.heldPage != 7); +		if (_globals.ending != 4) { +			return !(_globals.redPagesInBook & 1) && (_globals.heldPage != 7);  		} else {  			return 0;  		}  	case 103: // Blue page -		if (globals.ending != 4) { -			return !(globals.bluePagesInBook & 1) && (globals.heldPage != 1); +		if (_globals.ending != 4) { +			return !(_globals.bluePagesInBook & 1) && (_globals.heldPage != 1);  		} else {  			return 0;  		}  	case 300: // Rocket Ship Music Puzzle Slider State  		return 1;  	case 302: // Green Book Opened Before Flag -		return myst.greenBookOpenedBefore; +		return _state.greenBookOpenedBefore;  	case 304: // Tower Rotation Map Initialized  		return _towerRotationMapInitialized;  	case 305: // Cabin Boiler Lit -		return myst.cabinPilotLightLit == 1 && myst.cabinValvePosition > 0; +		return _state.cabinPilotLightLit == 1 && _state.cabinValvePosition > 0;  	case 306: // Cabin Boiler Steam Sound Control -		if (myst.cabinPilotLightLit == 1) { -			if (myst.cabinValvePosition <= 0) +		if (_state.cabinPilotLightLit == 1) { +			if (_state.cabinValvePosition <= 0)  				return 26;  			else  				return 27;  		} else { -			return myst.cabinValvePosition; +			return _state.cabinValvePosition;  		}  	case 307: // Cabin Boiler Fully Pressurised -		return myst.cabinPilotLightLit == 1 && myst.cabinValvePosition > 12; +		return _state.cabinPilotLightLit == 1 && _state.cabinValvePosition > 12;  	default:  		return MystScriptParser::getVar(var);  	}  }  void MystScriptParser_Myst::toggleVar(uint16 var) { -	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	switch(var) {  	case 2: // Marker Switch Near Cabin -		myst.cabinMarkerSwitch = (myst.cabinMarkerSwitch + 1) % 2; +		_state.cabinMarkerSwitch = (_state.cabinMarkerSwitch + 1) % 2;  		break;  	case 3: // Marker Switch Near Clock Tower -		myst.clockTowerMarkerSwitch = (myst.clockTowerMarkerSwitch + 1) % 2; +		_state.clockTowerMarkerSwitch = (_state.clockTowerMarkerSwitch + 1) % 2;  		break;  	case 4: // Marker Switch on Dock -		myst.dockMarkerSwitch = (myst.dockMarkerSwitch + 1) % 2; +		_state.dockMarkerSwitch = (_state.dockMarkerSwitch + 1) % 2;  		break;  	case 5: // Marker Switch Near Ship Pool -		myst.poolMarkerSwitch = (myst.poolMarkerSwitch + 1) % 2; +		_state.poolMarkerSwitch = (_state.poolMarkerSwitch + 1) % 2;  		break;  	case 6: // Marker Switch Near Cogs -		myst.gearsMarkerSwitch = (myst.gearsMarkerSwitch + 1) % 2; +		_state.gearsMarkerSwitch = (_state.gearsMarkerSwitch + 1) % 2;  		break;  	case 7: // Marker Switch Near Generator Room -		myst.generatorMarkerSwitch = (myst.generatorMarkerSwitch + 1) % 2; +		_state.generatorMarkerSwitch = (_state.generatorMarkerSwitch + 1) % 2;  		break;  	case 8: // Marker Switch Near Stellar Observatory -		myst.observatoryMarkerSwitch = (myst.observatoryMarkerSwitch + 1) % 2; +		_state.observatoryMarkerSwitch = (_state.observatoryMarkerSwitch + 1) % 2;  		break;  	case 9: // Marker Switch Near Rocket Ship -		myst.rocketshipMarkerSwitch = (myst.rocketshipMarkerSwitch + 1) % 2; +		_state.rocketshipMarkerSwitch = (_state.rocketshipMarkerSwitch + 1) % 2;  		break;  	case 24: // Fireplace Blue Page -		if (globals.ending != 4 && !(globals.bluePagesInBook & 32)) { -			if (globals.heldPage == 6) -				globals.heldPage = 0; +		if (_globals.ending != 4 && !(_globals.bluePagesInBook & 32)) { +			if (_globals.heldPage == 6) +				_globals.heldPage = 0;  			else { -				globals.heldPage = 6; +				_globals.heldPage = 6;  			}  		}  		break;  	case 25: // Fireplace Red page -		if (globals.ending != 4 && !(globals.redPagesInBook & 32)) { -			if (globals.heldPage == 12) -				globals.heldPage = 0; +		if (_globals.ending != 4 && !(_globals.redPagesInBook & 32)) { +			if (_globals.heldPage == 12) +				_globals.heldPage = 0;  			else { -				globals.heldPage = 12; +				_globals.heldPage = 12;  			}  		}  		break; @@ -626,37 +619,37 @@ void MystScriptParser_Myst::toggleVar(uint16 var) {  	case 33: // Courtyard Image Box - Ostrich  		{  			uint16 mask = 0x01 << (var - 26); -			if (myst.courtyardImageBoxes & mask) -				myst.courtyardImageBoxes &= ~mask; +			if (_state.courtyardImageBoxes & mask) +				_state.courtyardImageBoxes &= ~mask;  			else -				myst.courtyardImageBoxes |= mask; +				_state.courtyardImageBoxes |= mask;  		}  	case 41: // Vault white page -		if (globals.ending != 4) { +		if (_globals.ending != 4) {  			if (_dockVaultState == 1) {  				_dockVaultState = 2; -				globals.heldPage = 0; +				_globals.heldPage = 0;  			} else if (_dockVaultState == 2) {  				_dockVaultState = 1; -				globals.heldPage = 13; +				_globals.heldPage = 13;  			}  		}  		break;  	case 102: // Red page -		if (globals.ending != 4 && !(globals.redPagesInBook & 1)) { -			if (globals.heldPage == 7) -				globals.heldPage = 0; +		if (_globals.ending != 4 && !(_globals.redPagesInBook & 1)) { +			if (_globals.heldPage == 7) +				_globals.heldPage = 0;  			else { -				globals.heldPage = 7; +				_globals.heldPage = 7;  			}  		}  		break;  	case 103: // Blue page -		if (globals.ending != 4 && !(globals.bluePagesInBook & 1)) { -			if (globals.heldPage == 1) -				globals.heldPage = 0; +		if (_globals.ending != 4 && !(_globals.bluePagesInBook & 1)) { +			if (_globals.heldPage == 1) +				_globals.heldPage = 0;  			else { -				globals.heldPage = 1; +				_globals.heldPage = 1;  			}  		}  		break; @@ -667,13 +660,12 @@ void MystScriptParser_Myst::toggleVar(uint16 var) {  }  bool MystScriptParser_Myst::setVarValue(uint16 var, uint16 value) { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	bool refresh = false;  	switch (var) {  	case 0: // Myst Library Bookcase Closed -		if (myst.libraryBookcaseDoor != value) { -			myst.libraryBookcaseDoor = value; +		if (_state.libraryBookcaseDoor != value) { +			_state.libraryBookcaseDoor = value;  			_tempVar = 0;  			refresh = true;  		} @@ -691,7 +683,7 @@ bool MystScriptParser_Myst::setVarValue(uint16 var, uint16 value) {  		}  		break;  	case 71: // Stellar Observatory Lights -		myst.observatoryLights = value; +		_state.observatoryLights = value;  		break;  	case 89:  	case 90: @@ -700,7 +692,7 @@ bool MystScriptParser_Myst::setVarValue(uint16 var, uint16 value) {  	case 300: // Set slider value  		break; // Do nothing  	case 302: // Green Book Opened Before Flag -		myst.greenBookOpenedBefore = value; +		_state.greenBookOpenedBefore = value;  		break;  	case 303: // Library Bookcase status changed  		_libraryBookcaseChanged = value; @@ -723,16 +715,14 @@ bool MystScriptParser_Myst::setVarValue(uint16 var, uint16 value) {  }  uint16 MystScriptParser_Myst::bookCountPages(uint16 var) { -	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -  	uint16 pages = 0;  	uint16 cnt = 0;  	// Select book according to var  	if (var == 100) -		pages = globals.redPagesInBook; +		pages = _globals.redPagesInBook;  	else if (var == 101) -		pages = globals.bluePagesInBook; +		pages = _globals.bluePagesInBook;  	// Special page present  	if (pages & 64) @@ -836,28 +826,25 @@ void MystScriptParser_Myst::o_fireplaceRotation(uint16 op, uint16 var, uint16 ar  void MystScriptParser_Myst::o_courtyardBoxesCheckSolution(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	uint16 soundId = argv[0]; -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	debugC(kDebugScript, "Opcode %d: Ship Puzzle Logic", op);  	debugC(kDebugScript, "\tsoundId: %d", soundId);  	// Change ship state if the boxes are correctly enabled -	if (myst.courtyardImageBoxes == 50 && !myst.shipFloating) { +	if (_state.courtyardImageBoxes == 50 && !_state.shipFloating) {  		_vm->_cursor->hideCursor(); -		myst.shipFloating = 1; +		_state.shipFloating = 1;  		_vm->_sound->playSoundBlocking(soundId);  		_vm->_cursor->showCursor(); -	} else if (myst.courtyardImageBoxes != 50 && myst.shipFloating) { +	} else if (_state.courtyardImageBoxes != 50 && _state.shipFloating) {  		_vm->_cursor->hideCursor(); -		myst.shipFloating = 0; +		_state.shipFloating = 0;  		_vm->_sound->playSoundBlocking(soundId);  		_vm->_cursor->showCursor();  	}  }  void MystScriptParser_Myst::o_towerRotationStart(uint16 op, uint16 var, uint16 argc, uint16 *argv) { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	_towerRotationBlinkLabel = false;  	_towerRotationMapClicked = true;  	_towerRotationSpeed = 0; @@ -865,7 +852,7 @@ void MystScriptParser_Myst::o_towerRotationStart(uint16 op, uint16 var, uint16 a  	_vm->_cursor->setCursor(700);  	const Common::Point center = Common::Point(383, 124); -	Common::Point end = towerRotationMapComputeCoords(center, myst.towerRotationAngle); +	Common::Point end = towerRotationMapComputeCoords(center, _state.towerRotationAngle);  	towerRotationMapComputeAngle();  	towerRotationMapDrawLine(center, end); @@ -873,27 +860,25 @@ void MystScriptParser_Myst::o_towerRotationStart(uint16 op, uint16 var, uint16 a  }  void MystScriptParser_Myst::o_towerRotationEnd(uint16 op, uint16 var, uint16 argc, uint16 *argv) { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	_towerRotationMapClicked = false;  	// Set angle value to expected value -	if (myst.towerRotationAngle >= 265 -			&& myst.towerRotationAngle <= 277 -			&& myst.rocketshipMarkerSwitch) { -		myst.towerRotationAngle = 271; -	} else if (myst.towerRotationAngle >= 77 -			&& myst.towerRotationAngle <= 89 -			&& myst.gearsMarkerSwitch) { -		myst.towerRotationAngle = 83; -	} else if (myst.towerRotationAngle >= 123 -			&& myst.towerRotationAngle <= 135 -			&& myst.dockMarkerSwitch) { -		myst.towerRotationAngle = 129; -	} else if (myst.towerRotationAngle >= 146 -			&& myst.towerRotationAngle <= 158 -			&& myst.cabinMarkerSwitch) { -		myst.towerRotationAngle = 152; +	if (_state.towerRotationAngle >= 265 +			&& _state.towerRotationAngle <= 277 +			&& _state.rocketshipMarkerSwitch) { +		_state.towerRotationAngle = 271; +	} else if (_state.towerRotationAngle >= 77 +			&& _state.towerRotationAngle <= 89 +			&& _state.gearsMarkerSwitch) { +		_state.towerRotationAngle = 83; +	} else if (_state.towerRotationAngle >= 123 +			&& _state.towerRotationAngle <= 135 +			&& _state.dockMarkerSwitch) { +		_state.towerRotationAngle = 129; +	} else if (_state.towerRotationAngle >= 146 +			&& _state.towerRotationAngle <= 158 +			&& _state.cabinMarkerSwitch) { +		_state.towerRotationAngle = 152;  	}  	_vm->_sound->replaceSound(6378); @@ -908,11 +893,9 @@ void MystScriptParser_Myst::o_imagerChangeSelection(uint16 op, uint16 var, uint1  	if (_imagerValidationStep != 10) {  		_imagerValidationStep = 0; -		MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  		int16 signedValue = argv[0]; -		uint16 d1 = (myst.imagerSelection / 10) % 10; -		uint16 d2 = myst.imagerSelection % 10; +		uint16 d1 = (_state.imagerSelection / 10) % 10; +		uint16 d2 = _state.imagerSelection % 10;  		if (var == 35 && signedValue > 0 && d1 < 9)  			d1++; @@ -923,8 +906,8 @@ void MystScriptParser_Myst::o_imagerChangeSelection(uint16 op, uint16 var, uint1  		else if (var == 36 && signedValue < 0 && d2 > 0)  			d2--; -		myst.imagerSelection = 10 * d1 + d2; -		myst.imagerActive = 0; +		_state.imagerSelection = 10 * d1 + d2; +		_state.imagerActive = 0;  		_vm->redrawArea(var);  	} @@ -932,8 +915,6 @@ void MystScriptParser_Myst::o_imagerChangeSelection(uint16 op, uint16 var, uint1  void MystScriptParser_Myst::o_dockVaultOpen(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	// Used on Myst 4143 (Dock near Marker Switch) -	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	uint16 soundId = argv[0];  	uint16 delay = argv[1];  	uint16 directionalUpdateDataSize = argv[2]; @@ -942,15 +923,15 @@ void MystScriptParser_Myst::o_dockVaultOpen(uint16 op, uint16 var, uint16 argc,  	debugC(kDebugScript, "\tsoundId: %d", soundId);  	debugC(kDebugScript, "\tdirectionalUpdateDataSize: %d", directionalUpdateDataSize); -	if ((myst.cabinMarkerSwitch == 1) && -		(myst.clockTowerMarkerSwitch == 1) && -		(myst.dockMarkerSwitch == 0) && -		(myst.gearsMarkerSwitch == 1) && -		(myst.generatorMarkerSwitch == 1) && -		(myst.observatoryMarkerSwitch == 1) && -		(myst.poolMarkerSwitch == 1) && -		(myst.rocketshipMarkerSwitch == 1)) { -		if (globals.heldPage != 13 && globals.ending != 4) +	if ((_state.cabinMarkerSwitch == 1) && +		(_state.clockTowerMarkerSwitch == 1) && +		(_state.dockMarkerSwitch == 0) && +		(_state.gearsMarkerSwitch == 1) && +		(_state.generatorMarkerSwitch == 1) && +		(_state.observatoryMarkerSwitch == 1) && +		(_state.poolMarkerSwitch == 1) && +		(_state.rocketshipMarkerSwitch == 1)) { +		if (_globals.heldPage != 13 && _globals.ending != 4)  			_dockVaultState = 2;  		else  			_dockVaultState = 1; @@ -963,7 +944,6 @@ void MystScriptParser_Myst::o_dockVaultOpen(uint16 op, uint16 var, uint16 argc,  void MystScriptParser_Myst::o_dockVaultClose(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	// Used on Myst 4143 (Dock near Marker Switch) -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	uint16 soundId = argv[0];  	uint16 delay = argv[1];  	uint16 directionalUpdateDataSize = argv[2]; @@ -972,14 +952,14 @@ void MystScriptParser_Myst::o_dockVaultClose(uint16 op, uint16 var, uint16 argc,  	debugC(kDebugScript, "\tsoundId: %d", soundId);  	debugC(kDebugScript, "\tdirectionalUpdateDataSize: %d", directionalUpdateDataSize); -	if ((myst.cabinMarkerSwitch == 1) && -		(myst.clockTowerMarkerSwitch == 1) && -		(myst.dockMarkerSwitch == 1) && -		(myst.gearsMarkerSwitch == 1) && -		(myst.generatorMarkerSwitch == 1) && -		(myst.observatoryMarkerSwitch == 1) && -		(myst.poolMarkerSwitch == 1) && -		(myst.rocketshipMarkerSwitch == 1)) { +	if ((_state.cabinMarkerSwitch == 1) && +		(_state.clockTowerMarkerSwitch == 1) && +		(_state.dockMarkerSwitch == 1) && +		(_state.gearsMarkerSwitch == 1) && +		(_state.generatorMarkerSwitch == 1) && +		(_state.observatoryMarkerSwitch == 1) && +		(_state.poolMarkerSwitch == 1) && +		(_state.rocketshipMarkerSwitch == 1)) {  		if (_dockVaultState == 1 || _dockVaultState == 2)  			_dockVaultState = 0; @@ -990,8 +970,6 @@ void MystScriptParser_Myst::o_dockVaultClose(uint16 op, uint16 var, uint16 argc,  }  void MystScriptParser_Myst::o_bookGivePage(uint16 op, uint16 var, uint16 argc, uint16 *argv) { -	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -  	uint16 cardIdLose = argv[0];  	uint16 cardIdBookCover = argv[1];  	uint16 soundIdAddPage = argv[2]; @@ -1003,7 +981,7 @@ void MystScriptParser_Myst::o_bookGivePage(uint16 op, uint16 var, uint16 argc, u  	debugC(kDebugScript, "SoundId (Add Page): %d", soundIdAddPage);  	// No page or white page -	if (!globals.heldPage || globals.heldPage == 13) { +	if (!_globals.heldPage || _globals.heldPage == 13) {  		_vm->changeToCard(cardIdBookCover, true);  		return;  	} @@ -1011,7 +989,7 @@ void MystScriptParser_Myst::o_bookGivePage(uint16 op, uint16 var, uint16 argc, u  	uint16 bookVar = 101;  	uint16 mask = 0; -	switch (globals.heldPage) { +	switch (_globals.heldPage) {  	case 7:  		bookVar = 100;  	case 1: @@ -1056,21 +1034,21 @@ void MystScriptParser_Myst::o_bookGivePage(uint16 op, uint16 var, uint16 argc, u  	// Add page to book  	if (var == 100) -		globals.redPagesInBook |= mask; +		_globals.redPagesInBook |= mask;  	else -		globals.bluePagesInBook |= mask; +		_globals.bluePagesInBook |= mask;  	// Remove page from hand -	globals.heldPage = 0; +	_globals.heldPage = 0;  	_vm->_cursor->showCursor();  	if (mask == 32) {  		// You lose!  		if (var == 100) -			globals.currentAge = 9; +			_globals.currentAge = 9;  		else -			globals.currentAge = 10; +			_globals.currentAge = 10;  		_vm->changeToCard(cardIdLose, true);  	} else { @@ -1080,32 +1058,31 @@ void MystScriptParser_Myst::o_bookGivePage(uint16 op, uint16 var, uint16 argc, u  void MystScriptParser_Myst::o_clockWheelsExecute(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	// Used on Card 4006 (Clock Tower Time Controls) -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	uint16 soundId = argv[0];  	debugC(kDebugScript, "Opcode %d: Clock Tower Bridge Puzzle Execute Button", op);  	// Correct time is 2:40 -	bool correctTime = myst.clockTowerHourPosition == 2 -						&& myst.clockTowerMinutePosition == 40; +	bool correctTime = _state.clockTowerHourPosition == 2 +						&& _state.clockTowerMinutePosition == 40; -	if (!myst.clockTowerBridgeOpen && correctTime) { +	if (!_state.clockTowerBridgeOpen && correctTime) {  		_vm->_sound->replaceSound(soundId);  		_vm->_system->delayMillis(500);  		// TODO: Play only 1st half of movie i.e. gears rise up, from 0 to 650  		_vm->_video->playMovie(_vm->wrapMovieFilename("gears", kMystStack), 305, 33); -		myst.clockTowerBridgeOpen = 1; +		_state.clockTowerBridgeOpen = 1;  		_vm->redrawArea(12); -	} else if (myst.clockTowerBridgeOpen && !correctTime) { +	} else if (_state.clockTowerBridgeOpen && !correctTime) {  		_vm->_sound->replaceSound(soundId);  		_vm->_system->delayMillis(500);  		// TODO: Play only 2nd half of movie i.e. gears sink down, from 700 to 1300  		_vm->_video->playMovie(_vm->wrapMovieFilename("gears", kMystStack), 305, 33); -		myst.clockTowerBridgeOpen = 0; +		_state.clockTowerBridgeOpen = 0;  		_vm->redrawArea(12);  	}  } @@ -1113,7 +1090,6 @@ void MystScriptParser_Myst::o_clockWheelsExecute(uint16 op, uint16 var, uint16 a  void MystScriptParser_Myst::o_imagerPlayButton(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Imager play button", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	uint16 video = getVar(51);  	// Press button @@ -1133,7 +1109,7 @@ void MystScriptParser_Myst::o_imagerPlayButton(uint16 op, uint16 var, uint16 arg  	// Play selected video -	if (!myst.imagerActive && video != 3) +	if (!_state.imagerActive && video != 3)  		_vm->_sound->replaceSound(argv[0]);  	switch (video) { @@ -1143,34 +1119,34 @@ void MystScriptParser_Myst::o_imagerPlayButton(uint16 op, uint16 var, uint16 arg  		_imagerMovie->playMovie();  		break;  	case 1: // Mountain -		if (myst.imagerActive) { +		if (_state.imagerActive) {  			// TODO: Play from 11180 to 16800  			Common::String file = _vm->wrapMovieFilename("vltmntn", kMystStack);  			_vm->_video->playBackgroundMovie(file, 159, 96, false); -			myst.imagerActive = 0; +			_state.imagerActive = 0;  		} else {  			// TODO: Play from 0 to 11180  			Common::String file = _vm->wrapMovieFilename("vltmntn", kMystStack);  			_vm->_video->playBackgroundMovie(file, 159, 96, false); -			myst.imagerActive = 1; +			_state.imagerActive = 1;  		}  		break;  	case 2: // Water -		if (myst.imagerActive) { +		if (_state.imagerActive) {  			_vm->_sound->replaceSound(argv[1]);  			// TODO: Play from 4204 to 6040  			_imagerMovie->playMovie(); -			myst.imagerActive = 0; +			_state.imagerActive = 0;  		} else {  			// TODO: Play from 0 to 1814  			// Then play from 1814 to 4204, looping  			_imagerMovie->playMovie(); -			myst.imagerActive = 1; +			_state.imagerActive = 1;  		}  		break;  	} @@ -1181,8 +1157,6 @@ void MystScriptParser_Myst::o_imagerPlayButton(uint16 op, uint16 var, uint16 arg  void MystScriptParser_Myst::o_imagerEraseButton(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Imager erase button", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	_imagerRedButton = static_cast<MystResourceType8 *>(_invokingResource->_parent);  	for (uint i = 0; i < 4; i++)  		_imagerSound[i] = argv[i]; @@ -1202,22 +1176,22 @@ void MystScriptParser_Myst::o_imagerEraseButton(uint16 op, uint16 var, uint16 ar  		_vm->_sound->playSoundBlocking(_imagerSound[3]);  		// Erase selected video from imager -		switch (myst.imagerSelection) { +		switch (_state.imagerSelection) {  		case 8: -			myst.imagerAtrusErased = 1; +			_state.imagerAtrusErased = 1;  			break;  		case 40: -			myst.imagerMountainErased = 1; +			_state.imagerMountainErased = 1;  			break;  		case 47: -			myst.imagerMarkerErased = 1; +			_state.imagerMarkerErased = 1;  			break;  		case 67: -			myst.imagerWaterErased = 1; +			_state.imagerWaterErased = 1;  			break;  		} -		myst.imagerActive = 0; +		_state.imagerActive = 0;  		_imagerValidationStep = 0;  		return;  	} else if (_imagerValidationStep == 11) { @@ -1283,23 +1257,22 @@ void MystScriptParser_Myst::o_towerElevatorAnimation(uint16 op, uint16 var, uint  void MystScriptParser_Myst::o_generatorButtonPressed(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Generator button pressed", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	MystResource *button = _invokingResource->_parent;  	generatorRedrawRocket(); -	_generatorVoltage = myst.generatorVoltage; +	_generatorVoltage = _state.generatorVoltage;  	uint16 mask = 0;  	uint16 value = 0;  	generatorButtonValue(button, mask, value);  	// Button pressed -	if (myst.generatorButtons & mask) { -		myst.generatorButtons &= ~mask; -		myst.generatorVoltage -= value; +	if (_state.generatorButtons & mask) { +		_state.generatorButtons &= ~mask; +		_state.generatorVoltage -= value; -		if (myst.generatorVoltage) +		if (_state.generatorVoltage)  			_vm->_sound->replaceSound(8297);  		else  			_vm->_sound->replaceSound(9297); @@ -1311,16 +1284,16 @@ void MystScriptParser_Myst::o_generatorButtonPressed(uint16 op, uint16 var, uint  			_vm->_sound->replaceBackground(4297);  		} -		myst.generatorButtons |= mask; -		myst.generatorVoltage += value; +		_state.generatorButtons |= mask; +		_state.generatorVoltage += value;  	}  	// Redraw button  	_vm->redrawArea(button->getType8Var());  	// Blow breaker -	if (myst.generatorVoltage > 59) -		myst.generatorBreakers = _vm->_rnd->getRandomNumberRng(1, 2); +	if (_state.generatorVoltage > 59) +		_state.generatorBreakers = _vm->_rnd->getRandomNumberRng(1, 2);  }  void MystScriptParser_Myst::generatorRedrawRocket() { @@ -1377,11 +1350,9 @@ void MystScriptParser_Myst::generatorButtonValue(MystResource *button, uint16 &m  void MystScriptParser_Myst::o_cabinSafeChangeDigit(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Cabin safe change digit", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; - -	uint16 d1 = myst.cabinSafeCombination / 100; -	uint16 d2 = (myst.cabinSafeCombination / 10) % 10; -	uint16 d3 = myst.cabinSafeCombination % 10; +	uint16 d1 = _state.cabinSafeCombination / 100; +	uint16 d2 = (_state.cabinSafeCombination / 10) % 10; +	uint16 d3 = _state.cabinSafeCombination % 10;  	if (var == 67)  		d1 = (d1 + 1) % 10; @@ -1390,7 +1361,7 @@ void MystScriptParser_Myst::o_cabinSafeChangeDigit(uint16 op, uint16 var, uint16  	else  		d3 = (d3 + 1) % 10; -	myst.cabinSafeCombination = 100 * d1 + 10 * d2 + d3; +	_state.cabinSafeCombination = 100 * d1 + 10 * d2 + d3;  	_vm->redrawArea(var);  } @@ -1409,7 +1380,6 @@ void MystScriptParser_Myst::o_cabinSafeHandleMove(uint16 op, uint16 var, uint16  	debugC(kDebugScript, "Opcode %d: Cabin safe handle move", op);  	// Used on Card 4100 -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	MystResourceType12 *handle = static_cast<MystResourceType12 *>(_invokingResource);  	// Make the handle follow the mouse @@ -1428,7 +1398,7 @@ void MystScriptParser_Myst::o_cabinSafeHandleMove(uint16 op, uint16 var, uint16  				_vm->_sound->replaceSound(soundId);  		}  		// Combination is right -		if (myst.cabinSafeCombination == 724) { +		if (_state.cabinSafeCombination == 724) {  			uint16 soundId = handle->getList2(1);  			if (soundId)  				_vm->_sound->replaceSound(soundId); @@ -1522,7 +1492,6 @@ void MystScriptParser_Myst::o_circuitBreakerStartMove(uint16 op, uint16 var, uin  void MystScriptParser_Myst::o_circuitBreakerMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Circuit breaker move", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	MystResourceType12 *breaker = static_cast<MystResourceType12 *>(_invokingResource);  	int16 maxStep = breaker->getStepsV() - 1; @@ -1541,7 +1510,7 @@ void MystScriptParser_Myst::o_circuitBreakerMove(uint16 op, uint16 var, uint16 a  			if (breaker->getType8Var() == 93) {  				// Voltage is still too high or not broken -				if (myst.generatorVoltage > 59 || myst.generatorBreakers != 1) { +				if (_state.generatorVoltage > 59 || _state.generatorBreakers != 1) {  					uint16 soundId = breaker->getList2(1);  					if (soundId)  						_vm->_sound->replaceSound(soundId); @@ -1551,11 +1520,11 @@ void MystScriptParser_Myst::o_circuitBreakerMove(uint16 op, uint16 var, uint16 a  						_vm->_sound->replaceSound(soundId);  					// Reset breaker state -					myst.generatorBreakers = 0; +					_state.generatorBreakers = 0;  				}  			} else {  				// Voltage is still too high or not broken -				if (myst.generatorVoltage > 59 || myst.generatorBreakers != 2) { +				if (_state.generatorVoltage > 59 || _state.generatorBreakers != 2) {  					uint16 soundId = breaker->getList2(1);  					if (soundId)  						_vm->_sound->replaceSound(soundId); @@ -1565,7 +1534,7 @@ void MystScriptParser_Myst::o_circuitBreakerMove(uint16 op, uint16 var, uint16 a  						_vm->_sound->replaceSound(soundId);  					// Reset breaker state -					myst.generatorBreakers = 0; +					_state.generatorBreakers = 0;  				}  			}  		} @@ -1582,10 +1551,9 @@ void MystScriptParser_Myst::o_circuitBreakerEndMove(uint16 op, uint16 var, uint1  void MystScriptParser_Myst::o_boilerIncreasePressureStart(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Boiler increase pressure start", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	_treeStopped = true; -	if (myst.cabinValvePosition < 25) +	if (_state.cabinValvePosition < 25)  		_vm->_sound->stopBackground();  	_boilerPressureIncreasing = true; @@ -1593,21 +1561,20 @@ void MystScriptParser_Myst::o_boilerIncreasePressureStart(uint16 op, uint16 var,  void MystScriptParser_Myst::o_boilerLightPilot(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Boiler light pilot", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	// Match is lit  	if (_cabinMatchState == 1) { -		myst.cabinPilotLightLit = 1; +		_state.cabinPilotLightLit = 1;  		_vm->redrawArea(98);  		// Put out match  		_matchGoOutTime = _vm->_system->getMillis(); -		if (myst.cabinValvePosition > 0) +		if (_state.cabinValvePosition > 0)  			_vm->_sound->replaceBackground(8098, 49152); -		if (myst.cabinValvePosition > 12) -			myst.treeLastMoveTime = _vm->_system->getMillis(); +		if (_state.cabinValvePosition > 12) +			_state.treeLastMoveTime = _vm->_system->getMillis();  		// TODO: Complete. Play movies  	} @@ -1615,36 +1582,33 @@ void MystScriptParser_Myst::o_boilerLightPilot(uint16 op, uint16 var, uint16 arg  void MystScriptParser_Myst::o_boilerIncreasePressureStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Boiler increase pressure stop", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	_treeStopped = false;  	_boilerPressureIncreasing = false; -	myst.treeLastMoveTime = _vm->_system->getMillis(); +	_state.treeLastMoveTime = _vm->_system->getMillis(); -	if (myst.cabinPilotLightLit == 1) { -		if (myst.cabinValvePosition > 0) +	if (_state.cabinPilotLightLit == 1) { +		if (_state.cabinValvePosition > 0)  			_vm->_sound->replaceBackground(8098, 49152);  		// TODO: Play movies  	} else { -		if (myst.cabinValvePosition > 0) -			_vm->_sound->replaceBackground(4098, myst.cabinValvePosition << 10); +		if (_state.cabinValvePosition > 0) +			_vm->_sound->replaceBackground(4098, _state.cabinValvePosition << 10);  	}  }  void MystScriptParser_Myst::boilerPressureIncrease_run() { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	// Allow increasing pressure if sound has stopped -	if (!_vm->_sound->isPlaying(5098) && myst.cabinValvePosition < 25) { -		myst.cabinValvePosition++; -		if (myst.cabinValvePosition == 1) { +	if (!_vm->_sound->isPlaying(5098) && _state.cabinValvePosition < 25) { +		_state.cabinValvePosition++; +		if (_state.cabinValvePosition == 1) {  			// TODO: Play fire movie  			// Draw fire  			_vm->redrawArea(305); -		} else if (myst.cabinValvePosition == 25) { -			if (myst.cabinPilotLightLit == 1) +		} else if (_state.cabinValvePosition == 25) { +			if (_state.cabinPilotLightLit == 1)  				_vm->_sound->replaceBackground(8098, 49152);  			else  				_vm->_sound->replaceBackground(4098, 25600); @@ -1659,12 +1623,10 @@ void MystScriptParser_Myst::boilerPressureIncrease_run() {  }  void MystScriptParser_Myst::boilerPressureDecrease_run() { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	// Allow decreasing pressure if sound has stopped -	if (!_vm->_sound->isPlaying(5098) && myst.cabinValvePosition > 0) { -		myst.cabinValvePosition--; -		if (myst.cabinValvePosition == 0) { +	if (!_vm->_sound->isPlaying(5098) && _state.cabinValvePosition > 0) { +		_state.cabinValvePosition--; +		if (_state.cabinValvePosition == 0) {  			// TODO: Play fire movie  			// Draw fire @@ -1690,20 +1652,19 @@ void MystScriptParser_Myst::o_boilerDecreasePressureStart(uint16 op, uint16 var,  void MystScriptParser_Myst::o_boilerDecreasePressureStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Boiler decrease pressure stop", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	_treeStopped = false;  	_boilerPressureDecreasing = false; -	myst.treeLastMoveTime = _vm->_system->getMillis(); +	_state.treeLastMoveTime = _vm->_system->getMillis(); -	if (myst.cabinPilotLightLit == 1) { -		if (myst.cabinValvePosition > 0) +	if (_state.cabinPilotLightLit == 1) { +		if (_state.cabinValvePosition > 0)  			_vm->_sound->replaceBackground(8098, 49152);  		// TODO: Play movies  	} else { -		if (myst.cabinValvePosition > 0) -			_vm->_sound->replaceBackground(4098, myst.cabinValvePosition << 10); +		if (_state.cabinValvePosition > 0) +			_vm->_sound->replaceBackground(4098, _state.cabinValvePosition << 10);  	}  } @@ -1717,19 +1678,15 @@ void MystScriptParser_Myst::o_basementIncreasePressureStart(uint16 op, uint16 va  void MystScriptParser_Myst::o_basementIncreasePressureStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Basement increase pressure stop", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	_treeStopped = false;  	_basementPressureIncreasing = false; -	myst.treeLastMoveTime = _vm->_system->getMillis(); +	_state.treeLastMoveTime = _vm->_system->getMillis();  }  void MystScriptParser_Myst::basementPressureIncrease_run() { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	// Allow increasing pressure if sound has stopped -	if (!_vm->_sound->isPlaying(4642) && myst.cabinValvePosition < 25) { -		myst.cabinValvePosition++; +	if (!_vm->_sound->isPlaying(4642) && _state.cabinValvePosition < 25) { +		_state.cabinValvePosition++;  		// Pressure increasing sound  		_vm->_sound->replaceSound(4642); @@ -1740,11 +1697,9 @@ void MystScriptParser_Myst::basementPressureIncrease_run() {  }  void MystScriptParser_Myst::basementPressureDecrease_run() { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	// Allow decreasing pressure if sound has stopped -	if (!_vm->_sound->isPlaying(4642) && myst.cabinValvePosition > 0) { -		myst.cabinValvePosition--; +	if (!_vm->_sound->isPlaying(4642) && _state.cabinValvePosition > 0) { +		_state.cabinValvePosition--;  		// Pressure decreasing sound  		_vm->_sound->replaceSound(4642); @@ -1764,19 +1719,15 @@ void MystScriptParser_Myst::o_basementDecreasePressureStart(uint16 op, uint16 va  void MystScriptParser_Myst::o_basementDecreasePressureStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Basement decrease pressure stop", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	_treeStopped = false;  	_basementPressureDecreasing = false; -	myst.treeLastMoveTime = _vm->_system->getMillis(); +	_state.treeLastMoveTime = _vm->_system->getMillis();  }  void MystScriptParser_Myst::tree_run() { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	uint16 pressure; -	if (myst.cabinPilotLightLit) -		pressure = myst.cabinValvePosition; +	if (_state.cabinPilotLightLit) +		pressure = _state.cabinValvePosition;  	else  		pressure = 0; @@ -1787,24 +1738,24 @@ void MystScriptParser_Myst::tree_run() {  			goingDown = false;  		// Tree is within bounds -		if ((myst.treePosition < 12 && !goingDown) -				|| (myst.treePosition > _treeMinPosition && goingDown)) { +		if ((_state.treePosition < 12 && !goingDown) +				|| (_state.treePosition > _treeMinPosition && goingDown)) {  			uint16 delay = treeNextMoveDelay(pressure);  			uint32 time = _vm->_system->getMillis(); -			if (delay < time - myst.treeLastMoveTime) { +			if (delay < time - _state.treeLastMoveTime) {  				// Tree movement  				if (goingDown) { -					myst.treePosition--; +					_state.treePosition--;  					_vm->_sound->replaceSound(2);  				} else { -					myst.treePosition++; +					_state.treePosition++;  					_vm->_sound->replaceSound(1);  				}  				// Stop background music if going up from book room  				if (_vm->getCurCard() == 4630) { -					if (myst.treePosition > 0) +					if (_state.treePosition > 0)  						_vm->_sound->stopBackground();  					else  						_vm->_sound->replaceBackground(4630, 24576); @@ -1816,19 +1767,17 @@ void MystScriptParser_Myst::tree_run() {  				// Check if alcove is accessible  				treeSetAlcoveAccessible(); -				myst.treeLastMoveTime = time; +				_state.treeLastMoveTime = time;  			}  		}  	}  }  void MystScriptParser_Myst::treeSetAlcoveAccessible() { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	if (_treeAlcove) {  		// Make alcove accessible if the tree is in the correct position -		_treeAlcove->setEnabled(myst.treePosition >= _treeMinAccessiblePosition -					&& myst.treePosition <= _treeMaxAccessiblePosition); +		_treeAlcove->setEnabled(_state.treePosition >= _treeMinAccessiblePosition +					&& _state.treePosition <= _treeMaxAccessiblePosition);  	}  } @@ -1857,36 +1806,32 @@ void MystScriptParser_Myst::o_rocketSoundSliderMove(uint16 op, uint16 var, uint1  void MystScriptParser_Myst::o_rocketSoundSliderEndMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Rocket slider end move", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	_vm->checkCursorHints(); -	if (myst.generatorVoltage == 59 && !myst.generatorBreakers) { +	if (_state.generatorVoltage == 59 && !_state.generatorBreakers) {  		if (_rocketSliderSound)  			_vm->_sound->stopSound();  	}  	if (_invokingResource == _rocketSlider1) { -		myst.rocketSliderPosition[0] = _rocketSlider1->_pos.y; +		_state.rocketSliderPosition[0] = _rocketSlider1->_pos.y;  	} else if (_invokingResource == _rocketSlider2) { -		myst.rocketSliderPosition[1] = _rocketSlider2->_pos.y; +		_state.rocketSliderPosition[1] = _rocketSlider2->_pos.y;  	} else if (_invokingResource == _rocketSlider3) { -		myst.rocketSliderPosition[2] = _rocketSlider3->_pos.y; +		_state.rocketSliderPosition[2] = _rocketSlider3->_pos.y;  	} else if (_invokingResource == _rocketSlider4) { -		myst.rocketSliderPosition[3] = _rocketSlider4->_pos.y; +		_state.rocketSliderPosition[3] = _rocketSlider4->_pos.y;  	} else if (_invokingResource == _rocketSlider5) { -		myst.rocketSliderPosition[4] = _rocketSlider5->_pos.y; +		_state.rocketSliderPosition[4] = _rocketSlider5->_pos.y;  	}  	_vm->_sound->resumeBackground();  }  void MystScriptParser_Myst::rocketSliderMove() { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	MystResourceType10 *slider = static_cast<MystResourceType10 *>(_invokingResource); -	if (myst.generatorVoltage == 59 && !myst.generatorBreakers) { +	if (_state.generatorVoltage == 59 && !_state.generatorBreakers) {  		uint16 soundId = rocketSliderGetSound(slider->_pos.y);  		if (soundId != _rocketSliderSound) {  			_rocketSliderSound = soundId; @@ -1964,7 +1909,6 @@ void MystScriptParser_Myst::rocketCheckSolution() {  void MystScriptParser_Myst::o_rocketPianoStart(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Rocket piano start move", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	MystResourceType11 *key = static_cast<MystResourceType11 *>(_invokingResource);  	// What the hell ?? @@ -1979,7 +1923,7 @@ void MystScriptParser_Myst::o_rocketPianoStart(uint16 op, uint16 var, uint16 arg  	_vm->_system->updateScreen();  	// Play note -	if (myst.generatorVoltage == 59 && !myst.generatorBreakers) { +	if (_state.generatorVoltage == 59 && !_state.generatorBreakers) {  		uint16 soundId = key->getList1(0);  		_vm->_sound->replaceSound(soundId, Audio::Mixer::kMaxChannelVolume, true);  	} @@ -1990,7 +1934,6 @@ void MystScriptParser_Myst::o_rocketPianoMove(uint16 op, uint16 var, uint16 argc  	const Common::Point &mouse = _vm->_system->getEventManager()->getMousePos();  	Common::Rect piano = Common::Rect(85, 123, 460, 270); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	// Unpress previous key  	MystResourceType11 *key = static_cast<MystResourceType11 *>(_invokingResource); @@ -2018,7 +1961,7 @@ void MystScriptParser_Myst::o_rocketPianoMove(uint16 op, uint16 var, uint16 argc  			_vm->_gfx->copyImageSectionToScreen(key->_subImages[1].wdib, src, dest);  			// Play note -			if (myst.generatorVoltage == 59 && !myst.generatorBreakers) { +			if (_state.generatorVoltage == 59 && !_state.generatorBreakers) {  				uint16 soundId = key->getList1(0);  				_vm->_sound->replaceSound(soundId, Audio::Mixer::kMaxChannelVolume, true);  			} @@ -2073,7 +2016,6 @@ void MystScriptParser_Myst::o_rocketOpenBook(uint16 op, uint16 var, uint16 argc,  void MystScriptParser_Myst::o_rocketLeverMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Rocket lever move", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	MystResourceType12 *lever = static_cast<MystResourceType12 *>(_invokingResource);  	// Make the lever follow the mouse @@ -2091,7 +2033,7 @@ void MystScriptParser_Myst::o_rocketLeverMove(uint16 op, uint16 var, uint16 argc  			_vm->_sound->replaceSound(soundId);  		// If rocket correctly powered -		if (myst.generatorVoltage == 59 && !myst.generatorBreakers) { +		if (_state.generatorVoltage == 59 && !_state.generatorBreakers) {  			rocketCheckSolution();  		}  	} @@ -2124,32 +2066,28 @@ void MystScriptParser_Myst::o_cabinLeave(uint16 op, uint16 var, uint16 argc, uin  void MystScriptParser_Myst::o_treePressureReleaseStart(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Tree pressure release start", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	Common::Rect src = Common::Rect(0, 0, 49, 86);  	Common::Rect dest = Common::Rect(78, 46, 127, 132);  	_vm->_gfx->copyImageSectionToScreen(4631, src, dest);  	_vm->_system->updateScreen(); -	_tempVar = myst.cabinValvePosition; +	_tempVar = _state.cabinValvePosition; -	if (myst.treePosition >= 4) { -		myst.cabinValvePosition = 0; +	if (_state.treePosition >= 4) { +		_state.cabinValvePosition = 0;  		_treeMinPosition = 4; -		myst.treeLastMoveTime = 0; +		_state.treeLastMoveTime = 0;  	}  }  void MystScriptParser_Myst::o_treePressureReleaseStop(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Tree pressure release stop", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	Common::Rect rect = Common::Rect(78, 46, 127, 132);  	_vm->_gfx->copyBackBufferToScreen(rect);  	_vm->_system->updateScreen(); -	myst.cabinValvePosition = _tempVar; +	_state.cabinValvePosition = _tempVar;  	_treeMinPosition = 0;  } @@ -2307,14 +2245,12 @@ void MystScriptParser_Myst::clockWheelStartTurn(uint16 wheel) {  }  void MystScriptParser_Myst::clockWheelTurn(uint16 var) { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	if (var == 38) {  		// Hours -		myst.clockTowerHourPosition = (myst.clockTowerHourPosition + 1) % 12; +		_state.clockTowerHourPosition = (_state.clockTowerHourPosition + 1) % 12;  	} else {  		// Minutes -		myst.clockTowerMinutePosition = (myst.clockTowerMinutePosition + 5) % 60; +		_state.clockTowerMinutePosition = (_state.clockTowerMinutePosition + 5) % 60;  	}  } @@ -2428,7 +2364,6 @@ void MystScriptParser_Myst::opcode_197(uint16 op, uint16 var, uint16 argc, uint1  void MystScriptParser_Myst::o_dockVaultForceClose(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	// Used on Myst 4143 (Dock near Marker Switch) -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst;  	uint16 soundId = argv[0];  	uint16 delay = argv[1];  	uint16 directionalUpdateDataSize = argv[2]; @@ -2439,7 +2374,7 @@ void MystScriptParser_Myst::o_dockVaultForceClose(uint16 op, uint16 var, uint16  	if (_dockVaultState) {  		// Open switch -		myst.dockMarkerSwitch = 1; +		_state.dockMarkerSwitch = 1;  		_vm->_sound->replaceSound(4143);  		_vm->redrawArea(4); @@ -2563,35 +2498,33 @@ void MystScriptParser_Myst::towerRotationDrawBuildings() {  }  uint16 MystScriptParser_Myst::towerRotationMapComputeAngle() { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	_towerRotationSpeed++;  	if (_towerRotationSpeed >= 7)  		_towerRotationSpeed = 7;  	else  		_towerRotationSpeed++; -	myst.towerRotationAngle = (myst.towerRotationAngle + _towerRotationSpeed) % 360; -	uint16 angle = myst.towerRotationAngle; +	_state.towerRotationAngle = (_state.towerRotationAngle + _towerRotationSpeed) % 360; +	uint16 angle = _state.towerRotationAngle;  	_towerRotationOverSpot = false;  	if (angle >= 265 && angle <= 277 -			&& myst.rocketshipMarkerSwitch) { +			&& _state.rocketshipMarkerSwitch) {  		angle = 271;  		_towerRotationOverSpot = true;  		_towerRotationSpeed = 1;  	} else if (angle >= 77 && angle <= 89 -			&& myst.gearsMarkerSwitch) { +			&& _state.gearsMarkerSwitch) {  		angle = 83;  		_towerRotationOverSpot = true;  		_towerRotationSpeed = 1;  	} else if (angle >= 123 && angle <= 135 -			&& myst.dockMarkerSwitch) { +			&& _state.dockMarkerSwitch) {  		angle = 129;  		_towerRotationOverSpot = true;  		_towerRotationSpeed = 1;  	} else if (angle >= 146 && angle <= 158 -			&& myst.cabinMarkerSwitch) { +			&& _state.cabinMarkerSwitch) {  		angle = 152;  		_towerRotationOverSpot = true;  		_towerRotationSpeed = 1; @@ -2660,10 +2593,8 @@ void MystScriptParser_Myst::o_forechamberDoor_init(uint16 op, uint16 var, uint16  }  void MystScriptParser_Myst::o_shipAccess_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	// Enable acces to the ship -	if (myst.shipFloating) { +	if (_state.shipFloating) {  		_invokingResource->setEnabled(true);  	}  } @@ -2685,11 +2616,9 @@ void MystScriptParser_Myst::o_imager_init(uint16 op, uint16 var, uint16 argc, ui  }  void MystScriptParser_Myst::imager_run() { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	_imagerRunning = false; -	if (myst.imagerActive && myst.imagerSelection == 67) { +	if (_state.imagerActive && _state.imagerSelection == 67) {  		// TODO: play between 1814 and 4204 looping  		_imagerMovie->playMovie();  	} @@ -2716,13 +2645,11 @@ void MystScriptParser_Myst::o_libraryBookcaseTransform_init(uint16 op, uint16 va  }  void MystScriptParser_Myst::generatorControlRoom_run(void) { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; - -	if (_generatorVoltage == myst.generatorVoltage) { +	if (_generatorVoltage == _state.generatorVoltage) {  		generatorRedrawRocket();  	} else {  		// Animate generator gauge		 -		if (_generatorVoltage > myst.generatorVoltage) +		if (_generatorVoltage > _state.generatorVoltage)  			_generatorVoltage--;  		else  			_generatorVoltage++; @@ -2735,11 +2662,9 @@ void MystScriptParser_Myst::generatorControlRoom_run(void) {  }  void MystScriptParser_Myst::o_generatorControlRoom_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	debugC(kDebugScript, "Opcode %d: Generator control room init", op); -	_generatorVoltage = myst.generatorVoltage; +	_generatorVoltage = _state.generatorVoltage;  	_generatorControlRoomRunning = true;  } @@ -2878,28 +2803,26 @@ void MystScriptParser_Myst::opcode_218(uint16 op, uint16 var, uint16 argc, uint1  void MystScriptParser_Myst::o_rocketSliders_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Rocket sliders init", op); -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	_rocketSlider1 = static_cast<MystResourceType10 *>(_vm->_resources[argv[0]]);  	_rocketSlider2 = static_cast<MystResourceType10 *>(_vm->_resources[argv[1]]);  	_rocketSlider3 = static_cast<MystResourceType10 *>(_vm->_resources[argv[2]]);  	_rocketSlider4 = static_cast<MystResourceType10 *>(_vm->_resources[argv[3]]);  	_rocketSlider5 = static_cast<MystResourceType10 *>(_vm->_resources[argv[4]]); -	if (myst.rocketSliderPosition[0]) { -		_rocketSlider1->setPosition(myst.rocketSliderPosition[0]); +	if (_state.rocketSliderPosition[0]) { +		_rocketSlider1->setPosition(_state.rocketSliderPosition[0]);  	} -	if (myst.rocketSliderPosition[1]) { -		_rocketSlider2->setPosition(myst.rocketSliderPosition[1]); +	if (_state.rocketSliderPosition[1]) { +		_rocketSlider2->setPosition(_state.rocketSliderPosition[1]);  	} -	if (myst.rocketSliderPosition[2]) { -		_rocketSlider3->setPosition(myst.rocketSliderPosition[2]); +	if (_state.rocketSliderPosition[2]) { +		_rocketSlider3->setPosition(_state.rocketSliderPosition[2]);  	} -	if (myst.rocketSliderPosition[3]) { -		_rocketSlider4->setPosition(myst.rocketSliderPosition[3]); +	if (_state.rocketSliderPosition[3]) { +		_rocketSlider4->setPosition(_state.rocketSliderPosition[3]);  	} -	if (myst.rocketSliderPosition[4]) { -		_rocketSlider5->setPosition(myst.rocketSliderPosition[4]); +	if (_state.rocketSliderPosition[4]) { +		_rocketSlider5->setPosition(_state.rocketSliderPosition[4]);  	}  } @@ -2912,14 +2835,11 @@ void MystScriptParser_Myst::o_greenBook_init(uint16 op, uint16 var, uint16 argc,  	// Used for Card 4168 (Green Book Movies)  	debugC(kDebugScript, "Opcode %d: Green book init", op); -	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -	MystVariables::Myst &myst = _vm->_saveLoad->_v->myst; -  	uint loopStart = 0;  	uint loopEnd = 0;  	Common::String file; -	if (!myst.greenBookOpenedBefore) { +	if (!_state.greenBookOpenedBefore) {  		loopStart = 113200;  		loopEnd = 116400;  		file = _vm->wrapMovieFilename("atrusbk1", kMystStack); @@ -2932,7 +2852,7 @@ void MystScriptParser_Myst::o_greenBook_init(uint16 op, uint16 var, uint16 argc,  	_vm->_sound->stopSound();  	_vm->_sound->pauseBackground(); -	if (globals.ending != 4) { +	if (_globals.ending != 4) {  		_vm->_video->playBackgroundMovie(file, 314, 76);  	} diff --git a/engines/mohawk/myst_stacks/myst.h b/engines/mohawk/myst_stacks/myst.h index 9b65e4174f..fa87009dc0 100644 --- a/engines/mohawk/myst_stacks/myst.h +++ b/engines/mohawk/myst_stacks/myst.h @@ -180,6 +180,8 @@ private:  	DECLARE_OPCODE(opcode_309);  	DECLARE_OPCODE(opcode_312); +	MystGameState::Myst &_state; +  	bool _generatorControlRoomRunning;  	uint16 _generatorVoltage; // 58 diff --git a/engines/mohawk/myst_stacks/selenitic.cpp b/engines/mohawk/myst_stacks/selenitic.cpp index 38b457e0cb..43c2f97d7e 100644 --- a/engines/mohawk/myst_stacks/selenitic.cpp +++ b/engines/mohawk/myst_stacks/selenitic.cpp @@ -36,7 +36,8 @@  namespace Mohawk { -MystScriptParser_Selenitic::MystScriptParser_Selenitic(MohawkEngine_Myst *vm) : MystScriptParser(vm) { +MystScriptParser_Selenitic::MystScriptParser_Selenitic(MohawkEngine_Myst *vm) : +		MystScriptParser(vm), _state(vm->_gameState->_selenitic) {  	setupOpcodes();  	_invokingResource = NULL;  	_mazeRunnerPosition = 288; @@ -91,24 +92,21 @@ void MystScriptParser_Selenitic::runPersistentScripts() {  }  uint16 MystScriptParser_Selenitic::getVar(uint16 var) { -	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -	MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; -  	switch(var) {  	case 0: // Sound receiver emitters enabled -		return selenitic.emitterEnabledWind; +		return _state.emitterEnabledWind;  	case 1: -		return selenitic.emitterEnabledVolcano; +		return _state.emitterEnabledVolcano;  	case 2: -		return selenitic.emitterEnabledClock; +		return _state.emitterEnabledClock;  	case 3: -		return selenitic.emitterEnabledWater; +		return _state.emitterEnabledWater;  	case 4: -		return selenitic.emitterEnabledCrystal; +		return _state.emitterEnabledCrystal;  	case 5: // Sound receiver opened -		return selenitic.soundReceiverOpened; +		return _state.soundReceiverOpened;  	case 6: // Tunnel lights -		return selenitic.tunnelLightsSwitchedOn; +		return _state.tunnelLightsSwitchedOn;  	case 7:// Maze runner display  		if (_mazeRunnerPosition == 288) {  			return 0; @@ -122,15 +120,15 @@ uint16 MystScriptParser_Selenitic::getVar(uint16 var) {  	case 8: // Viewer  		return 0;  	case 9: // Sound receiver selected source -		return selenitic.soundReceiverCurrentSource == 0; +		return _state.soundReceiverCurrentSource == 0;  	case 10: -		return selenitic.soundReceiverCurrentSource == 1; +		return _state.soundReceiverCurrentSource == 1;  	case 11: -		return selenitic.soundReceiverCurrentSource == 2; +		return _state.soundReceiverCurrentSource == 2;  	case 12: -		return selenitic.soundReceiverCurrentSource == 3; +		return _state.soundReceiverCurrentSource == 3;  	case 13: -		return selenitic.soundReceiverCurrentSource == 4; +		return _state.soundReceiverCurrentSource == 4;  	case 14: // Sound receiver position  		return (*_soundReceiverPosition) / 1000;  	case 15: @@ -161,55 +159,52 @@ uint16 MystScriptParser_Selenitic::getVar(uint16 var) {  	case 33: // Maze runner at entry  		return _mazeRunnerPosition != 288;  	case 102: // Red page -		return !(globals.redPagesInBook & 2) && (globals.heldPage != 8); +		return !(_globals.redPagesInBook & 2) && (_globals.heldPage != 8);  	case 103: // Blue page -		return !(globals.bluePagesInBook & 2) && (globals.heldPage != 2); +		return !(_globals.bluePagesInBook & 2) && (_globals.heldPage != 2);  	default:  		return MystScriptParser::getVar(var);  	}  }  void MystScriptParser_Selenitic::toggleVar(uint16 var) { -	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -	MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; -  	switch(var) {  	case 0: // Sound receiver emitters enabled -		selenitic.emitterEnabledWind = (selenitic.emitterEnabledWind + 1) % 2; +		_state.emitterEnabledWind = (_state.emitterEnabledWind + 1) % 2;  		break;  	case 1: -		selenitic.emitterEnabledVolcano = (selenitic.emitterEnabledVolcano + 1) % 2; +		_state.emitterEnabledVolcano = (_state.emitterEnabledVolcano + 1) % 2;  		break;  	case 2: -		selenitic.emitterEnabledClock = (selenitic.emitterEnabledClock + 1) % 2; +		_state.emitterEnabledClock = (_state.emitterEnabledClock + 1) % 2;  		break;  	case 3: -		selenitic.emitterEnabledWater = (selenitic.emitterEnabledWater + 1) % 2; +		_state.emitterEnabledWater = (_state.emitterEnabledWater + 1) % 2;  		break;  	case 4: -		selenitic.emitterEnabledCrystal = (selenitic.emitterEnabledCrystal + 1) % 2; +		_state.emitterEnabledCrystal = (_state.emitterEnabledCrystal + 1) % 2;  		break;  	case 5: // Sound receiver opened -		selenitic.soundReceiverOpened = (selenitic.soundReceiverOpened + 1) % 2; +		_state.soundReceiverOpened = (_state.soundReceiverOpened + 1) % 2;  		break;  	case 6: // Tunnel lights -		selenitic.tunnelLightsSwitchedOn = (selenitic.tunnelLightsSwitchedOn + 1) % 2; +		_state.tunnelLightsSwitchedOn = (_state.tunnelLightsSwitchedOn + 1) % 2;  		break;  	case 102: // Red page -		if (!(globals.redPagesInBook & 2)) { -			if (globals.heldPage == 8) -				globals.heldPage = 0; +		if (!(_globals.redPagesInBook & 2)) { +			if (_globals.heldPage == 8) +				_globals.heldPage = 0;  			else { -				globals.heldPage = 8; +				_globals.heldPage = 8;  			}  		}  		break;  	case 103: // Blue page -		if (!(globals.bluePagesInBook & 2)) { -			if (globals.heldPage == 2) -				globals.heldPage = 0; +		if (!(_globals.bluePagesInBook & 2)) { +			if (_globals.heldPage == 2) +				_globals.heldPage = 0;  			else { -				globals.heldPage = 2; +				_globals.heldPage = 2;  			}  		}  		break; @@ -220,66 +215,65 @@ void MystScriptParser_Selenitic::toggleVar(uint16 var) {  }  bool MystScriptParser_Selenitic::setVarValue(uint16 var, uint16 value) { -	MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic;  	bool refresh = false;  	switch (var) {  	case 0: // Sound receiver emitters enabled -		if (selenitic.emitterEnabledWind != value) { -			selenitic.emitterEnabledWind = value; +		if (_state.emitterEnabledWind != value) { +			_state.emitterEnabledWind = value;  			refresh = true;  		}  		break;  	case 1: -		if (selenitic.emitterEnabledVolcano != value) { -			selenitic.emitterEnabledVolcano = value; +		if (_state.emitterEnabledVolcano != value) { +			_state.emitterEnabledVolcano = value;  			refresh = true;  		}  		break;  	case 2: -		if (selenitic.emitterEnabledClock != value) { -			selenitic.emitterEnabledClock = value; +		if (_state.emitterEnabledClock != value) { +			_state.emitterEnabledClock = value;  			refresh = true;  		}  		break;  	case 3: -		if (selenitic.emitterEnabledWater != value) { -			selenitic.emitterEnabledWater = value; +		if (_state.emitterEnabledWater != value) { +			_state.emitterEnabledWater = value;  			refresh = true;  		}  		break;  	case 4: -		if (selenitic.emitterEnabledCrystal != value) { -			selenitic.emitterEnabledCrystal = value; +		if (_state.emitterEnabledCrystal != value) { +			_state.emitterEnabledCrystal = value;  			refresh = true;  		}  		break;  	case 5: // Sound receiver opened -		if (selenitic.soundReceiverOpened != value) { -			selenitic.soundReceiverOpened = value; +		if (_state.soundReceiverOpened != value) { +			_state.soundReceiverOpened = value;  			refresh = true;  		}  		break;  	case 6: // Tunnel lights -		if (selenitic.tunnelLightsSwitchedOn != value) { -			selenitic.tunnelLightsSwitchedOn = value; +		if (_state.tunnelLightsSwitchedOn != value) { +			_state.tunnelLightsSwitchedOn = value;  			refresh = true;  		}  		break;  	case 20: // Sound lock sliders -		selenitic.soundLockSliderPositions[0] = value; +		_state.soundLockSliderPositions[0] = value;  		break;  	case 21: -		selenitic.soundLockSliderPositions[1] = value; +		_state.soundLockSliderPositions[1] = value;  		break;  	case 22: -		selenitic.soundLockSliderPositions[2] = value; +		_state.soundLockSliderPositions[2] = value;  		break;  	case 23: -		selenitic.soundLockSliderPositions[3] = value; +		_state.soundLockSliderPositions[3] = value;  		break;  	case 24: -		selenitic.soundLockSliderPositions[4] = value; +		_state.soundLockSliderPositions[4] = value;  		break;  	case 30:  		_mazeRunnerDoorOpened = value; @@ -592,8 +586,6 @@ void MystScriptParser_Selenitic::o_mazeRunnerSoundRepeat(uint16 op, uint16 var,   * Sound receiver sigma button   */  void MystScriptParser_Selenitic::o_soundReceiverSigma(uint16 op, uint16 var, uint16 argc, uint16 *argv) { -	MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; -  	debugC(kDebugScript, "Opcode %d: Sound receiver sigma button", op);  	_vm->_cursor->hideCursor(); @@ -622,7 +614,7 @@ void MystScriptParser_Selenitic::o_soundReceiverSigma(uint16 op, uint16 var, uin  			break;  		} -		_soundReceiverPosition = &selenitic.soundReceiverPositions[source]; +		_soundReceiverPosition = &_state.soundReceiverPositions[source];  		_vm->_sound->stopBackground();  		_vm->_sound->replaceSound(2287);  		soundReceiverDrawView(); @@ -635,7 +627,7 @@ void MystScriptParser_Selenitic::o_soundReceiverSigma(uint16 op, uint16 var, uin  	_soundReceiverSigmaPressed = true;  	_vm->_sound->stopBackground(); -	_soundReceiverSources[selenitic.soundReceiverCurrentSource]->drawConditionalDataToScreen(1); +	_soundReceiverSources[_state.soundReceiverCurrentSource]->drawConditionalDataToScreen(1);  	soundReceiverDrawView(); @@ -714,8 +706,6 @@ void MystScriptParser_Selenitic::soundReceiverDrawAngle() {   * Sound receiver source selection buttons   */  void MystScriptParser_Selenitic::o_soundReceiverSource(uint16 op, uint16 var, uint16 argc, uint16 *argv) { -	MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; -  	debugC(kDebugScript, "Opcode %d: Sound receiver source", op);  	if (_soundReceiverSigmaPressed) { @@ -727,12 +717,12 @@ void MystScriptParser_Selenitic::o_soundReceiverSource(uint16 op, uint16 var, ui  	uint pressedButton = var - 9; -	if (selenitic.soundReceiverCurrentSource != pressedButton) { -		selenitic.soundReceiverCurrentSource = pressedButton; +	if (_state.soundReceiverCurrentSource != pressedButton) { +		_state.soundReceiverCurrentSource = pressedButton;  		_soundReceiverCurrentSource->drawConditionalDataToScreen(0); -		_soundReceiverPosition = &selenitic.soundReceiverPositions[pressedButton]; +		_soundReceiverPosition = &_state.soundReceiverPositions[pressedButton];  		_soundReceiverCurrentSource = _soundReceiverSources[pressedButton];  		_vm->_sound->stopSound(); @@ -841,25 +831,24 @@ void MystScriptParser_Selenitic::o_soundLockStartMove(uint16 op, uint16 var, uin  void MystScriptParser_Selenitic::o_soundLockEndMove(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Sound lock end move", op); -	MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic;  	MystResourceType10 *slider = soundLockSliderFromVar(var);  	uint16 *value = 0;  	switch (var) {  	case 20: // Sound lock sliders -		value = &selenitic.soundLockSliderPositions[0]; +		value = &_state.soundLockSliderPositions[0];  		break;  	case 21: -		value = &selenitic.soundLockSliderPositions[1]; +		value = &_state.soundLockSliderPositions[1];  		break;  	case 22: -		value = &selenitic.soundLockSliderPositions[2]; +		value = &_state.soundLockSliderPositions[2];  		break;  	case 23: -		value = &selenitic.soundLockSliderPositions[3]; +		value = &_state.soundLockSliderPositions[3];  		break;  	case 24: -		value = &selenitic.soundLockSliderPositions[4]; +		value = &_state.soundLockSliderPositions[4];  		break;  	} @@ -899,7 +888,6 @@ void MystScriptParser_Selenitic::soundLockCheckSolution(MystResourceType10 *slid  void MystScriptParser_Selenitic::o_soundLockButton(uint16 op, uint16 var, uint16 argc, uint16 *argv) {  	debugC(kDebugScript, "Opcode %d: Sound lock button", op); -	MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic;  	bool solved = true;  	_vm->_sound->pauseBackground(); @@ -907,11 +895,11 @@ void MystScriptParser_Selenitic::o_soundLockButton(uint16 op, uint16 var, uint16  	_soundLockButton->drawConditionalDataToScreen(1);  	_vm->_cursor->hideCursor(); -	soundLockCheckSolution(_soundLockSlider1, selenitic.soundLockSliderPositions[0], 5, solved); -	soundLockCheckSolution(_soundLockSlider2, selenitic.soundLockSliderPositions[1], 9, solved); -	soundLockCheckSolution(_soundLockSlider3, selenitic.soundLockSliderPositions[2], 0, solved); -	soundLockCheckSolution(_soundLockSlider4, selenitic.soundLockSliderPositions[3], 6, solved); -	soundLockCheckSolution(_soundLockSlider5, selenitic.soundLockSliderPositions[4], 7, solved); +	soundLockCheckSolution(_soundLockSlider1, _state.soundLockSliderPositions[0], 5, solved); +	soundLockCheckSolution(_soundLockSlider2, _state.soundLockSliderPositions[1], 9, solved); +	soundLockCheckSolution(_soundLockSlider3, _state.soundLockSliderPositions[2], 0, solved); +	soundLockCheckSolution(_soundLockSlider4, _state.soundLockSliderPositions[3], 6, solved); +	soundLockCheckSolution(_soundLockSlider5, _state.soundLockSliderPositions[4], 7, solved);  	_vm->_sound->replaceSound(1148);  	_vm->_sound->resumeBackground(); @@ -1006,9 +994,7 @@ void MystScriptParser_Selenitic::soundReceiverIncreaseSpeed() {  }  void MystScriptParser_Selenitic::soundReceiverUpdateSound() { -	MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; - -	uint16 soundId = soundReceiverCurrentSound(selenitic.soundReceiverCurrentSource, *_soundReceiverPosition); +	uint16 soundId = soundReceiverCurrentSound(_state.soundReceiverCurrentSource, *_soundReceiverPosition);  	_vm->_sound->replaceSound(soundId);  } @@ -1064,35 +1050,31 @@ uint16 MystScriptParser_Selenitic::soundReceiverCurrentSound(uint16 source, uint  }  void MystScriptParser_Selenitic::soundReceiverSolution(uint16 source, uint16 &solution, bool &enabled) { -	MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; -  	switch (source) {  	case 0: -		enabled = selenitic.emitterEnabledWater; +		enabled = _state.emitterEnabledWater;  		solution = 1534;  		break;  	case 1: -		enabled = selenitic.emitterEnabledVolcano; +		enabled = _state.emitterEnabledVolcano;  		solution = 1303;  		break;  	case 2: -		enabled = selenitic.emitterEnabledClock; +		enabled = _state.emitterEnabledClock;  		solution = 556;  		break;  	case 3: -		enabled = selenitic.emitterEnabledCrystal; +		enabled = _state.emitterEnabledCrystal;  		solution = 150;  		break;  	case 4: -		enabled = selenitic.emitterEnabledWind; +		enabled = _state.emitterEnabledWind;  		solution = 2122;  		break;  	}  }  void MystScriptParser_Selenitic::o_soundReceiver_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { -	MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; -  	debugC(kDebugScript, "Opcode %d: Sound receiver init", op);  	// Used for Card 1245 (Sound Receiver) @@ -1112,16 +1094,14 @@ void MystScriptParser_Selenitic::o_soundReceiver_init(uint16 op, uint16 var, uin  	_soundReceiverAngle3 = static_cast<MystResourceType8 *>(_vm->_resources[12]);  	_soundReceiverAngle4 = static_cast<MystResourceType8 *>(_vm->_resources[13]); -	uint16 currentSource = selenitic.soundReceiverCurrentSource; -	_soundReceiverPosition = &selenitic.soundReceiverPositions[currentSource]; +	uint16 currentSource = _state.soundReceiverCurrentSource; +	_soundReceiverPosition = &_state.soundReceiverPositions[currentSource];  	_soundReceiverCurrentSource = _soundReceiverSources[currentSource];  	_soundReceiverSigmaPressed = false;  }  void MystScriptParser_Selenitic::o_soundLock_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { -	MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; -  	debugC(kDebugScript, "Opcode %d: Sound lock init", op);  	for (uint i = 0; i < _vm->_resources.size(); i++) { @@ -1129,23 +1109,23 @@ void MystScriptParser_Selenitic::o_soundLock_init(uint16 op, uint16 var, uint16  			switch (_vm->_resources[i]->getType8Var()) {  			case 20:  				_soundLockSlider1 = static_cast<MystResourceType10 *>(_vm->_resources[i]); -				_soundLockSlider1->setStep(selenitic.soundLockSliderPositions[0]); +				_soundLockSlider1->setStep(_state.soundLockSliderPositions[0]);  				break;  			case 21:  				_soundLockSlider2 = static_cast<MystResourceType10 *>(_vm->_resources[i]); -				_soundLockSlider2->setStep(selenitic.soundLockSliderPositions[1]); +				_soundLockSlider2->setStep(_state.soundLockSliderPositions[1]);  				break;  			case 22:  				_soundLockSlider3 = static_cast<MystResourceType10 *>(_vm->_resources[i]); -				_soundLockSlider3->setStep(selenitic.soundLockSliderPositions[2]); +				_soundLockSlider3->setStep(_state.soundLockSliderPositions[2]);  				break;  			case 23:  				_soundLockSlider4 = static_cast<MystResourceType10 *>(_vm->_resources[i]); -				_soundLockSlider4->setStep(selenitic.soundLockSliderPositions[3]); +				_soundLockSlider4->setStep(_state.soundLockSliderPositions[3]);  				break;  			case 24:  				_soundLockSlider5 = static_cast<MystResourceType10 *>(_vm->_resources[i]); -				_soundLockSlider5->setStep(selenitic.soundLockSliderPositions[4]); +				_soundLockSlider5->setStep(_state.soundLockSliderPositions[4]);  				break;  			}  		} else if (_vm->_resources[i]->type == kMystConditionalImage) { diff --git a/engines/mohawk/myst_stacks/selenitic.h b/engines/mohawk/myst_stacks/selenitic.h index cb0f31f93b..54e9db4d66 100644 --- a/engines/mohawk/myst_stacks/selenitic.h +++ b/engines/mohawk/myst_stacks/selenitic.h @@ -76,6 +76,8 @@ private:  	void soundReceiver_run(); +	MystGameState::Selenitic &_state; +  	bool _soundReceiverRunning;  	bool _soundReceiverSigmaPressed; // 6  	MystResourceType8 *_soundReceiverSources[5]; // 92 -> 108 diff --git a/engines/mohawk/myst_stacks/stoneship.cpp b/engines/mohawk/myst_stacks/stoneship.cpp index 7bd2ee1021..eb281d14e1 100644 --- a/engines/mohawk/myst_stacks/stoneship.cpp +++ b/engines/mohawk/myst_stacks/stoneship.cpp @@ -35,7 +35,8 @@  namespace Mohawk { -MystScriptParser_Stoneship::MystScriptParser_Stoneship(MohawkEngine_Myst *vm) : MystScriptParser(vm) { +MystScriptParser_Stoneship::MystScriptParser_Stoneship(MohawkEngine_Myst *vm) : +		MystScriptParser(vm), _state(vm->_gameState->_stoneship) {  	setupOpcodes();  } @@ -92,9 +93,6 @@ void MystScriptParser_Stoneship::runPersistentScripts() {  }  uint16 MystScriptParser_Stoneship::getVar(uint16 var) { -//	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -//	MystVariables::Stoneship &stoneship = _vm->_saveLoad->_v->stoneship; -  	switch(var) {  //case 0: // Water Drained From Lighthouse / Right Button Of Pump  //	return 0; // Water Present / Button Dark @@ -152,9 +150,6 @@ uint16 MystScriptParser_Stoneship::getVar(uint16 var) {  }  void MystScriptParser_Stoneship::toggleVar(uint16 var) { -//	MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; -//	MystVariables::Stoneship &stoneship = _vm->_saveLoad->_v->stoneship; -  	switch(var) {  	default:  		MystScriptParser::toggleVar(var); @@ -163,7 +158,6 @@ void MystScriptParser_Stoneship::toggleVar(uint16 var) {  }  bool MystScriptParser_Stoneship::setVarValue(uint16 var, uint16 value) { -//	MystVariables::Stoneship &stoneship = _vm->_saveLoad->_v->stoneship;  	bool refresh = false;  	switch (var) { diff --git a/engines/mohawk/myst_stacks/stoneship.h b/engines/mohawk/myst_stacks/stoneship.h index a0c7151bc1..9e65b9c33f 100644 --- a/engines/mohawk/myst_stacks/stoneship.h +++ b/engines/mohawk/myst_stacks/stoneship.h @@ -85,6 +85,8 @@ private:  	DECLARE_OPCODE(opcode_210);  	DECLARE_OPCODE(opcode_300); + +	MystGameState::Stoneship &_state;  };  } | 
