MOHAWK: Rewrite the Myst save/load code to use Common::Serializer and name all the variables
svn-id: r54803
This commit is contained in:
parent
fb854b1483
commit
edf4b1926b
2 changed files with 307 additions and 653 deletions
|
@ -26,13 +26,33 @@
|
|||
#include "mohawk/myst.h"
|
||||
#include "mohawk/myst_saveload.h"
|
||||
|
||||
#include "common/serializer.h"
|
||||
#include "common/util.h"
|
||||
|
||||
namespace Mohawk {
|
||||
|
||||
MystSaveLoad::MystSaveLoad(MohawkEngine_Myst *vm, Common::SaveFileManager *saveFileMan) : _vm(vm), _saveFileMan(saveFileMan) {
|
||||
_v = new MystVariables();
|
||||
initMystVariables(_v);
|
||||
|
||||
// Most of the variables are zero at game start.
|
||||
_v->globals.u0 = 2;
|
||||
// Current Age / Stack - Start in Myst
|
||||
_v->globals.currentAge = 2;
|
||||
_v->globals.u1 = 1;
|
||||
|
||||
// Library Bookcase Door - Default to Up
|
||||
_v->myst.libraryBookcaseDoor = 1;
|
||||
// Dock Imager Numeric Selection - Default to 67
|
||||
_v->myst.imagerSelection = 67;
|
||||
// Dock Imager Active - Default to Active
|
||||
_v->myst.imagerActive = 1;
|
||||
// Stellar Observatory Lights - Default to On
|
||||
_v->myst.observatoryLights = 1;
|
||||
|
||||
// Lighthouse Trapdoor State - Default to Locked
|
||||
_v->stoneship.trapdoorState = 2;
|
||||
// Lighthouse Chest Water State - Default to Full
|
||||
_v->stoneship.chestWaterState = 1;
|
||||
}
|
||||
|
||||
MystSaveLoad::~MystSaveLoad() {
|
||||
|
@ -50,7 +70,8 @@ bool MystSaveLoad::loadGame(const Common::String &filename) {
|
|||
Common::InSaveFile *loadFile = _saveFileMan->openForLoading(filename);
|
||||
if (!loadFile)
|
||||
return false;
|
||||
debugC(kDebugSaveLoad, "Loading game from \'%s\'", filename.c_str());
|
||||
|
||||
debugC(kDebugSaveLoad, "Loading game from '%s'", filename.c_str());
|
||||
|
||||
// First, let's make sure we're using a saved game file from this version of Myst
|
||||
// By checking length of file...
|
||||
|
@ -58,279 +79,16 @@ bool MystSaveLoad::loadGame(const Common::String &filename) {
|
|||
if ((size == -1)
|
||||
|| (size != 664 && (_vm->getFeatures() & GF_ME))
|
||||
|| (size != 601 && !(_vm->getFeatures() & GF_ME))) {
|
||||
warning ("Incompatible saved game version");
|
||||
// FIXME - Add Support to load original game saves in ME and vice versa
|
||||
warning("Incompatible saved game version");
|
||||
// FIXME: Add Support to load original game saves in ME and vice versa
|
||||
delete loadFile;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Now, we'll read in the variable values.
|
||||
// Lots of checking code here so that save files with differing formats are flagged...
|
||||
if ((_v->globals.u0 = loadFile->readUint16LE()) != 2)
|
||||
warning("Unexpected value at 0x%03X - Found %u Expected %u", loadFile->pos(), _v->globals.u0, 2);
|
||||
|
||||
_v->globals.currentAge = loadFile->readUint16LE();
|
||||
_v->globals.heldPage = loadFile->readUint16LE();
|
||||
|
||||
if ((_v->globals.u1 = loadFile->readUint16LE()) != 1)
|
||||
warning("Unexpected value at 0x%03X - Found %u Expected %u", loadFile->pos(), _v->globals.u1, 1);
|
||||
|
||||
_v->globals.transitions = loadFile->readUint16LE();
|
||||
_v->globals.ending = loadFile->readUint16LE();
|
||||
_v->globals.redPagesInBook = loadFile->readUint16LE();
|
||||
_v->globals.bluePagesInBook = loadFile->readUint16LE();
|
||||
|
||||
for (byte i = 0; i < 8; i++) {
|
||||
if (_vm->getFeatures() & GF_ME) {
|
||||
_v->myst_vars[i] = loadFile->readUint16LE();
|
||||
|
||||
if (loadFile->readUint16LE() != 0)
|
||||
warning("Non-zero value at 0x%03X", loadFile->pos());
|
||||
} else
|
||||
_v->myst_vars[i] = loadFile->readByte();
|
||||
|
||||
if (_v->myst_vars[i] > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[i]);
|
||||
}
|
||||
|
||||
if ((_v->myst_vars[8] = loadFile->readUint16LE()) > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[8]);
|
||||
|
||||
if ((_v->myst_vars[9] = loadFile->readUint16LE()) > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[9]);
|
||||
|
||||
if ((_v->myst_vars[10] = loadFile->readUint16LE()) > 25)
|
||||
warning("Value exceeds maximum of %u found at 0x%03X - Found %u", 25, loadFile->pos(), _v->myst_vars[10]);
|
||||
|
||||
if ((_v->myst_vars[11] = loadFile->readUint16LE()) > 11)
|
||||
warning("Value exceeds maximum of %u found at 0x%03X - Found %u", 11, loadFile->pos(), _v->myst_vars[11]);
|
||||
|
||||
_v->myst_vars[12] = loadFile->readUint16LE();
|
||||
// TODO: Add validation of valid set for Clock Tower Hour Hand
|
||||
|
||||
if ((_v->myst_vars[13] = loadFile->readUint16LE()) > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[13]);
|
||||
|
||||
if ((_v->myst_vars[14] = loadFile->readUint16LE()) > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[14]);
|
||||
|
||||
if ((_v->myst_vars[15] = loadFile->readUint16LE()) > 2)
|
||||
warning("Value exceeds maximum of %u found at 0x%03X - Found %u", 2, loadFile->pos(), _v->myst_vars[15]);
|
||||
|
||||
_v->myst_vars[16] = loadFile->readUint16LE();
|
||||
_v->myst_vars[17] = loadFile->readUint16LE();
|
||||
|
||||
if ((_v->myst_vars[18] = loadFile->readUint16LE()) > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[18]);
|
||||
|
||||
_v->myst_vars[19] = loadFile->readUint16LE();
|
||||
|
||||
if ((_v->myst_vars[20] = loadFile->readUint16LE()) > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[20]);
|
||||
|
||||
if ((_v->myst_vars[21] = loadFile->readUint16LE()) != 0)
|
||||
warning("Non-zero value at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[21]);
|
||||
|
||||
if ((_v->myst_vars[22] = loadFile->readUint16LE()) != 0)
|
||||
warning("Non-zero value at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[22]);
|
||||
|
||||
if ((_v->myst_vars[23] = loadFile->readUint16LE()) != 0)
|
||||
warning("Non-zero value at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[23]);
|
||||
|
||||
if ((_v->myst_vars[24] = loadFile->readUint16LE()) != 0)
|
||||
warning("Non-zero value at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[24]);
|
||||
|
||||
if ((_v->myst_vars[25] = loadFile->readUint16LE()) > 359)
|
||||
warning("Value exceeds maximum of %u found at 0x%03X - Found %u", 359, loadFile->pos(), _v->myst_vars[25]);
|
||||
|
||||
_v->myst_vars[26] = loadFile->readUint16LE();
|
||||
|
||||
if ((_v->myst_vars[27] = loadFile->readUint16LE()) > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[27]);
|
||||
|
||||
_v->myst_vars[28] = loadFile->readUint16LE();
|
||||
if (_v->myst_vars[28] < 1 && _v->myst_vars[28] > 31)
|
||||
warning("Out of Range value found at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[28]);
|
||||
|
||||
if ((_v->myst_vars[29] = loadFile->readUint16LE()) > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[29]);
|
||||
|
||||
if ((_v->myst_vars[30] = loadFile->readUint16LE()) > 11)
|
||||
warning("Value exceeds maximum of %u found at 0x%03X - Found %u", 11, loadFile->pos(), _v->myst_vars[30]);
|
||||
|
||||
if ((_v->myst_vars[31] = loadFile->readUint16LE()) > (24 * 60))
|
||||
warning("Value exceeds maximum of %u found at 0x%03X - Found %u", (24 * 60), loadFile->pos(), _v->myst_vars[31]);
|
||||
|
||||
_v->myst_vars[32] = loadFile->readUint16LE();
|
||||
|
||||
_v->myst_vars[33] = loadFile->readUint16LE();
|
||||
if (_v->myst_vars[33] < 1 && _v->myst_vars[33] > 31)
|
||||
warning("Out of Range value found at 0x%03X - Found %u", loadFile->pos(), _v->myst_vars[33]);
|
||||
|
||||
if ((_v->myst_vars[34] = loadFile->readUint16LE()) > 11)
|
||||
warning("Value exceeds maximum of %u found at 0x%03X - Found %u", 11, loadFile->pos(), _v->myst_vars[34]);
|
||||
|
||||
if ((_v->myst_vars[35] = loadFile->readUint16LE()) > (24 * 60))
|
||||
warning("Value exceeds maximum of %u found at 0x%03X - Found %u", (24 * 60), loadFile->pos(), _v->myst_vars[35]);
|
||||
|
||||
_v->myst_vars[36] = loadFile->readUint16LE();
|
||||
|
||||
if ((_v->myst_vars[37] = loadFile->readUint16LE()) > 999)
|
||||
warning("Value exceeds maximum of %u found at 0x%03X - Found %u", 999, loadFile->pos(), _v->myst_vars[37]);
|
||||
|
||||
if ((_v->myst_vars[38] = loadFile->readUint16LE()) > 12)
|
||||
warning("Value exceeds maximum of %u found at 0x%03X - Found %u", 12, loadFile->pos(), _v->myst_vars[38]);
|
||||
|
||||
_v->myst_vars[39] = loadFile->readUint16LE();
|
||||
_v->myst_vars[40] = loadFile->readUint16LE();
|
||||
|
||||
_v->myst_vars[41] = loadFile->readUint16LE();
|
||||
_v->myst_vars[42] = loadFile->readUint16LE();
|
||||
_v->myst_vars[43] = loadFile->readUint16LE();
|
||||
_v->myst_vars[44] = loadFile->readUint16LE();
|
||||
_v->myst_vars[45] = loadFile->readUint16LE();
|
||||
|
||||
_v->myst_vars[46] = loadFile->readUint16LE();
|
||||
_v->myst_vars[47] = loadFile->readUint16LE();
|
||||
_v->myst_vars[48] = loadFile->readUint16LE();
|
||||
_v->myst_vars[49] = loadFile->readUint16LE();
|
||||
|
||||
for (byte i = 0; i < 4; i++) {
|
||||
if (_vm->getFeatures() & GF_ME) {
|
||||
_v->channelwood_vars[i] = loadFile->readUint16LE();
|
||||
|
||||
if (loadFile->readUint16LE() != 0)
|
||||
warning("Non-zero value at 0x%03X", loadFile->pos());
|
||||
} else
|
||||
_v->channelwood_vars[i] = loadFile->readByte();
|
||||
|
||||
if (_v->channelwood_vars[i] > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->channelwood_vars[i]);
|
||||
}
|
||||
|
||||
_v->channelwood_vars[4] = loadFile->readUint16LE();
|
||||
|
||||
if ((_v->channelwood_vars[5] = loadFile->readUint16LE()) > 3)
|
||||
warning("Value exceeds maximum of %u found at 0x%03X - Found %u", 3, loadFile->pos(), _v->channelwood_vars[5]);
|
||||
|
||||
if ((_v->channelwood_vars[6] = loadFile->readUint16LE()) > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->channelwood_vars[6]);
|
||||
|
||||
if (_vm->getFeatures() & GF_ME) {
|
||||
if (loadFile->readUint16LE() != 0)
|
||||
warning("Non-zero value at 0x%03X", loadFile->pos());
|
||||
|
||||
if (loadFile->readUint16LE() != 0)
|
||||
warning("Non-zero value at 0x%03X", loadFile->pos());
|
||||
} else if (loadFile->readByte() != 0)
|
||||
warning("Non-zero value at 0x%03X", loadFile->pos());
|
||||
|
||||
for (byte i = 0; i < 3; i++)
|
||||
if ((_v->mech_vars[i] = loadFile->readUint16LE()) > 1)
|
||||
warning("Non-Boolean value found at 0x%03X - Found %u", loadFile->pos(), _v->mech_vars[i]);
|
||||
|
||||
_v->mech_vars[3] = loadFile->readUint16LE();
|
||||
for (byte i = 4; i < 8; i++)
|
||||
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]);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
_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) {
|
||||
_v->stoneship_vars[i] = loadFile->readUint16LE();
|
||||
} else
|
||||
_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->stoneship_vars[i]);
|
||||
}
|
||||
for (byte i = 3; i < 14; i++)
|
||||
_v->stoneship_vars[i] = loadFile->readUint16LE();
|
||||
|
||||
for (byte i = 0; i < 1; i++)
|
||||
_v->dunny_vars[i] = loadFile->readUint16LE();
|
||||
|
||||
// Reading unknown region...
|
||||
// When Zero Value regions are included, these are 5 blocks of
|
||||
// 41 uint16 values.
|
||||
|
||||
for (byte i = 0; i < 31; i++)
|
||||
_v->unknown_myst[i] = loadFile->readUint16LE();
|
||||
|
||||
for (byte i = 0; i < 10; i++) {
|
||||
if (loadFile->readUint16LE() != 0)
|
||||
warning("Non-zero value at 0x%03X", loadFile->pos());
|
||||
}
|
||||
|
||||
for (byte i = 0; i < 37; i++)
|
||||
_v->unknown_channelwood[i] = loadFile->readUint16LE();
|
||||
|
||||
for (byte i = 0; i < 4; i++) {
|
||||
if (loadFile->readUint16LE() != 0)
|
||||
warning("Non-zero value at 0x%03X", loadFile->pos());
|
||||
}
|
||||
|
||||
for (byte i = 0; i < 18; i++)
|
||||
_v->unknown_mech[i] = loadFile->readUint16LE();
|
||||
|
||||
for (byte i = 0; i < 23; i++) {
|
||||
if (loadFile->readUint16LE() != 0)
|
||||
warning("Non-zero value at 0x%03X", loadFile->pos());
|
||||
}
|
||||
|
||||
for (byte i = 0; i < 30; i++)
|
||||
_v->unknown_selenitic[i] = loadFile->readUint16LE();
|
||||
|
||||
for (byte i = 0; i < 11; i++) {
|
||||
if (loadFile->readUint16LE() != 0)
|
||||
warning("Non-zero value at 0x%03X", loadFile->pos());
|
||||
}
|
||||
|
||||
for (byte i = 0; i < 22; i++)
|
||||
_v->unknown_stoneship[i] = loadFile->readUint16LE();
|
||||
|
||||
for (byte i = 0; i < 19; i++) {
|
||||
if (loadFile->readUint16LE() != 0)
|
||||
warning("Non-zero value at 0x%03X", loadFile->pos());
|
||||
}
|
||||
|
||||
if (_vm->getFeatures() & GF_ME) {
|
||||
if (loadFile->pos() != 664)
|
||||
warning("Unexpected File Position 0x%03X At End of Load", loadFile->pos());
|
||||
} else {
|
||||
if (loadFile->pos() != 601)
|
||||
warning("Unexpected File Position 0x%03X At End of Load", loadFile->pos());
|
||||
}
|
||||
|
||||
Common::Serializer s(loadFile, 0);
|
||||
syncGameState(s);
|
||||
delete loadFile;
|
||||
|
||||
debug_printMystVariables(_v);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -343,383 +101,212 @@ bool MystSaveLoad::saveGame(const Common::String &fname) {
|
|||
Common::OutSaveFile *saveFile = _saveFileMan->openForSaving(filename);
|
||||
if (!saveFile)
|
||||
return false;
|
||||
debugC(kDebugSaveLoad, "Saving game to \'%s\'", filename.c_str());
|
||||
|
||||
debug_printMystVariables(_v);
|
||||
|
||||
// Performs no validation of variable values - Assumes they are valid.
|
||||
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.ending);
|
||||
saveFile->writeUint16LE(_v->globals.redPagesInBook);
|
||||
saveFile->writeUint16LE(_v->globals.bluePagesInBook);
|
||||
|
||||
for (byte i = 0; i < 8; i++) {
|
||||
if (_vm->getFeatures() & GF_ME) {
|
||||
saveFile->writeUint16LE(_v->myst_vars[i]);
|
||||
saveFile->writeUint16LE(0);
|
||||
} else
|
||||
saveFile->writeByte(_v->myst_vars[i]);
|
||||
}
|
||||
|
||||
for (byte i = 8; i < 50; i++)
|
||||
saveFile->writeUint16LE(_v->myst_vars[i]);
|
||||
|
||||
for (byte i = 0; i < 4; i++) {
|
||||
if (_vm->getFeatures() & GF_ME) {
|
||||
saveFile->writeUint16LE(_v->channelwood_vars[i]);
|
||||
saveFile->writeUint16LE(0);
|
||||
} else
|
||||
saveFile->writeByte(_v->channelwood_vars[i]);
|
||||
}
|
||||
|
||||
for (byte i = 4; i < 7; i++)
|
||||
saveFile->writeUint16LE(_v->channelwood_vars[i]);
|
||||
|
||||
if (_vm->getFeatures() & GF_ME) {
|
||||
saveFile->writeUint16LE(0);
|
||||
saveFile->writeUint16LE(0);
|
||||
} else
|
||||
saveFile->writeByte(0);
|
||||
|
||||
for (byte i = 0; i < 8; i++)
|
||||
saveFile->writeUint16LE(_v->mech_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);
|
||||
}
|
||||
|
||||
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) {
|
||||
saveFile->writeUint16LE(_v->stoneship_vars[i]);
|
||||
} else
|
||||
saveFile->writeByte(_v->stoneship_vars[i]);
|
||||
}
|
||||
for (byte i = 3; i < 14; i++)
|
||||
saveFile->writeUint16LE(_v->stoneship_vars[i]);
|
||||
|
||||
for (byte i = 0; i < 1; i++)
|
||||
saveFile->writeUint16LE(_v->dunny_vars[i]);
|
||||
|
||||
for (byte i = 0; i < 31; i++)
|
||||
saveFile->writeUint16LE(_v->unknown_myst[i]);
|
||||
|
||||
for (byte i = 0; i < 10; i++)
|
||||
saveFile->writeUint16LE(0);
|
||||
|
||||
for (byte i = 0; i < 37; i++)
|
||||
saveFile->writeUint16LE(_v->unknown_channelwood[i]);
|
||||
|
||||
for (byte i = 0; i < 4; i++)
|
||||
saveFile->writeUint16LE(0);
|
||||
|
||||
for (byte i = 0; i < 18; i++)
|
||||
saveFile->writeUint16LE(_v->unknown_mech[i]);
|
||||
|
||||
for (byte i = 0; i < 23; i++)
|
||||
saveFile->writeUint16LE(0);
|
||||
|
||||
for (byte i = 0; i < 30; i++)
|
||||
saveFile->writeUint16LE(_v->unknown_selenitic[i]);
|
||||
|
||||
for (byte i = 0; i < 11; i++)
|
||||
saveFile->writeUint16LE(0);
|
||||
|
||||
for (byte i = 0; i < 22; i++)
|
||||
saveFile->writeUint16LE(_v->unknown_stoneship[i]);
|
||||
|
||||
for (byte i = 0; i < 19; i++)
|
||||
saveFile->writeUint16LE(0);
|
||||
debugC(kDebugSaveLoad, "Saving game to '%s'", filename.c_str());
|
||||
|
||||
Common::Serializer s(0, saveFile);
|
||||
syncGameState(s);
|
||||
saveFile->finalize();
|
||||
|
||||
delete saveFile;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void MystSaveLoad::syncGameState(Common::Serializer &s) {
|
||||
// Globals first
|
||||
s.syncAsUint16LE(_v->globals.u0);
|
||||
s.syncAsUint16LE(_v->globals.currentAge);
|
||||
s.syncAsUint16LE(_v->globals.heldPage);
|
||||
s.syncAsUint16LE(_v->globals.u1);
|
||||
s.syncAsUint16LE(_v->globals.transitions);
|
||||
s.syncAsUint16LE(_v->globals.ending);
|
||||
s.syncAsUint16LE(_v->globals.redPagesInBook);
|
||||
s.syncAsUint16LE(_v->globals.bluePagesInBook);
|
||||
|
||||
// Onto Myst
|
||||
if (_vm->getFeatures() & GF_ME) {
|
||||
s.syncAsUint32LE(_v->myst.cabinMarkerSwitch);
|
||||
s.syncAsUint32LE(_v->myst.clockTowerMarkerSwitch);
|
||||
s.syncAsUint32LE(_v->myst.dockMarkerSwitch);
|
||||
s.syncAsUint32LE(_v->myst.poolMarkerSwitch);
|
||||
s.syncAsUint32LE(_v->myst.gearsMarkerSwitch);
|
||||
s.syncAsUint32LE(_v->myst.generatorMarkerSwitch);
|
||||
s.syncAsUint32LE(_v->myst.observatoryMarkerSwitch);
|
||||
s.syncAsUint32LE(_v->myst.rocketshipMarkerSwitch);
|
||||
} else {
|
||||
s.syncAsByte(_v->myst.cabinMarkerSwitch);
|
||||
s.syncAsByte(_v->myst.clockTowerMarkerSwitch);
|
||||
s.syncAsByte(_v->myst.dockMarkerSwitch);
|
||||
s.syncAsByte(_v->myst.poolMarkerSwitch);
|
||||
s.syncAsByte(_v->myst.gearsMarkerSwitch);
|
||||
s.syncAsByte(_v->myst.generatorMarkerSwitch);
|
||||
s.syncAsByte(_v->myst.observatoryMarkerSwitch);
|
||||
s.syncAsByte(_v->myst.rocketshipMarkerSwitch);
|
||||
}
|
||||
|
||||
s.syncAsUint16LE(_v->myst.greenBookState);
|
||||
s.syncAsUint16LE(_v->myst.shipState);
|
||||
s.syncAsUint16LE(_v->myst.cabinValvePosition);
|
||||
s.syncAsUint16LE(_v->myst.clockTowerHourPosition);
|
||||
s.syncAsUint16LE(_v->myst.clockTowerMinutePosition);
|
||||
s.syncAsUint16LE(_v->myst.gearsOpen);
|
||||
s.syncAsUint16LE(_v->myst.clockTowerBridgeOpen);
|
||||
s.syncAsUint16LE(_v->myst.generatorBreakers);
|
||||
s.syncAsUint16LE(_v->myst.generatorButtons);
|
||||
s.syncAsUint16LE(_v->myst.generatorVoltage);
|
||||
s.syncAsUint16LE(_v->myst.libraryBookcaseDoor);
|
||||
s.syncAsUint16LE(_v->myst.imagerSelection);
|
||||
s.syncAsUint16LE(_v->myst.imagerActive);
|
||||
s.syncAsUint16LE(_v->myst.u0);
|
||||
s.syncAsUint16LE(_v->myst.u1);
|
||||
s.syncAsUint16LE(_v->myst.u2);
|
||||
s.syncAsUint16LE(_v->myst.u3);
|
||||
s.syncAsUint16LE(_v->myst.towerRotationAngle);
|
||||
s.syncAsUint16LE(_v->myst.courtyardImageBoxes);
|
||||
s.syncAsUint16LE(_v->myst.cabinPilotLightLit);
|
||||
s.syncAsUint16LE(_v->myst.observatoryDaySetting);
|
||||
s.syncAsUint16LE(_v->myst.observatoryLights);
|
||||
s.syncAsUint16LE(_v->myst.observatoryMonthSetting);
|
||||
s.syncAsUint16LE(_v->myst.observatoryTimeSetting);
|
||||
s.syncAsUint16LE(_v->myst.observatoryYearSetting);
|
||||
s.syncAsUint16LE(_v->myst.observatoryDayTarget);
|
||||
s.syncAsUint16LE(_v->myst.observatoryMonthTarget);
|
||||
s.syncAsUint16LE(_v->myst.observatoryTimeTarget);
|
||||
s.syncAsUint16LE(_v->myst.observatoryYearTarget);
|
||||
s.syncAsUint16LE(_v->myst.cabinSafeCombination);
|
||||
s.syncAsUint16LE(_v->myst.treePosition);
|
||||
s.syncAsUint16LE(_v->myst.u4);
|
||||
s.syncAsUint16LE(_v->myst.u5);
|
||||
|
||||
for (int i = 0; i < 5; i++)
|
||||
s.syncAsUint16LE(_v->myst.rocketSliderPosition[i]);
|
||||
|
||||
s.syncAsUint16LE(_v->myst.u6);
|
||||
s.syncAsUint16LE(_v->myst.u7);
|
||||
s.syncAsUint16LE(_v->myst.u8);
|
||||
s.syncAsUint16LE(_v->myst.u9);
|
||||
|
||||
// Channelwood
|
||||
if (_vm->getFeatures() & GF_ME) {
|
||||
s.syncAsUint32LE(_v->channelwood.waterPumpBridgeState);
|
||||
s.syncAsUint32LE(_v->channelwood.elevatorState);
|
||||
s.syncAsUint32LE(_v->channelwood.stairsLowerDoorState);
|
||||
s.syncAsUint32LE(_v->channelwood.pipeState);
|
||||
} else {
|
||||
s.syncAsByte(_v->channelwood.waterPumpBridgeState);
|
||||
s.syncAsByte(_v->channelwood.elevatorState);
|
||||
s.syncAsByte(_v->channelwood.stairsLowerDoorState);
|
||||
s.syncAsByte(_v->channelwood.pipeState);
|
||||
}
|
||||
|
||||
s.syncAsUint16LE(_v->channelwood.waterValveStates);
|
||||
s.syncAsUint16LE(_v->channelwood.holoprojectorSelection);
|
||||
s.syncAsUint16LE(_v->channelwood.stairsUpperDoorState);
|
||||
|
||||
if (_vm->getFeatures() & GF_ME)
|
||||
s.skip(4);
|
||||
else
|
||||
s.skip(1);
|
||||
|
||||
// Mechanical
|
||||
|
||||
s.syncAsUint16LE(_v->mechanical.achenarPanelState);
|
||||
s.syncAsUint16LE(_v->mechanical.sirrusPanelState);
|
||||
s.syncAsUint16LE(_v->mechanical.staircaseState);
|
||||
s.syncAsUint16LE(_v->mechanical.elevatorRotation);
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
s.syncAsUint16LE(_v->mechanical.codeShape[i]);
|
||||
|
||||
// Selenitic
|
||||
|
||||
if (_vm->getFeatures() & GF_ME) {
|
||||
s.syncAsUint32LE(_v->selenitic.emitterEnabledWater);
|
||||
s.syncAsUint32LE(_v->selenitic.emitterEnabledVolcano);
|
||||
s.syncAsUint32LE(_v->selenitic.emitterEnabledClock);
|
||||
s.syncAsUint32LE(_v->selenitic.emitterEnabledCrystal);
|
||||
s.syncAsUint32LE(_v->selenitic.emitterEnabledWind);
|
||||
s.syncAsUint32LE(_v->selenitic.soundReceiverOpened);
|
||||
s.syncAsUint32LE(_v->selenitic.tunnelLightsSwitchedOn);
|
||||
} else {
|
||||
s.syncAsByte(_v->selenitic.emitterEnabledWater);
|
||||
s.syncAsByte(_v->selenitic.emitterEnabledVolcano);
|
||||
s.syncAsByte(_v->selenitic.emitterEnabledClock);
|
||||
s.syncAsByte(_v->selenitic.emitterEnabledCrystal);
|
||||
s.syncAsByte(_v->selenitic.emitterEnabledWind);
|
||||
s.syncAsByte(_v->selenitic.soundReceiverOpened);
|
||||
s.syncAsByte(_v->selenitic.tunnelLightsSwitchedOn);
|
||||
}
|
||||
|
||||
s.syncAsUint16LE(_v->selenitic.soundReceiverCurrentSource);
|
||||
|
||||
for (byte i = 0; i < 5; i++)
|
||||
s.syncAsUint16LE(_v->selenitic.soundReceiverPositions[i]);
|
||||
|
||||
for (byte i = 0; i < 5; i++)
|
||||
s.syncAsUint16LE(_v->selenitic.soundLockSliderPositions[i]);
|
||||
|
||||
// Stoneship
|
||||
|
||||
if (_vm->getFeatures() & GF_ME) {
|
||||
s.syncAsUint16LE(_v->stoneship.lightState);
|
||||
s.syncAsUint16LE(_v->stoneship.u0);
|
||||
s.syncAsUint16LE(_v->stoneship.u1);
|
||||
} else {
|
||||
s.syncAsByte(_v->stoneship.lightState);
|
||||
s.syncAsByte(_v->stoneship.u0);
|
||||
s.syncAsByte(_v->stoneship.u1);
|
||||
}
|
||||
|
||||
s.syncAsUint16LE(_v->stoneship.pumpState);
|
||||
s.syncAsUint16LE(_v->stoneship.trapdoorState);
|
||||
s.syncAsUint16LE(_v->stoneship.chestWaterState);
|
||||
s.syncAsUint16LE(_v->stoneship.chestValveState);
|
||||
s.syncAsUint16LE(_v->stoneship.chestOpenState);
|
||||
s.syncAsUint16LE(_v->stoneship.trapdoorKeyState);
|
||||
|
||||
for (int i = 0; i < 5; i++)
|
||||
s.syncAsUint16LE(_v->stoneship.generatorPowerLevel[i]);
|
||||
|
||||
// D'ni
|
||||
s.syncAsUint16LE(_v->dni.outcomeState);
|
||||
|
||||
// Reading unknown region...
|
||||
// When Zero Value regions are included, these are 5 blocks of
|
||||
// 41 uint16 values.
|
||||
|
||||
for (byte i = 0; i < 31; i++)
|
||||
s.syncAsUint16LE(_v->unknownMyst[i]);
|
||||
|
||||
s.skip(20);
|
||||
|
||||
for (byte i = 0; i < 37; i++)
|
||||
s.syncAsUint16LE(_v->unknownChannelwood[i]);
|
||||
|
||||
s.skip(8);
|
||||
|
||||
for (byte i = 0; i < 18; i++)
|
||||
s.syncAsUint16LE(_v->unknownMech[i]);
|
||||
|
||||
s.skip(46);
|
||||
|
||||
for (byte i = 0; i < 30; i++)
|
||||
s.syncAsUint16LE(_v->unknownSelenitic[i]);
|
||||
|
||||
s.skip(22);
|
||||
|
||||
for (byte i = 0; i < 22; i++)
|
||||
s.syncAsUint16LE(_v->unknownStoneship[i]);
|
||||
|
||||
s.skip(38);
|
||||
|
||||
if ((_vm->getFeatures() & GF_ME && s.bytesSynced() != 664) || (!(_vm->getFeatures() & GF_ME) && s.bytesSynced() != 601))
|
||||
warning("Unexpected File Position 0x%03X At End of Save/Load", s.bytesSynced());
|
||||
}
|
||||
|
||||
void MystSaveLoad::deleteSave(const Common::String &saveName) {
|
||||
debugC(kDebugSaveLoad, "Deleting save file \'%s\'", saveName.c_str());
|
||||
_saveFileMan->removeSavefile(saveName.c_str());
|
||||
}
|
||||
|
||||
void MystSaveLoad::initMystVariables(MystVariables *_tv) {
|
||||
uint8 i;
|
||||
|
||||
// Most of the variables are zero at game start.
|
||||
_v->globals.u0 = 2;
|
||||
// Current Age / Stack - Start in Myst
|
||||
_tv->globals.currentAge = 2;
|
||||
_tv->globals.heldPage = 0;
|
||||
_tv->globals.u1 = 1;
|
||||
_tv->globals.transitions = 0;
|
||||
_tv->globals.ending = 0;
|
||||
_tv->globals.redPagesInBook = 0;
|
||||
_tv->globals.bluePagesInBook = 0;
|
||||
|
||||
_tv->myst.generatorBreakers = 0;
|
||||
_tv->myst.generatorButtons = 0;
|
||||
_tv->myst.generatorVoltage = 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;
|
||||
|
||||
_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++)
|
||||
_tv->dunny_vars[i] = 0;
|
||||
for (i = 0; i < ARRAYSIZE(_tv->unknown_myst); i++)
|
||||
_tv->unknown_myst[i] = 0;
|
||||
for (i = 0; i < ARRAYSIZE(_tv->unknown_channelwood); i++)
|
||||
_tv->unknown_channelwood[i] = 0;
|
||||
for (i = 0; i < ARRAYSIZE(_tv->unknown_mech); i++)
|
||||
_tv->unknown_mech[i] = 0;
|
||||
for (i = 0; i < ARRAYSIZE(_tv->unknown_selenitic); i++)
|
||||
_tv->unknown_selenitic[i] = 0;
|
||||
for (i = 0; i < ARRAYSIZE(_tv->unknown_stoneship); i++)
|
||||
_tv->unknown_stoneship[i] = 0;
|
||||
|
||||
// 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..
|
||||
|
||||
// Library Bookcase Door - Default to Up
|
||||
_tv->myst.libraryBookcaseDoor = 1;
|
||||
// Dock Imager Numeric Selection - Default to 67
|
||||
_tv->myst_vars[19] = 67;
|
||||
// Dock Imager Active - Default to Active
|
||||
_tv->myst_vars[20] = 1;
|
||||
// Stellar Observatory Lights - Default to On
|
||||
_tv->myst_vars[29] = 1;
|
||||
|
||||
// Lighthouse Trapdoor State - Default to Locked
|
||||
_tv->stoneship_vars[4] = 2;
|
||||
// Lighthouse Chest Water State - Default to Full
|
||||
_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 *myst_vars_names[] = {
|
||||
"Marker Switch Near Cabin",
|
||||
"Marker Switch Near Clock Tower",
|
||||
"Marker Switch on Dock",
|
||||
"Marker Switch Near Ship Pool",
|
||||
"Marker Switch Near Cogs",
|
||||
"Marker Switch Near Generator Room",
|
||||
"Marker Switch Near Stellar Observatory",
|
||||
"Marker Switch Near Rocket Ship",
|
||||
"Fireplace, Opened Green Book Before",
|
||||
"Ship State",
|
||||
"Cabin Gas Valve Position",
|
||||
"Clock Tower Hour Hand Position",
|
||||
"Clock Tower Minute Hand Position",
|
||||
"Clock Tower Puzzle Solved / Cogs Open",
|
||||
"Clock Tower Gear Bridge",
|
||||
"Generator Breaker State",
|
||||
"Generator Button State",
|
||||
"Generator Voltage State",
|
||||
"Library Bookcase Door",
|
||||
"Dock Imager Numeric Selection",
|
||||
"Dock Imager Active",
|
||||
"Unknown #1 - Fixed at 0",
|
||||
"Unknown #2 - Fixed at 0",
|
||||
"Unknown #3 - Fixed at 0",
|
||||
"Unknown #4 - Fixed at 0",
|
||||
"Tower Rotation Angle",
|
||||
"Boxes For Ship Float Puzzle",
|
||||
"Tree Boiler Pilot Light Lit",
|
||||
"Stellar Observatory Viewer, Control Setting Day",
|
||||
"Stellar Observatory Lights",
|
||||
"Stellar Observatory Viewer, Control Setting Month",
|
||||
"Stellar Observatory Viewer, Control Setting Time",
|
||||
"Stellar Observatory Viewer, Control Setting Year",
|
||||
"Stellar Observatory Viewer, Target Day",
|
||||
"Stellar Observatory Viewer, Target Month",
|
||||
"Stellar Observatory Viewer, Target Time",
|
||||
"Stellar Observatory Viewer, Target Year",
|
||||
"Cabin Safe Combination",
|
||||
"Channelwood Tree Position",
|
||||
"Checksum? #1",
|
||||
"Checksum? #2",
|
||||
"Rocketship Music Puzzle Slider #1 Position",
|
||||
"Rocketship Music Puzzle Slider #2 Position",
|
||||
"Rocketship Music Puzzle Slider #3 Position",
|
||||
"Rocketship Music Puzzle Slider #4 Position",
|
||||
"Rocketship Music Puzzle Slider #5 Position",
|
||||
"Unknown #5",
|
||||
"Unknown #6",
|
||||
"Unknown #7",
|
||||
"Unknown #8"
|
||||
};
|
||||
|
||||
static const char *channelwood_vars_names[] = {
|
||||
"Water Pump Bridge State",
|
||||
"Lower Walkway to Upper Walkway Elevator State",
|
||||
"Lower Walkway to Upper Walkway Spiral Stair Lower Door State",
|
||||
"Extendable Pipe State",
|
||||
"Water Valve States",
|
||||
"Achenar's Holoprojector Selection",
|
||||
"Lower Walkway to Upper Walkway Spiral Stair Upper Door State"
|
||||
};
|
||||
|
||||
static const char *mech_vars_names[] = {
|
||||
"Achenar's Room Secret Panel State",
|
||||
"Sirrus' Room Secret Panel State",
|
||||
"Fortress Staircase State",
|
||||
"Fortress Elevator Rotation",
|
||||
"Code Lock Shape #1 (Left)",
|
||||
"Code Lock Shape #2",
|
||||
"Code Lock Shape #3",
|
||||
"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 *stoneship_vars_names[] = {
|
||||
"Light State",
|
||||
"Unknown #1",
|
||||
"Unknown #2",
|
||||
"Water Pump State",
|
||||
"Lighthouse Trapdoor State",
|
||||
"Lighthouse Chest Water State",
|
||||
"Lighthouse Chest Valve State",
|
||||
"Lighthouse Chest Open State",
|
||||
"Lighthouse Trapdoor Key State",
|
||||
"Lighthouse Generator Power Level(?)",
|
||||
"Lighthouse Generator Power...?",
|
||||
"Lighthouse Generator Power Good",
|
||||
"Lighthouse Generator Power #1 ?",
|
||||
"Lighthouse Generator Power #2?"
|
||||
};
|
||||
|
||||
static const char *dunny_vars_names[] = {
|
||||
"Outcome State"
|
||||
};
|
||||
|
||||
void MystSaveLoad::debug_printMystVariables(MystVariables *_tv) {
|
||||
uint8 i;
|
||||
|
||||
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, " Myst Variables:");
|
||||
for (i = 0; i < ARRAYSIZE(_tv->myst_vars); i++)
|
||||
debugC(kDebugSaveLoad, " %s: %u", myst_vars_names[i], _tv->myst_vars[i]);
|
||||
|
||||
debugC(kDebugSaveLoad, " Channelwood Variables:");
|
||||
for (i = 0; i < ARRAYSIZE(_tv->channelwood_vars); i++)
|
||||
debugC(kDebugSaveLoad, " %s: %u", channelwood_vars_names[i], _tv->channelwood_vars[i]);
|
||||
|
||||
debugC(kDebugSaveLoad, " Mech Variables:");
|
||||
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, " Stoneship Variables:");
|
||||
for (i = 0; i < ARRAYSIZE(_tv->stoneship_vars); i++)
|
||||
debugC(kDebugSaveLoad, " %s: %u", stoneship_vars_names[i], _tv->stoneship_vars[i]);
|
||||
|
||||
debugC(kDebugSaveLoad, " Dunny Variables:");
|
||||
for (i = 0; i < ARRAYSIZE(_tv->dunny_vars); i++)
|
||||
debugC(kDebugSaveLoad, " %s: %u", dunny_vars_names[i], _tv->dunny_vars[i]);
|
||||
|
||||
debugC(kDebugSaveLoad, " Other Variables:");
|
||||
|
||||
debugC(kDebugSaveLoad, " Unknown Myst:");
|
||||
for (i = 0; i < ARRAYSIZE(_tv->unknown_myst); i++)
|
||||
debugC(kDebugSaveLoad, " %u: 0x%04X - %u", i, _tv->unknown_myst[i], _tv->unknown_myst[i]);
|
||||
|
||||
debugC(kDebugSaveLoad, " Unknown Channelwood:");
|
||||
for (i = 0; i < ARRAYSIZE(_tv->unknown_channelwood); i++)
|
||||
debugC(kDebugSaveLoad, " %u: 0x%04X - %u", i, _tv->unknown_channelwood[i], _tv->unknown_channelwood[i]);
|
||||
|
||||
debugC(kDebugSaveLoad, " Unknown Mech:");
|
||||
for (i = 0; i < ARRAYSIZE(_tv->unknown_mech); i++)
|
||||
debugC(kDebugSaveLoad, " %u: 0x%04X - %u", i, _tv->unknown_mech[i], _tv->unknown_mech[i]);
|
||||
|
||||
debugC(kDebugSaveLoad, " Unknown Selenitic:");
|
||||
for (i = 0; i < ARRAYSIZE(_tv->unknown_selenitic); i++)
|
||||
debugC(kDebugSaveLoad, " %u: 0x%04X - %u", i, _tv->unknown_selenitic[i], _tv->unknown_selenitic[i]);
|
||||
|
||||
debugC(kDebugSaveLoad, " Unknown Stoneship:");
|
||||
for (i = 0; i < ARRAYSIZE(_tv->unknown_stoneship); i++)
|
||||
debugC(kDebugSaveLoad, " %u: 0x%04X - %u", i, _tv->unknown_stoneship[i], _tv->unknown_stoneship[i]);
|
||||
}
|
||||
|
||||
} // End of namespace Mohawk
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue