diff --git a/apps/openmw/mwbase/statemanager.hpp b/apps/openmw/mwbase/statemanager.hpp index 7101be25d..f1f130824 100644 --- a/apps/openmw/mwbase/statemanager.hpp +++ b/apps/openmw/mwbase/statemanager.hpp @@ -2,6 +2,7 @@ #define GAME_MWSTATE_STATEMANAGER_H #include +#include namespace MWState { @@ -52,7 +53,7 @@ namespace MWBase virtual void endGame() = 0; - virtual void saveGame (const MWState::Slot *slot = 0) = 0; + virtual void saveGame (const std::string& description, const MWState::Slot *slot = 0) = 0; ///< Write a saved game to \a slot or create a new slot if \a slot == 0. /// /// \note Slot must belong to the current character. diff --git a/apps/openmw/mwgui/savegamedialog.cpp b/apps/openmw/mwgui/savegamedialog.cpp index 2ea83cfa3..38574e2fd 100644 --- a/apps/openmw/mwgui/savegamedialog.cpp +++ b/apps/openmw/mwgui/savegamedialog.cpp @@ -83,6 +83,8 @@ namespace MWGui { WindowModal::open(); + mSaveNameEdit->setCaption (""); + center(); MWBase::StateManager* mgr = MWBase::Environment::get().getStateManager(); @@ -145,7 +147,7 @@ namespace MWGui if (mSaving) { - MWBase::Environment::get().getStateManager()->saveGame (slot); + MWBase::Environment::get().getStateManager()->saveGame (mSaveNameEdit->getCaption(), slot); } else { @@ -179,7 +181,7 @@ namespace MWGui return; for (MWState::Character::SlotIterator it = mCurrentCharacter->begin(); it != mCurrentCharacter->end(); ++it) { - mSaveList->addItem(it->mPath.string()); + mSaveList->addItem(it->mProfile.mDescription); } onSlotSelected(mSaveList, MyGUI::ITEM_NONE); } diff --git a/apps/openmw/mwstate/statemanagerimp.cpp b/apps/openmw/mwstate/statemanagerimp.cpp index 6aba93dc8..9d8cf2a81 100644 --- a/apps/openmw/mwstate/statemanagerimp.cpp +++ b/apps/openmw/mwstate/statemanagerimp.cpp @@ -61,7 +61,7 @@ void MWState::StateManager::endGame() mState = State_Ended; } -void MWState::StateManager::saveGame (const Slot *slot) +void MWState::StateManager::saveGame (const std::string& description, const Slot *slot) { ESM::SavedGame profile; @@ -98,6 +98,7 @@ void MWState::StateManager::saveGame (const Slot *slot) profile.mInGameTime.mMonth = world.getMonth(); /// \todo year /// \todo time played + profile.mDescription = description; if (!slot) slot = mCharacterManager.getCurrentCharacter()->createSlot (profile); diff --git a/apps/openmw/mwstate/statemanagerimp.hpp b/apps/openmw/mwstate/statemanagerimp.hpp index a380c9fee..abf7e123b 100644 --- a/apps/openmw/mwstate/statemanagerimp.hpp +++ b/apps/openmw/mwstate/statemanagerimp.hpp @@ -32,7 +32,7 @@ namespace MWState virtual void endGame(); - virtual void saveGame (const Slot *slot = 0); + virtual void saveGame (const std::string& description, const Slot *slot = 0); ///< Write a saved game to \a slot or create a new slot if \a slot == 0. /// /// \note Slot must belong to the current character. diff --git a/components/esm/savedgame.cpp b/components/esm/savedgame.cpp index 5a5fc9fa8..8169b01a1 100644 --- a/components/esm/savedgame.cpp +++ b/components/esm/savedgame.cpp @@ -15,6 +15,7 @@ void ESM::SavedGame::load (ESMReader &esm) mPlayerCell = esm.getHNString("PCEL"); esm.getHNT (mInGameTime, "TSTM", 16); esm.getHNT (mTimePlayed, "TIME"); + mDescription = esm.getHNString ("DESC"); while (esm.isNextSub ("DEPE")) mContentFiles.push_back (esm.getHString()); @@ -28,6 +29,7 @@ void ESM::SavedGame::save (ESMWriter &esm) const esm.writeHNCString ("PCEL", mPlayerCell); esm.writeHNT ("TSTM", mInGameTime, 16); esm.writeHNT ("TIME", mTimePlayed); + esm.writeHNCString ("DESC", mDescription); for (std::vector::const_iterator iter (mContentFiles.begin()); iter!=mContentFiles.end(); ++iter) diff --git a/components/esm/savedgame.hpp b/components/esm/savedgame.hpp index e712e8f1f..6c11d318f 100644 --- a/components/esm/savedgame.hpp +++ b/components/esm/savedgame.hpp @@ -30,6 +30,7 @@ namespace ESM std::string mPlayerCell; TimeStamp mInGameTime; double mTimePlayed; + std::string mDescription; /// \todo add field for screenshot