[Scummvm-git-logs] scummvm master -> ca9d48f1687d10929edcda9cfcbbead94b981903
dreammaster
paulfgilbert at gmail.com
Sat Feb 15 05:40:42 UTC 2020
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
11992f04c1 ULTIMA8: Make u8 save gump strings translatable
ca9d48f168 ULTIMA8: Simplifying savegame code
Commit: 11992f04c1708979bcf418ffaff126e2e0f71e61
https://github.com/scummvm/scummvm/commit/11992f04c1708979bcf418ffaff126e2e0f71e61
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-14T21:40:33-08:00
Commit Message:
ULTIMA8: Make u8 save gump strings translatable
Changed paths:
engines/ultima/POTFILES
engines/ultima/ultima8/gumps/u8_save_gump.cpp
diff --git a/engines/ultima/POTFILES b/engines/ultima/POTFILES
index dd89637..7136d43 100644
--- a/engines/ultima/POTFILES
+++ b/engines/ultima/POTFILES
@@ -2,3 +2,4 @@ engines/ultima/shared/engine/ultima.cpp
engines/ultima/shared/engine/data_archive.cpp
engines/ultima/nuvie/save/save_game.cpp
engines/ultima/ultima8/ultima8.cpp
+engines/ultima/ultima8/gumps/u8_save_gump.cpp
diff --git a/engines/ultima/ultima8/gumps/u8_save_gump.cpp b/engines/ultima/ultima8/gumps/u8_save_gump.cpp
index 00cd2c2..6a1e96a 100644
--- a/engines/ultima/ultima8/gumps/u8_save_gump.cpp
+++ b/engines/ultima/ultima8/gumps/u8_save_gump.cpp
@@ -22,7 +22,6 @@
#include "ultima/ultima8/misc/pent_include.h"
#include "ultima/ultima8/gumps/u8_save_gump.h"
-
#include "ultima/ultima8/graphics/render_surface.h"
#include "ultima/ultima8/gumps/desktop_gump.h"
#include "ultima/ultima8/gumps/widgets/edit_widget.h"
@@ -36,9 +35,9 @@
#include "ultima/ultima8/gumps/paged_gump.h"
#include "ultima/ultima8/world/get_object.h"
#include "ultima/ultima8/world/actors/main_actor.h"
-
#include "ultima/ultima8/filesys/idata_source.h"
#include "ultima/ultima8/filesys/odata_source.h"
+#include "common/translation.h"
namespace Ultima {
namespace Ultima8 {
@@ -314,13 +313,13 @@ void U8SaveGump::loadDescriptions() {
// FIXME: move version checks elsewhere!!
switch (state) {
case SavegameReader::SAVE_CORRUPT:
- descriptions[i] = "[corrupt] ";
+ descriptions[i] = _("[corrupt]");
break;
case SavegameReader::SAVE_OUT_OF_DATE:
- descriptions[i] = "[outdated] ";
+ descriptions[i] = _("[outdated]");
break;
case SavegameReader::SAVE_TOO_RECENT:
- descriptions[i] = "[too modern] ";
+ descriptions[i] = _("[too modern]");
break;
default:
break;
Commit: ca9d48f1687d10929edcda9cfcbbead94b981903
https://github.com/scummvm/scummvm/commit/ca9d48f1687d10929edcda9cfcbbead94b981903
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-02-14T21:40:33-08:00
Commit Message:
ULTIMA8: Simplifying savegame code
Changed paths:
engines/ultima/ultima8/conf/setting_manager.cpp
engines/ultima/ultima8/filesys/savegame.cpp
engines/ultima/ultima8/filesys/savegame.h
engines/ultima/ultima8/games/game.h
engines/ultima/ultima8/games/remorse_game.cpp
engines/ultima/ultima8/games/remorse_game.h
engines/ultima/ultima8/games/start_u8_process.cpp
engines/ultima/ultima8/games/start_u8_process.h
engines/ultima/ultima8/games/u8_game.cpp
engines/ultima/ultima8/games/u8_game.h
engines/ultima/ultima8/gumps/pentagram_menu_gump.cpp
engines/ultima/ultima8/gumps/u8_save_gump.cpp
engines/ultima/ultima8/gumps/u8_save_gump.h
engines/ultima/ultima8/ultima8.cpp
engines/ultima/ultima8/ultima8.h
diff --git a/engines/ultima/ultima8/conf/setting_manager.cpp b/engines/ultima/ultima8/conf/setting_manager.cpp
index f3e1975..162fb00 100644
--- a/engines/ultima/ultima8/conf/setting_manager.cpp
+++ b/engines/ultima/ultima8/conf/setting_manager.cpp
@@ -43,7 +43,7 @@ SettingManager::SettingManager() {
void SettingManager::setupScummVMSettings() {
conffileman->readConfigString("", "ScummVM", false);
-
+
int saveSlot = ConfMan.hasKey("save_slot") ? ConfMan.getInt("save_slot") : -1;
if (saveSlot != -1)
set("lastSave", Std::string::format("@save/%d", saveSlot), DOM_SCUMMVM);
diff --git a/engines/ultima/ultima8/filesys/savegame.cpp b/engines/ultima/ultima8/filesys/savegame.cpp
index bc7f2f5..2b96d60 100644
--- a/engines/ultima/ultima8/filesys/savegame.cpp
+++ b/engines/ultima/ultima8/filesys/savegame.cpp
@@ -35,41 +35,37 @@ namespace Ultima8 {
#define SAVEGAME_IDENT MKTAG('V', 'M', 'U', '8')
#define SAVEGAME_VERSION 5
-SavegameReader::SavegameReader(IDataSource *ds, bool metadataOnly) : _file(ds), _version(0) {
- if (!MetaEngine::readSavegameHeader(ds->GetRawStream(), &_header, false))
+SavegameReader::SavegameReader(Common::SeekableReadStream *rs, bool metadataOnly) : _file(rs), _version(0) {
+ if (!MetaEngine::readSavegameHeader(rs, &_header))
return;
- // Set total play time
- g_engine->setTotalPlayTime(_header.playtime * 1000);
-
// Validate the identifier for a valid savegame
- uint32 ident = ds->read4();
+ uint32 ident = _file->readUint32LE();
if (ident != SAVEGAME_IDENT)
return;
- _version = ds->read4();
+ _version = _file->readUint32LE();
if (metadataOnly)
return;
// Load the index
- uint count = ds->read2();
+ uint count = _file->readUint16LE();
for (uint idx = 0; idx < count; ++idx) {
char name[12];
- ds->read(name, 12);
+ _file->read(name, 12);
name[11] = '\0';
FileEntry fe;
- fe._size = ds->read4();
- fe._offset = ds->getPos();
+ fe._size = _file->readUint32LE();
+ fe._offset = _file->pos();
_index[Common::String(name)] = fe;
- ds->skip(fe._size);
+ _file->skip(fe._size);
}
}
SavegameReader::~SavegameReader() {
- delete _file;
}
SavegameReader::State SavegameReader::isValid() const {
@@ -95,7 +91,7 @@ IDataSource *SavegameReader::getDataSource(const Std::string &name) {
}
-SavegameWriter::SavegameWriter(ODataSource *ds) : _file(ds) {
+SavegameWriter::SavegameWriter(Common::WriteStream *ws) : _file(ws) {
assert(_file);
}
@@ -104,11 +100,11 @@ SavegameWriter::~SavegameWriter() {
bool SavegameWriter::finish() {
// Write ident and savegame version
- _file->write4(SAVEGAME_IDENT);
- _file->write4(SAVEGAME_VERSION);
+ _file->writeUint32LE(SAVEGAME_IDENT);
+ _file->writeUint32LE(SAVEGAME_VERSION);
// Iterate through writing out the files
- _file->write2(_index.size());
+ _file->writeUint16LE(_index.size());
for (uint idx = 0; idx < _index.size(); ++idx) {
// Set up a 12 byte space containing the resource name
FileEntry &fe = _index[idx];
@@ -118,15 +114,10 @@ bool SavegameWriter::finish() {
// Write out name, size, and data
_file->write(name, 12);
- _file->write4(fe.size());
+ _file->writeUint32LE(fe.size());
_file->write(&fe[0], fe.size());
}
- // Handle adding savegame header
- Common::OutSaveFile *dest = dynamic_cast<Common::OutSaveFile *>(_file->GetRawStream());
- MetaEngine::appendExtendedSave(dest, Shared::g_ultima->getTotalPlayTime() / 1000, _description);
- dest->finalize();
-
return true;
}
diff --git a/engines/ultima/ultima8/filesys/savegame.h b/engines/ultima/ultima8/filesys/savegame.h
index 80d0f31..4fd09a3 100644
--- a/engines/ultima/ultima8/filesys/savegame.h
+++ b/engines/ultima/ultima8/filesys/savegame.h
@@ -25,7 +25,7 @@
#include "ultima/shared/std/string.h"
#include "common/hashmap.h"
-#include "common/serializer.h"
+#include "common/stream.h"
#include "engines/metaengine.h"
#include "graphics/surface.h"
@@ -46,10 +46,10 @@ class SavegameReader {
private:
ExtendedSavegameHeader _header;
Common::HashMap<Common::String, FileEntry> _index;
- IDataSource *_file;
+ Common::SeekableReadStream *_file;
uint32 _version;
public:
- explicit SavegameReader(IDataSource *ds, bool metadataOnly = false);
+ explicit SavegameReader(Common::SeekableReadStream *rs, bool metadataOnly = false);
~SavegameReader();
enum State { SAVE_CORRUPT, SAVE_VALID, SAVE_OUT_OF_DATE, SAVE_TOO_RECENT };
@@ -72,19 +72,12 @@ class SavegameWriter {
FileEntry() : Common::Array<byte>() {}
};
private:
- ODataSource *_file;
+ Common::WriteStream *_file;
Common::Array<FileEntry> _index;
- Std::string _description;
public:
- explicit SavegameWriter(ODataSource *ds);
+ explicit SavegameWriter(Common::WriteStream *ws);
virtual ~SavegameWriter();
- //! write the savegame's description.
- bool writeDescription(const Std::string &desc) {
- _description = desc;
- return true;
- }
-
//! write a file to the savegame
//! \param name name of the file
//! \param data the data
diff --git a/engines/ultima/ultima8/games/game.h b/engines/ultima/ultima8/games/game.h
index 43e667d..77ac96d 100644
--- a/engines/ultima/ultima8/games/game.h
+++ b/engines/ultima/ultima8/games/game.h
@@ -47,7 +47,7 @@ public:
virtual bool startGame() = 0;
//! start initial usecode
- virtual bool startInitialUsecode(const Std::string &savegame) = 0;
+ virtual bool startInitialUsecode(int saveSlot = -1) = 0;
//! write game-specific savegame info (avatar stats, equipment, ...)
virtual void writeSaveInfo(ODataSource *ods) = 0;
diff --git a/engines/ultima/ultima8/games/remorse_game.cpp b/engines/ultima/ultima8/games/remorse_game.cpp
index 1c9e2f8..9c13e98 100644
--- a/engines/ultima/ultima8/games/remorse_game.cpp
+++ b/engines/ultima/ultima8/games/remorse_game.cpp
@@ -95,7 +95,7 @@ bool RemorseGame::startGame() {
return true;
}
-bool RemorseGame::startInitialUsecode(const Std::string &) {
+bool RemorseGame::startInitialUsecode(int saveSlot) {
// Process* proc = new StartU8Process();
// Kernel::get_instance()->addProcess(proc);
diff --git a/engines/ultima/ultima8/games/remorse_game.h b/engines/ultima/ultima8/games/remorse_game.h
index 2d491b6..e1f67e9 100644
--- a/engines/ultima/ultima8/games/remorse_game.h
+++ b/engines/ultima/ultima8/games/remorse_game.h
@@ -36,7 +36,7 @@ public:
bool startGame() override;
//! start initial usecode
- bool startInitialUsecode(const Std::string &savegame) override;
+ bool startInitialUsecode(int saveSlot = -1) override;
//! write game-specific savegame info (avatar stats, equipment, ...)
void writeSaveInfo(ODataSource *ods) override;
diff --git a/engines/ultima/ultima8/games/start_u8_process.cpp b/engines/ultima/ultima8/games/start_u8_process.cpp
index 67f9dc8..393f690 100644
--- a/engines/ultima/ultima8/games/start_u8_process.cpp
+++ b/engines/ultima/ultima8/games/start_u8_process.cpp
@@ -41,8 +41,8 @@ namespace Ultima8 {
// p_dynamic_cast stuff
DEFINE_RUNTIME_CLASSTYPE_CODE(StartU8Process, Process)
-StartU8Process::StartU8Process(const Std::string &saveName) : Process(),
- _init(false), _saveName(saveName), _skipStart(!saveName.empty()) {
+StartU8Process::StartU8Process(int saveSlot) : Process(),
+ _init(false), _saveSlot(saveSlot), _skipStart(saveSlot >= 0) {
}
@@ -58,7 +58,7 @@ void StartU8Process::run() {
}
// Try to load the save game, if succeeded this pointer will no longer be valid
- if (!_saveName.empty() && Ultima8Engine::get_instance()->loadGame(_saveName)) {
+ if (_saveSlot >= 0 &&Ultima8Engine::get_instance()->loadGameState(_saveSlot).getCode() == Common::kNoError) {
return;
}
diff --git a/engines/ultima/ultima8/games/start_u8_process.h b/engines/ultima/ultima8/games/start_u8_process.h
index 335a7b6..c17137c 100644
--- a/engines/ultima/ultima8/games/start_u8_process.h
+++ b/engines/ultima/ultima8/games/start_u8_process.h
@@ -31,11 +31,11 @@ class StartU8Process : public Process {
protected:
bool _init;
bool _skipStart;
- Std::string _saveName;
+ int _saveSlot;
void saveData(ODataSource *ods) override;
public:
- StartU8Process(const Std::string &saveName);
+ StartU8Process(int saveSlot = -1);
// p_dynamic_cast stuff
ENABLE_RUNTIME_CLASSTYPE()
diff --git a/engines/ultima/ultima8/games/u8_game.cpp b/engines/ultima/ultima8/games/u8_game.cpp
index e0d861d..ec1ddf7 100644
--- a/engines/ultima/ultima8/games/u8_game.cpp
+++ b/engines/ultima/ultima8/games/u8_game.cpp
@@ -341,8 +341,8 @@ void U8Game::ConCmd_cheatEquip(const Console::ArgvType &argv) {
av->setEquip(item, false);
}
-bool U8Game::startInitialUsecode(const Std::string &savegame) {
- Process *proc = new StartU8Process(savegame);
+bool U8Game::startInitialUsecode(int saveSlot) {
+ Process *proc = new StartU8Process(saveSlot);
Kernel::get_instance()->addProcess(proc);
return true;
diff --git a/engines/ultima/ultima8/games/u8_game.h b/engines/ultima/ultima8/games/u8_game.h
index d8886e7..b87b5c0 100644
--- a/engines/ultima/ultima8/games/u8_game.h
+++ b/engines/ultima/ultima8/games/u8_game.h
@@ -38,7 +38,7 @@ public:
bool startGame() override;
//! start initial usecode
- bool startInitialUsecode(const Std::string &savegame) override;
+ bool startInitialUsecode(int saveSlot) override;
//! write game-specific savegame info (avatar stats, equipment, ...)
void writeSaveInfo(ODataSource *ods) override;
diff --git a/engines/ultima/ultima8/gumps/pentagram_menu_gump.cpp b/engines/ultima/ultima8/gumps/pentagram_menu_gump.cpp
index aeceb13..624b1dd 100644
--- a/engines/ultima/ultima8/gumps/pentagram_menu_gump.cpp
+++ b/engines/ultima/ultima8/gumps/pentagram_menu_gump.cpp
@@ -230,7 +230,7 @@ bool PentagramMenuGump::OnKeyDown(int key, int mod) {
void PentagramMenuGump::ProcessCallback(Std::string gamename, int message) {
if (message != 0) {
SettingManager *settingman = SettingManager::get_instance();
- settingman->set("lastSave", message != 1 ? U8SaveGump::getFilename(message) : Std::string());
+ settingman->set("lastSave", message != 1 ? message : -1);
Ultima8Engine::get_instance()->changeGame(gamename);
}
diff --git a/engines/ultima/ultima8/gumps/u8_save_gump.cpp b/engines/ultima/ultima8/gumps/u8_save_gump.cpp
index 6a1e96a..708755d 100644
--- a/engines/ultima/ultima8/gumps/u8_save_gump.cpp
+++ b/engines/ultima/ultima8/gumps/u8_save_gump.cpp
@@ -37,6 +37,7 @@
#include "ultima/ultima8/world/actors/main_actor.h"
#include "ultima/ultima8/filesys/idata_source.h"
#include "ultima/ultima8/filesys/odata_source.h"
+#include "common/savefile.h"
#include "common/translation.h"
namespace Ultima {
@@ -268,22 +269,13 @@ bool U8SaveGump::OnKeyDown(int key, int mod) {
return false;
}
-Std::string U8SaveGump::getFilename(int index) {
- return Std::string::format("@save/%d", index);
-}
-
bool U8SaveGump::loadgame(int saveIndex) {
if (saveIndex == 1) {
- Ultima8Engine::get_instance()->newGame(Std::string());
+ Ultima8Engine::get_instance()->newGame();
return true;
+ } else {
+ return Ultima8Engine::get_instance()->loadGameState(saveIndex).getCode() == Common::kNoError;
}
-
- pout << "Load " << saveIndex << Std::endl;
-
- Std::string filename = getFilename(saveIndex);
- Ultima8Engine::get_instance()->loadGame(filename);
-
- return true;
}
bool U8SaveGump::savegame(int saveIndex, const Std::string &name) {
@@ -291,22 +283,22 @@ bool U8SaveGump::savegame(int saveIndex, const Std::string &name) {
if (name.empty()) return false;
- Std::string filename = getFilename(saveIndex);
- Ultima8Engine::get_instance()->saveGame(filename, name, true);
+ Ultima8Engine::get_instance()->saveGame(saveIndex, name, true);
return true;
}
void U8SaveGump::loadDescriptions() {
- descriptions.resize(6);
+ descriptions.resize( 6);
for (int i = 0; i < 6; ++i) {
int saveIndex = 6 * page + i + 1;
- Std::string filename = getFilename(saveIndex);
- IDataSource *ids = FileSystem::get_instance()->ReadFile(filename);
- if (!ids) continue;
+ Common::InSaveFile *saveFile = g_system->getSavefileManager()->openForLoading(
+ Ultima8Engine::get_instance()->getSaveStateName(saveIndex));
+ if (!saveFile)
+ continue;
- SavegameReader *sg = new SavegameReader(ids, true);
+ SavegameReader *sg = new SavegameReader(saveFile, true);
SavegameReader::State state = sg->isValid();
descriptions[i] = "";
@@ -325,6 +317,8 @@ void U8SaveGump::loadDescriptions() {
break;
}
+ if (state != SavegameReader::SAVE_VALID)
+ descriptions[i] += " ";
descriptions[i] += sg->getDescription();
delete sg;
}
diff --git a/engines/ultima/ultima8/gumps/u8_save_gump.h b/engines/ultima/ultima8/gumps/u8_save_gump.h
index 11641b9..091db55 100644
--- a/engines/ultima/ultima8/gumps/u8_save_gump.h
+++ b/engines/ultima/ultima8/gumps/u8_save_gump.h
@@ -49,8 +49,6 @@ public:
void ChildNotify(Gump *child, uint32 message) override;
void OnFocus(bool gain) override;
- static Std::string getFilename(int index);
-
static Gump *showLoadSaveGump(Gump *parent, bool save);
protected:
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index ac3a5df..0eaee68 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -553,11 +553,8 @@ void Ultima8Engine::startupGame() {
if (getGameInfo()->type == GameInfo::GAME_U8)
_audioMixer->openMidiOutput();
- Std::string savegame;
- settingman->setDefault("lastSave", "");
- settingman->get("lastSave", savegame);
-
- newGame(savegame);
+ int saveSlot = ConfMan.hasKey("save_slot") ? ConfMan.getInt("save_slot") : -1;
+ newGame(saveSlot);
_consoleGump->HideConsole();
@@ -1314,13 +1311,7 @@ bool Ultima8Engine::canSaveGameStateCurrently(bool isAutosave) {
return true;
}
-Common::Error Ultima8Engine::saveGameState(int slot, const Common::String &desc, bool isAutosave) {
- return saveGame(Std::string::format("@save/%d", slot), desc) ?
- Common::kNoError : Common::kWritingFailed;
-}
-
-bool Ultima8Engine::saveGame(Std::string filename, Std::string desc,
- bool ignore_modals) {
+bool Ultima8Engine::saveGame(int slot, const Std::string &desc, bool ignore_modals) {
// Don't allow saving with Modals open
if (!ignore_modals && _desktopGump->FindGump<ModalGump>()) {
pout << "Can't save: modal gump open." << Std::endl;
@@ -1335,23 +1326,20 @@ bool Ultima8Engine::saveGame(Std::string filename, Std::string desc,
return false;
}
- pout << "Saving..." << Std::endl;
+ settingman->set("lastSave", slot);
- pout << "Savegame file: " << filename << Std::endl;
- pout << "Description: " << desc << Std::endl;
+ return saveGameState(slot, desc).getCode() == Common::kNoError;
+}
+Common::Error Ultima8Engine::saveGameStream(Common::WriteStream *stream, bool isAutosave) {
// Hack - don't save mouse over status for gumps
Gump *gump = _mouse->getMouseOverGump();
if (gump)
gump->OnMouseLeft();
- ODataSource *ods = filesystem->WriteFile(filename);
- if (!ods) return false;
-
_saveCount++;
- SavegameWriter *sgw = new SavegameWriter(ods);
- sgw->writeDescription(desc);
+ SavegameWriter *sgw = new SavegameWriter(stream);
// We'll make it 2KB initially
OAutoBufferDataSource buf(2048);
@@ -1407,11 +1395,9 @@ bool Ultima8Engine::saveGame(Std::string filename, Std::string desc,
// Restore mouse over
if (gump) gump->OnMouseOver();
- settingman->set("lastSave", filename);
-
pout << "Done" << Std::endl;
- return true;
+ return Common::kNoError;
}
void Ultima8Engine::resetEngine() {
@@ -1498,7 +1484,7 @@ void Ultima8Engine::setupCoreGumps() {
_objectManager->reserveObjId(i);
}
-bool Ultima8Engine::newGame(const Std::string &savegame) {
+bool Ultima8Engine::newGame(int saveSlot) {
con->Print(MM_INFO, "Starting New Game...\n");
resetEngine();
@@ -1529,9 +1515,9 @@ bool Ultima8Engine::newGame(const Std::string &savegame) {
// av->teleport(54, 14783,5959,8); // shrine of the Ancient Ones; Hanoi
// av->teleport(5, 5104,22464,48); // East road (tenebrae end)
- _game->startInitialUsecode(savegame);
+ _game->startInitialUsecode(saveSlot);
- settingman->set("lastSave", savegame);
+ settingman->set("lastSave", saveSlot);
return true;
}
@@ -1546,35 +1532,21 @@ void Ultima8Engine::syncSoundSettings() {
midiPlayer->setVolume(_mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType));
}
-Common::Error Ultima8Engine::loadGameState(int slot) {
- return loadGame(Std::string::format("@save/%d", slot)) ?
- Common::kNoError : Common::kReadingFailed;
-}
-
-bool Ultima8Engine::loadGame(Std::string filename) {
- con->Print(MM_INFO, "Loading...\n");
-
- IDataSource *ids = filesystem->ReadFile(filename);
- if (!ids) {
- Error("Can't load file", "Error Loading savegame " + filename);
- settingman->set("lastSave", "");
- return false;
- }
-
- SavegameReader *sg = new SavegameReader(ids);
+Common::Error Ultima8Engine::loadGameStream(Common::SeekableReadStream *stream) {
+ SavegameReader *sg = new SavegameReader(stream);
SavegameReader::State state = sg->isValid();
if (state == SavegameReader::SAVE_CORRUPT) {
- Error("Invalid or corrupt savegame", "Error Loading savegame " + filename);
+ Error("Invalid or corrupt savegame", "Error Loading savegame");
delete sg;
settingman->set("lastSave", "");
- return false;
+ return Common::kReadingFailed;
}
if (state != SavegameReader::SAVE_VALID) {
- Error("Unsupported savegame version", "Error Loading savegame " + filename);
+ Error("Unsupported savegame version", "Error Loading savegame");
delete sg;
settingman->set("lastSave", "");
- return false;
+ return Common::kReadingFailed;
}
IDataSource *ds;
@@ -1584,9 +1556,9 @@ bool Ultima8Engine::loadGame(Std::string filename) {
bool ok = saveinfo.load(ds, version);
if (!ok) {
- Error("Invalid or corrupt savegame: missing GameInfo", "Error Loading savegame " + filename);
+ Error("Invalid or corrupt savegame: missing GameInfo", "Error Loading savegame");
delete sg;
- return false;
+ return Common::kReadingFailed;
}
if (!gameinfo->match(saveinfo)) {
@@ -1607,8 +1579,8 @@ bool Ultima8Engine::loadGame(Std::string filename) {
perr << message << Std::endl;
#else
settingman->set("lastSave", "");
- Error(message, "Error Loading savegame " + filename);
- return false;
+ Error(message, "Error Loading savegame");
+ return Common::kReadingFailed;
#endif
}
@@ -1690,17 +1662,17 @@ bool Ultima8Engine::loadGame(Std::string filename) {
delete ds;
if (!totalok) {
- Error(message, "Error Loading savegame " + filename, true);
+ Error(message, "Error Loading savegame", true);
delete sg;
- return false;
+ return Common::kReadingFailed;
}
pout << "Done" << Std::endl;
- settingman->set("lastSave", filename);
+ settingman->set("lastSave", -1);
delete sg;
- return true;
+ return Common::kNoError;
}
void Ultima8Engine::Error(Std::string message, Std::string title, bool exit_to_menu) {
@@ -1811,7 +1783,7 @@ bool Ultima8Engine::load(IDataSource *ids, uint32 version) {
void Ultima8Engine::ConCmd_saveGame(const Console::ArgvType &argv) {
if (argv.size() == 2) {
// Save a _game with the given name into the quicksave slot
- Ultima8Engine::get_instance()->saveGame("@save/1", argv[1]);
+ Ultima8Engine::get_instance()->saveGame(1, argv[1]);
} else {
Ultima8Engine::get_instance()->saveGameDialog();
}
@@ -1821,14 +1793,14 @@ void Ultima8Engine::ConCmd_loadGame(const Console::ArgvType &argv) {
if (argv.size() == 2) {
// Load a _game from the quicksave slot. The second parameter is ignored,
// it just needs to be present to differentiate from showing the GUI load dialog
- Ultima8Engine::get_instance()->loadGame("@save/1");
+ Ultima8Engine::get_instance()->loadGameState(1);
} else {
Ultima8Engine::get_instance()->loadGameDialog();
}
}
void Ultima8Engine::ConCmd_newGame(const Console::ArgvType &argv) {
- Ultima8Engine::get_instance()->newGame(Std::string());
+ Ultima8Engine::get_instance()->newGame();
}
void Ultima8Engine::ConCmd_quit(const Console::ArgvType &argv) {
diff --git a/engines/ultima/ultima8/ultima8.h b/engines/ultima/ultima8/ultima8.h
index 040c262..f669485 100644
--- a/engines/ultima/ultima8/ultima8.h
+++ b/engines/ultima/ultima8/ultima8.h
@@ -325,31 +325,21 @@ public:
/**
* Load a game state
*/
- Common::Error loadGameState(int slot) override;
+ Common::Error loadGameStream(Common::SeekableReadStream *stream) override;
/**
- * Save a game state.
- * @param slot the slot into which the savestate should be stored
- * @param desc a description for the savestate, entered by the user
- * @param isAutosave If true, autosave is being created
- * @return returns kNoError on success, else an error code.
+ * Handles saving savegame state to a stream
*/
- Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave) override;
+ Common::Error saveGameStream(Common::WriteStream *stream, bool isAutosave) override;
//! save a game
//! \param filename the file to save to
//! \return true if succesful
- bool saveGame(Std::string filename, Std::string desc,
- bool ignore_modals = false);
-
- //! load a game
- //! \param filename the savegame to load
- //! \return true if succesful.
- bool loadGame(Std::string filename);
+ bool saveGame(int slot, const Std::string &desc, bool ignore_modals = false);
//! start a new game
//! \return true if succesful.
- bool newGame(const Std::string &savegame);
+ bool newGame(int saveSlot = -1);
//! Enter gump text mode (aka SDL Unicode keyhandling)
void enterTextMode(Gump *);
More information about the Scummvm-git-logs
mailing list