MOHAWK: Give meaningful names to the game global vars and selenitic vars

svn-id: r54758
This commit is contained in:
Bastien Bouclet 2010-12-04 09:26:44 +00:00
parent 16483fcf34
commit 4a8fc942b7
4 changed files with 242 additions and 177 deletions

View file

@ -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++)