diff options
author | athrxx | 2011-12-13 22:04:06 +0100 |
---|---|---|
committer | Johannes Schickel | 2011-12-26 16:18:17 +0100 |
commit | c0e782fd0b2ba9de69563e8bcb4fb43e2f311b35 (patch) | |
tree | 3770bf7404fc31e427c4684a32fba1e1292adc07 /engines/kyra/saveload_eob.cpp | |
parent | 53e1bf21ecced447192f75067f0232c08d24d647 (diff) | |
download | scummvm-rg350-c0e782fd0b2ba9de69563e8bcb4fb43e2f311b35.tar.gz scummvm-rg350-c0e782fd0b2ba9de69563e8bcb4fb43e2f311b35.tar.bz2 scummvm-rg350-c0e782fd0b2ba9de69563e8bcb4fb43e2f311b35.zip |
KYRA: (EOB) - Start implementing EOB1 party transfer (not working yet)
(ScummVM specific solution which allows the selection of save files of all configured EOB1 targets)
Diffstat (limited to 'engines/kyra/saveload_eob.cpp')
-rw-r--r-- | engines/kyra/saveload_eob.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/engines/kyra/saveload_eob.cpp b/engines/kyra/saveload_eob.cpp index 31f202362a..714033b569 100644 --- a/engines/kyra/saveload_eob.cpp +++ b/engines/kyra/saveload_eob.cpp @@ -32,23 +32,19 @@ namespace Kyra { Common::Error EoBCoreEngine::loadGameState(int slot) { - const char *fileName = 0; - - if (slot == -1) { - _savegameFilename = /*_targetName + */Common::String("eob.fin"); - fileName = _savegameFilename.c_str(); - } else { - fileName = getSavegameFilename(slot); - } + // Special slot id -1 for EOB1 party transfer + const char *fileName = (slot == -1) ? _savegameFilename.c_str() : getSavegameFilename(slot); SaveHeader header; - Common::InSaveFile *saveFile = openSaveForReading(fileName, header); + Common::InSaveFile *saveFile = openSaveForReading(fileName, header, (slot != -1)); if (!saveFile) return Common::Error(Common::kReadingFailed); Common::SeekableSubReadStreamEndian in(saveFile, saveFile->pos(), saveFile->size(), !header.originalSave, DisposeAfterUse::YES); _loading = true; - _screen->fadeToBlack(10); + + if (slot != -1) + _screen->fadeToBlack(10); for (int i = 0; i < 6; i++) { EoBCharacter *c = &_characters[i]; @@ -77,6 +73,8 @@ Common::Error EoBCoreEngine::loadGameState(int slot) { c->cClass = in.readByte(); c->alignment = in.readByte(); c->portrait = in.readSByte(); + if (slot == -1 && c->portrait < 0) + c->portrait += 43; c->food = in.readByte(); in.read(c->level, 3); for (int ii = 0; ii < 3; ii++) @@ -120,6 +118,10 @@ Common::Error EoBCoreEngine::loadGameState(int slot) { } _screen->_curPage = 0; + // No more data required for party transfer + if (slot == -1) + return Common::kNoError; + _currentLevel = in.readByte(); _currentSub = in.readSByte(); _currentBlock = in.readUint16BE(); @@ -303,6 +305,7 @@ Common::Error EoBCoreEngine::saveGameStateIntern(int slot, const char *saveName, Common::String saveNameTmp; const char *fileName = 0; + // Special slot id -1 to create final save for party transfer if (slot == -1) { _savegameFilename = _targetName + Common::String(".fin"); fileName = _savegameFilename.c_str(); |