diff options
author | Paul Gilbert | 2015-01-11 14:21:57 -0500 |
---|---|---|
committer | Paul Gilbert | 2015-01-11 14:21:57 -0500 |
commit | 3b1edcdf36fc7a207a70cb28e7dcf7879ea9b7e5 (patch) | |
tree | 8eabf36d7aeaa2fd790c3f1aa3125b348e708a41 /engines/xeen/saves.cpp | |
parent | 0b5f79afb7dbf0d2bcf3cb14747f93f348b1aaa5 (diff) | |
download | scummvm-rg350-3b1edcdf36fc7a207a70cb28e7dcf7879ea9b7e5.tar.gz scummvm-rg350-3b1edcdf36fc7a207a70cb28e7dcf7879ea9b7e5.tar.bz2 scummvm-rg350-3b1edcdf36fc7a207a70cb28e7dcf7879ea9b7e5.zip |
XEEN: Implemented code for 'saving' resources to the loaded savefile
Diffstat (limited to 'engines/xeen/saves.cpp')
-rw-r--r-- | engines/xeen/saves.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/engines/xeen/saves.cpp b/engines/xeen/saves.cpp index e6bfa80e09..c2b15106eb 100644 --- a/engines/xeen/saves.cpp +++ b/engines/xeen/saves.cpp @@ -29,6 +29,22 @@ namespace Xeen { +OutFile::OutFile(XeenEngine *vm, const Common::String filename) : + _vm(vm), _filename(filename) { +} + +void OutFile::finalize() { + uint16 id = BaseCCArchive::convertNameToId(_filename); + + if (!_vm->_saves->_newData.contains(id)) + _vm->_saves->_newData[id] = Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES); + + Common::MemoryWriteStreamDynamic &out = _vm->_saves->_newData[id]; + out.write(getData(), size()); +} + +/*------------------------------------------------------------------------*/ + SavesManager::SavesManager(XeenEngine *vm, Party &party, Roster &roster) : BaseCCArchive(), _vm(vm), _party(party), _roster(roster) { SearchMan.add("saves", this, 0, false); @@ -67,6 +83,15 @@ void SavesManager::syncBitFlags(Common::Serializer &s, bool *startP, bool *endP) Common::SeekableReadStream *SavesManager::createReadStreamForMember(const Common::String &name) const { CCEntry ccEntry; + // If the given resource has already been perviously "written" to the + // save manager, then return that new resource + uint16 id = BaseCCArchive::convertNameToId(name); + if (_newData.contains(id)) { + Common::MemoryWriteStreamDynamic stream = _newData[id]; + return new Common::MemoryReadStream(stream.getData(), stream.size()); + } + + // Retrieve the resource from the loaded savefile if (getHeaderEntry(name, ccEntry)) { // Open the correct CC entry return new Common::MemoryReadStream(_data + ccEntry._offset, ccEntry._size); |