diff options
author | Bastien Bouclet | 2010-12-04 09:26:44 +0000 |
---|---|---|
committer | Bastien Bouclet | 2010-12-04 09:26:44 +0000 |
commit | 4a8fc942b7f7ea0636650ed44f0fde6db91c6b11 (patch) | |
tree | 6665176375c11c5c8a3313a5e278bb0018398e28 /engines/mohawk | |
parent | 16483fcf34dbe029ccb67a9d7966c5d904b0bf79 (diff) | |
download | scummvm-rg350-4a8fc942b7f7ea0636650ed44f0fde6db91c6b11.tar.gz scummvm-rg350-4a8fc942b7f7ea0636650ed44f0fde6db91c6b11.tar.bz2 scummvm-rg350-4a8fc942b7f7ea0636650ed44f0fde6db91c6b11.zip |
MOHAWK: Give meaningful names to the game global vars and selenitic vars
svn-id: r54758
Diffstat (limited to 'engines/mohawk')
-rw-r--r-- | engines/mohawk/myst_saveload.cpp | 206 | ||||
-rw-r--r-- | engines/mohawk/myst_saveload.h | 24 | ||||
-rw-r--r-- | engines/mohawk/myst_scripts.cpp | 8 | ||||
-rw-r--r-- | engines/mohawk/myst_stacks/selenitic.cpp | 179 |
4 files changed, 241 insertions, 176 deletions
diff --git a/engines/mohawk/myst_saveload.cpp b/engines/mohawk/myst_saveload.cpp index 50a2c9b023..1d14265521 100644 --- a/engines/mohawk/myst_saveload.cpp +++ b/engines/mohawk/myst_saveload.cpp @@ -66,19 +66,19 @@ bool MystSaveLoad::loadGame(const Common::String &filename) { // Now, we'll read in the variable values. // Lots of checking code here so that save files with differing formats are flagged... - if ((_v->game_globals[0] = loadFile->readUint16LE()) != 2) - warning("Unexpected value at 0x%03X - Found %u Expected %u", loadFile->pos(), _v->game_globals[0], 2); + if ((_v->globals.u0 = loadFile->readUint16LE()) != 2) + warning("Unexpected value at 0x%03X - Found %u Expected %u", loadFile->pos(), _v->globals.u0, 2); - _v->game_globals[1] = loadFile->readUint16LE(); - _v->game_globals[2] = loadFile->readUint16LE(); + _v->globals.currentAge = loadFile->readUint16LE(); + _v->globals.heldPage = loadFile->readUint16LE(); - if ((_v->game_globals[3] = loadFile->readUint16LE()) != 1) - warning("Unexpected value at 0x%03X - Found %u Expected %u", loadFile->pos(), _v->game_globals[3], 1); + if ((_v->globals.u1 = loadFile->readUint16LE()) != 1) + warning("Unexpected value at 0x%03X - Found %u Expected %u", loadFile->pos(), _v->globals.u1, 1); - _v->game_globals[4] = loadFile->readUint16LE(); - _v->game_globals[5] = loadFile->readUint16LE(); - _v->game_globals[6] = loadFile->readUint16LE(); - _v->game_globals[7] = loadFile->readUint16LE(); + _v->globals.transitions = loadFile->readUint16LE(); + _v->globals.zipMode = loadFile->readUint16LE(); + _v->globals.redPagesInBook = loadFile->readUint16LE(); + _v->globals.bluePagesInBook = loadFile->readUint16LE(); for (byte i = 0; i < 8; i++) { if (_vm->getFeatures() & GF_ME) { @@ -234,21 +234,31 @@ bool MystSaveLoad::loadGame(const Common::String &filename) { if ((_v->mech_vars[i] = loadFile->readUint16LE()) > 9) warning("Value exceeds maximum of %u found at 0x%03X - Found %u", 9, loadFile->pos(), _v->mech_vars[i]); - for (byte i = 0; i < 7; i++) { - if (_vm->getFeatures() & GF_ME) { - _v->selenitic_vars[i] = loadFile->readUint16LE(); + if (_vm->getFeatures() & GF_ME) { + _v->selenitic.emitterEnabledWater = loadFile->readUint32LE(); + _v->selenitic.emitterEnabledVolcano = loadFile->readUint32LE(); + _v->selenitic.emitterEnabledClock = loadFile->readUint32LE(); + _v->selenitic.emitterEnabledCrystal = loadFile->readUint32LE(); + _v->selenitic.emitterEnabledWind = loadFile->readUint32LE(); + _v->selenitic.soundReceiverOpened = loadFile->readUint32LE(); + _v->selenitic.tunnelLightsSwitchedOn = loadFile->readUint32LE(); + } else { + _v->selenitic.emitterEnabledWater = loadFile->readByte(); + _v->selenitic.emitterEnabledVolcano = loadFile->readByte(); + _v->selenitic.emitterEnabledClock = loadFile->readByte(); + _v->selenitic.emitterEnabledCrystal = loadFile->readByte(); + _v->selenitic.emitterEnabledWind = loadFile->readByte(); + _v->selenitic.soundReceiverOpened = loadFile->readByte(); + _v->selenitic.tunnelLightsSwitchedOn = loadFile->readByte(); + } - if (loadFile->readUint16LE() != 0) - warning("Non-zero value at 0x%03X", loadFile->pos()); - } else - _v->selenitic_vars[i] = loadFile->readByte(); + _v->selenitic.soundReceiverCurrentSource = loadFile->readUint16LE(); - if (_v->selenitic_vars[i] > 1) - warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->selenitic_vars[i]); - } + for(byte i = 0; i < 5; i++) + _v->selenitic.soundReceiverPositions[i] = loadFile->readUint16LE(); - for(byte i = 7; i < 18; i++) - _v->selenitic_vars[i] = loadFile->readUint16LE(); + for(byte i = 0; i < 5; i++) + _v->selenitic.soundLockSliderPositions[i] = loadFile->readUint16LE(); for (byte i = 0; i < 3; i++) { if (_vm->getFeatures() & GF_ME) { @@ -257,7 +267,7 @@ bool MystSaveLoad::loadGame(const Common::String &filename) { _v->stoneship_vars[i] = loadFile->readByte(); if (_v->stoneship_vars[i] > 1) - warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->selenitic_vars[i]); + warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->stoneship_vars[i]); } for (byte i = 3; i < 14; i++) _v->stoneship_vars[i] = loadFile->readUint16LE(); @@ -338,8 +348,14 @@ bool MystSaveLoad::saveGame(const Common::String &fname) { debug_printMystVariables(_v); // Performs no validation of variable values - Assumes they are valid. - for (byte i = 0; i < 8; i++) - saveFile->writeUint16LE(_v->game_globals[i]); + saveFile->writeUint16LE(_v->globals.u0); + saveFile->writeUint16LE(_v->globals.currentAge); + saveFile->writeUint16LE(_v->globals.heldPage); + saveFile->writeUint16LE(_v->globals.u1); + saveFile->writeUint16LE(_v->globals.transitions); + saveFile->writeUint16LE(_v->globals.zipMode); + saveFile->writeUint16LE(_v->globals.redPagesInBook); + saveFile->writeUint16LE(_v->globals.bluePagesInBook); for (byte i = 0; i < 8; i++) { if (_vm->getFeatures() & GF_ME) { @@ -372,16 +388,31 @@ bool MystSaveLoad::saveGame(const Common::String &fname) { for (byte i = 0; i < 8; i++) saveFile->writeUint16LE(_v->mech_vars[i]); - for (byte i = 0; i < 7; i++) { - if (_vm->getFeatures() & GF_ME) { - saveFile->writeUint16LE(_v->selenitic_vars[i]); - saveFile->writeUint16LE(0); - } else - saveFile->writeByte(_v->selenitic_vars[i]); + if (_vm->getFeatures() & GF_ME) { + saveFile->writeUint32LE(_v->selenitic.emitterEnabledWater); + saveFile->writeUint32LE(_v->selenitic.emitterEnabledVolcano); + saveFile->writeUint32LE(_v->selenitic.emitterEnabledClock); + saveFile->writeUint32LE(_v->selenitic.emitterEnabledCrystal); + saveFile->writeUint32LE(_v->selenitic.emitterEnabledWind); + saveFile->writeUint32LE(_v->selenitic.soundReceiverOpened); + saveFile->writeUint32LE(_v->selenitic.tunnelLightsSwitchedOn); + } else { + saveFile->writeByte(_v->selenitic.emitterEnabledWater); + saveFile->writeByte(_v->selenitic.emitterEnabledVolcano); + saveFile->writeByte(_v->selenitic.emitterEnabledClock); + saveFile->writeByte(_v->selenitic.emitterEnabledCrystal); + saveFile->writeByte(_v->selenitic.emitterEnabledWind); + saveFile->writeByte(_v->selenitic.soundReceiverOpened); + saveFile->writeByte(_v->selenitic.tunnelLightsSwitchedOn); } - for(byte i = 7; i < 18; i++) - saveFile->writeUint16LE(_v->selenitic_vars[i]); + saveFile->writeUint16LE(_v->selenitic.soundReceiverCurrentSource); + + for(byte i = 0; i < 5; i++) + saveFile->writeUint16LE(_v->selenitic.soundReceiverPositions[i]); + + for(byte i = 0; i < 5; i++) + saveFile->writeUint16LE(_v->selenitic.soundLockSliderPositions[i]); for (byte i = 0; i < 3; i++) { if (_vm->getFeatures() & GF_ME) { @@ -441,16 +472,38 @@ void MystSaveLoad::initMystVariables(MystVariables *_tv) { uint8 i; // Most of the variables are zero at game start. - for (i = 0; i < ARRAYSIZE(_tv->game_globals); i++) - _tv->game_globals[i] = 0; + _v->globals.u0 = 2; + // Current Age / Stack - Start in Myst + _v->globals.currentAge = 2; + _v->globals.heldPage = 0; + _v->globals.u1 = 1; + _v->globals.transitions = 0; + _v->globals.zipMode = 0; + _v->globals.redPagesInBook = 0; + _v->globals.bluePagesInBook = 0; + for (i = 0; i < ARRAYSIZE(_tv->myst_vars); i++) _tv->myst_vars[i] = 0; for (i = 0; i < ARRAYSIZE(_tv->channelwood_vars); i++) _tv->channelwood_vars[i] = 0; for (i = 0; i < ARRAYSIZE(_tv->mech_vars); i++) _tv->mech_vars[i] = 0; - for (i = 0; i < ARRAYSIZE(_tv->selenitic_vars); i++) - _tv->selenitic_vars[i] = 0; + + _tv->selenitic.emitterEnabledWater = 0; + _tv->selenitic.emitterEnabledVolcano = 0; + _tv->selenitic.emitterEnabledClock = 0; + _tv->selenitic.emitterEnabledCrystal = 0; + _tv->selenitic.emitterEnabledWind = 0; + _tv->selenitic.soundReceiverOpened = 0; + _tv->selenitic.tunnelLightsSwitchedOn = 0; + _tv->selenitic.soundReceiverCurrentSource = 0; + + for(i = 0; i < 5; i++) + _tv->selenitic.soundReceiverPositions[i] = 0; + + for(i = 0; i < 5; i++) + _tv->selenitic.soundLockSliderPositions[i] = 0; + for (i = 0; i < ARRAYSIZE(_tv->stoneship_vars); i++) _tv->stoneship_vars[i] = 0; for (i = 0; i < ARRAYSIZE(_tv->dunny_vars); i++) @@ -469,13 +522,6 @@ void MystSaveLoad::initMystVariables(MystVariables *_tv) { // TODO: Not all these may be needed as some of the unknown opcodes // called by init scripts may set these up as per the others.. - // Unknown - Fixed at 2 - _tv->game_globals[0] = 2; - // Current Age / Stack - Start in Myst - _tv->game_globals[1] = 2; - // Unknown - Fixed at 1 - _tv->game_globals[3] = 1; - // Library Bookcase Door - Default to Up _tv->myst_vars[18] = 1; // Dock Imager Numeric Selection - Default to 67 @@ -491,16 +537,16 @@ void MystSaveLoad::initMystVariables(MystVariables *_tv) { _tv->stoneship_vars[5] = 1; } -static const char *game_globals_names[] = { - "Unknown - Fixed at 2", - "Current Age / Stack", - "Page Being Held", - "Unknown - Fixed at 1", - "Slide Transitions", - "Zip Mode", - "Red Pages in Book", - "Blue Pages in Book" -}; +//static const char *game_globals_names[] = { +// "Unknown - Fixed at 2", +// "Current Age / Stack", +// "Page Being Held", +// "Unknown - Fixed at 1", +// "Slide Transitions", +// "Zip Mode", +// "Red Pages in Book", +// "Blue Pages in Book" +//}; static const char *myst_vars_names[] = { "Marker Switch Near Cabin", @@ -576,26 +622,26 @@ static const char *mech_vars_names[] = { "Code Lock Shape #4 (Right)" }; -static const char *selenitic_vars_names[] = { - "Sound Pickup At Water Pool", - "Sound Pickup At Volcanic Crack", - "Sound Pickup At Clock", - "Sound Pickup At Crystal Rocks", - "Sound Pickup At Windy Tunnel", - "Sound Receiver Doors", - "Windy Tunnel Lights", - "Sound Receiver Current Input", - "Sound Receiver Input #0 (Water Pool) Angle Value", - "Sound Receiver Input #1 (Volcanic Crack) Angle Value", - "Sound Receiver Input #2 (Clock) Angle Value", - "Sound Receiver Input #3 (Crystal Rocks) Angle Value", - "Sound Receiver Input #4 (Windy Tunnel) Angle Value", - "Sound Lock Slider #1 (Left) Position", - "Sound Lock Slider #2 Position", - "Sound Lock Slider #3 Position", - "Sound Lock Slider #4 Position", - "Sound Lock Slider #5 (Right) Position" -}; +//static const char *selenitic_vars_names[] = { +// "Sound Pickup At Water Pool", +// "Sound Pickup At Volcanic Crack", +// "Sound Pickup At Clock", +// "Sound Pickup At Crystal Rocks", +// "Sound Pickup At Windy Tunnel", +// "Sound Receiver Doors", +// "Windy Tunnel Lights", +// "Sound Receiver Current Input", +// "Sound Receiver Input #0 (Water Pool) Angle Value", +// "Sound Receiver Input #1 (Volcanic Crack) Angle Value", +// "Sound Receiver Input #2 (Clock) Angle Value", +// "Sound Receiver Input #3 (Crystal Rocks) Angle Value", +// "Sound Receiver Input #4 (Windy Tunnel) Angle Value", +// "Sound Lock Slider #1 (Left) Position", +// "Sound Lock Slider #2 Position", +// "Sound Lock Slider #3 Position", +// "Sound Lock Slider #4 Position", +// "Sound Lock Slider #5 (Right) Position" +//}; static const char *stoneship_vars_names[] = { "Light State", @@ -623,9 +669,9 @@ void MystSaveLoad::debug_printMystVariables(MystVariables *_tv) { debugC(kDebugSaveLoad, "Printing Myst Variable State:"); - debugC(kDebugSaveLoad, " Game Globals:"); - for (i = 0; i < ARRAYSIZE(_tv->game_globals); i++) - debugC(kDebugSaveLoad, " %s: %u", game_globals_names[i], _tv->game_globals[i]); +// debugC(kDebugSaveLoad, " Game Globals:"); +// for (i = 0; i < ARRAYSIZE(_tv->game_globals); i++) +// debugC(kDebugSaveLoad, " %s: %u", game_globals_names[i], _tv->game_globals[i]); debugC(kDebugSaveLoad, " Myst Variables:"); for (i = 0; i < ARRAYSIZE(_tv->myst_vars); i++) @@ -639,9 +685,9 @@ void MystSaveLoad::debug_printMystVariables(MystVariables *_tv) { for (i = 0; i < ARRAYSIZE(_tv->mech_vars); i++) debugC(kDebugSaveLoad, " %s: %u", mech_vars_names[i], _tv->mech_vars[i]); - debugC(kDebugSaveLoad, " Selenitic Variables:"); - for (i = 0; i < ARRAYSIZE(_tv->selenitic_vars); i++) - debugC(kDebugSaveLoad, " %s: %u", selenitic_vars_names[i], _tv->selenitic_vars[i]); +// debugC(kDebugSaveLoad, " Selenitic Variables:"); +// for (i = 0; i < ARRAYSIZE(_tv->selenitic_vars); i++) +// debugC(kDebugSaveLoad, " %s: %u", selenitic_vars_names[i], _tv->selenitic_vars[i]); debugC(kDebugSaveLoad, " Stoneship Variables:"); for (i = 0; i < ARRAYSIZE(_tv->stoneship_vars); i++) diff --git a/engines/mohawk/myst_saveload.h b/engines/mohawk/myst_saveload.h index f24d1addc3..bc9146faff 100644 --- a/engines/mohawk/myst_saveload.h +++ b/engines/mohawk/myst_saveload.h @@ -50,7 +50,16 @@ struct MystVariables { 6 = Red Pages in Book 7 = Blue Pages in Book */ - uint16 game_globals[8]; + struct Globals { + uint16 u0; + uint16 currentAge; + uint16 heldPage; + uint16 u1; + uint16 transitions; + uint16 zipMode; + uint16 redPagesInBook; + uint16 bluePagesInBook; + } globals; /* 50 Myst Specific Variables : 0 = Marker Switch Near Cabin @@ -149,7 +158,18 @@ struct MystVariables { 16 = Sound Lock Slider #4 Position 17 = Sound Lock Slider #5 (Right) Position */ - uint16 selenitic_vars[18]; + struct Selenitic { + uint32 emitterEnabledWater; + uint32 emitterEnabledVolcano; + uint32 emitterEnabledClock; + uint32 emitterEnabledCrystal; + uint32 emitterEnabledWind; + uint32 soundReceiverOpened; + uint32 tunnelLightsSwitchedOn; + uint16 soundReceiverCurrentSource; + uint16 soundReceiverPositions[5]; + uint16 soundLockSliderPositions[5]; + } selenitic; /* 14 Stoneship Specific Variables : 0 = Light State diff --git a/engines/mohawk/myst_scripts.cpp b/engines/mohawk/myst_scripts.cpp index 1f1d256463..1af2df013c 100644 --- a/engines/mohawk/myst_scripts.cpp +++ b/engines/mohawk/myst_scripts.cpp @@ -327,22 +327,22 @@ void MystScriptParser::o_changeCardSwitch(uint16 op, uint16 var, uint16 argc, ui } void MystScriptParser::o_takePage(uint16 op, uint16 var, uint16 argc, uint16 *argv) { - uint16 *game_globals = _vm->_saveLoad->_v->game_globals; + MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; uint16 cursorId = argv[0]; - uint16 oldPage = game_globals[2]; + uint16 oldPage = globals.heldPage; debugC(kDebugScript, "Opcode %d: takePage Var %d CursorId %d", op, var, cursorId); // Take / drop page toggleVar(var); - if (oldPage != game_globals[2]) { + if (oldPage != globals.heldPage) { _vm->_cursor->hideCursor(); _vm->redrawArea(var); // Set new cursor - if (game_globals[2]) + if (globals.heldPage) _vm->setMainCursor(cursorId); else _vm->setMainCursor(kDefaultMystCursor); diff --git a/engines/mohawk/myst_stacks/selenitic.cpp b/engines/mohawk/myst_stacks/selenitic.cpp index 248a9ff585..183c92745d 100644 --- a/engines/mohawk/myst_stacks/selenitic.cpp +++ b/engines/mohawk/myst_stacks/selenitic.cpp @@ -91,24 +91,24 @@ void MystScriptParser_Selenitic::runPersistentScripts() { } uint16 MystScriptParser_Selenitic::getVar(uint16 var) { - uint16 *game_globals = _vm->_saveLoad->_v->game_globals; - uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; + MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; switch(var) { case 0: // Sound receiver emitters enabled - return selenitic_vars[4]; + return selenitic.emitterEnabledWind; case 1: - return selenitic_vars[1]; + return selenitic.emitterEnabledVolcano; case 2: - return selenitic_vars[2]; + return selenitic.emitterEnabledClock; case 3: - return selenitic_vars[0]; + return selenitic.emitterEnabledWater; case 4: - return selenitic_vars[3]; + return selenitic.emitterEnabledCrystal; case 5: // Sound receiver opened - return selenitic_vars[5]; + return selenitic.soundReceiverOpened; case 6: // Tunnel lights - return selenitic_vars[6]; + return selenitic.tunnelLightsSwitchedOn; case 7:// Maze runner display if (_mazeRunnerPosition == 288) { return 0; @@ -122,15 +122,15 @@ uint16 MystScriptParser_Selenitic::getVar(uint16 var) { case 8: // Viewer return 0; case 9: // Sound receiver selected source - return selenitic_vars[7] == 0; + return selenitic.soundReceiverCurrentSource == 0; case 10: - return selenitic_vars[7] == 1; + return selenitic.soundReceiverCurrentSource == 1; case 11: - return selenitic_vars[7] == 2; + return selenitic.soundReceiverCurrentSource == 2; case 12: - return selenitic_vars[7] == 3; + return selenitic.soundReceiverCurrentSource == 3; case 13: - return selenitic_vars[7] == 4; + return selenitic.soundReceiverCurrentSource == 4; case 14: // Sound receiver position return (*_soundReceiverPosition) / 1000; case 15: @@ -161,55 +161,55 @@ uint16 MystScriptParser_Selenitic::getVar(uint16 var) { case 33: // Maze runner at entry return _mazeRunnerPosition != 288; case 102: // Red page - return !(game_globals[6] & 2) && (game_globals[2] != 8); + return !(globals.redPagesInBook & 2) && (globals.heldPage != 8); case 103: // Blue page - return !(game_globals[7] & 2) && (game_globals[2] != 2); + return !(globals.bluePagesInBook & 2) && (globals.heldPage != 2); default: return MystScriptParser::getVar(var); } } void MystScriptParser_Selenitic::toggleVar(uint16 var) { - uint16 *game_globals = _vm->_saveLoad->_v->game_globals; - uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + MystVariables::Globals &globals = _vm->_saveLoad->_v->globals; + MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; switch(var) { case 0: // Sound receiver emitters enabled - selenitic_vars[4] = (selenitic_vars[4] + 1) % 2; + selenitic.emitterEnabledWind = (selenitic.emitterEnabledWind + 1) % 2; break; case 1: - selenitic_vars[1] = (selenitic_vars[1] + 1) % 2; + selenitic.emitterEnabledVolcano = (selenitic.emitterEnabledVolcano + 1) % 2; break; case 2: - selenitic_vars[2] = (selenitic_vars[2] + 1) % 2; + selenitic.emitterEnabledClock = (selenitic.emitterEnabledClock + 1) % 2; break; case 3: - selenitic_vars[0] = (selenitic_vars[0] + 1) % 2; + selenitic.emitterEnabledWater = (selenitic.emitterEnabledWater + 1) % 2; break; case 4: - selenitic_vars[3] = (selenitic_vars[3] + 1) % 2; + selenitic.emitterEnabledCrystal = (selenitic.emitterEnabledCrystal + 1) % 2; break; case 5: // Sound receiver opened - selenitic_vars[5] = (selenitic_vars[5] + 1) % 2; + selenitic.soundReceiverOpened = (selenitic.soundReceiverOpened + 1) % 2; break; case 6: // Tunnel lights - selenitic_vars[6] = (selenitic_vars[6] + 1) % 2; + selenitic.tunnelLightsSwitchedOn = (selenitic.tunnelLightsSwitchedOn + 1) % 2; break; case 102: // Red page - if (!(game_globals[6] & 2)) { - if (game_globals[2] == 8) - game_globals[2] = 0; + if (!(globals.redPagesInBook & 2)) { + if (globals.heldPage == 8) + globals.heldPage = 0; else { - game_globals[2] = 8; + globals.heldPage = 8; } } break; case 103: // Blue page - if (!(game_globals[7] & 2)) { - if (game_globals[2] == 2) - game_globals[2] = 0; + if (!(globals.bluePagesInBook & 2)) { + if (globals.heldPage == 2) + globals.heldPage = 0; else { - game_globals[2] = 2; + globals.heldPage = 2; } } break; @@ -220,66 +220,66 @@ void MystScriptParser_Selenitic::toggleVar(uint16 var) { } bool MystScriptParser_Selenitic::setVarValue(uint16 var, uint16 value) { - uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; bool refresh = false; switch (var) { case 0: // Sound receiver emitters enabled - if (selenitic_vars[4] != value) { - selenitic_vars[4] = value; + if (selenitic.emitterEnabledWind != value) { + selenitic.emitterEnabledWind = value; refresh = true; } break; case 1: - if (selenitic_vars[1] != value) { - selenitic_vars[1] = value; + if (selenitic.emitterEnabledVolcano != value) { + selenitic.emitterEnabledVolcano = value; refresh = true; } break; case 2: - if (selenitic_vars[2] != value) { - selenitic_vars[2] = value; + if (selenitic.emitterEnabledClock != value) { + selenitic.emitterEnabledClock = value; refresh = true; } break; case 3: - if (selenitic_vars[0] != value) { - selenitic_vars[0] = value; + if (selenitic.emitterEnabledWater != value) { + selenitic.emitterEnabledWater = value; refresh = true; } break; case 4: - if (selenitic_vars[3] != value) { - selenitic_vars[3] = value; + if (selenitic.emitterEnabledCrystal != value) { + selenitic.emitterEnabledCrystal = value; refresh = true; } break; case 5: // Sound receiver opened - if (selenitic_vars[5] != value) { - selenitic_vars[5] = value; + if (selenitic.soundReceiverOpened != value) { + selenitic.soundReceiverOpened = value; refresh = true; } break; case 6: // Tunnel lights - if (selenitic_vars[6] != value) { - selenitic_vars[6] = value; + if (selenitic.tunnelLightsSwitchedOn != value) { + selenitic.tunnelLightsSwitchedOn = value; refresh = true; } break; case 20: // Sound lock sliders - selenitic_vars[13] = value; + selenitic.soundLockSliderPositions[0] = value; break; case 21: - selenitic_vars[14] = value; + selenitic.soundLockSliderPositions[1] = value; break; case 22: - selenitic_vars[15] = value; + selenitic.soundLockSliderPositions[2] = value; break; case 23: - selenitic_vars[16] = value; + selenitic.soundLockSliderPositions[3] = value; break; case 24: - selenitic_vars[17] = value; + selenitic.soundLockSliderPositions[4] = value; break; case 30: _mazeRunnerDoorOpened = value; @@ -372,7 +372,6 @@ void MystScriptParser_Selenitic::mazeRunnerBacktrack(uint16 &oldPosition) { _mazeRunnerCompass->drawConditionalDataToScreen(_mazeRunnerDirection); _vm->_system->delayMillis(150); } - } void MystScriptParser_Selenitic::mazeRunnerPlayVideo(uint16 video, uint16 pos) { @@ -593,7 +592,7 @@ 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) { - uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; debugC(kDebugScript, "Opcode %d: Sound receiver sigma button", op); @@ -623,7 +622,7 @@ void MystScriptParser_Selenitic::o_soundReceiverSigma(uint16 op, uint16 var, uin break; } - _soundReceiverPosition = &selenitic_vars[8 + source]; + _soundReceiverPosition = &selenitic.soundReceiverPositions[source]; _vm->_sound->stopSound(); _vm->_sound->playSound(2287); soundReceiverDrawView(); @@ -636,7 +635,7 @@ void MystScriptParser_Selenitic::o_soundReceiverSigma(uint16 op, uint16 var, uin _soundReceiverSigmaPressed = true; _vm->_sound->stopSound(); - _soundReceiverSources[selenitic_vars[7]]->drawConditionalDataToScreen(1); + _soundReceiverSources[selenitic.soundReceiverCurrentSource]->drawConditionalDataToScreen(1); soundReceiverDrawView(); @@ -715,7 +714,7 @@ void MystScriptParser_Selenitic::soundReceiverDrawAngle() { * Sound receiver source selection buttons */ void MystScriptParser_Selenitic::o_soundReceiverSource(uint16 op, uint16 var, uint16 argc, uint16 *argv) { - uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; debugC(kDebugScript, "Opcode %d: Sound receiver source", op); @@ -728,12 +727,12 @@ void MystScriptParser_Selenitic::o_soundReceiverSource(uint16 op, uint16 var, ui uint pressedButton = var - 9; - if (selenitic_vars[7] != pressedButton) { - selenitic_vars[7] = pressedButton; + if (selenitic.soundReceiverCurrentSource != pressedButton) { + selenitic.soundReceiverCurrentSource = pressedButton; _soundReceiverCurrentSource->drawConditionalDataToScreen(0); - _soundReceiverPosition = &selenitic_vars[8 + pressedButton]; + _soundReceiverPosition = &selenitic.soundReceiverPositions[pressedButton]; _soundReceiverCurrentSource = _soundReceiverSources[pressedButton]; _vm->_sound->stopSound(); @@ -841,25 +840,25 @@ 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); - uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; MystResourceType10 *slider = soundLockSliderFromVar(var); uint16 *value = 0; switch (var) { case 20: // Sound lock sliders - value = &selenitic_vars[13]; + value = &selenitic.soundLockSliderPositions[0]; break; case 21: - value = &selenitic_vars[14]; + value = &selenitic.soundLockSliderPositions[1]; break; case 22: - value = &selenitic_vars[15]; + value = &selenitic.soundLockSliderPositions[2]; break; case 23: - value = &selenitic_vars[16]; + value = &selenitic.soundLockSliderPositions[3]; break; case 24: - value = &selenitic_vars[17]; + value = &selenitic.soundLockSliderPositions[4]; break; } @@ -900,7 +899,7 @@ 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); - uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; bool solved = true; _vm->_sound->pauseBackground(); @@ -908,11 +907,11 @@ void MystScriptParser_Selenitic::o_soundLockButton(uint16 op, uint16 var, uint16 _soundLockButton->drawConditionalDataToScreen(1); _vm->_cursor->hideCursor(); - soundLockCheckSolution(_soundLockSlider1, selenitic_vars[13], 5, solved); - soundLockCheckSolution(_soundLockSlider2, selenitic_vars[14], 9, solved); - soundLockCheckSolution(_soundLockSlider3, selenitic_vars[15], 0, solved); - soundLockCheckSolution(_soundLockSlider4, selenitic_vars[16], 6, solved); - soundLockCheckSolution(_soundLockSlider5, selenitic_vars[17], 7, solved); + 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); _vm->_sound->playSound(1148); _vm->_sound->resumeBackground(); @@ -1007,9 +1006,9 @@ void MystScriptParser_Selenitic::soundReceiverIncreaseSpeed() { } void MystScriptParser_Selenitic::soundReceiverUpdateSound() { - uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; - uint16 soundId = soundReceiverCurrentSound(selenitic_vars[7], *_soundReceiverPosition); + uint16 soundId = soundReceiverCurrentSound(selenitic.soundReceiverCurrentSource, *_soundReceiverPosition); _vm->_sound->replaceSound(soundId); } @@ -1065,34 +1064,34 @@ uint16 MystScriptParser_Selenitic::soundReceiverCurrentSound(uint16 source, uint } void MystScriptParser_Selenitic::soundReceiverSolution(uint16 source, uint16 &solution, bool &enabled) { - uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; switch (source) { case 0: - enabled = selenitic_vars[0]; + enabled = selenitic.emitterEnabledWater; solution = 1534; break; case 1: - enabled = selenitic_vars[1]; + enabled = selenitic.emitterEnabledVolcano; solution = 1303; break; case 2: - enabled = selenitic_vars[2]; + enabled = selenitic.emitterEnabledClock; solution = 556; break; case 3: - enabled = selenitic_vars[3]; + enabled = selenitic.emitterEnabledCrystal; solution = 150; break; case 4: - enabled = selenitic_vars[4]; + enabled = selenitic.emitterEnabledWind; solution = 2122; break; } } void MystScriptParser_Selenitic::o_soundReceiver_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { - uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; debugC(kDebugScript, "Opcode %d: Sound receiver init", op); @@ -1113,15 +1112,15 @@ 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_vars[7]; - _soundReceiverPosition = &selenitic_vars[8 + currentSource]; + uint16 currentSource = selenitic.soundReceiverCurrentSource; + _soundReceiverPosition = &selenitic.soundReceiverPositions[currentSource]; _soundReceiverCurrentSource = _soundReceiverSources[currentSource]; _soundReceiverSigmaPressed = false; } void MystScriptParser_Selenitic::o_soundLock_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) { - uint16 *selenitic_vars = _vm->_saveLoad->_v->selenitic_vars; + MystVariables::Selenitic &selenitic = _vm->_saveLoad->_v->selenitic; debugC(kDebugScript, "Opcode %d: Sound lock init", op); @@ -1130,23 +1129,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_vars[13]); + _soundLockSlider1->setStep(selenitic.soundLockSliderPositions[0]); break; case 21: _soundLockSlider2 = static_cast<MystResourceType10 *>(_vm->_resources[i]); - _soundLockSlider2->setStep(selenitic_vars[14]); + _soundLockSlider2->setStep(selenitic.soundLockSliderPositions[1]); break; case 22: _soundLockSlider3 = static_cast<MystResourceType10 *>(_vm->_resources[i]); - _soundLockSlider3->setStep(selenitic_vars[15]); + _soundLockSlider3->setStep(selenitic.soundLockSliderPositions[2]); break; case 23: _soundLockSlider4 = static_cast<MystResourceType10 *>(_vm->_resources[i]); - _soundLockSlider4->setStep(selenitic_vars[16]); + _soundLockSlider4->setStep(selenitic.soundLockSliderPositions[3]); break; case 24: _soundLockSlider5 = static_cast<MystResourceType10 *>(_vm->_resources[i]); - _soundLockSlider5->setStep(selenitic_vars[17]); + _soundLockSlider5->setStep(selenitic.soundLockSliderPositions[4]); break; } } else if (_vm->_resources[i]->type == kMystConditionalImage) { |