diff options
-rw-r--r-- | engines/xeen/locations.cpp | 16 | ||||
-rw-r--r-- | engines/xeen/locations.h | 1 |
2 files changed, 12 insertions, 5 deletions
diff --git a/engines/xeen/locations.cpp b/engines/xeen/locations.cpp index d48dcb6c00..5ce6d92292 100644 --- a/engines/xeen/locations.cpp +++ b/engines/xeen/locations.cpp @@ -34,7 +34,7 @@ namespace Locations { BaseLocation::BaseLocation(LocationAction action) : ButtonContainer(g_vm), _LocationActionId(action), _isDarkCc(g_vm->_files->_isDarkCc), - _vocName("hello1.voc") { + _vocName("hello1.voc"), _exitToUi(false) { _townMaxId = (action >= SPHINX) ? 0 : Res.TOWN_MAXES[_isDarkCc][action]; if (action < NO_ACTION) { _songName = Res.TOWN_ACTION_MUSIC[_isDarkCc][action]; @@ -86,7 +86,7 @@ int BaseLocation::show() { do { wait(); charP = doOptions(charP); - if (_vm->shouldQuit()) + if (_vm->shouldQuit() || _exitToUi) return 0; Common::String msg = createLocationText(*charP); @@ -683,9 +683,7 @@ Character *TavernLocation::doOptions(Character *c) { case Common::KEYCODE_s: { // Sign In - PartyDialog::show(g_vm); - - // Set location and position afterwards + // Set location and position for afterwards idx = _isDarkCc ? (party._mazeId - 29) >> 1 : party._mazeId - 28; assert(idx >= 0); party._mazePosition.x = Res.TAVERN_EXIT_LIST[_isDarkCc ? 1 : 0][_LocationActionId][idx][0]; @@ -704,8 +702,16 @@ Character *TavernLocation::doOptions(Character *c) { party._activeParty[idx]._xeenSide = map._loadDarkSide; } + g_vm->_mode = MODE_17; party.addTime(1440); party._mazeId = 0; + + // Show the party dialog + PartyDialog::show(g_vm); + + if (party._mazeId != 0) + map.load(party._mazeId); + _exitToUi = true; break; } diff --git a/engines/xeen/locations.h b/engines/xeen/locations.h index 975fabdc35..98cc013873 100644 --- a/engines/xeen/locations.h +++ b/engines/xeen/locations.h @@ -54,6 +54,7 @@ protected: int _drawFrameIndex; uint _farewellTime; int _drawCtr1, _drawCtr2; + bool _exitToUi; protected: /** * Draw the window |