aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2013-01-14 07:52:24 +0100
committerStrangerke2013-01-14 07:52:24 +0100
commit65c61ab6d7958ee91328d470cb97127bf2ca986d (patch)
tree7c2878bf9703c7e0fc5c09c4d6a163a988e0f325
parent6856556a1a30c3b6b3039077adc47bf727b719fc (diff)
downloadscummvm-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.h2
-rw-r--r--engines/hopkins/saveload.cpp19
-rw-r--r--engines/hopkins/saveload.h4
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);