diff options
author | Paul Gilbert | 2018-04-07 15:53:27 -0400 |
---|---|---|
committer | Paul Gilbert | 2018-04-07 15:53:27 -0400 |
commit | c1ae84881883363da05bfdb53ad274bd4814c057 (patch) | |
tree | b27dfd25b4f2f16e92c946101fe32f2d98550197 | |
parent | 569833b4ca80116efaab15e47d0097b5c62ecb6c (diff) | |
download | scummvm-rg350-c1ae84881883363da05bfdb53ad274bd4814c057.tar.gz scummvm-rg350-c1ae84881883363da05bfdb53ad274bd4814c057.tar.bz2 scummvm-rg350-c1ae84881883363da05bfdb53ad274bd4814c057.zip |
XEEN: Allow loading savegames during combat using GMM
The original didn't allow loading during combat from it's
options dialog, and I'll leave that untouched, but the ability
to load out of a unwinnable combat is too convenient to not
allow in some form.
-rw-r--r-- | engines/xeen/combat.cpp | 3 | ||||
-rw-r--r-- | engines/xeen/interface.cpp | 28 | ||||
-rw-r--r-- | engines/xeen/xeen.cpp | 6 | ||||
-rw-r--r-- | engines/xeen/xeen.h | 4 |
4 files changed, 22 insertions, 19 deletions
diff --git a/engines/xeen/combat.cpp b/engines/xeen/combat.cpp index 71ad6303a8..397370f41f 100644 --- a/engines/xeen/combat.cpp +++ b/engines/xeen/combat.cpp @@ -2099,7 +2099,8 @@ void Combat::reset() { clearShooting(); setupCombatParty(); - _combatMode = COMBATMODE_STARTUP; + _combatMode = COMBATMODE_1; + _monster2Attack = -1; } } // End of namespace Xeen diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp index 88b33c4164..1a7900274c 100644 --- a/engines/xeen/interface.cpp +++ b/engines/xeen/interface.cpp @@ -1519,7 +1519,7 @@ void Interface::doCombat() { } while (!_vm->shouldExit() && events.timeElapsed() < 1 && !_buttonValue); } while (!_vm->shouldExit() && !_buttonValue); if (_vm->shouldExit()) - return; + goto exit; switch (_buttonValue) { case Common::KEYCODE_TAB: @@ -1701,7 +1701,7 @@ void Interface::doCombat() { } } } - +exit: w.close(); events.clearEvents(); @@ -1721,18 +1721,20 @@ void Interface::doCombat() { mainIconsPrint(); combat._monster2Attack = -1; - if (upDoorText) { - map.cellFlagLookup(party._mazePosition); - if (map._currentIsEvent) - scripts.checkEvents(); - } + if (!g_vm->isLoadPending()) { + if (upDoorText) { + map.cellFlagLookup(party._mazePosition); + if (map._currentIsEvent) + scripts.checkEvents(); + } - if (reloadMap) { - sound.playFX(51); - map._loadCcNum = _vm->getGameID() != GType_WorldOfXeen ? 1 : 0; - map.load(_vm->getGameID() == GType_WorldOfXeen ? 28 : 29); - party._mazeDirection = _vm->getGameID() == GType_WorldOfXeen ? - DIR_EAST : DIR_SOUTH; + if (reloadMap) { + sound.playFX(51); + map._loadCcNum = _vm->getGameID() != GType_WorldOfXeen ? 1 : 0; + map.load(_vm->getGameID() == GType_WorldOfXeen ? 28 : 29); + party._mazeDirection = _vm->getGameID() == GType_WorldOfXeen ? + DIR_EAST : DIR_SOUTH; + } } combat._combatMode = COMBATMODE_1; diff --git a/engines/xeen/xeen.cpp b/engines/xeen/xeen.cpp index 5f6243c045..8300040c62 100644 --- a/engines/xeen/xeen.cpp +++ b/engines/xeen/xeen.cpp @@ -189,7 +189,7 @@ Common::Error XeenEngine::loadGameState(int slot) { } bool XeenEngine::canLoadGameStateCurrently() { - return _mode != MODE_COMBAT && _mode != MODE_STARTUP; + return _mode != MODE_STARTUP; } bool XeenEngine::canSaveGameStateCurrently() { @@ -256,7 +256,7 @@ void XeenEngine::play() { void XeenEngine::gameLoop() { // Main game loop - while (!shouldExit()) { + while (isLoadPending() || !shouldExit()) { if (isLoadPending()) { // Load any pending savegame int saveSlot = _loadSaveSlot; @@ -268,7 +268,7 @@ void XeenEngine::gameLoop() { _map->cellFlagLookup(_party->_mazePosition); if (_map->_currentIsEvent) { _gameMode = (GameMode)_scripts->checkEvents(); - if (shouldExit() || _gameMode) + if (shouldExit()) return; } _party->giveTreasure(); diff --git a/engines/xeen/xeen.h b/engines/xeen/xeen.h index 774e97bea5..2cd42fdb0a 100644 --- a/engines/xeen/xeen.h +++ b/engines/xeen/xeen.h @@ -219,9 +219,9 @@ public: void GUIError(const char *msg, ...) GCC_PRINTF(2, 3); /** - * Returns true if the game should be exited (and likely return to game menu) + * Returns true if the game should be exited (either quitting, exiting to the main menu, or loading a savegame) */ - bool shouldExit() const { return _gameMode != GMODE_NONE || shouldQuit(); } + bool shouldExit() const { return _gameMode != GMODE_NONE || isLoadPending() || shouldQuit(); } /** * Returns true if a savegame load is pending |