aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/saveload_eob.cpp
diff options
context:
space:
mode:
authorathrxx2011-12-13 22:04:06 +0100
committerJohannes Schickel2011-12-26 16:18:17 +0100
commitc0e782fd0b2ba9de69563e8bcb4fb43e2f311b35 (patch)
tree3770bf7404fc31e427c4684a32fba1e1292adc07 /engines/kyra/saveload_eob.cpp
parent53e1bf21ecced447192f75067f0232c08d24d647 (diff)
downloadscummvm-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.cpp23
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();