aboutsummaryrefslogtreecommitdiff
path: root/engines/hopkins
diff options
context:
space:
mode:
Diffstat (limited to 'engines/hopkins')
-rw-r--r--engines/hopkins/computer.cpp14
-rw-r--r--engines/hopkins/detection.cpp4
-rw-r--r--engines/hopkins/globals.cpp2
-rw-r--r--engines/hopkins/globals.h1
-rw-r--r--engines/hopkins/hopkins.h1
-rw-r--r--engines/hopkins/saveload.cpp11
-rw-r--r--engines/hopkins/saveload.h3
7 files changed, 25 insertions, 11 deletions
diff --git a/engines/hopkins/computer.cpp b/engines/hopkins/computer.cpp
index 82e0dd0a06..489e7e1133 100644
--- a/engines/hopkins/computer.cpp
+++ b/engines/hopkins/computer.cpp
@@ -578,7 +578,11 @@ void ComputerManager::displayGamesSubMenu() {
* Load Highscore from file
*/
void ComputerManager::loadHiscore() {
- const byte *ptr = _vm->_globals->_highScoreData;
+ byte *ptr = _vm->_globals->allocMemory(100);
+ memset(ptr, 0, 100);
+
+ if (_vm->_saveLoad->saveExists(_vm->targetName() + "-highscore.dat"))
+ _vm->_saveLoad->load(_vm->targetName() + "-highscore.dat", ptr);
for (int scoreIndex = 0; scoreIndex < 6; ++scoreIndex) {
_score[scoreIndex]._name = " ";
@@ -600,6 +604,7 @@ void ComputerManager::loadHiscore() {
}
_lowestHiScore = atol(_score[5]._score.c_str());
+ _vm->_globals->freeMemory(ptr);
}
/**
@@ -985,8 +990,8 @@ void ComputerManager::saveScore() {
}
}
- byte *ptr = _vm->_globals->_highScoreData;
- memset(ptr, 0, 99);
+ byte *ptr = _vm->_globals->allocMemory(100);
+ memset(ptr, 0, 100);
for (int scorePlaceIdx = 0; scorePlaceIdx <= 5; scorePlaceIdx++) {
int curBufPtr = 16 * scorePlaceIdx;
for (int namePos = 0; namePos < 6; namePos++) {
@@ -1006,6 +1011,9 @@ void ComputerManager::saveScore() {
};
ptr[curBufPtr + 15] = 0;
}
+
+ _vm->_saveLoad->saveFile(_vm->targetName() + "-highscore.dat", ptr, 100);
+ _vm->_globals->freeMemory(ptr);
}
/**
diff --git a/engines/hopkins/detection.cpp b/engines/hopkins/detection.cpp
index 9d16b0ab51..45b6c2bc1d 100644
--- a/engines/hopkins/detection.cpp
+++ b/engines/hopkins/detection.cpp
@@ -56,6 +56,10 @@ bool HopkinsEngine::getIsDemo() const {
return _gameDescription->desc.flags & ADGF_DEMO;
}
+Common::String HopkinsEngine::targetName() const {
+ return _targetName;
+}
+
} // End of namespace Hopkins
static const PlainGameDescriptor hopkinsGames[] = {
diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp
index 97d6c4046c..a9a0a81f08 100644
--- a/engines/hopkins/globals.cpp
+++ b/engines/hopkins/globals.cpp
@@ -70,8 +70,6 @@ Globals::Globals(HopkinsEngine *vm) {
for (int i = 0; i < 36; ++i)
_inventory[i] = 0;
- Common::fill(&_highScoreData[0], &_highScoreData[100], 0);
-
// Initialize fields
_language = LANG_EN;
diff --git a/engines/hopkins/globals.h b/engines/hopkins/globals.h
index a76323bb50..94512c3d26 100644
--- a/engines/hopkins/globals.h
+++ b/engines/hopkins/globals.h
@@ -206,7 +206,6 @@ public:
Common::String _zoneFilename;
Common::String _textFilename;
byte *_levelSpriteBuf;
- byte _highScoreData[100];
EventMode _eventMode;
diff --git a/engines/hopkins/hopkins.h b/engines/hopkins/hopkins.h
index 398e41a4d2..54e7c90b78 100644
--- a/engines/hopkins/hopkins.h
+++ b/engines/hopkins/hopkins.h
@@ -164,6 +164,7 @@ public:
Common::Platform getPlatform() const;
uint16 getVersion() const;
bool getIsDemo() const;
+ Common::String targetName() const;
int getRandomNumber(int maxNumber);
Common::String generateSaveName(int slotNumber);
diff --git a/engines/hopkins/saveload.cpp b/engines/hopkins/saveload.cpp
index 14b166294d..20ef5da44c 100644
--- a/engines/hopkins/saveload.cpp
+++ b/engines/hopkins/saveload.cpp
@@ -55,6 +55,13 @@ bool SaveLoadManager::save(const Common::String &file, const void *buf, size_t n
return false;
}
+bool SaveLoadManager::saveExists(const Common::String &file) {
+ Common::InSaveFile *savefile = g_system->getSavefileManager()->openForLoading(file);
+ bool result = savefile != NULL;
+ delete savefile;
+ return result;
+}
+
// Save File
bool SaveLoadManager::saveFile(const Common::String &file, const void *buf, size_t n) {
return save(file, buf, n);
@@ -251,10 +258,6 @@ void SaveLoadManager::createThumbnail(Graphics::Surface *s) {
}
void SaveLoadManager::syncSavegameData(Common::Serializer &s, int version) {
- if (version >= 3)
- // Sync embedded Breakout game high score data
- s.syncBytes(&_vm->_globals->_highScoreData[0], 100);
-
s.syncBytes(&_vm->_globals->_saveData->_data[0], 2050);
syncCharacterLocation(s, _vm->_globals->_saveData->_cloneHopkins);
syncCharacterLocation(s, _vm->_globals->_saveData->_realHopkins);
diff --git a/engines/hopkins/saveload.h b/engines/hopkins/saveload.h
index e4ee3aaeda..191cb9e18f 100644
--- a/engines/hopkins/saveload.h
+++ b/engines/hopkins/saveload.h
@@ -35,7 +35,7 @@ namespace Hopkins {
class HopkinsEngine;
-#define HOPKINS_SAVEGAME_VERSION 3
+#define HOPKINS_SAVEGAME_VERSION 2
struct hopkinsSavegameHeader {
uint8 _version;
@@ -56,6 +56,7 @@ private:
public:
SaveLoadManager(HopkinsEngine *vm);
+ bool saveExists(const Common::String &file);
bool save(const Common::String &file, const void *buf, size_t n);
bool saveFile(const Common::String &file, const void *buf, size_t n);
void load(const Common::String &file, byte *buf);