aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--queen/queen.cpp16
-rw-r--r--queen/queen.h20
2 files changed, 20 insertions, 16 deletions
diff --git a/queen/queen.cpp b/queen/queen.cpp
index cb8474671d..076d634099 100644
--- a/queen/queen.cpp
+++ b/queen/queen.cpp
@@ -247,7 +247,7 @@ void QueenEngine::update(bool checkPlayerInput) {
}
}
-bool QueenEngine::canLoadOrSave() {
+bool QueenEngine::canLoadOrSave() const {
return !_input->cutawayRunning() && !(_resource->isDemo() || _resource->isInterview());
}
@@ -258,13 +258,14 @@ void QueenEngine::saveGameState(uint16 slot, const char *desc) {
Common::OutSaveFile *file = _saveFileMan->openForSaving(name);
if (file) {
// save data
- byte *saveData = new byte[30000];
+ byte *saveData = new byte[SAVESTATE_MAX_SIZE];
byte *p = saveData;
_bam->saveState(p);
_grid->saveState(p);
_logic->saveState(p);
_sound->saveState(p);
uint32 dataSize = p - saveData;
+ assert(dataSize < SAVESTATE_MAX_SIZE);
// write header
GameStateHeader header;
@@ -302,9 +303,10 @@ void QueenEngine::loadGameState(uint16 slot) {
_logic->loadState(header.version, p);
_sound->loadState(header.version, p);
if (header.dataSize != (uint32)(p - saveData)) {
- error("Corrupted savegame file");
+ warning("Corrupted savegame file");
+ } else {
+ _logic->setupRestoredGame();
}
- _logic->setupRestoredGame();
}
delete[] saveData;
delete file;
@@ -338,9 +340,9 @@ void QueenEngine::findGameStateDescriptions(char descriptions[100][32]) {
char filename[20];
makeGameStateName(0, filename);
filename[strlen(filename) - 2] = 0;
- bool marks[SAVESTATE_MAX];
- _saveFileMan->listSavefiles(filename, marks, SAVESTATE_MAX);
- for (int i = 0; i < SAVESTATE_MAX; ++i) {
+ bool marks[SAVESTATE_MAX_NUM];
+ _saveFileMan->listSavefiles(filename, marks, SAVESTATE_MAX_NUM);
+ for (int i = 0; i < SAVESTATE_MAX_NUM; ++i) {
if (marks[i]) {
GameStateHeader header;
Common::InSaveFile *f = readGameStateHeader(i, &header);
diff --git a/queen/queen.h b/queen/queen.h
index 18247c6757..a45834b5e2 100644
--- a/queen/queen.h
+++ b/queen/queen.h
@@ -111,7 +111,7 @@ public:
void update(bool checkPlayerInput = false);
- bool canLoadOrSave();
+ bool canLoadOrSave() const;
void saveGameState(uint16 slot, const char *desc);
void loadGameState(uint16 slot);
void makeGameStateName(uint16 slot, char *buf);
@@ -119,14 +119,16 @@ public:
Common::InSaveFile *readGameStateHeader(uint16 slot, GameStateHeader *gsh);
enum {
- SAVESTATE_CUR_VER = 1,
- SAVESTATE_MAX = 100,
- AUTOSAVE_INTERVAL = 5 * 60 * 1000,
- AUTOSAVE_SLOT = 0xFF,
-
- MIN_TEXT_SPEED = 4,
- MAX_TEXT_SPEED = 100,
- MAX_MUSIC_VOLUME = 255
+ SAVESTATE_CUR_VER = 1,
+ SAVESTATE_MAX_NUM = 100,
+ SAVESTATE_MAX_SIZE = 30000,
+
+ AUTOSAVE_INTERVAL = 5 * 60 * 1000,
+ AUTOSAVE_SLOT = 0xFF,
+
+ MIN_TEXT_SPEED = 4,
+ MAX_TEXT_SPEED = 100,
+ MAX_MUSIC_VOLUME = 255
};
protected: