Fixing a bug in the V4 save file handler, produced by a "neat" feature in Woodruff: The saves remember their position within the list and use that information to load the "correct" screen properties, making it impossible to load reordered saves correctly -.-
svn-id: r42679
This commit is contained in:
parent
33929b5248
commit
01b8320367
2 changed files with 22 additions and 2 deletions
|
@ -289,6 +289,8 @@ protected:
|
||||||
GameHandler(GobEngine *vm, const char *target);
|
GameHandler(GobEngine *vm, const char *target);
|
||||||
~GameHandler();
|
~GameHandler();
|
||||||
|
|
||||||
|
int getLastSlot() const;
|
||||||
|
|
||||||
int32 getSize();
|
int32 getSize();
|
||||||
bool load(int16 dataVar, int32 size, int32 offset);
|
bool load(int16 dataVar, int32 size, int32 offset);
|
||||||
bool save(int16 dataVar, int32 size, int32 offset);
|
bool save(int16 dataVar, int32 size, int32 offset);
|
||||||
|
@ -317,6 +319,8 @@ protected:
|
||||||
|
|
||||||
File *_slotFile;
|
File *_slotFile;
|
||||||
|
|
||||||
|
int _lastSlot;
|
||||||
|
|
||||||
SaveReader *_reader;
|
SaveReader *_reader;
|
||||||
SaveWriter *_writer;
|
SaveWriter *_writer;
|
||||||
|
|
||||||
|
|
|
@ -84,6 +84,8 @@ SaveLoad_v4::GameHandler::GameHandler(GobEngine *vm, const char *target) : SaveH
|
||||||
|
|
||||||
_slotFile = new File(vm, target);
|
_slotFile = new File(vm, target);
|
||||||
|
|
||||||
|
_lastSlot = -1;
|
||||||
|
|
||||||
_writer = 0;
|
_writer = 0;
|
||||||
_reader = 0;
|
_reader = 0;
|
||||||
}
|
}
|
||||||
|
@ -94,6 +96,10 @@ SaveLoad_v4::GameHandler::~GameHandler() {
|
||||||
delete _writer;
|
delete _writer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SaveLoad_v4::GameHandler::getLastSlot() const {
|
||||||
|
return _lastSlot;
|
||||||
|
}
|
||||||
|
|
||||||
int32 SaveLoad_v4::GameHandler::getSize() {
|
int32 SaveLoad_v4::GameHandler::getSize() {
|
||||||
// Fake an empty save file for the very first query, to get clear properties
|
// Fake an empty save file for the very first query, to get clear properties
|
||||||
if (_firstSize) {
|
if (_firstSize) {
|
||||||
|
@ -178,6 +184,7 @@ bool SaveLoad_v4::GameHandler::load(int16 dataVar, int32 size, int32 offset) {
|
||||||
if (!vars.writeInto(0, 0, varSize))
|
if (!vars.writeInto(0, 0, varSize))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
_lastSlot = slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -261,6 +268,7 @@ bool SaveLoad_v4::GameHandler::save(int16 dataVar, int32 size, int32 offset) {
|
||||||
if (!_writer->writePart(1, &vars))
|
if (!_writer->writePart(1, &vars))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
_lastSlot = slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -465,7 +473,11 @@ bool SaveLoad_v4::ScreenPropsHandler::load(int16 dataVar, int32 size, int32 offs
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _gameHandler->loadScreenProps(_file->getSlot(offset), _curProps->_props);
|
int slot = _gameHandler->getLastSlot();
|
||||||
|
if (slot == -1)
|
||||||
|
slot = _file->getSlot(offset);
|
||||||
|
|
||||||
|
return _gameHandler->loadScreenProps(slot, _curProps->_props);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SaveLoad_v4::ScreenPropsHandler::save(int16 dataVar, int32 size, int32 offset) {
|
bool SaveLoad_v4::ScreenPropsHandler::save(int16 dataVar, int32 size, int32 offset) {
|
||||||
|
@ -474,7 +486,11 @@ bool SaveLoad_v4::ScreenPropsHandler::save(int16 dataVar, int32 size, int32 offs
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _gameHandler->saveScreenProps(_file->getSlot(offset), _curProps->_props);
|
int slot = _gameHandler->getLastSlot();
|
||||||
|
if (slot == -1)
|
||||||
|
slot = _file->getSlot(offset);
|
||||||
|
|
||||||
|
return _gameHandler->saveScreenProps(slot, _curProps->_props);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue