diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/xeen/files.cpp | 4 | ||||
-rw-r--r-- | engines/xeen/files.h | 5 | ||||
-rw-r--r-- | engines/xeen/saves.cpp | 16 |
3 files changed, 21 insertions, 4 deletions
diff --git a/engines/xeen/files.cpp b/engines/xeen/files.cpp index 0fce5b3741..d18b5c4dd6 100644 --- a/engines/xeen/files.cpp +++ b/engines/xeen/files.cpp @@ -488,8 +488,10 @@ void SaveArchive::load(Common::SeekableReadStream &stream) { _data = new byte[_dataSize]; stream.seek(0); stream.read(_data, _dataSize); +} - // Load in the character stats and active party +void SaveArchive::loadParty() { + // Load in the character roster and active party Common::SeekableReadStream *chr = createReadStreamForMember("maze.chr"); Common::Serializer sChr(chr, nullptr); _party->_roster.synchronize(sChr); diff --git a/engines/xeen/files.h b/engines/xeen/files.h index 08aa3cd8d0..0d421547fb 100644 --- a/engines/xeen/files.h +++ b/engines/xeen/files.h @@ -352,6 +352,11 @@ public: void save(Common::WriteStream &s); /** + * Load the character roster and party + */ + void loadParty(); + + /** * Sets a new resource entry */ void replaceEntry(uint16 id, const byte *data, size_t size); diff --git a/engines/xeen/saves.cpp b/engines/xeen/saves.cpp index 60cac91b75..96490c8937 100644 --- a/engines/xeen/saves.cpp +++ b/engines/xeen/saves.cpp @@ -177,9 +177,13 @@ Common::Error SavesManager::loadGameState(int slot) { uint fileSize = saveFile->readUint32LE(); if (archives[idx]) { - Common::SeekableSubReadStream arcStream(saveFile, saveFile->pos(), - saveFile->pos() + fileSize); - archives[idx]->load(arcStream); + if (fileSize) { + Common::SeekableSubReadStream arcStream(saveFile, saveFile->pos(), + saveFile->pos() + fileSize); + archives[idx]->load(arcStream); + } else { + archives[idx]->reset((idx == 1) ? File::_darkCc : File::_xeenCc); + } } else { assert(!fileSize); } @@ -188,6 +192,9 @@ Common::Error SavesManager::loadGameState(int slot) { // Read in miscellaneous files.load(*saveFile); + // Load the character roster and party + File::_currentSave->loadParty(); + // Reset any combat information from the previous game combat.reset(); party._treasure.reset(); @@ -228,6 +235,9 @@ void SavesManager::newGame() { File::_darkSave : File::_xeenSave; assert(File::_currentSave); + // Load the character roster and party + File::_currentSave->loadParty(); + // Set any final initial values Party &party = *g_vm->_party; party.resetBlacksmithWares(); |