More savegame-endianness fixes :/
svn-id: r33222
This commit is contained in:
parent
a5ebc88dbc
commit
5544e180a3
8 changed files with 112 additions and 63 deletions
|
@ -147,6 +147,15 @@ void GobEngine::validateVideoMode(int16 videoMode) {
|
||||||
error("Video mode 0x%X is not supported!", videoMode);
|
error("Video mode 0x%X is not supported!", videoMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Endianness GobEngine::getEndianness() const {
|
||||||
|
if ((_vm->getPlatform() == Common::kPlatformAmiga) ||
|
||||||
|
(_vm->getPlatform() == Common::kPlatformMacintosh) ||
|
||||||
|
(_vm->getPlatform() == Common::kPlatformAtariST))
|
||||||
|
return kEndiannessBE;
|
||||||
|
|
||||||
|
return kEndiannessLE;
|
||||||
|
}
|
||||||
|
|
||||||
Common::Platform GobEngine::getPlatform() const {
|
Common::Platform GobEngine::getPlatform() const {
|
||||||
return _platform;
|
return _platform;
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,6 +79,11 @@ class SaveLoad;
|
||||||
#define VAR(var) READ_VAR_UINT32(var)
|
#define VAR(var) READ_VAR_UINT32(var)
|
||||||
|
|
||||||
|
|
||||||
|
enum Endianness {
|
||||||
|
kEndiannessLE,
|
||||||
|
kEndiannessBE
|
||||||
|
};
|
||||||
|
|
||||||
enum GameType {
|
enum GameType {
|
||||||
kGameTypeNone = 0,
|
kGameTypeNone = 0,
|
||||||
kGameTypeGob1,
|
kGameTypeGob1,
|
||||||
|
@ -230,6 +235,7 @@ public:
|
||||||
void validateLanguage();
|
void validateLanguage();
|
||||||
void validateVideoMode(int16 videoMode);
|
void validateVideoMode(int16 videoMode);
|
||||||
|
|
||||||
|
Endianness getEndianness() const;
|
||||||
Common::Platform getPlatform() const;
|
Common::Platform getPlatform() const;
|
||||||
GameType getGameType() const;
|
GameType getGameType() const;
|
||||||
bool isCD() const;
|
bool isCD() const;
|
||||||
|
|
|
@ -296,9 +296,7 @@ void Inter::callSub(int16 retFlag) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Inter::allocateVars(uint32 count) {
|
void Inter::allocateVars(uint32 count) {
|
||||||
if ((_vm->getPlatform() == Common::kPlatformAmiga) ||
|
if (_vm->getEndianness() == kEndiannessBE)
|
||||||
(_vm->getPlatform() == Common::kPlatformMacintosh) ||
|
|
||||||
(_vm->getPlatform() == Common::kPlatformAtariST))
|
|
||||||
_variables = new VariablesBE(count * 4);
|
_variables = new VariablesBE(count * 4);
|
||||||
else
|
else
|
||||||
_variables = new VariablesLE(count * 4);
|
_variables = new VariablesLE(count * 4);
|
||||||
|
|
|
@ -153,7 +153,7 @@ bool TempSprite::fromBuffer(const byte *buffer, int32 size, bool palette) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PlainSave::PlainSave() {
|
PlainSave::PlainSave(Endianness endianness) : _endianness(endianness) {
|
||||||
}
|
}
|
||||||
|
|
||||||
PlainSave::~PlainSave() {
|
PlainSave::~PlainSave() {
|
||||||
|
@ -230,7 +230,8 @@ bool PlainSave::save(int16 dataVar, int32 size, int32 offset, const char *name,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool retVal;
|
bool retVal;
|
||||||
retVal = SaveLoad::saveDataEndian(*out, dataVar, size, variables, variableSizes);
|
retVal = SaveLoad::saveDataEndian(*out, dataVar, size,
|
||||||
|
variables, variableSizes, _endianness);
|
||||||
|
|
||||||
out->finalize();
|
out->finalize();
|
||||||
if (out->ioFailed()) {
|
if (out->ioFailed()) {
|
||||||
|
@ -258,13 +259,14 @@ bool PlainSave::load(int16 dataVar, int32 size, int32 offset, const char *name,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool retVal = SaveLoad::loadDataEndian(*in, dataVar, size, variables, variableSizes);
|
bool retVal = SaveLoad::loadDataEndian(*in, dataVar, size,
|
||||||
|
variables, variableSizes, _endianness);
|
||||||
delete in;
|
delete in;
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
StagedSave::StagedSave() {
|
StagedSave::StagedSave(Endianness endianness) : _endianness(endianness) {
|
||||||
_mode = kModeNone;
|
_mode = kModeNone;
|
||||||
_name = 0;
|
_name = 0;
|
||||||
_loaded = false;
|
_loaded = false;
|
||||||
|
@ -487,7 +489,7 @@ bool StagedSave::write() const {
|
||||||
|
|
||||||
} else
|
} else
|
||||||
result = SaveLoad::saveDataEndian(*out, 0, _stages[i].size,
|
result = SaveLoad::saveDataEndian(*out, 0, _stages[i].size,
|
||||||
_stages[i].bufVar, _stages[i].bufVarSizes);
|
_stages[i].bufVar, _stages[i].bufVarSizes, _endianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
|
@ -533,7 +535,7 @@ bool StagedSave::read() {
|
||||||
_stages[i].bufVarSizes = new byte[_stages[i].size];
|
_stages[i].bufVarSizes = new byte[_stages[i].size];
|
||||||
|
|
||||||
result = SaveLoad::loadDataEndian(*in, 0, _stages[i].size,
|
result = SaveLoad::loadDataEndian(*in, 0, _stages[i].size,
|
||||||
_stages[i].bufVar, _stages[i].bufVarSizes);
|
_stages[i].bufVar, _stages[i].bufVarSizes, _endianness);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -734,12 +736,14 @@ void SaveLoad::buildIndex(byte *buffer, char *name, int n, int32 size, int32 off
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SaveLoad::fromEndian(byte *buf, const byte *sizes, uint32 count) {
|
bool SaveLoad::fromEndian(byte *buf, const byte *sizes, uint32 count, Endianness endianness) {
|
||||||
|
bool LE = (endianness == kEndiannessLE);
|
||||||
|
|
||||||
while (count-- > 0) {
|
while (count-- > 0) {
|
||||||
if (*sizes == 3)
|
if (*sizes == 3)
|
||||||
*((uint32 *) buf) = READ_LE_UINT32(buf);
|
*((uint32 *) buf) = LE ? READ_LE_UINT32(buf) : READ_BE_UINT32(buf);
|
||||||
else if (*sizes == 1)
|
else if (*sizes == 1)
|
||||||
*((uint16 *) buf) = READ_LE_UINT16(buf);
|
*((uint16 *) buf) = LE ? READ_LE_UINT16(buf) : READ_BE_UINT16(buf);
|
||||||
else if (*sizes != 0) {
|
else if (*sizes != 0) {
|
||||||
warning("SaveLoad::fromEndian(): Corrupted variables sizes");
|
warning("SaveLoad::fromEndian(): Corrupted variables sizes");
|
||||||
return false;
|
return false;
|
||||||
|
@ -753,12 +757,19 @@ bool SaveLoad::fromEndian(byte *buf, const byte *sizes, uint32 count) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SaveLoad::toEndian(byte *buf, const byte *sizes, uint32 count) {
|
bool SaveLoad::toEndian(byte *buf, const byte *sizes, uint32 count, Endianness endianness) {
|
||||||
while (count-- > 0) {
|
while (count-- > 0) {
|
||||||
if (*sizes == 3)
|
if (*sizes == 3) {
|
||||||
WRITE_LE_UINT32(buf, *((uint32 *) buf));
|
if (endianness == kEndiannessLE)
|
||||||
else if (*sizes == 1)
|
WRITE_LE_UINT32(buf, *((uint32 *) buf));
|
||||||
WRITE_LE_UINT16(buf, *((uint16 *) buf));
|
else
|
||||||
|
WRITE_BE_UINT32(buf, *((uint32 *) buf));
|
||||||
|
} else if (*sizes == 1) {
|
||||||
|
if (endianness == kEndiannessLE)
|
||||||
|
WRITE_LE_UINT16(buf, *((uint16 *) buf));
|
||||||
|
else
|
||||||
|
WRITE_BE_UINT16(buf, *((uint16 *) buf));
|
||||||
|
}
|
||||||
else if (*sizes != 0) {
|
else if (*sizes != 0) {
|
||||||
warning("SaveLoad::toEndian(): Corrupted variables sizes");
|
warning("SaveLoad::toEndian(): Corrupted variables sizes");
|
||||||
return false;
|
return false;
|
||||||
|
@ -811,7 +822,8 @@ uint32 SaveLoad::write(Common::WriteStream &out,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SaveLoad::loadDataEndian(Common::ReadStream &in,
|
bool SaveLoad::loadDataEndian(Common::ReadStream &in,
|
||||||
int16 dataVar, uint32 size, byte *variables, byte *variableSizes) {
|
int16 dataVar, uint32 size,
|
||||||
|
byte *variables, byte *variableSizes, Endianness endianness) {
|
||||||
|
|
||||||
bool retVal = false;
|
bool retVal = false;
|
||||||
|
|
||||||
|
@ -821,7 +833,7 @@ bool SaveLoad::loadDataEndian(Common::ReadStream &in,
|
||||||
assert(varBuf && sizeBuf);
|
assert(varBuf && sizeBuf);
|
||||||
|
|
||||||
if (read(in, varBuf, sizeBuf, size) == size) {
|
if (read(in, varBuf, sizeBuf, size) == size) {
|
||||||
if (fromEndian(varBuf, sizeBuf, size)) {
|
if (fromEndian(varBuf, sizeBuf, size, endianness)) {
|
||||||
memcpy(variables + dataVar, varBuf, size);
|
memcpy(variables + dataVar, varBuf, size);
|
||||||
memcpy(variableSizes + dataVar, sizeBuf, size);
|
memcpy(variableSizes + dataVar, sizeBuf, size);
|
||||||
retVal = true;
|
retVal = true;
|
||||||
|
@ -835,7 +847,8 @@ bool SaveLoad::loadDataEndian(Common::ReadStream &in,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SaveLoad::saveDataEndian(Common::WriteStream &out,
|
bool SaveLoad::saveDataEndian(Common::WriteStream &out,
|
||||||
int16 dataVar, uint32 size, const byte *variables, const byte *variableSizes) {
|
int16 dataVar, uint32 size,
|
||||||
|
const byte *variables, const byte *variableSizes, Endianness endianness) {
|
||||||
|
|
||||||
bool retVal = false;
|
bool retVal = false;
|
||||||
|
|
||||||
|
@ -847,7 +860,7 @@ bool SaveLoad::saveDataEndian(Common::WriteStream &out,
|
||||||
memcpy(varBuf, variables + dataVar, size);
|
memcpy(varBuf, variables + dataVar, size);
|
||||||
memcpy(sizeBuf, variableSizes + dataVar, size);
|
memcpy(sizeBuf, variableSizes + dataVar, size);
|
||||||
|
|
||||||
if (toEndian(varBuf, sizeBuf, size))
|
if (toEndian(varBuf, sizeBuf, size, endianness))
|
||||||
if (write(out, varBuf, sizeBuf, size) == size)
|
if (write(out, varBuf, sizeBuf, size) == size)
|
||||||
retVal = true;
|
retVal = true;
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ private:
|
||||||
|
|
||||||
class PlainSave {
|
class PlainSave {
|
||||||
public:
|
public:
|
||||||
PlainSave();
|
PlainSave(Endianness endianness);
|
||||||
~PlainSave();
|
~PlainSave();
|
||||||
|
|
||||||
bool save(int16 dataVar, int32 size, int32 offset, const char *name,
|
bool save(int16 dataVar, int32 size, int32 offset, const char *name,
|
||||||
|
@ -77,11 +77,14 @@ public:
|
||||||
const byte *variables, const byte *variableSizes) const;
|
const byte *variables, const byte *variableSizes) const;
|
||||||
bool load(int16 dataVar, int32 size, int32 offset, const char *name,
|
bool load(int16 dataVar, int32 size, int32 offset, const char *name,
|
||||||
byte *variables, byte *variableSizes) const;
|
byte *variables, byte *variableSizes) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Endianness _endianness;
|
||||||
};
|
};
|
||||||
|
|
||||||
class StagedSave {
|
class StagedSave {
|
||||||
public:
|
public:
|
||||||
StagedSave();
|
StagedSave(Endianness endianness);
|
||||||
~StagedSave();
|
~StagedSave();
|
||||||
|
|
||||||
void addStage(int32 size, bool endianed = true);
|
void addStage(int32 size, bool endianed = true);
|
||||||
|
@ -114,6 +117,8 @@ private:
|
||||||
kModeLoad
|
kModeLoad
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Endianness _endianness;
|
||||||
|
|
||||||
Common::Array<Stage> _stages;
|
Common::Array<Stage> _stages;
|
||||||
enum Mode _mode;
|
enum Mode _mode;
|
||||||
char *_name;
|
char *_name;
|
||||||
|
@ -178,17 +183,19 @@ public:
|
||||||
|
|
||||||
static const char *stripPath(const char *fileName);
|
static const char *stripPath(const char *fileName);
|
||||||
|
|
||||||
static bool fromEndian(byte *buf, const byte *sizes, uint32 count);
|
static bool fromEndian(byte *buf, const byte *sizes, uint32 count, Endianness endianness);
|
||||||
static bool toEndian(byte *buf, const byte *sizes, uint32 count);
|
static bool toEndian(byte *buf, const byte *sizes, uint32 count, Endianness endianness);
|
||||||
static uint32 read(Common::ReadStream &in,
|
static uint32 read(Common::ReadStream &in,
|
||||||
byte *buf, byte *sizes, uint32 count);
|
byte *buf, byte *sizes, uint32 count);
|
||||||
static uint32 write(Common::WriteStream &out,
|
static uint32 write(Common::WriteStream &out,
|
||||||
const byte *buf, const byte *sizes, uint32 count);
|
const byte *buf, const byte *sizes, uint32 count);
|
||||||
|
|
||||||
static bool loadDataEndian(Common::ReadStream &in,
|
static bool loadDataEndian(Common::ReadStream &in,
|
||||||
int16 dataVar, uint32 size, byte *variables, byte *variableSizes);
|
int16 dataVar, uint32 size,
|
||||||
|
byte *variables, byte *variableSizes, Endianness endianness);
|
||||||
static bool saveDataEndian(Common::WriteStream &out,
|
static bool saveDataEndian(Common::WriteStream &out,
|
||||||
int16 dataVar, uint32 size, const byte *variables, const byte *variableSizes);
|
int16 dataVar, uint32 size,
|
||||||
|
const byte *variables, const byte *variableSizes, Endianness endianness);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
GobEngine *_vm;
|
GobEngine *_vm;
|
||||||
|
@ -228,8 +235,8 @@ protected:
|
||||||
int32 _varSize;
|
int32 _varSize;
|
||||||
|
|
||||||
TempSprite _tmpSprite;
|
TempSprite _tmpSprite;
|
||||||
PlainSave _notes;
|
PlainSave *_notes;
|
||||||
StagedSave _save;
|
StagedSave *_save;
|
||||||
|
|
||||||
byte _indexBuffer[600];
|
byte _indexBuffer[600];
|
||||||
bool _hasIndex;
|
bool _hasIndex;
|
||||||
|
@ -306,8 +313,8 @@ protected:
|
||||||
|
|
||||||
TempSprite _screenshot;
|
TempSprite _screenshot;
|
||||||
TempSprite _tmpSprite;
|
TempSprite _tmpSprite;
|
||||||
PlainSave _notes;
|
PlainSave *_notes;
|
||||||
StagedSave _save;
|
StagedSave *_save;
|
||||||
|
|
||||||
byte _propBuffer[1000];
|
byte _propBuffer[1000];
|
||||||
byte _indexBuffer[1200];
|
byte _indexBuffer[1200];
|
||||||
|
@ -370,7 +377,7 @@ protected:
|
||||||
|
|
||||||
int32 _varSize;
|
int32 _varSize;
|
||||||
|
|
||||||
StagedSave _save;
|
StagedSave *_save;
|
||||||
|
|
||||||
byte _propBuffer[1000];
|
byte _propBuffer[1000];
|
||||||
byte _indexBuffer[1200];
|
byte _indexBuffer[1200];
|
||||||
|
|
|
@ -45,6 +45,9 @@ SaveLoad_v2::SaveFile SaveLoad_v2::_saveFiles[] = {
|
||||||
SaveLoad_v2::SaveLoad_v2(GobEngine *vm, const char *targetName) :
|
SaveLoad_v2::SaveLoad_v2(GobEngine *vm, const char *targetName) :
|
||||||
SaveLoad(vm, targetName) {
|
SaveLoad(vm, targetName) {
|
||||||
|
|
||||||
|
_notes = new PlainSave(_vm->getEndianness());
|
||||||
|
_save = new StagedSave(_vm->getEndianness());
|
||||||
|
|
||||||
_saveFiles[0].destName = new char[strlen(targetName) + 5];
|
_saveFiles[0].destName = new char[strlen(targetName) + 5];
|
||||||
_saveFiles[1].destName = _saveFiles[0].destName;
|
_saveFiles[1].destName = _saveFiles[0].destName;
|
||||||
_saveFiles[2].destName = 0;
|
_saveFiles[2].destName = 0;
|
||||||
|
@ -58,6 +61,9 @@ SaveLoad_v2::SaveLoad_v2(GobEngine *vm, const char *targetName) :
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveLoad_v2::~SaveLoad_v2() {
|
SaveLoad_v2::~SaveLoad_v2() {
|
||||||
|
delete _notes;
|
||||||
|
delete _save;
|
||||||
|
|
||||||
delete[] _saveFiles[0].destName;
|
delete[] _saveFiles[0].destName;
|
||||||
delete[] _saveFiles[3].destName;
|
delete[] _saveFiles[3].destName;
|
||||||
}
|
}
|
||||||
|
@ -227,7 +233,7 @@ bool SaveLoad_v2::loadGame(SaveFile &saveFile,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_save.load(dataVar, size, 40, saveFile.destName, _vm->_inter->_variables))
|
if (!_save->load(dataVar, size, 40, saveFile.destName, _vm->_inter->_variables))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,7 +274,7 @@ bool SaveLoad_v2::loadNotes(SaveFile &saveFile,
|
||||||
|
|
||||||
debugC(2, kDebugSaveLoad, "Loading the notes");
|
debugC(2, kDebugSaveLoad, "Loading the notes");
|
||||||
|
|
||||||
return _notes.load(dataVar, size, offset, saveFile.destName, _vm->_inter->_variables);
|
return _notes->load(dataVar, size, offset, saveFile.destName, _vm->_inter->_variables);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SaveLoad_v2::saveGame(SaveFile &saveFile,
|
bool SaveLoad_v2::saveGame(SaveFile &saveFile,
|
||||||
|
@ -313,10 +319,10 @@ bool SaveLoad_v2::saveGame(SaveFile &saveFile,
|
||||||
|
|
||||||
byte sizes[40];
|
byte sizes[40];
|
||||||
memset(sizes, 0, 40);
|
memset(sizes, 0, 40);
|
||||||
if(!_save.save(0, 40, 0, saveFile.destName, _indexBuffer + (slot * 40), sizes))
|
if(!_save->save(0, 40, 0, saveFile.destName, _indexBuffer + (slot * 40), sizes))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!_save.save(dataVar, size, 40, saveFile.destName, _vm->_inter->_variables))
|
if (!_save->save(dataVar, size, 40, saveFile.destName, _vm->_inter->_variables))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -350,7 +356,7 @@ bool SaveLoad_v2::saveNotes(SaveFile &saveFile,
|
||||||
|
|
||||||
debugC(2, kDebugSaveLoad, "Saving the notes");
|
debugC(2, kDebugSaveLoad, "Saving the notes");
|
||||||
|
|
||||||
return _notes.save(dataVar, size, offset, saveFile.destName, _vm->_inter->_variables);
|
return _notes->save(dataVar, size, offset, saveFile.destName, _vm->_inter->_variables);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -360,8 +366,8 @@ void SaveLoad_v2::assertInited() {
|
||||||
|
|
||||||
_varSize = READ_LE_UINT32(_vm->_game->_totFileData + 0x2C) * 4;
|
_varSize = READ_LE_UINT32(_vm->_game->_totFileData + 0x2C) * 4;
|
||||||
|
|
||||||
_save.addStage(40);
|
_save->addStage(40);
|
||||||
_save.addStage(_varSize);
|
_save->addStage(_varSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // End of namespace Gob
|
} // End of namespace Gob
|
||||||
|
|
|
@ -48,6 +48,9 @@ SaveLoad_v3::SaveLoad_v3(GobEngine *vm, const char *targetName,
|
||||||
uint32 screenshotSize, int32 indexOffset, int32 screenshotOffset) :
|
uint32 screenshotSize, int32 indexOffset, int32 screenshotOffset) :
|
||||||
SaveLoad(vm, targetName) {
|
SaveLoad(vm, targetName) {
|
||||||
|
|
||||||
|
_notes = new PlainSave(_vm->getEndianness());
|
||||||
|
_save = new StagedSave(_vm->getEndianness());
|
||||||
|
|
||||||
_screenshotSize = screenshotSize;
|
_screenshotSize = screenshotSize;
|
||||||
_indexOffset = indexOffset;
|
_indexOffset = indexOffset;
|
||||||
_screenshotOffset = screenshotOffset;
|
_screenshotOffset = screenshotOffset;
|
||||||
|
@ -71,6 +74,9 @@ SaveLoad_v3::SaveLoad_v3(GobEngine *vm, const char *targetName,
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveLoad_v3::~SaveLoad_v3() {
|
SaveLoad_v3::~SaveLoad_v3() {
|
||||||
|
delete _notes;
|
||||||
|
delete _save;
|
||||||
|
|
||||||
delete[] _saveFiles[0].destName;
|
delete[] _saveFiles[0].destName;
|
||||||
delete[] _saveFiles[3].destName;
|
delete[] _saveFiles[3].destName;
|
||||||
}
|
}
|
||||||
|
@ -243,7 +249,7 @@ int32 SaveLoad_v3::getSizeNotes(SaveFile &saveFile) {
|
||||||
int32 SaveLoad_v3::getSizeScreenshot(SaveFile &saveFile) {
|
int32 SaveLoad_v3::getSizeScreenshot(SaveFile &saveFile) {
|
||||||
if (!_useScreenshots) {
|
if (!_useScreenshots) {
|
||||||
_useScreenshots = true;
|
_useScreenshots = true;
|
||||||
_save.addStage(_screenshotSize, false);
|
_save->addStage(_screenshotSize, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
Common::SaveFileManager *saveMan = g_system->getSavefileManager();
|
Common::SaveFileManager *saveMan = g_system->getSavefileManager();
|
||||||
|
@ -312,7 +318,7 @@ bool SaveLoad_v3::loadGame(SaveFile &saveFile,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_save.load(dataVar, size, 540, saveFile.destName, _vm->_inter->_variables))
|
if (!_save->load(dataVar, size, 540, saveFile.destName, _vm->_inter->_variables))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -353,7 +359,7 @@ bool SaveLoad_v3::loadNotes(SaveFile &saveFile,
|
||||||
|
|
||||||
debugC(2, kDebugSaveLoad, "Loading the notes");
|
debugC(2, kDebugSaveLoad, "Loading the notes");
|
||||||
|
|
||||||
return _notes.load(dataVar, size, offset, saveFile.destName, _vm->_inter->_variables);
|
return _notes->load(dataVar, size, offset, saveFile.destName, _vm->_inter->_variables);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SaveLoad_v3::loadScreenshot(SaveFile &saveFile,
|
bool SaveLoad_v3::loadScreenshot(SaveFile &saveFile,
|
||||||
|
@ -363,7 +369,7 @@ bool SaveLoad_v3::loadScreenshot(SaveFile &saveFile,
|
||||||
|
|
||||||
if (!_useScreenshots) {
|
if (!_useScreenshots) {
|
||||||
_useScreenshots = true;
|
_useScreenshots = true;
|
||||||
_save.addStage(_screenshotSize, false);
|
_save->addStage(_screenshotSize, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offset == _indexOffset) {
|
if (offset == _indexOffset) {
|
||||||
|
@ -395,7 +401,7 @@ bool SaveLoad_v3::loadScreenshot(SaveFile &saveFile,
|
||||||
|
|
||||||
byte *buffer = new byte[_screenshotSize];
|
byte *buffer = new byte[_screenshotSize];
|
||||||
|
|
||||||
if (!_save.load(0, _screenshotSize, _varSize + 540, saveFile.destName, buffer, 0)) {
|
if (!_save->load(0, _screenshotSize, _varSize + 540, saveFile.destName, buffer, 0)) {
|
||||||
delete[] buffer;
|
delete[] buffer;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -483,13 +489,13 @@ bool SaveLoad_v3::saveGame(SaveFile &saveFile,
|
||||||
|
|
||||||
_hasIndex = false;
|
_hasIndex = false;
|
||||||
|
|
||||||
if(!_save.save(0, 500, 0, saveFile.destName, _propBuffer, _propBuffer + 500))
|
if(!_save->save(0, 500, 0, saveFile.destName, _propBuffer, _propBuffer + 500))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(!_save.save(0, 40, 500, saveFile.destName, _indexBuffer + (saveFile.slot * 40), 0))
|
if(!_save->save(0, 40, 500, saveFile.destName, _indexBuffer + (saveFile.slot * 40), 0))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!_save.save(dataVar, size, 540, saveFile.destName, _vm->_inter->_variables))
|
if (!_save->save(dataVar, size, 540, saveFile.destName, _vm->_inter->_variables))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -523,7 +529,7 @@ bool SaveLoad_v3::saveNotes(SaveFile &saveFile,
|
||||||
|
|
||||||
debugC(2, kDebugSaveLoad, "Saving the notes");
|
debugC(2, kDebugSaveLoad, "Saving the notes");
|
||||||
|
|
||||||
return _notes.save(dataVar, size - 160, offset, saveFile.destName, _vm->_inter->_variables);
|
return _notes->save(dataVar, size - 160, offset, saveFile.destName, _vm->_inter->_variables);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -534,7 +540,7 @@ bool SaveLoad_v3::saveScreenshot(SaveFile &saveFile,
|
||||||
|
|
||||||
if (!_useScreenshots) {
|
if (!_useScreenshots) {
|
||||||
_useScreenshots = true;
|
_useScreenshots = true;
|
||||||
_save.addStage(_screenshotSize, false);
|
_save->addStage(_screenshotSize, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offset >= _screenshotOffset) {
|
if (offset >= _screenshotOffset) {
|
||||||
|
@ -571,7 +577,7 @@ bool SaveLoad_v3::saveScreenshot(SaveFile &saveFile,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_save.save(0, _screenshotSize, _varSize + 540, saveFile.destName, buffer, 0)) {
|
if (!_save->save(0, _screenshotSize, _varSize + 540, saveFile.destName, buffer, 0)) {
|
||||||
delete[] buffer;
|
delete[] buffer;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -588,9 +594,9 @@ void SaveLoad_v3::assertInited() {
|
||||||
|
|
||||||
_varSize = READ_LE_UINT32(_vm->_game->_totFileData + 0x2C) * 4;
|
_varSize = READ_LE_UINT32(_vm->_game->_totFileData + 0x2C) * 4;
|
||||||
|
|
||||||
_save.addStage(500);
|
_save->addStage(500);
|
||||||
_save.addStage(40, false);
|
_save->addStage(40, false);
|
||||||
_save.addStage(_varSize);
|
_save->addStage(_varSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SaveLoad_v3::buildScreenshotIndex(byte *buffer, char *name, int n) {
|
void SaveLoad_v3::buildScreenshotIndex(byte *buffer, char *name, int n) {
|
||||||
|
|
|
@ -50,6 +50,8 @@ SaveLoad_v4::SaveFile SaveLoad_v4::_saveFiles[] = {
|
||||||
SaveLoad_v4::SaveLoad_v4(GobEngine *vm, const char *targetName) :
|
SaveLoad_v4::SaveLoad_v4(GobEngine *vm, const char *targetName) :
|
||||||
SaveLoad(vm, targetName) {
|
SaveLoad(vm, targetName) {
|
||||||
|
|
||||||
|
_save = new StagedSave(_vm->getEndianness());
|
||||||
|
|
||||||
_firstSizeGame = true;
|
_firstSizeGame = true;
|
||||||
|
|
||||||
_saveFiles[0].destName = 0;
|
_saveFiles[0].destName = 0;
|
||||||
|
@ -76,6 +78,8 @@ SaveLoad_v4::SaveLoad_v4(GobEngine *vm, const char *targetName) :
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveLoad_v4::~SaveLoad_v4() {
|
SaveLoad_v4::~SaveLoad_v4() {
|
||||||
|
delete _save;
|
||||||
|
|
||||||
delete[] _screenProps;
|
delete[] _screenProps;
|
||||||
delete[] _saveFiles[1].destName;
|
delete[] _saveFiles[1].destName;
|
||||||
}
|
}
|
||||||
|
@ -297,7 +301,7 @@ bool SaveLoad_v4::loadGame(SaveFile &saveFile,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_save.load(dataVar, size, 540, saveFile.destName, _vm->_inter->_variables))
|
if (!_save->load(dataVar, size, 540, saveFile.destName, _vm->_inter->_variables))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,7 +318,7 @@ bool SaveLoad_v4::loadGameScreenProps(SaveFile &saveFile,
|
||||||
|
|
||||||
setCurrentSlot(saveFile.destName, saveFile.sourceName[4] - '0');
|
setCurrentSlot(saveFile.destName, saveFile.sourceName[4] - '0');
|
||||||
|
|
||||||
if (!_save.load(0, 256000, _varSize + 540, saveFile.destName,
|
if (!_save->load(0, 256000, _varSize + 540, saveFile.destName,
|
||||||
_screenProps, _screenProps + 256000))
|
_screenProps, _screenProps + 256000))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -393,13 +397,13 @@ bool SaveLoad_v4::saveGame(SaveFile &saveFile,
|
||||||
|
|
||||||
_hasIndex = false;
|
_hasIndex = false;
|
||||||
|
|
||||||
if(!_save.save(0, 500, 0, saveFile.destName, _propBuffer, _propBuffer + 500))
|
if(!_save->save(0, 500, 0, saveFile.destName, _propBuffer, _propBuffer + 500))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(!_save.save(0, 40, 500, saveFile.destName, _indexBuffer + (slot * 40), 0))
|
if(!_save->save(0, 40, 500, saveFile.destName, _indexBuffer + (slot * 40), 0))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!_save.save(dataVar, size, 540, saveFile.destName, _vm->_inter->_variables))
|
if (!_save->save(dataVar, size, 540, saveFile.destName, _vm->_inter->_variables))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -417,7 +421,7 @@ bool SaveLoad_v4::saveGameScreenProps(SaveFile &saveFile,
|
||||||
|
|
||||||
setCurrentSlot(saveFile.destName, saveFile.sourceName[4] - '0');
|
setCurrentSlot(saveFile.destName, saveFile.sourceName[4] - '0');
|
||||||
|
|
||||||
if (!_save.save(0, 256000, _varSize + 540, saveFile.destName,
|
if (!_save->save(0, 256000, _varSize + 540, saveFile.destName,
|
||||||
_screenProps, _screenProps + 256000))
|
_screenProps, _screenProps + 256000))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -430,10 +434,10 @@ void SaveLoad_v4::assertInited() {
|
||||||
|
|
||||||
_varSize = READ_LE_UINT32(_vm->_game->_totFileData + 0x2C) * 4;
|
_varSize = READ_LE_UINT32(_vm->_game->_totFileData + 0x2C) * 4;
|
||||||
|
|
||||||
_save.addStage(500);
|
_save->addStage(500);
|
||||||
_save.addStage(40, false);
|
_save->addStage(40, false);
|
||||||
_save.addStage(_varSize);
|
_save->addStage(_varSize);
|
||||||
_save.addStage(256000);
|
_save->addStage(256000);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // End of namespace Gob
|
} // End of namespace Gob
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue