ULTIMA8: Fix loading savegames

This commit is contained in:
Paul Gilbert 2019-12-15 09:29:38 -08:00 committed by Paul Gilbert
parent 687d39a28e
commit bae44fcb51
2 changed files with 6 additions and 3 deletions

View File

@ -33,7 +33,7 @@ namespace Ultima8 {
#define SAVEGAME_IDENT MKTAG('V', 'M', 'U', '8')
#define SAVEGAME_VERSION 5
SavegameReader::SavegameReader(IDataSource *ds, bool metadataOnly) : _version(0) {
SavegameReader::SavegameReader(IDataSource *ds, bool metadataOnly) : _file(ds), _version(0) {
if (!MetaEngine::readSavegameHeader(ds->GetRawStream(), &_header, false))
return;
@ -61,11 +61,10 @@ SavegameReader::SavegameReader(IDataSource *ds, bool metadataOnly) : _version(0)
_index[Common::String(name)] = fe;
ds->skip(fe._size);
}
delete ds;
}
SavegameReader::~SavegameReader() {
delete _file;
}
SavegameReader::State SavegameReader::isValid() const {
@ -84,6 +83,9 @@ IDataSource *SavegameReader::getDataSource(const std::string &name) {
const FileEntry &fe = _index[name];
uint8 *data = (uint8 *)malloc(fe._size);
_file->seek(fe._offset);
_file->read(data, fe._size);
return new IBufferDataSource(data, fe._size, false, true);
}

View File

@ -45,6 +45,7 @@ class SavegameReader {
private:
ExtendedSavegameHeader _header;
Common::HashMap<Common::String, FileEntry> _index;
IDataSource *_file;
uint32 _version;
public:
explicit SavegameReader(IDataSource *ds, bool metadataOnly = false);