aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/saves.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2015-01-11 14:21:57 -0500
committerPaul Gilbert2015-01-11 14:21:57 -0500
commit3b1edcdf36fc7a207a70cb28e7dcf7879ea9b7e5 (patch)
tree8eabf36d7aeaa2fd790c3f1aa3125b348e708a41 /engines/xeen/saves.cpp
parent0b5f79afb7dbf0d2bcf3cb14747f93f348b1aaa5 (diff)
downloadscummvm-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.cpp25
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);