aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk
diff options
context:
space:
mode:
authorBastien Bouclet2010-12-04 09:26:44 +0000
committerBastien Bouclet2010-12-04 09:26:44 +0000
commit4a8fc942b7f7ea0636650ed44f0fde6db91c6b11 (patch)
tree6665176375c11c5c8a3313a5e278bb0018398e28 /engines/mohawk
parent16483fcf34dbe029ccb67a9d7966c5d904b0bf79 (diff)
downloadscummvm-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.cpp206
-rw-r--r--engines/mohawk/myst_saveload.h24
-rw-r--r--engines/mohawk/myst_scripts.cpp8
-rw-r--r--engines/mohawk/myst_stacks/selenitic.cpp179
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) {