diff options
author | Gregory Montoir | 2007-09-27 20:38:04 +0000 |
---|---|---|
committer | Gregory Montoir | 2007-09-27 20:38:04 +0000 |
commit | c1eacc03571b9afbedd188fbf26ff115dbf8e393 (patch) | |
tree | fa3469a03e75eec494e084470c5e97521d6554b0 /engines/queen | |
parent | 885b16f2f07286745ab90baa49817441de12ac43 (diff) | |
download | scummvm-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.cpp | 56 | ||||
-rw-r--r-- | engines/queen/queen.h | 13 |
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 |