From 62eb39515b0f19a52861e9dd0fb4ac6af8c1c2ba Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 9 Feb 2015 20:57:19 -0500 Subject: XEEN: Some refactoring needed for resources the party dialog will need --- engines/xeen/dialogs_party.cpp | 153 +++++++++++++++++++++++++++++++++++++++++ engines/xeen/dialogs_party.h | 58 ++++++++++++++++ engines/xeen/events.cpp | 2 +- engines/xeen/events.h | 2 +- engines/xeen/interface.cpp | 139 +++---------------------------------- engines/xeen/interface.h | 4 -- engines/xeen/module.mk | 1 + engines/xeen/resources.cpp | 6 ++ engines/xeen/resources.h | 2 + engines/xeen/scripts.cpp | 2 +- engines/xeen/scripts.h | 2 +- engines/xeen/town.cpp | 7 +- engines/xeen/xeen.cpp | 6 +- engines/xeen/xeen.h | 1 + 14 files changed, 242 insertions(+), 143 deletions(-) create mode 100644 engines/xeen/dialogs_party.cpp create mode 100644 engines/xeen/dialogs_party.h diff --git a/engines/xeen/dialogs_party.cpp b/engines/xeen/dialogs_party.cpp new file mode 100644 index 0000000000..510cd6572d --- /dev/null +++ b/engines/xeen/dialogs_party.cpp @@ -0,0 +1,153 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/scummsys.h" +#include "xeen/dialogs_party.h" +#include "xeen/character.h" +#include "xeen/events.h" +#include "xeen/party.h" +#include "xeen/xeen.h" + +namespace Xeen { + + void PartyDialog::show(XeenEngine *vm) { + PartyDialog *dlg = new PartyDialog(vm); + dlg->execute(); + delete dlg; +} + +void PartyDialog::execute() { + EventsManager &events = *_vm->_events; + Map &map = *_vm->_map; + Screen &screen = *_vm->_screen; + + loadButtons(); + setupBackground(); + + _vm->_mode = MODE_1; + Common::Array xeenSideChars; + + // Build up a list of characters on the same Xeen side being loaded + for (int i = 0; i < XEEN_TOTAL_CHARACTERS; ++i) { + Character &player = _vm->_roster[i]; + if (player._name.empty() || player._xeenSide != (map._loadDarkSide ? 1 : 0)) + continue; + + xeenSideChars.push_back(i); + } + + Window &w = screen._windows[11]; + w.open(); + setupFaces(0, xeenSideChars, false); + w.writeString(_displayText); + w.drawList(&_faceDrawStructs[0], 4); + + _iconSprites.draw(w, 0, Common::Point(16, 100)); + _iconSprites.draw(w, 2, Common::Point(52, 100)); + _iconSprites.draw(w, 4, Common::Point(87, 100)); + _iconSprites.draw(w, 6, Common::Point(122, 100)); + _iconSprites.draw(w, 8, Common::Point(157, 100)); + _iconSprites.draw(w, 10, Common::Point(192, 100)); + + screen.loadPalette("mm4.pal"); + // TODO +} + +void PartyDialog::loadButtons() { + _iconSprites.load("inn.icn"); + addButton(Common::Rect(16, 100, 40, 120), Common::KEYCODE_UP, &_iconSprites); + addButton(Common::Rect(52, 100, 76, 120), Common::KEYCODE_DOWN, &_iconSprites); + addButton(Common::Rect(87, 100, 111, 120), Common::KEYCODE_d, &_iconSprites); + addButton(Common::Rect(122, 100, 146, 120), Common::KEYCODE_r, &_iconSprites); + addButton(Common::Rect(157, 100, 181, 120), Common::KEYCODE_c, &_iconSprites); + addButton(Common::Rect(192, 100, 116, 120), Common::KEYCODE_x, &_iconSprites); + addButton(Common::Rect(0, 0, 0, 0), Common::KEYCODE_ESCAPE, &_iconSprites, false); + addButton(Common::Rect(16, 16, 48, 48), Common::KEYCODE_1, &_iconSprites, false); + addButton(Common::Rect(117, 16, 149, 48), Common::KEYCODE_2, &_iconSprites, false); + addButton(Common::Rect(59, 59, 91, 91), Common::KEYCODE_3, &_iconSprites, false); + addButton(Common::Rect(117, 59, 151, 91), Common::KEYCODE_4, &_iconSprites, false); +} + +void PartyDialog::initDrawStructs() { + _faceDrawStructs[0] = DrawStruct(0, 0, 0); + _faceDrawStructs[1] = DrawStruct(0, 101, 0); + _faceDrawStructs[2] = DrawStruct(0, 0, 43); + _faceDrawStructs[3] = DrawStruct(0, 101, 43); +} + +void PartyDialog::setupBackground() { + _vm->_screen->loadBackground("back.raw"); + _vm->_interface->assembleBorder(); +} + +/** + * Sets up the faces for display in the party dialog + */ +void PartyDialog::setupFaces(int charIndex, Common::Array xeenSideChars, bool updateFlag) { + Resources &res = *_vm->_resources; + Common::String charNames[4]; + Common::String charRaces[4]; + Common::String charSex[4]; + Common::String charClasses[4]; + int posIndex; + int charId; + + for (posIndex = 0; posIndex < 4; ++posIndex) { + charId = xeenSideChars[charIndex]; + bool isInParty = _vm->_party->isInParty(charId); + + if (charId == 0xff) { + while ((int)_buttons.size() >(7 + posIndex)) + _buttons.remove_at(_buttons.size() - 1); + break; + } + + Common::Rect &b = _buttons[7 + posIndex]._bounds; + b.moveTo((posIndex & 1) ? 117 : 16, b.top); + Character &ps = _vm->_roster[xeenSideChars[charIndex + posIndex]]; + charNames[posIndex] = isInParty ? IN_PARTY : ps._name; + charRaces[posIndex] = RACE_NAMES[ps._race]; + charSex[posIndex] = SEX_NAMES[ps._sex]; + charClasses[posIndex] = CLASS_NAMES[ps._class]; + } + + charIconsPrint(updateFlag); + + // Set up the sprite set to use for each face + charId = xeenSideChars[charIndex]; + _faceDrawStructs[0]._sprites = (charId == 0xff) ? (SpriteResource *)nullptr : &res._charFaces[charId]; + charId = xeenSideChars[charIndex + 1]; + _faceDrawStructs[1]._sprites = (charId == 0xff) ? (SpriteResource *)nullptr : &res._charFaces[charId]; + charId = xeenSideChars[charIndex + 2]; + _faceDrawStructs[2]._sprites = (charId == 0xff) ? (SpriteResource *)nullptr : &res._charFaces[charId]; + charId = xeenSideChars[charIndex + 3]; + _faceDrawStructs[3]._sprites = (charId == 0xff) ? (SpriteResource *)nullptr : &res._charFaces[charId]; + + _displayText = Common::String::format(PARTY_DETAILS, + charNames[0].c_str(), charRaces[0].c_str(), charSex[0].c_str(), charClasses[0].c_str(), + charNames[1].c_str(), charRaces[1].c_str(), charSex[1].c_str(), charClasses[1].c_str(), + charNames[2].c_str(), charRaces[2].c_str(), charSex[2].c_str(), charClasses[2].c_str(), + charNames[3].c_str(), charRaces[3].c_str(), charSex[3].c_str(), charClasses[3].c_str() + ); +} + +} // End of namespace Xeen diff --git a/engines/xeen/dialogs_party.h b/engines/xeen/dialogs_party.h new file mode 100644 index 0000000000..c2768e9994 --- /dev/null +++ b/engines/xeen/dialogs_party.h @@ -0,0 +1,58 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef XEEN_DIALOGS_PARTY_H +#define XEEN_DIALOGS_PARTY_H + +#include "xeen/dialogs.h" +#include "xeen/screen.h" +#include "xeen/sprites.h" + +namespace Xeen { + +class PartyDialog : public ButtonContainer { +private: + XeenEngine *_vm; + SpriteResource _iconSprites; + DrawStruct _faceDrawStructs[4]; + Common::String _displayText; + + PartyDialog(XeenEngine *vm) : ButtonContainer(), _vm(vm) {} + + void execute(); + + void loadButtons(); + + void initDrawStructs(); + + void setupBackground(); + + void charIconsPrint(bool updateFlag); + + void setupFaces(int charIndex, Common::Array xeenSideChars, bool updateFlag); +public: + static void show(XeenEngine *vm); +}; + +} // End of namespace Xeen + +#endif /* XEEN_DIALOGS_PARTY_H */ diff --git a/engines/xeen/events.cpp b/engines/xeen/events.cpp index 89a1ac3b50..9f13861dd2 100644 --- a/engines/xeen/events.cpp +++ b/engines/xeen/events.cpp @@ -168,7 +168,7 @@ bool EventsManager::wait(uint numFrames, bool interruptable) { return false; } -void EventsManager::ipause(int amount) { +void EventsManager::ipause(uint amount) { updateGameCounter(); do { _vm->_interface->draw3d(true); diff --git a/engines/xeen/events.h b/engines/xeen/events.h index 5d6918b0da..cce3155a4b 100644 --- a/engines/xeen/events.h +++ b/engines/xeen/events.h @@ -91,7 +91,7 @@ public: bool wait(uint numFrames, bool interruptable = false); - void ipause(int amount); + void ipause(uint amount); }; class GameEvent { diff --git a/engines/xeen/interface.cpp b/engines/xeen/interface.cpp index b51801fd58..a88217e5ad 100644 --- a/engines/xeen/interface.cpp +++ b/engines/xeen/interface.cpp @@ -46,11 +46,6 @@ Interface::Interface(XeenEngine *vm) : ButtonContainer(), InterfaceMap(vm), _vm( void Interface::initDrawStructs() { - _faceDrawStructs[0] = DrawStruct(0, 0, 0); - _faceDrawStructs[1] = DrawStruct(0, 101, 0); - _faceDrawStructs[2] = DrawStruct(0, 0, 43); - _faceDrawStructs[3] = DrawStruct(0, 101, 43); - _mainList[0] = DrawStruct(7, 232, 74); _mainList[1] = DrawStruct(0, 235, 75); _mainList[2] = DrawStruct(2, 260, 75); @@ -85,70 +80,8 @@ void Interface::setup() { } void Interface::manageCharacters(bool soundPlayed) { - EventsManager &events = *_vm->_events; - Map &map = *_vm->_map; - Screen &screen = *_vm->_screen; - bool flag = false; - -start: - if (_vm->_party->_mazeId != 0) { - _vm->_mode = MODE_0; - _buttonsLoaded = true; - } else { - if (!soundPlayed) { - warning("TODO: loadSound?"); - } - - if (!_partyFaces[0]) { - // Xeen only uses 24 of possible 30 character slots - loadCharIcons(); - - for (int i = 0; i < _vm->_party->_partyCount; ++i) - _partyFaces[i] = &_charFaces[_vm->_party->_partyMembers[i]]; - } - - _vm->_mode = MODE_1; - Common::Array xeenSideChars; - - // Build up a list of characters on the same Xeen side being loaded - for (int i = 0; i < XEEN_TOTAL_CHARACTERS; ++i) { - Character &player = _vm->_roster[i]; - if (player._name.empty() || player._xeenSide != (map._loadDarkSide ? 1 : 0)) - continue; - - xeenSideChars.push_back(i); - } - - // Add in buttons for the UI - _interfaceText = ""; - _buttonsLoaded = true; - addButton(Common::Rect(16, 100, 40, 120), 242, &_uiSprites, true); - addButton(Common::Rect(52, 100, 76, 120), 243, &_uiSprites, true); - addButton(Common::Rect(87, 100, 111, 120), 68, &_uiSprites, true); - addButton(Common::Rect(122, 100, 146, 120), 82, &_uiSprites, true); - addButton(Common::Rect(157, 100, 181, 120), 67, &_uiSprites, true); - addButton(Common::Rect(192, 100, 216, 120), 88, &_uiSprites, true); - addButton(Common::Rect(), 27, &_uiSprites, false); - addButton(Common::Rect(16, 16, 48, 48), 49, &_uiSprites, false); - addButton(Common::Rect(117, 16, 139, 48), 50, &_uiSprites, false); - addButton(Common::Rect(16, 59, 48, 81), 51, &_uiSprites, false); - addButton(Common::Rect(117, 59, 149, 81), 52, &_uiSprites, false); - - setupBackground(); - Window &w = screen._windows[11]; - w.open(); - setupFaces(0, xeenSideChars, false); - w.writeString(_interfaceText); - w.drawList(&_faceDrawStructs[0], 4); - - _uiSprites.draw(w, 0, Common::Point(16, 100)); - _uiSprites.draw(w, 2, Common::Point(52, 100)); - _uiSprites.draw(w, 4, Common::Point(87, 100)); - _uiSprites.draw(w, 6, Common::Point(122, 100)); - _uiSprites.draw(w, 8, Common::Point(157, 100)); - _uiSprites.draw(w, 10, Common::Point(192, 100)); - - screen.loadPalette("mm4.pal"); + /* + if (flag) { screen._windows[0].update(); @@ -264,76 +197,23 @@ start: for (int i = 0; i < TOTAL_CHARACTERS; ++i) _charFaces[i].clear(); + */ } void Interface::loadCharIcons() { - for (int i = 0; i < XEEN_TOTAL_CHARACTERS; ++i) { - // Load new character resource - Common::String name = Common::String::format("char%02d.fac", i + 1); - _charFaces[i].load(name); - } - _dseFace.load("dse.fac"); } void Interface::loadPartyIcons() { - for (int i = 0; i < _vm->_party->_partyCount; ++i) - _partyFaces[i] = &_charFaces[_vm->_party->_partyMembers[i]]; -} - -void Interface::setupBackground() { - _vm->_screen->loadBackground("back.raw"); - assembleBorder(); -} - -void Interface::setupFaces(int charIndex, Common::Array xeenSideChars, bool updateFlag) { - Common::String playerNames[4]; - Common::String playerRaces[4]; - Common::String playerSex[4]; - Common::String playerClass[4]; - int posIndex; - int charId; - - for (posIndex = 0; posIndex < 4; ++posIndex) { - charId = xeenSideChars[charIndex]; - bool isInParty = _vm->_party->isInParty(charId); - - if (charId == 0xff) { - while ((int)_buttons.size() > (7 + posIndex)) - _buttons.remove_at(_buttons.size() - 1); - break; - } - - Common::Rect &b = _buttons[7 + posIndex]._bounds; - b.moveTo((posIndex & 1) ? 117 : 16, b.top); - Character &ps = _vm->_roster[xeenSideChars[charIndex + posIndex]]; - playerNames[posIndex] = isInParty ? IN_PARTY : ps._name; - playerRaces[posIndex] = RACE_NAMES[ps._race]; - playerSex[posIndex] = SEX_NAMES[ps._sex]; - playerClass[posIndex] = CLASS_NAMES[ps._class]; - } + Party &party = *_vm->_party; + Resources &res = *_vm->_resources; - charIconsPrint(updateFlag); - - // Set up the sprite set to use for each face - charId = xeenSideChars[charIndex]; - _faceDrawStructs[0]._sprites = (charId == 0xff) ? (SpriteResource *)nullptr : &_charFaces[charId]; - charId = xeenSideChars[charIndex + 1]; - _faceDrawStructs[1]._sprites = (charId == 0xff) ? (SpriteResource *)nullptr : &_charFaces[charId]; - charId = xeenSideChars[charIndex + 2]; - _faceDrawStructs[2]._sprites = (charId == 0xff) ? (SpriteResource *)nullptr : &_charFaces[charId]; - charId = xeenSideChars[charIndex + 3]; - _faceDrawStructs[3]._sprites = (charId == 0xff) ? (SpriteResource *)nullptr : &_charFaces[charId]; - - _interfaceText = Common::String::format(PARTY_DETAILS, - playerNames[0].c_str(), playerRaces[0].c_str(), playerSex[0].c_str(), playerClass[0].c_str(), - playerNames[1].c_str(), playerRaces[1].c_str(), playerSex[1].c_str(), playerClass[1].c_str(), - playerNames[2].c_str(), playerRaces[2].c_str(), playerSex[2].c_str(), playerClass[2].c_str(), - playerNames[3].c_str(), playerRaces[3].c_str(), playerSex[3].c_str(), playerClass[3].c_str() - ); + for (int i = 0; i < party._partyCount; ++i) + _partyFaces[i] = &res._charFaces[_vm->_party->_partyMembers[i]]; } void Interface::charIconsPrint(bool updateFlag) { + Resources &res = *_vm->_resources; Screen &screen = *_vm->_screen; bool stateFlag = _vm->_mode == MODE_COMBAT; _restoreSprites.draw(screen, 0, Common::Point(8, 149)); @@ -346,8 +226,7 @@ void Interface::charIconsPrint(bool updateFlag) { Condition charCondition = ps.worstCondition(); int charFrame = FACE_CONDITION_FRAMES[charCondition]; - SpriteResource *sprites = (charFrame > 4 && !_charFaces[0].empty()) ? - &_dseFace : _partyFaces[charIndex]; + SpriteResource *sprites = (charFrame > 4) ? &_dseFace : _partyFaces[charIndex]; if (charFrame > 4) charFrame -= 5; diff --git a/engines/xeen/interface.h b/engines/xeen/interface.h index 0f5ca18780..9ab9102374 100644 --- a/engines/xeen/interface.h +++ b/engines/xeen/interface.h @@ -44,8 +44,6 @@ private: SpriteResource _hpSprites; SpriteResource _uiSprites; SpriteResource _iconSprites; - SpriteResource _charFaces[TOTAL_CHARACTERS]; - DrawStruct _faceDrawStructs[4]; DrawStruct _mainList[16]; int _combatCharIds[8]; @@ -59,8 +57,6 @@ private: void setupBackground(); - void setupFaces(int charIndex, Common::Array xeenSideChars, bool updateFlag); - void drawViewBackground(int bgType); void moveCharacterToRoster(); diff --git a/engines/xeen/module.mk b/engines/xeen/module.mk index 50d7891ad2..083abb9a8c 100644 --- a/engines/xeen/module.mk +++ b/engines/xeen/module.mk @@ -19,6 +19,7 @@ MODULE_OBJS := \ dialogs_info.o \ dialogs_input.o \ dialogs_items.o \ + dialogs_party.o \ dialogs_query.o \ dialogs_quests.o \ dialogs_quick_ref.o \ diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp index 11b209274d..7067886c87 100644 --- a/engines/xeen/resources.cpp +++ b/engines/xeen/resources.cpp @@ -31,6 +31,12 @@ Resources::Resources() { while (f.pos() < f.size()) _maeNames.push_back(f.readString()); f.close(); + + for (int i = 0; i < XEEN_TOTAL_CHARACTERS; ++i) { + // Load new character resource + Common::String name = Common::String::format("char%02d.fac", i + 1); + _charFaces[i].load(name); + } } /*------------------------------------------------------------------------*/ diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h index f7609bc2cd..dd3a77504a 100644 --- a/engines/xeen/resources.h +++ b/engines/xeen/resources.h @@ -26,6 +26,7 @@ #include "common/scummsys.h" #include "common/str-array.h" #include "gui/debugger.h" +#include "xeen/party.h" #include "xeen/spells.h" namespace Xeen { @@ -34,6 +35,7 @@ class Resources { public: // Magic and equipment names Common::StringArray _maeNames; + SpriteResource _charFaces[TOTAL_CHARACTERS]; public: Resources(); }; diff --git a/engines/xeen/scripts.cpp b/engines/xeen/scripts.cpp index 4859e93405..3837509760 100644 --- a/engines/xeen/scripts.cpp +++ b/engines/xeen/scripts.cpp @@ -107,7 +107,7 @@ Scripts::Scripts(XeenEngine *vm) : _vm(vm) { _var50 = false; } -bool Scripts::checkEvents() { +int Scripts::checkEvents() { Combat &combat = *_vm->_combat; EventsManager &events = *_vm->_events; Interface &intf = *_vm->_interface; diff --git a/engines/xeen/scripts.h b/engines/xeen/scripts.h index d51cd0c26b..d353581497 100644 --- a/engines/xeen/scripts.h +++ b/engines/xeen/scripts.h @@ -233,7 +233,7 @@ public: public: Scripts(XeenEngine *vm); - bool checkEvents(); + int checkEvents(); void giveTreasure(); diff --git a/engines/xeen/town.cpp b/engines/xeen/town.cpp index 3a07d2a9e0..c12973cbcd 100644 --- a/engines/xeen/town.cpp +++ b/engines/xeen/town.cpp @@ -630,6 +630,7 @@ Character *Town::doTavernOptions(Character *c) { } break; case Common::KEYCODE_f: { + // Food if (party._mazeId == (isDarkCc ? 29 : 28)) { _v22 = party._partyCount * 15; _v23 = 10; @@ -680,6 +681,7 @@ Character *Town::doTavernOptions(Character *c) { } case Common::KEYCODE_r: { + // Rumors if (party._mazeId == (isDarkCc ? 29 : 28)) { idx = 0; } else if (party._mazeId == (isDarkCc ? 31 : 30)) { @@ -701,8 +703,7 @@ Character *Town::doTavernOptions(Character *c) { } case Common::KEYCODE_s: { - // Save game - // TODO: This needs to be fit in better with ScummVM framework + // Sign In int idx = isDarkCc ? (party._mazeId - 29) >> 1 : party._mazeId - 28; assert(idx >= 0); party._mazePosition.x = TAVERN_EXIT_LIST[isDarkCc ? 1 : 0][_townActionId][idx][0]; @@ -723,7 +724,7 @@ Character *Town::doTavernOptions(Character *c) { party.addTime(1440); party._mazeId = 0; - _vm->quitGame(); + _vm->_quitMode = 2; break; } diff --git a/engines/xeen/xeen.cpp b/engines/xeen/xeen.cpp index d34e8edb21..ed944262e1 100644 --- a/engines/xeen/xeen.cpp +++ b/engines/xeen/xeen.cpp @@ -51,6 +51,7 @@ XeenEngine::XeenEngine(OSystem *syst, const XeenGameDescription *gameDesc) _spells = nullptr; _town = nullptr; _eventData = nullptr; + _quitMode = 0; _dangerSenseAllowed = false; _noDirectionSense = false; _moveMonsters = false; @@ -289,6 +290,7 @@ void XeenEngine::playGame() { */ void XeenEngine::play() { // TODO: Init variables + _quitMode = 0; _interface->setup(); _screen->loadBackground("back.raw"); @@ -331,8 +333,8 @@ void XeenEngine::gameLoop() { while (!shouldQuit()) { _map->cellFlagLookup(_party->_mazePosition); if (_map->_currentIsEvent) { - _scripts->checkEvents(); - if (shouldQuit()) + _quitMode = _scripts->checkEvents(); + if (shouldQuit() || _quitMode) return; } _scripts->giveTreasure(); diff --git a/engines/xeen/xeen.h b/engines/xeen/xeen.h index 537768e7e5..4664998a3e 100644 --- a/engines/xeen/xeen.h +++ b/engines/xeen/xeen.h @@ -153,6 +153,7 @@ public: GameEvent _gameEvent; Common::SeekableReadStream *_eventData; Roster _roster; + int _quitMode; bool _dangerSenseAllowed; bool _noDirectionSense; bool _moveMonsters; -- cgit v1.2.3