[Scummvm-git-logs] scummvm master -> 724c4e57add58362395ad6b6e79bcdaed1ff073b
dreammaster
dreammaster at scummvm.org
Tue Feb 27 00:25:31 CET 2018
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
724c4e57ad XEEN: Defer creating new game state until needed
Commit: 724c4e57add58362395ad6b6e79bcdaed1ff073b
https://github.com/scummvm/scummvm/commit/724c4e57add58362395ad6b6e79bcdaed1ff073b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2018-02-26T18:24:24-05:00
Commit Message:
XEEN: Defer creating new game state until needed
This fixes a bug with the startup menu where, after finishing the
game, starting a new one would simply re-show the prior game
Changed paths:
engines/xeen/saves.cpp
engines/xeen/saves.h
engines/xeen/worldofxeen/worldofxeen.cpp
engines/xeen/worldofxeen/worldofxeen_menu.cpp
diff --git a/engines/xeen/saves.cpp b/engines/xeen/saves.cpp
index 828d1ea..a338aaf 100644
--- a/engines/xeen/saves.cpp
+++ b/engines/xeen/saves.cpp
@@ -38,37 +38,6 @@ SavesManager::SavesManager(const Common::String &targetName): _targetName(target
_wonWorld(false), _wonDarkSide(false) {
File::_xeenSave = nullptr;
File::_darkSave = nullptr;
-
- if (g_vm->getGameID() != GType_Clouds) {
- File::_darkSave = new SaveArchive(g_vm->_party);
- File::_darkSave->reset(File::_darkCc);
- }
- if (g_vm->getGameID() != GType_DarkSide && g_vm->getGameID() != GType_Swords) {
- File::_xeenSave = new SaveArchive(g_vm->_party);
- File::_xeenSave->reset(File::_xeenCc);
- }
-
- File::_currentSave = g_vm->getGameID() == GType_DarkSide || g_vm->getGameID() == GType_Swords ?
- File::_darkSave : File::_xeenSave;
- assert(File::_currentSave);
-
- // Set any final initial values
- Party &party = *g_vm->_party;
- party.resetBlacksmithWares();
- party._totalTime = 0;
-
- switch (g_vm->getGameID()) {
- case GType_Swords:
- party._year = 1050;
- break;
- case GType_DarkSide:
- party._year = 850;
- break;
- default:
- party._year = 610;
- break;
- }
- party._day = 1;
}
SavesManager::~SavesManager() {
@@ -237,6 +206,44 @@ Common::String SavesManager::generateSaveName(int slot) {
return Common::String::format("%s.%03d", _targetName.c_str(), slot);
}
+void SavesManager::newGame() {
+ delete File::_xeenSave;
+ delete File::_darkSave;
+ File::_xeenSave = nullptr;
+ File::_darkSave = nullptr;
+
+ if (g_vm->getGameID() != GType_Clouds) {
+ File::_darkSave = new SaveArchive(g_vm->_party);
+ File::_darkSave->reset(File::_darkCc);
+ }
+ if (g_vm->getGameID() != GType_DarkSide && g_vm->getGameID() != GType_Swords) {
+ File::_xeenSave = new SaveArchive(g_vm->_party);
+ File::_xeenSave->reset(File::_xeenCc);
+ }
+
+ File::_currentSave = g_vm->getGameID() == GType_DarkSide || g_vm->getGameID() == GType_Swords ?
+ File::_darkSave : File::_xeenSave;
+ assert(File::_currentSave);
+
+ // Set any final initial values
+ Party &party = *g_vm->_party;
+ party.resetBlacksmithWares();
+ party._totalTime = 0;
+
+ switch (g_vm->getGameID()) {
+ case GType_Swords:
+ party._year = 1050;
+ break;
+ case GType_DarkSide:
+ party._year = 850;
+ break;
+ default:
+ party._year = 610;
+ break;
+ }
+ party._day = 1;
+}
+
bool SavesManager::loadGame() {
if (!g_vm->canLoadGameStateCurrently())
return false;
diff --git a/engines/xeen/saves.h b/engines/xeen/saves.h
index 0150321..b18e04a 100644
--- a/engines/xeen/saves.h
+++ b/engines/xeen/saves.h
@@ -83,6 +83,11 @@ public:
Common::Error saveGameState(int slot, const Common::String &desc);
/**
+ * Sets up a new game
+ */
+ void newGame();
+
+ /**
* Shows the load game dialog, and lets the user load a game
* @returns True if a savegame was loaded
*/
diff --git a/engines/xeen/worldofxeen/worldofxeen.cpp b/engines/xeen/worldofxeen/worldofxeen.cpp
index cb2c8c7..54d3b48 100644
--- a/engines/xeen/worldofxeen/worldofxeen.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen.cpp
@@ -45,8 +45,10 @@ void WorldOfXeenEngine::outerGameLoop() {
while (!shouldQuit() && _pendingAction != WOX_QUIT) {
// TODO: Remove this once proper startup menus are added for Clouds & Dark Side
- if (g_vm->getGameID() != GType_WorldOfXeen)
+ if (g_vm->getGameID() != GType_WorldOfXeen) {
+ _saves->newGame();
_pendingAction = WOX_PLAY_GAME;
+ }
WOXGameAction action = _pendingAction;
_pendingAction = WOX_MENU;
diff --git a/engines/xeen/worldofxeen/worldofxeen_menu.cpp b/engines/xeen/worldofxeen/worldofxeen_menu.cpp
index ff2e9ac..f43b00f 100644
--- a/engines/xeen/worldofxeen/worldofxeen_menu.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen_menu.cpp
@@ -109,7 +109,10 @@ void WorldOfXeenMenu::execute() {
if (result == -1)
break;
+ // Load a new game state and set the difficulty
+ _vm->_saves->newGame();
_vm->_party->_difficulty = (Difficulty)result;
+
WOX_VM._pendingAction = WOX_PLAY_GAME;
closeWindow();
return;
More information about the Scummvm-git-logs
mailing list