MOHAWK: Give meaningful names to the game global vars and selenitic vars
svn-id: r54758
This commit is contained in:
parent
16483fcf34
commit
4a8fc942b7
4 changed files with 242 additions and 177 deletions
|
@ -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 (loadFile->readUint16LE() != 0)
|
||||
warning("Non-zero value at 0x%03X", loadFile->pos());
|
||||
} else
|
||||
_v->selenitic_vars[i] = loadFile->readByte();
|
||||
|
||||
if (_v->selenitic_vars[i] > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->selenitic_vars[i]);
|
||||
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();
|
||||
}
|
||||
|
||||
for(byte i = 7; i < 18; i++)
|
||||
_v->selenitic_vars[i] = loadFile->readUint16LE();
|
||||
_v->selenitic.soundReceiverCurrentSource = loadFile->readUint16LE();
|
||||
|
||||
for(byte i = 0; i < 5; i++)
|
||||
_v->selenitic.soundReceiverPositions[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++)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue