aboutsummaryrefslogtreecommitdiff
path: root/engines/queen
diff options
context:
space:
mode:
authorGregory Montoir2007-09-27 20:38:04 +0000
committerGregory Montoir2007-09-27 20:38:04 +0000
commitc1eacc03571b9afbedd188fbf26ff115dbf8e393 (patch)
treefa3469a03e75eec494e084470c5e97521d6554b0 /engines/queen
parent885b16f2f07286745ab90baa49817441de12ac43 (diff)
downloadscummvm-rg350-c1eacc03571b9afbedd188fbf26ff115dbf8e393.tar.gz
scummvm-rg350-c1eacc03571b9afbedd188fbf26ff115dbf8e393.tar.bz2
scummvm-rg350-c1eacc03571b9afbedd188fbf26ff115dbf8e393.zip
simplified queen savegame listing (removed marks array etc.)
svn-id: r29111
Diffstat (limited to 'engines/queen')
-rw-r--r--engines/queen/queen.cpp56
-rw-r--r--engines/queen/queen.h13
2 files changed, 33 insertions, 36 deletions
diff --git a/engines/queen/queen.cpp b/engines/queen/queen.cpp
index 423e1f13a3..8affe7e89b 100644
--- a/engines/queen/queen.cpp
+++ b/engines/queen/queen.cpp
@@ -203,14 +203,14 @@ void QueenEngine::update(bool checkPlayerInput) {
if (canLoadOrSave()) {
if (_input->quickSave()) {
_input->quickSaveReset();
- saveGameState(0, "Quicksave");
+ saveGameState(SLOT_QUICKSAVE, "Quicksave");
}
if (_input->quickLoad()) {
_input->quickLoadReset();
- loadGameState(0);
+ loadGameState(SLOT_QUICKSAVE);
}
if (shouldPerformAutoSave(_lastSaveTime)) {
- saveGameState(AUTOSAVE_SLOT, "Autosave");
+ saveGameState(SLOT_AUTOSAVE, "Autosave");
_lastSaveTime = _system->getMillis();
}
}
@@ -229,7 +229,7 @@ bool QueenEngine::canLoadOrSave() const {
return !_input->cutawayRunning() && !(_resource->isDemo() || _resource->isInterview());
}
-void QueenEngine::saveGameState(uint16 slot, const char *desc) {
+void QueenEngine::saveGameState(int slot, const char *desc) {
debug(3, "Saving game to slot %d", slot);
char name[20];
makeGameStateName(slot, name);
@@ -270,7 +270,7 @@ void QueenEngine::saveGameState(uint16 slot, const char *desc) {
}
}
-void QueenEngine::loadGameState(uint16 slot) {
+void QueenEngine::loadGameState(int slot) {
debug(3, "Loading game from slot %d", slot);
GameStateHeader header;
Common::InSaveFile *file = readGameStateHeader(slot, &header);
@@ -295,7 +295,7 @@ void QueenEngine::loadGameState(uint16 slot) {
}
}
-Common::InSaveFile *QueenEngine::readGameStateHeader(uint16 slot, GameStateHeader *gsh) {
+Common::InSaveFile *QueenEngine::readGameStateHeader(int slot, GameStateHeader *gsh) {
char name[20];
makeGameStateName(slot, name);
Common::InSaveFile *file = _saveFileMan->openForLoading(name);
@@ -310,39 +310,33 @@ Common::InSaveFile *QueenEngine::readGameStateHeader(uint16 slot, GameStateHeade
return file;
}
-void QueenEngine::makeGameStateName(uint16 slot, char *buf) {
- if (slot == AUTOSAVE_SLOT) {
+void QueenEngine::makeGameStateName(int slot, char *buf) const {
+ if (slot == SLOT_LISTPREFIX) {
+ strcpy(buf, "queen.*");
+ } else if (slot == SLOT_AUTOSAVE) {
strcpy(buf, "queen.asd");
} else {
+ assert(slot >= 0);
sprintf(buf, "queen.s%02d", slot);
}
}
-void QueenEngine::findGameStateDescriptions(char descriptions[100][32]) {
- char prefix[20];
- makeGameStateName(0, prefix);
- prefix[strlen(prefix) - 2] = '*';
- prefix[strlen(prefix) - 1] = 0;
- bool marks[SAVESTATE_MAX_NUM];
- char slot[2];
- int slotNum;
- Common::StringList filenames;
-
- memset(marks, false, SAVESTATE_MAX_NUM * sizeof(bool)); //assume no savegames for this title
- filenames = _saveFileMan->listSavefiles(prefix);
-
- for (Common::StringList::const_iterator file = filenames.begin(); file != filenames.end(); file++){
- //Obtain the last 2 digits of the filename, since they correspond to the save slot
- slot[0] = file->c_str()[file->size()-2];
- slot[1] = file->c_str()[file->size()-1];
-
- slotNum = atoi(slot);
- if (slotNum >= 0 && slotNum < SAVESTATE_MAX_NUM)
- marks[slotNum] = true; //mark this slot as valid
+int QueenEngine::getGameStateSlot(const char *filename) const {
+ int i = -1;
+ const char *slot = strrchr(filename, '.');
+ if (slot && slot[1] == 's') {
+ i = atoi(slot + 2);
}
+ return i;
+}
- for (int i = 0; i < SAVESTATE_MAX_NUM; ++i) {
- if (marks[i]) {
+void QueenEngine::findGameStateDescriptions(char descriptions[100][32]) {
+ char prefix[20];
+ makeGameStateName(SLOT_LISTPREFIX, prefix);
+ Common::StringList filenames = _saveFileMan->listSavefiles(prefix);
+ for (Common::StringList::const_iterator it = filenames.begin(); it != filenames.end(); ++it) {
+ int i = getGameStateSlot(it->c_str());
+ if (i >= 0 && i < SAVESTATE_MAX_NUM) {
GameStateHeader header;
Common::InSaveFile *f = readGameStateHeader(i, &header);
strcpy(descriptions[i], header.description);
diff --git a/engines/queen/queen.h b/engines/queen/queen.h
index 33a1830105..0beb557b36 100644
--- a/engines/queen/queen.h
+++ b/engines/queen/queen.h
@@ -107,18 +107,21 @@ public:
void update(bool checkPlayerInput = false);
bool canLoadOrSave() const;
- void saveGameState(uint16 slot, const char *desc);
- void loadGameState(uint16 slot);
- void makeGameStateName(uint16 slot, char *buf);
+ void saveGameState(int slot, const char *desc);
+ void loadGameState(int slot);
+ void makeGameStateName(int slot, char *buf) const;
+ int getGameStateSlot(const char *filename) const;
void findGameStateDescriptions(char descriptions[100][32]);
- Common::InSaveFile *readGameStateHeader(uint16 slot, GameStateHeader *gsh);
+ Common::InSaveFile *readGameStateHeader(int slot, GameStateHeader *gsh);
enum {
SAVESTATE_CUR_VER = 1,
SAVESTATE_MAX_NUM = 100,
SAVESTATE_MAX_SIZE = 30000,
- AUTOSAVE_SLOT = 0xFF,
+ SLOT_LISTPREFIX = -2,
+ SLOT_AUTOSAVE = -1,
+ SLOT_QUICKSAVE = 0,
MIN_TEXT_SPEED = 4,
MAX_TEXT_SPEED = 100