diff options
author | Strangerke | 2013-01-14 07:52:24 +0100 |
---|---|---|
committer | Strangerke | 2013-01-14 07:52:24 +0100 |
commit | 65c61ab6d7958ee91328d470cb97127bf2ca986d (patch) | |
tree | 7c2878bf9703c7e0fc5c09c4d6a163a988e0f325 | |
parent | 6856556a1a30c3b6b3039077adc47bf727b719fc (diff) | |
download | scummvm-rg350-65c61ab6d7958ee91328d470cb97127bf2ca986d.tar.gz scummvm-rg350-65c61ab6d7958ee91328d470cb97127bf2ca986d.tar.bz2 scummvm-rg350-65c61ab6d7958ee91328d470cb97127bf2ca986d.zip |
HOPKINS: Add synchronization of car position on the city map
-rw-r--r-- | engines/hopkins/globals.h | 2 | ||||
-rw-r--r-- | engines/hopkins/saveload.cpp | 19 | ||||
-rw-r--r-- | engines/hopkins/saveload.h | 4 |
3 files changed, 20 insertions, 5 deletions
diff --git a/engines/hopkins/globals.h b/engines/hopkins/globals.h index 44fedf2561..2aacfbbb5e 100644 --- a/engines/hopkins/globals.h +++ b/engines/hopkins/globals.h @@ -284,6 +284,8 @@ struct Sauvegarde { CharacterLocation _realHopkins; CharacterLocation _samantha; int16 _inventory[35]; // Originally at offset 1300 of data array + int16 PLANX; + int16 PLANY; }; struct CreditItem { diff --git a/engines/hopkins/saveload.cpp b/engines/hopkins/saveload.cpp index bed7a0d6b6..179145d20d 100644 --- a/engines/hopkins/saveload.cpp +++ b/engines/hopkins/saveload.cpp @@ -146,6 +146,9 @@ Common::Error SaveLoadManager::saveGame(int slot, const Common::String &saveName for (int i = 0; i < 35; ++i) _vm->_globals._saveData->_inventory[i] = _vm->_globals._inventory[i]; + _vm->_globals._saveData->PLANX = _vm->_globals.PLANX; + _vm->_globals._saveData->PLANY = _vm->_globals.PLANY; + /* Create the savegame */ Common::OutSaveFile *savefile = g_system->getSavefileManager()->openForSaving(_vm->generateSaveName(slot)); if (!savefile) @@ -161,7 +164,7 @@ Common::Error SaveLoadManager::saveGame(int slot, const Common::String &saveName writeSavegameHeader(savefile, header); // Write out the savegame data - syncSavegameData(serializer); + syncSavegameData(serializer, header._version); // Save file complete savefile->finalize(); @@ -188,7 +191,7 @@ Common::Error SaveLoadManager::loadGame(int slot) { delete header._thumbnail; // Read in the savegame data - syncSavegameData(serializer); + syncSavegameData(serializer, header._version); // Loading save file complete delete savefile; @@ -202,6 +205,8 @@ Common::Error SaveLoadManager::loadGame(int slot) { _vm->_globals._exitId = _vm->_globals._saveData->data[svField5]; _vm->_globals._saveData->data[svField6] = 0; _vm->_globals._screenId = 0; + _vm->_globals.PLANX = _vm->_globals._saveData->PLANX; + _vm->_globals.PLANY = _vm->_globals._saveData->PLANY; return Common::kNoError; } @@ -251,7 +256,7 @@ void SaveLoadManager::createThumbnail(Graphics::Surface *s) { thumb8.free(); } -void SaveLoadManager::syncSavegameData(Common::Serializer &s) { +void SaveLoadManager::syncSavegameData(Common::Serializer &s, int version) { s.syncBytes(&_vm->_globals._saveData->data[0], 2050); syncCharacterLocation(s, _vm->_globals._saveData->_cloneHopkins); syncCharacterLocation(s, _vm->_globals._saveData->_realHopkins); @@ -259,6 +264,14 @@ void SaveLoadManager::syncSavegameData(Common::Serializer &s) { for (int i = 0; i < 35; ++i) s.syncAsSint16LE(_vm->_globals._saveData->_inventory[i]); + + if (version > 1) { + s.syncAsSint16LE(_vm->_globals._saveData->PLANX); + s.syncAsSint16LE(_vm->_globals._saveData->PLANY); + } else { + _vm->_globals._saveData->PLANX = _vm->_globals._saveData->PLANY = 0; + } + } void SaveLoadManager::syncCharacterLocation(Common::Serializer &s, CharacterLocation &item) { diff --git a/engines/hopkins/saveload.h b/engines/hopkins/saveload.h index c2e9488223..b4cdf8ed02 100644 --- a/engines/hopkins/saveload.h +++ b/engines/hopkins/saveload.h @@ -33,7 +33,7 @@ namespace Hopkins { class HopkinsEngine; -#define HOPKINS_SAVEGAME_VERSION 1 +#define HOPKINS_SAVEGAME_VERSION 2 struct hopkinsSavegameHeader { uint8 _version; @@ -49,7 +49,7 @@ private: HopkinsEngine *_vm; void createThumbnail(Graphics::Surface *s); - void syncSavegameData(Common::Serializer &s); + void syncSavegameData(Common::Serializer &s, int version); void syncCharacterLocation(Common::Serializer &s, CharacterLocation &item); public: void setParent(HopkinsEngine *vm); |