aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/gui.cpp
diff options
context:
space:
mode:
authorathrxx2011-11-14 19:57:23 +0100
committerJohannes Schickel2011-12-26 16:18:14 +0100
commitb3c8173bd46ddc831344848723598846bd5c41e8 (patch)
tree558c37e7cb470a9cab12590e9c41d8e824bfa0fb /engines/kyra/gui.cpp
parentb288889c978990423b08dad8f838d891610f36b5 (diff)
downloadscummvm-rg350-b3c8173bd46ddc831344848723598846bd5c41e8.tar.gz
scummvm-rg350-b3c8173bd46ddc831344848723598846bd5c41e8.tar.bz2
scummvm-rg350-b3c8173bd46ddc831344848723598846bd5c41e8.zip
KYRA: (EOB) - extend save/load dialogue to support 990 slots
Diffstat (limited to 'engines/kyra/gui.cpp')
-rw-r--r--engines/kyra/gui.cpp40
1 files changed, 20 insertions, 20 deletions
diff --git a/engines/kyra/gui.cpp b/engines/kyra/gui.cpp
index d03fa23d5a..9c0adf159b 100644
--- a/engines/kyra/gui.cpp
+++ b/engines/kyra/gui.cpp
@@ -32,7 +32,7 @@
namespace Kyra {
GUI::GUI(KyraEngine_v1 *kyra) : _vm(kyra), _screen(kyra->screen()) {
- _savegameListUpdateNeeded = false;
+ _saveSlotsListUpdateNeeded = true;
_savegameListSize = 0;
_savegameList = 0;
}
@@ -46,7 +46,7 @@ GUI::~GUI() {
}
}
-void GUI::updateSaveList(bool excludeQuickSaves) {
+void GUI::updateSaveFileList(bool excludeQuickSaves) {
Common::String pattern = _vm->_targetName + ".???";
Common::StringArray saveFileList = _vm->_saveFileMan->listSavefiles(pattern);
_saveSlots.clear();
@@ -93,11 +93,11 @@ int GUI::getNextSavegameSlot() {
return 0;
}
-void GUI::updateSavegameList() {
- if (!_savegameListUpdateNeeded)
+void GUI::updateSaveSlotsList() {
+ if (!_saveSlotsListUpdateNeeded)
return;
- _savegameListUpdateNeeded = false;
+ _saveSlotsListUpdateNeeded = false;
if (_savegameList) {
for (int i = 0; i < _savegameListSize; i++)
@@ -105,31 +105,31 @@ void GUI::updateSavegameList() {
delete[] _savegameList;
}
- updateSaveList(true);
- _savegameListSize = _saveSlots.size();
+ updateSaveFileList(true);
+ int numSaves = _savegameListSize = _saveSlots.size();
+ bool allowEmptySlots = (_vm->game() == GI_EOB1 || _vm->game() == GI_EOB2);
if (_savegameListSize) {
- if (_vm->game() == GI_EOB1 || _vm->game() == GI_EOB2) {
- Common::sort(_saveSlots.begin(), _saveSlots.end(), Common::Less<int>());
- _savegameListSize = _saveSlots.back() + 1;
- } else {
- Common::sort(_saveSlots.begin(), _saveSlots.end(), Common::Greater<int>());
- }
+ if (allowEmptySlots)
+ _savegameListSize = 990;
KyraEngine_v1::SaveHeader header;
Common::InSaveFile *in;
- _savegameList = new char *[_savegameListSize];
+ _savegameList = new char*[_savegameListSize];
+ memset(_savegameList, 0, _savegameListSize * sizeof(char*));
- for (int i = 0; i < _savegameListSize; i++) {
- in = _vm->openSaveForReading(_vm->getSavegameFilename(i), header);
+ for (int i = 0; i < numSaves; i++) {
+ in = _vm->openSaveForReading(_vm->getSavegameFilename(_saveSlots[i]), header);
+ char **listEntry = &_savegameList[allowEmptySlots? _saveSlots[i] : i];
if (in) {
- _savegameList[i] = new char[header.description.size() + 1];
- Common::strlcpy(_savegameList[i], header.description.c_str(), header.description.size() + 1);
- Util::convertISOToDOS(_savegameList[i]);
+ *listEntry = new char[header.description.size() + 1];
+ Common::strlcpy(*listEntry, header.description.c_str(), header.description.size() + 1);
+ Util::convertISOToDOS(*listEntry);
delete in;
} else {
- _savegameList[i] = 0;
+ *listEntry = 0;
+ error("GUI::updateSavegameList(): Unexpected missing save file for slot: %d.", _saveSlots[i]);
}
}