aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2018-04-07 15:53:27 -0400
committerPaul Gilbert2018-04-07 15:53:27 -0400
commitc1ae84881883363da05bfdb53ad274bd4814c057 (patch)
treeb27dfd25b4f2f16e92c946101fe32f2d98550197
parent569833b4ca80116efaab15e47d0097b5c62ecb6c (diff)
downloadscummvm-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.cpp3
-rw-r--r--engines/xeen/interface.cpp28
-rw-r--r--engines/xeen/xeen.cpp6
-rw-r--r--engines/xeen/xeen.h4
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