MORTEVIELLE: Get rid of setParent() in Menu and MouseHandler

This commit is contained in:
Strangerke 2014-01-09 08:21:52 +01:00
parent 0a5d92527d
commit d8d4a2c3bb
12 changed files with 190 additions and 191 deletions

View File

@ -40,7 +40,7 @@ namespace Mortevielle {
* @remarks Originally called 'taller'
*/
void MortevielleEngine::fctMove() {
int oldMenu = (_menu._moveMenu[6]._menuId << 8) | _menu._moveMenu[6]._actionId;
int oldMenu = (_menu->_moveMenu[6]._menuId << 8) | _menu->_moveMenu[6]._actionId;
if ((_coreVar._currPlace == ROOM26) && (_currAction == oldMenu)) {
_coreVar._currPlace = LANDING;
_caff = _coreVar._currPlace;
@ -65,10 +65,10 @@ void MortevielleEngine::fctMove() {
if (_num == 1) {
_coreVar._currPlace = OWN_ROOM;
_menu.setDestinationText(OWN_ROOM);
_menu->setDestinationText(OWN_ROOM);
} else if (_num == 7) {
_coreVar._currPlace = ATTIC;
_menu.setDestinationText(ATTIC);
_menu->setDestinationText(ATTIC);
} else if (_num != 6)
_coreVar._currPlace = ROOM26;
@ -85,10 +85,10 @@ void MortevielleEngine::fctMove() {
}
exitRoom();
int menuChoice = 1;
oldMenu = (_menu._moveMenu[menuChoice]._menuId << 8) | _menu._moveMenu[menuChoice]._actionId;
oldMenu = (_menu->_moveMenu[menuChoice]._menuId << 8) | _menu->_moveMenu[menuChoice]._actionId;
while (oldMenu != _currAction) {
++menuChoice;
oldMenu = (_menu._moveMenu[menuChoice]._menuId << 8) | _menu._moveMenu[menuChoice]._actionId;
oldMenu = (_menu->_moveMenu[menuChoice]._menuId << 8) | _menu->_moveMenu[menuChoice]._actionId;
}
switch (_coreVar._currPlace) {
@ -97,14 +97,14 @@ void MortevielleEngine::fctMove() {
gotoManorFront();
else if (menuChoice == 2)
checkManorDistance();
_menu.setDestinationText(_coreVar._currPlace);
_menu->setDestinationText(_coreVar._currPlace);
return;
case INSIDE_WELL:
if (menuChoice == 1)
floodedInWell();
else if (menuChoice == 2)
gotoManorBack();
_menu.setDestinationText(_coreVar._currPlace);
_menu->setDestinationText(_coreVar._currPlace);
return;
case BUREAU:
if (menuChoice == 1)
@ -193,7 +193,7 @@ void MortevielleEngine::fctMove() {
if ((menuChoice < 5) || (menuChoice == 13) || (menuChoice == 14))
prepareDisplayText();
resetRoomVariables(_coreVar._currPlace);
_menu.setDestinationText(_coreVar._currPlace);
_menu->setDestinationText(_coreVar._currPlace);
}
/**
@ -224,7 +224,7 @@ void MortevielleEngine::fctTake() {
_coreVar._secretPassageObjectId = 0;
if (_coreVar._currPlace == WELL)
_coreVar._wellObjectId = 0;
_menu.unsetSearchMenu();
_menu->unsetSearchMenu();
_obpart = false;
prepareDisplayText();
} else {
@ -325,7 +325,7 @@ void MortevielleEngine::fctInventoryTake() {
int oldMenu = 0;
do {
++inventIndex;
oldMenu = (_menu._inventoryMenu[inventIndex]._menuId << 8) | _menu._inventoryMenu[inventIndex]._actionId;
oldMenu = (_menu->_inventoryMenu[inventIndex]._menuId << 8) | _menu->_inventoryMenu[inventIndex]._actionId;
} while (oldMenu != _currAction);
int cz = 0;
int cy = 0;
@ -336,7 +336,7 @@ void MortevielleEngine::fctInventoryTake() {
} while (cz != inventIndex);
cz = _coreVar._inventory[cy];
_coreVar._inventory[cy] = 0;
_menu.setInventoryText();
_menu->setInventoryText();
putInHand(cz);
_crep = 998;
clearDescriptionBar();
@ -536,7 +536,7 @@ void MortevielleEngine::fctSearch() {
if (_curSearchObjId != 0) {
_searchCount = 0;
_heroSearching = true;
_menu.setSearchMenu();
_menu->setSearchMenu();
prepareNextObject();
} else
_crep = 997;
@ -607,7 +607,7 @@ void MortevielleEngine::fctOpen() {
if (_caff == ROOM26) {
if (_roomDoorId != OWN_ROOM) {
_currAction = _menu._opcodeEnter;
_currAction = _menu->_opcodeEnter;
_syn = true;
} else
_crep = 997;
@ -740,12 +740,12 @@ void MortevielleEngine::fctPlace() {
_dialogManager.show(alertTxt);
bool enterPassageFl = _dialogManager.showKnowledgeCheck();
_mouse.hideMouse();
_mouse->hideMouse();
clearScreen();
drawRightFrame();
clearDescriptionBar();
clearVerbBar();
_mouse.showMouse();
_mouse->showMouse();
prepareRoom();
drawClock();
if (_currBitIndex != 0)
@ -753,12 +753,12 @@ void MortevielleEngine::fctPlace() {
else
displayAloneText();
_menu.displayMenu();
_menu->displayMenu();
if (enterPassageFl) {
_coreVar._currPlace = SECRET_PASSAGE;
_menu.setDestinationText(SECRET_PASSAGE);
_menu->setDestinationText(SECRET_PASSAGE);
} else {
_menu.setDestinationText(_coreVar._currPlace);
_menu->setDestinationText(_coreVar._currPlace);
setPal(14);
drawPicture();
displayAnimFrame(1, 2);
@ -1132,7 +1132,7 @@ void MortevielleEngine::fctEat() {
_coreVar._currPlace = DINING_ROOM;
_caff = DINING_ROOM;
resetRoomVariables(_coreVar._currPlace);
_menu.setDestinationText(_coreVar._currPlace);
_menu->setDestinationText(_coreVar._currPlace);
int day, hour, minute;
updateHour(day, hour, minute);
@ -1168,7 +1168,7 @@ void MortevielleEngine::fctEat() {
void MortevielleEngine::fctEnter() {
if ((_coreVar._currPlace == MANOR_FRONT) || (_coreVar._currPlace == MANOR_BACK)) {
gotoDiningRoom();
_menu.setDestinationText(_coreVar._currPlace);
_menu->setDestinationText(_coreVar._currPlace);
} else if (_coreVar._currPlace == LANDING)
showMoveMenuAlert();
else if (_roomDoorId == OWN_ROOM)
@ -1193,7 +1193,7 @@ void MortevielleEngine::fctEnter() {
++_coreVar._faithScore;
_coreVar._currPlace = LANDING;
_currMenu = MENU_DISCUSS;
_currAction = (_menu._discussMenu[charIndex]._menuId << 8) | _menu._discussMenu[charIndex]._actionId;
_currAction = (_menu->_discussMenu[charIndex]._menuId << 8) | _menu->_discussMenu[charIndex]._actionId;
_syn = true;
if (_roomDoorId == JULIA_ROOM) {
_col = true;
@ -1214,7 +1214,7 @@ void MortevielleEngine::fctEnter() {
_coreVar._currPlace = _roomDoorId;
prepareDisplayText();
resetRoomVariables(_coreVar._currPlace);
_menu.setDestinationText(_coreVar._currPlace);
_menu->setDestinationText(_coreVar._currPlace);
_roomDoorId = OWN_ROOM;
_savedBitIndex = 0;
_currBitIndex = 0;
@ -1237,7 +1237,7 @@ void MortevielleEngine::fctSleep() {
prepareDisplayText();
drawPictureWithText();
resetRoomVariables(_coreVar._currPlace);
_menu.setDestinationText(_coreVar._currPlace);
_menu->setDestinationText(_coreVar._currPlace);
}
clearVerbBar();
clearDescriptionBar();
@ -1321,7 +1321,7 @@ void MortevielleEngine::fctLeave() {
if (_crep == 0)
_crep = nextPlace;
resetRoomVariables(nextPlace);
_menu.setDestinationText(nextPlace);
_menu->setDestinationText(nextPlace);
}
}
@ -1394,7 +1394,7 @@ void MortevielleEngine::fctDiscuss() {
int oldMenu;
do {
++cx;
oldMenu = (_menu._discussMenu[cx]._menuId << 8) | _menu._discussMenu[cx]._actionId;
oldMenu = (_menu->_discussMenu[cx]._menuId << 8) | _menu->_discussMenu[cx]._actionId;
} while (oldMenu != _currAction);
_caff = 69 + cx;
drawPictureWithText();
@ -1403,7 +1403,7 @@ void MortevielleEngine::fctDiscuss() {
}
testKey(false);
menuUp();
_mouse.hideMouse();
_mouse->hideMouse();
clearScreen();
drawDiscussionBox();
startDialog(displId);
@ -1417,7 +1417,7 @@ void MortevielleEngine::fctDiscuss() {
}
lib[46] = lib[45];
lib[45] = ' ';
_mouse.showMouse();
_mouse->showMouse();
do {
choice = 0;
int posX = 0;
@ -1444,11 +1444,11 @@ void MortevielleEngine::fctDiscuss() {
bool click;
do {
bool dummyFl;
_mouse.moveMouse(dummyFl, retKey);
_mouse->moveMouse(dummyFl, retKey);
if (shouldQuit())
return;
_mouse.getMousePosition(x, y, click);
_mouse->getMousePosition(x, y, click);
x *= (3 - kResolutionScaler);
if (x > 319)
cx = 41;
@ -1533,11 +1533,11 @@ void MortevielleEngine::fctDiscuss() {
_coreVar._faithScore += 3;
displId = 139;
}
_mouse.hideMouse();
_mouse->hideMouse();
clearScreen();
drawDiscussionBox();
startDialog(displId);
_mouse.showMouse();
_mouse->showMouse();
if ((displId == 84) || (displId == 86)) {
_coreVar._pctHintFound[5] = '*';
_coreVar._availableQuestion[7] = '*';
@ -1551,32 +1551,32 @@ void MortevielleEngine::fctDiscuss() {
_coreVar._pctHintFound[8] = '*';
_coreVar._availableQuestion[32] = '*';
}
_mouse.hideMouse();
_mouse->hideMouse();
clearScreen();
_mouse.showMouse();
_mouse->showMouse();
}
} while ((choice != 46) && (displId != 138));
if (_col) {
_coreVar._faithScore += (3 * (_coreVar._faithScore / 10));
_mouse.hideMouse();
_mouse->hideMouse();
clearScreen();
drawDiscussionBox();
startDialog(138);
_mouse.showMouse();
_mouse->showMouse();
_col = false;
_coreVar._currPlace = LANDING;
}
_controlMenu = 0;
_mouse.hideMouse();
_mouse->hideMouse();
clearScreen();
drawRightFrame();
_mouse.showMouse();
_mouse->showMouse();
showPeoplePresent(_currBitIndex);
prepareRoom();
drawClock();
prepareDisplayText();
/* chech;*/
_menu.setDestinationText(_coreVar._currPlace);
_menu->setDestinationText(_coreVar._currPlace);
clearVerbBar();
}
@ -1625,13 +1625,13 @@ void MortevielleEngine::endGame() {
clearVerbBar();
handleDescriptionText(9, 1509);
testKey(false);
_mouse.hideMouse();
_mouse->hideMouse();
_caff = 70;
_text.taffich();
clearScreen();
drawDiscussionBox();
startDialog(141);
_mouse.showMouse();
_mouse->showMouse();
clearUpperLeftPart();
handleDescriptionText(9, 1509);
handleDescriptionText(2, 142);

View File

@ -43,7 +43,7 @@ int DialogManager::show(const Common::String &msg) {
// Make a copy of the current screen surface for later restore
_vm->_backgroundSurface.copyFrom(_vm->_screenSurface);
_vm->_mouse.hideMouse();
_vm->_mouse->hideMouse();
while (_vm->keyPressed())
_vm->getChar();
@ -99,17 +99,17 @@ int DialogManager::show(const Common::String &msg) {
limit[2][1] = ((uint)(320 + ((uint)esp >> 1)) / 2) * kResolutionScaler;
limit[2][2] = (limit[2][1]) + 40;
}
_vm->_mouse.showMouse();
_vm->_mouse->showMouse();
int id = 0;
bool dummyFl = false;
bool test3;
do {
char dummyKey = '\377';
_vm->_mouse.moveMouse(dummyFl, dummyKey);
_vm->_mouse->moveMouse(dummyFl, dummyKey);
if (_vm->shouldQuit())
return 0;
curPos = _vm->_mouse._pos;
curPos = _vm->_mouse->_pos;
bool newaff = false;
if ((curPos.y > 95) && (curPos.y < 105)) {
bool test1 = (curPos.x > limit[1][1]) && (curPos.x < limit[1][2]);
@ -125,7 +125,7 @@ int DialogManager::show(const Common::String &msg) {
else
ix = 2;
if (ix != id) {
_vm->_mouse.hideMouse();
_vm->_mouse->hideMouse();
if (id != 0) {
setPosition(id, coldep, esp);
@ -142,12 +142,12 @@ int DialogManager::show(const Common::String &msg) {
_vm->_screenSurface.drawString(tmp2, 1);
id = ix;
_vm->_mouse.showMouse();
_vm->_mouse->showMouse();
}
}
}
if ((id != 0) && !newaff) {
_vm->_mouse.hideMouse();
_vm->_mouse->hideMouse();
setPosition(id, coldep, esp);
Common::String tmp3(" ");
@ -156,13 +156,13 @@ int DialogManager::show(const Common::String &msg) {
_vm->_screenSurface.drawString(tmp3, 0);
id = 0;
_vm->_mouse.showMouse();
_vm->_mouse->showMouse();
}
test3 = (curPos.y > 95) && (curPos.y < 105) && (((curPos.x > limit[1][1]) && (curPos.x < limit[1][2]))
|| ((curPos.x > limit[2][1]) && (curPos.x < limit[2][2])));
} while (!_vm->getMouseClick());
_vm->setMouseClick(false);
_vm->_mouse.hideMouse();
_vm->_mouse->hideMouse();
if (!test3) {
id = 1;
setPosition(1, coldep, esp);
@ -171,7 +171,7 @@ int DialogManager::show(const Common::String &msg) {
tmp4 += " ";
_vm->_screenSurface.drawString(tmp4, 1);
}
_vm->_mouse.showMouse();
_vm->_mouse->showMouse();
/* Restore the background area */
_vm->_screenSurface.copyFrom(_vm->_backgroundSurface, 0, 0);
@ -292,9 +292,9 @@ bool DialogManager::showKnowledgeCheck() {
int correctCount = 0;
for (int indx = 0; indx < 10; ++indx) {
_vm->_mouse.hideMouse();
_vm->_mouse->hideMouse();
_vm->clearScreen();
_vm->_mouse.showMouse();
_vm->_mouse->showMouse();
int dialogHeight = 23;
_vm->_screenSurface.fillRect(15, Common::Rect(0, 14, 630, dialogHeight));
Common::String tmpStr = _vm->getString(textIndexArr[indx]);
@ -342,12 +342,12 @@ bool DialogManager::showKnowledgeCheck() {
_vm->setMouseClick(false);
bool flag;
char key;
_vm->_mouse.moveMouse(flag, key);
_vm->_mouse->moveMouse(flag, key);
if (_vm->shouldQuit())
return false;
currChoice = 1;
while (coor[currChoice]._enabled && !_vm->_mouse.isMouseIn(coor[currChoice]._rect))
while (coor[currChoice]._enabled && !_vm->_mouse->isMouseIn(coor[currChoice]._rect))
++currChoice;
if (coor[currChoice]._enabled) {
if ((prevChoice != 0) && (prevChoice != currChoice)) {

View File

@ -1070,7 +1070,7 @@ void ScreenSurface::drawString(const Common::String &l, int command) {
if (l == "")
return;
_vm->_mouse.hideMouse();
_vm->_mouse->hideMouse();
Common::Point pt = _textPos;
int charWidth = 6;
@ -1102,7 +1102,7 @@ void ScreenSurface::drawString(const Common::String &l, int command) {
_vm->_screenSurface.writeCharacter(Common::Point(pt.x, pt.y), l[x - 1], color);
pt.x += charWidth;
}
_vm->_mouse.showMouse();
_vm->_mouse->showMouse();
}
/**

View File

@ -48,7 +48,8 @@ const byte menuConstants[8][4] = {
{62, 46, 13, 10}
};
Menu::Menu() {
Menu::Menu(MortevielleEngine *vm) {
_vm = vm;
_opcodeAttach = _opcodeWait = _opcodeForce = _opcodeSleep = OPCODE_NONE;
_opcodeListen = _opcodeEnter = _opcodeClose = _opcodeSearch = OPCODE_NONE;
_opcodeKnock = _opcodeScratch = _opcodeRead = _opcodeEat = OPCODE_NONE;
@ -295,7 +296,7 @@ void Menu::enableMenuItem(MenuItem item) {
}
void Menu::displayMenu() {
_vm->_mouse.hideMouse();
_vm->_mouse->hideMouse();
_vm->_screenSurface.fillRect(7, Common::Rect(0, 0, 639, 10));
int col = 28 * kResolutionScaler;
@ -322,7 +323,7 @@ void Menu::displayMenu() {
}
col += 48 * kResolutionScaler;
}
_vm->_mouse.showMouse();
_vm->_mouse->showMouse();
}
/**
@ -424,7 +425,7 @@ void Menu::menuDown(int ii) {
// Draw the menu
int minX = menuConstants[ii - 1][0] << 3;
int lineNum = menuConstants[ii - 1][3];
_vm->_mouse.hideMouse();
_vm->_mouse->hideMouse();
int deltaX = 6;
int maxX = minX + (menuConstants[ii - 1][2] * deltaX) + 6;
if ((ii == 4) && (_vm->getLanguage() == Common::EN_ANY))
@ -483,7 +484,7 @@ void Menu::menuDown(int ii) {
_vm->_screenSurface.putxy(minX, _vm->_screenSurface._textPos.y + 8);
}
_multiTitle = true;
_vm->_mouse.showMouse();
_vm->_mouse->showMouse();
}
/**
@ -523,7 +524,7 @@ void Menu::updateMenu() {
if (!_menuActive)
return;
Common::Point curPos = _vm->_mouse._pos;
Common::Point curPos = _vm->_mouse->_pos;
if (!_vm->getMouseClick()) {
if (curPos == _vm->_prevPos)
return;
@ -590,10 +591,6 @@ void Menu::updateMenu() {
}
}
void Menu::setParent(MortevielleEngine *vm) {
_vm = vm;
}
void Menu::initMenu() {
Common::File f;

View File

@ -60,7 +60,7 @@ private:
void menuDown(int ii);
public:
Menu();
Menu(MortevielleEngine *vm);
bool _menuActive;
bool _menuSelected;
@ -103,7 +103,6 @@ public:
int _opcodeSLook;
MenuItem _actionMenu[12];
void setParent(MortevielleEngine *vm);
void readVerbNums(Common::File &f, int dataSize);
void setText(MenuItem item, Common::String name);
void setDestinationText(int roomId);

View File

@ -53,11 +53,11 @@ MortevielleEngine::MortevielleEngine(OSystem *system, const MortevielleGameDescr
_debugger.setParent(this);
_dialogManager.setParent(this);
_screenSurface.setParent(this);
_mouse.setParent(this);
_mouse = new MouseHandler(this);
_text.setParent(this);
_soundManager.setParent(this);
_savegameManager.setParent(this);
_menu.setParent(this);
_menu = new Menu(this);
_lastGameFrame = 0;
_mouseClick = false;
@ -105,6 +105,9 @@ MortevielleEngine::MortevielleEngine(OSystem *system, const MortevielleGameDescr
}
MortevielleEngine::~MortevielleEngine() {
delete _menu;
delete _mouse;
free(_curPict);
free(_curAnim);
free(_rightFramePict);
@ -284,7 +287,7 @@ Common::ErrorCode MortevielleEngine::loadMortDat() {
} else if ((!strncmp(dataType, "GSTR", 4)) && (!_txxFileFl)) {
readStaticStrings(f, dataSize, kGameStrings);
} else if (!strncmp(dataType, "VERB", 4)) {
_menu.readVerbNums(f, dataSize);
_menu->readVerbNums(f, dataSize);
} else {
// Unknown section
f.skip(dataSize);
@ -419,13 +422,13 @@ void MortevielleEngine::mainGame() {
for (_crep = 1; _crep <= _x26KeyCount; ++_crep)
decodeNumber(&_cfiecBuffer[161 * 16], (_cfiecBufferSize - (161 * 16)) / 64);
_menu.initMenu();
_menu->initMenu();
charToHour();
initGame();
clearScreen();
drawRightFrame();
_mouse.showMouse();
_mouse->showMouse();
// Loop to play the game
do {

View File

@ -434,8 +434,8 @@ public:
Common::RandomSource _randomSource;
SoundManager _soundManager;
SavegameManager _savegameManager;
Menu _menu;
MouseHandler _mouse;
Menu *_menu;
MouseHandler *_mouse;
TextHandler _text;
DialogManager _dialogManager;

View File

@ -33,6 +33,10 @@
namespace Mortevielle {
MouseHandler::MouseHandler(MortevielleEngine *vm) {
_vm = vm;
}
/**
* Initialize the mouse
* @remarks Originally called 'init_mouse'
@ -264,8 +268,4 @@ bool MouseHandler::isMouseIn(Common::Rect r) {
return false;
}
void MouseHandler::setParent(MortevielleEngine *vm) {
_vm = vm;
}
} // End of namespace Mortevielle

View File

@ -38,8 +38,8 @@ private:
MortevielleEngine *_vm;
public:
Common::Point _pos;
MouseHandler(MortevielleEngine *vm);
void setParent(MortevielleEngine *vm);
void initMouse();
void hideMouse();
void showMouse();

View File

@ -218,7 +218,7 @@ void TextHandler::taffich() {
}
_vm->_destinationOk = true;
_vm->_mouse.hideMouse();
_vm->_mouse->hideMouse();
drawingStartPos = 0;
Common::String filename, altFilename;
@ -291,8 +291,8 @@ void TextHandler::taffich() {
}
loadAniFile(filename, drawingStartPos, drawingSize);
}
_vm->_mouse.showMouse();
if ((a < COAT_ARMS) && ((_vm->_maff < COAT_ARMS) || (_vm->_coreVar._currPlace == LANDING)) && (_vm->_currAction != _vm->_menu._opcodeEnter)) {
_vm->_mouse->showMouse();
if ((a < COAT_ARMS) && ((_vm->_maff < COAT_ARMS) || (_vm->_coreVar._currPlace == LANDING)) && (_vm->_currAction != _vm->_menu->_opcodeEnter)) {
if ((a == ATTIC) || (a == CELLAR))
_vm->displayAloneText();
else if (!_vm->_blo)

View File

@ -116,14 +116,14 @@ bool SavegameManager::loadSavegame(const Common::String &filename) {
* Load a saved game
*/
Common::Error SavegameManager::loadGame(const Common::String &filename) {
g_vm->_mouse.hideMouse();
g_vm->_mouse->hideMouse();
g_vm->displayEmptyHand();
if (loadSavegame(filename)) {
/* Initialization */
g_vm->charToHour();
g_vm->initGame();
g_vm->gameLoaded();
g_vm->_mouse.showMouse();
g_vm->_mouse->showMouse();
return Common::kNoError;
} else
return Common::kUnknownError;
@ -136,7 +136,7 @@ Common::Error SavegameManager::saveGame(int n, const Common::String &saveName) {
Common::OutSaveFile *f;
int i;
g_vm->_mouse.hideMouse();
g_vm->_mouse->hideMouse();
g_vm->hourToChar();
for (i = 0; i <= 389; ++i)
@ -165,7 +165,7 @@ Common::Error SavegameManager::saveGame(int n, const Common::String &saveName) {
// Skipped: dialog asking to swap floppy
g_vm->_mouse.showMouse();
g_vm->_mouse->showMouse();
return Common::kNoError;
}

View File

@ -92,8 +92,8 @@ bool MortevielleEngine::handleEvents() {
case Common::EVENT_LBUTTONUP:
case Common::EVENT_MOUSEMOVE:
_mousePos = Common::Point(event.mouse.x, event.mouse.y / 2);
_mouse._pos.x = event.mouse.x;
_mouse._pos.y = event.mouse.y / 2;
_mouse->_pos.x = event.mouse.x;
_mouse->_pos.y = event.mouse.y / 2;
if (event.type == Common::EVENT_LBUTTONDOWN)
_mouseClick = true;
@ -208,7 +208,7 @@ void MortevielleEngine::initMouse() {
CursorMan.replaceCursor(CURSOR_ARROW_DATA, 16, 16, 0, 0, 0xff);
CursorMan.showMouse(true);
_mouse.initMouse();
_mouse->initMouse();
}
/**
@ -261,8 +261,8 @@ void MortevielleEngine::handleAction() {
bool handledOpcodeFl = false;
_controlMenu = 0;
if (!_keyPressedEsc) {
_menu.drawMenu();
_menu._menuDisplayed = true;
_menu->drawMenu();
_menu->_menuDisplayed = true;
temps = 0;
_key = 0;
funct = false;
@ -270,25 +270,25 @@ void MortevielleEngine::handleAction() {
_inMainGameLoop = true;
do {
_menu.updateMenu();
_menu->updateMenu();
prepareRoom();
_mouse.moveMouse(funct, inkey);
_mouse->moveMouse(funct, inkey);
if (shouldQuit())
return;
++temps;
if (keyPressed() || _mouseClick) {
_soundManager._mixer->stopHandle(_soundManager._soundHandle);
}
} while (!((_menu._menuSelected) || (temps > lim) || (funct) || (_anyone)));
} while (!((_menu->_menuSelected) || (temps > lim) || (funct) || (_anyone)));
_inMainGameLoop = false;
_menu.eraseMenu();
_menu._menuDisplayed = false;
if (_menu._menuSelected && (_currMenu == MENU_SAVE)) {
_menu->eraseMenu();
_menu->_menuDisplayed = false;
if (_menu->_menuSelected && (_currMenu == MENU_SAVE)) {
Common::String saveName = Common::String::format("Savegame #%d", _currAction & 15);
_savegameManager.saveGame(_currAction & 15, saveName);
}
if (_menu._menuSelected && (_currMenu == MENU_LOAD))
if (_menu->_menuSelected && (_currMenu == MENU_LOAD))
_savegameManager.loadGame((_currAction & 15) - 1);
if (inkey == '\103') { /* F9 */
temps = _dialogManager.show(_hintPctMessage);
@ -321,12 +321,12 @@ void MortevielleEngine::handleAction() {
_menuOpcode = _currAction;
if (!_anyone) {
if ((_heroSearching) || (_obpart)) {
if (_mouse._pos.y < 12)
if (_mouse->_pos.y < 12)
return;
if ((_currAction == _menu._opcodeSound) || (_currAction == _menu._opcodeLift)) {
if ((_currAction == _menu->_opcodeSound) || (_currAction == _menu->_opcodeLift)) {
handledOpcodeFl = true;
if ((_currAction == _menu._opcodeLift) || (_obpart)) {
if ((_currAction == _menu->_opcodeLift) || (_obpart)) {
endSearch();
_caff = _coreVar._currPlace;
_crep = 998;
@ -503,48 +503,48 @@ void MortevielleEngine::showPeoplePresent(int bitIndex) {
int xp = 580 - (_screenSurface.getStringWidth("LEO") / 2);
for (int i = 1; i <= 8; ++i)
_menu.disableMenuItem(_menu._discussMenu[i]);
_menu->disableMenuItem(_menu->_discussMenu[i]);
clearUpperRightPart();
if ((bitIndex & 128) == 128) {
_screenSurface.putxy(xp, 24);
_screenSurface.drawString("LEO", 4);
_menu.enableMenuItem(_menu._discussMenu[1]);
_menu->enableMenuItem(_menu->_discussMenu[1]);
}
if ((bitIndex & 64) == 64) {
_screenSurface.putxy(xp, 32);
_screenSurface.drawString("PAT", 4);
_menu.enableMenuItem(_menu._discussMenu[2]);
_menu->enableMenuItem(_menu->_discussMenu[2]);
}
if ((bitIndex & 32) == 32) {
_screenSurface.putxy(xp, 40);
_screenSurface.drawString("GUY", 4);
_menu.enableMenuItem(_menu._discussMenu[3]);
_menu->enableMenuItem(_menu->_discussMenu[3]);
}
if ((bitIndex & 16) == 16) {
_screenSurface.putxy(xp, 48);
_screenSurface.drawString("EVA", 4);
_menu.enableMenuItem(_menu._discussMenu[4]);
_menu->enableMenuItem(_menu->_discussMenu[4]);
}
if ((bitIndex & 8) == 8) {
_screenSurface.putxy(xp, 56);
_screenSurface.drawString("BOB", 4);
_menu.enableMenuItem(_menu._discussMenu[5]);
_menu->enableMenuItem(_menu->_discussMenu[5]);
}
if ((bitIndex & 4) == 4) {
_screenSurface.putxy(xp, 64);
_screenSurface.drawString("LUC", 4);
_menu.enableMenuItem(_menu._discussMenu[6]);
_menu->enableMenuItem(_menu->_discussMenu[6]);
}
if ((bitIndex & 2) == 2) {
_screenSurface.putxy(xp, 72);
_screenSurface.drawString("IDA", 4);
_menu.enableMenuItem(_menu._discussMenu[7]);
_menu->enableMenuItem(_menu->_discussMenu[7]);
}
if ((bitIndex & 1) == 1) {
_screenSurface.putxy(xp, 80);
_screenSurface.drawString("MAX", 4);
_menu.enableMenuItem(_menu._discussMenu[8]);
_menu->enableMenuItem(_menu->_discussMenu[8]);
}
_currBitIndex = bitIndex;
}
@ -605,7 +605,7 @@ int MortevielleEngine::getPresenceStatsGreenRoom() {
else if ((hour >= 0) && (hour < 8))
retVal = 70;
_menu.updateMenu();
_menu->updateMenu();
return retVal;
}
@ -698,7 +698,7 @@ int MortevielleEngine::getPresenceStatsRedRoom() {
*/
void MortevielleEngine::displayAloneText() {
for (int i = 1; i <= 8; ++i)
_menu.disableMenuItem(_menu._discussMenu[i]);
_menu->disableMenuItem(_menu->_discussMenu[i]);
Common::String sYou = getEngineString(S_YOU);
Common::String sAre = getEngineString(S_ARE);
@ -1284,7 +1284,7 @@ void MortevielleEngine::loseGame() {
resetOpenObjects();
_roomDoorId = OWN_ROOM;
_curSearchObjId = 0;
_menu.unsetSearchMenu();
_menu->unsetSearchMenu();
if (!_blo)
getPresence(MANOR_FRONT);
@ -1333,7 +1333,7 @@ void MortevielleEngine::startDialog(int16 rep) {
assert(rep >= 0);
_mouse.hideMouse();
_mouse->hideMouse();
Common::String dialogStr = getString(rep + kDialogStringIndex);
_text.displayStr(dialogStr, 230, 4, 65, 26, 5);
_dialogManager.drawF3F8();
@ -1346,7 +1346,7 @@ void MortevielleEngine::startDialog(int16 rep) {
return;
} while (key != 66);
clearScreen();
_mouse.showMouse();
_mouse->showMouse();
}
/**
@ -1357,7 +1357,7 @@ void MortevielleEngine::endSearch() {
_heroSearching = false;
_obpart = false;
_searchCount = 0;
_menu.unsetSearchMenu();
_menu->unsetSearchMenu();
}
/**
@ -1383,13 +1383,13 @@ void MortevielleEngine::gotoDiningRoom() {
handleDescriptionText(2, 33);
testKey(false);
menuUp();
_mouse.hideMouse();
_mouse->hideMouse();
clearScreen();
drawDiscussionBox();
startDialog(140);
drawRightFrame();
drawClock();
_mouse.showMouse();
_mouse->showMouse();
_coreVar._currPlace = OWN_ROOM;
prepareDisplayText();
resetPresenceInRooms(DINING_ROOM);
@ -1451,8 +1451,8 @@ void MortevielleEngine::floodedInWell() {
* @remarks Originally called 'antegame'
*/
void MortevielleEngine::gameLoaded() {
_mouse.hideMouse();
_menu._menuDisplayed = false;
_mouse->hideMouse();
_menu->_menuDisplayed = false;
_loseGame = true;
_anyone = false;
_destinationOk = true;
@ -1490,11 +1490,11 @@ void MortevielleEngine::gameLoaded() {
handleDescriptionText(2, _crep);
clearVerbBar();
_endGame = false;
_menu.setDestinationText(_coreVar._currPlace);
_menu.setInventoryText();
_menu->setDestinationText(_coreVar._currPlace);
_menu->setInventoryText();
if (_coreVar._selectedObjectId != 0)
displayItemInHand(_coreVar._selectedObjectId + 400);
_mouse.showMouse();
_mouse->showMouse();
}
/**
@ -1508,7 +1508,7 @@ void MortevielleEngine::handleOpcode() {
_keyPressedEsc = false;
if (!_anyone) {
if (_uptodatePresence) {
if ((_currMenu == MENU_MOVE) || (_currAction == _menu._opcodeLeave) || (_currAction == _menu._opcodeSleep) || (_currAction == _menu._opcodeEat)) {
if ((_currMenu == MENU_MOVE) || (_currAction == _menu->_opcodeLeave) || (_currAction == _menu->_opcodeSleep) || (_currAction == _menu->_opcodeEat)) {
_controlMenu = 4;
menuUp();
return;
@ -1521,60 +1521,60 @@ void MortevielleEngine::handleOpcode() {
fctDiscuss();
else if (_currMenu == MENU_INVENTORY)
fctInventoryTake();
else if (_currAction == _menu._opcodeAttach)
else if (_currAction == _menu->_opcodeAttach)
fctAttach();
else if (_currAction == _menu._opcodeWait)
else if (_currAction == _menu->_opcodeWait)
fctWait();
else if (_currAction == _menu._opcodeForce)
else if (_currAction == _menu->_opcodeForce)
fctForce();
else if (_currAction == _menu._opcodeSleep)
else if (_currAction == _menu->_opcodeSleep)
fctSleep();
else if (_currAction == _menu._opcodeListen)
else if (_currAction == _menu->_opcodeListen)
fctListen();
else if (_currAction == _menu._opcodeEnter)
else if (_currAction == _menu->_opcodeEnter)
fctEnter();
else if (_currAction == _menu._opcodeClose)
else if (_currAction == _menu->_opcodeClose)
fctClose();
else if (_currAction == _menu._opcodeSearch)
else if (_currAction == _menu->_opcodeSearch)
fctSearch();
else if (_currAction == _menu._opcodeKnock)
else if (_currAction == _menu->_opcodeKnock)
fctKnock();
else if (_currAction == _menu._opcodeScratch)
else if (_currAction == _menu->_opcodeScratch)
fctScratch();
else if (_currAction == _menu._opcodeRead)
else if (_currAction == _menu->_opcodeRead)
fctRead();
else if (_currAction == _menu._opcodeEat)
else if (_currAction == _menu->_opcodeEat)
fctEat();
else if (_currAction == _menu._opcodePlace)
else if (_currAction == _menu->_opcodePlace)
fctPlace();
else if (_currAction == _menu._opcodeOpen)
else if (_currAction == _menu->_opcodeOpen)
fctOpen();
else if (_currAction == _menu._opcodeTake)
else if (_currAction == _menu->_opcodeTake)
fctTake();
else if (_currAction == _menu._opcodeLook)
else if (_currAction == _menu->_opcodeLook)
fctLook();
else if (_currAction == _menu._opcodeSmell)
else if (_currAction == _menu->_opcodeSmell)
fctSmell();
else if (_currAction == _menu._opcodeSound)
else if (_currAction == _menu->_opcodeSound)
fctSound();
else if (_currAction == _menu._opcodeLeave)
else if (_currAction == _menu->_opcodeLeave)
fctLeave();
else if (_currAction == _menu._opcodeLift)
else if (_currAction == _menu->_opcodeLift)
fctLift();
else if (_currAction == _menu._opcodeTurn)
else if (_currAction == _menu->_opcodeTurn)
fctTurn();
else if (_currAction == _menu._opcodeSSearch)
else if (_currAction == _menu->_opcodeSSearch)
fctSelfSearch();
else if (_currAction == _menu._opcodeSRead)
else if (_currAction == _menu->_opcodeSRead)
fctSelfRead();
else if (_currAction == _menu._opcodeSPut)
else if (_currAction == _menu->_opcodeSPut)
fctSelfPut();
else if (_currAction == _menu._opcodeSLook)
else if (_currAction == _menu->_opcodeSLook)
fctSelftLook();
_hiddenHero = false;
if (_currAction == _menu._opcodeSHide)
if (_currAction == _menu->_opcodeSHide)
fctSelfHide();
} else if (_anyone) {
interactNPC();
@ -1640,9 +1640,9 @@ void MortevielleEngine::charToHour() {
* @remarks Originally called 'clsf1'
*/
void MortevielleEngine::clearUpperLeftPart() {
_mouse.hideMouse();
_mouse->hideMouse();
_screenSurface.fillRect(0, Common::Rect(0, 11, 514, 175));
_mouse.showMouse();
_mouse->showMouse();
}
/**
@ -1650,7 +1650,7 @@ void MortevielleEngine::clearUpperLeftPart() {
* @remarks Originally called 'clsf2'
*/
void MortevielleEngine::clearDescriptionBar() {
_mouse.hideMouse();
_mouse->hideMouse();
if (_largestClearScreen) {
_screenSurface.fillRect(0, Common::Rect(1, 176, 633, 199));
_screenSurface.drawBox(0, 176, 634, 23, 15);
@ -1659,7 +1659,7 @@ void MortevielleEngine::clearDescriptionBar() {
_screenSurface.fillRect(0, Common::Rect(1, 176, 633, 190));
_screenSurface.drawBox(0, 176, 634, 14, 15);
}
_mouse.showMouse();
_mouse->showMouse();
}
/**
@ -1667,10 +1667,10 @@ void MortevielleEngine::clearDescriptionBar() {
* @remarks Originally called 'clsf3'
*/
void MortevielleEngine::clearVerbBar() {
_mouse.hideMouse();
_mouse->hideMouse();
_screenSurface.fillRect(0, Common::Rect(1, 192, 633, 199));
_screenSurface.drawBox(0, 191, 634, 8, 15);
_mouse.showMouse();
_mouse->showMouse();
}
/**
@ -1680,7 +1680,7 @@ void MortevielleEngine::clearVerbBar() {
void MortevielleEngine::clearUpperRightPart() {
Common::String st;
_mouse.hideMouse();
_mouse->hideMouse();
// Clear ambiance description
_screenSurface.fillRect(15, Common::Rect(544, 93, 600, 98));
@ -1697,7 +1697,7 @@ void MortevielleEngine::clearUpperRightPart() {
// Clear person list
_screenSurface.fillRect(15, Common::Rect(560, 24, 610, 86));
_mouse.showMouse();
_mouse->showMouse();
}
/**
@ -2135,10 +2135,10 @@ void MortevielleEngine::showTitleScreen() {
* @remarks Originally called 'dessine'
*/
void MortevielleEngine::draw(int x, int y) {
_mouse.hideMouse();
_mouse->hideMouse();
setPal(_numpal);
displayPicture(_curPict, x, y);
_mouse.showMouse();
_mouse->showMouse();
}
/**
@ -2147,9 +2147,9 @@ void MortevielleEngine::draw(int x, int y) {
*/
void MortevielleEngine::drawRightFrame() {
setPal(89);
_mouse.hideMouse();
_mouse->hideMouse();
displayPicture(_rightFramePict, 0, 0);
_mouse.showMouse();
_mouse->showMouse();
}
/**
@ -2205,7 +2205,7 @@ void MortevielleEngine::prepareRoom() {
_minute = 30;
drawClock();
}
if (_mouse._pos.y < 12)
if (_mouse->_pos.y < 12)
return;
if (!_blo) {
@ -2221,8 +2221,8 @@ void MortevielleEngine::prepareRoom() {
int newTime = readclock();
if ((newTime - _currentTime) > _inGameHourDuration) {
bool activeMenu = _menu._menuActive;
_menu.eraseMenu();
bool activeMenu = _menu->_menuActive;
_menu->eraseMenu();
_currentHourCount += ((newTime - _currentTime) / _inGameHourDuration);
_currentTime = newTime;
switch (_place) {
@ -2289,7 +2289,7 @@ void MortevielleEngine::prepareRoom() {
}
if (activeMenu)
_menu.drawMenu();
_menu->drawMenu();
}
}
_endTime = readclock();
@ -2315,7 +2315,7 @@ void MortevielleEngine::drawClock() {
const int y = 123;
const int rg = 9;
_mouse.hideMouse();
_mouse->hideMouse();
_screenSurface.drawRectangle(570, 118, 20, 10);
_screenSurface.drawRectangle(578, 114, 6, 18);
@ -2332,7 +2332,7 @@ void MortevielleEngine::drawClock() {
hour12 = 12;
_screenSurface.drawLine(((uint)x >> 1) * kResolutionScaler, y, ((uint)(x + cv[0][hour12 - 1]) >> 1) * kResolutionScaler, y + cv[1][hour12 - 1], 1);
_mouse.showMouse();
_mouse->showMouse();
_screenSurface.putxy(568, 154);
if (_hour > 11)
@ -2622,8 +2622,8 @@ void MortevielleEngine::displayItemInHand(int objId) {
if (objId != 500)
strp = getString(objId - 501 + kInventoryStringIndex);
_menu.setText(_menu._inventoryMenu[8], strp);
_menu.disableMenuItem(_menu._inventoryMenu[8]);
_menu->setText(_menu->_inventoryMenu[8], strp);
_menu->disableMenuItem(_menu->_inventoryMenu[8]);
}
/**
@ -2924,7 +2924,7 @@ void MortevielleEngine::testKey(bool d) {
int x, y;
bool click;
_mouse.hideMouse();
_mouse->hideMouse();
displayStatusInDescriptionBar('K');
// Wait for release from any key or mouse button
@ -2932,7 +2932,7 @@ void MortevielleEngine::testKey(bool d) {
_key = gettKeyPressed();
do {
_mouse.getMousePosition(x, y, click);
_mouse->getMousePosition(x, y, click);
quest = keyPressed();
if (quest && shouldQuit())
return;
@ -2943,14 +2943,14 @@ void MortevielleEngine::testKey(bool d) {
if (d)
prepareRoom();
quest = keyPressed();
_mouse.getMousePosition(x, y, click);
_mouse->getMousePosition(x, y, click);
if (shouldQuit())
return;
} while (!(quest || (click) || (d && _anyone)));
if (quest)
gettKeyPressed();
setMouseClick(false);
_mouse.showMouse();
_mouse->showMouse();
}
/**
@ -3061,7 +3061,7 @@ void MortevielleEngine::getSearchDescription(int objId) {
* @remarks Originally called 'mennor'
*/
void MortevielleEngine::menuUp() {
_menu.menuUp(_currMenu);
_menu->menuUp(_currMenu);
}
/**
@ -3101,7 +3101,7 @@ void MortevielleEngine::addObjectToInventory(int objectId) {
if (_coreVar._inventory[i] == 0) {
_coreVar._inventory[i] = objectId;
_menu.setInventoryText();
_menu->setInventoryText();
} else
// Inventory is full
_crep = 139;
@ -3112,8 +3112,8 @@ void MortevielleEngine::addObjectToInventory(int objectId) {
* @remarks Originally called 'quelquun'
*/
void MortevielleEngine::interactNPC() {
if (_menu._menuDisplayed)
_menu.eraseMenu();
if (_menu->_menuDisplayed)
_menu->eraseMenu();
endSearch();
_crep = 997;
@ -3134,12 +3134,12 @@ L1:
else
_coreVar._faithScore += 3 * (_coreVar._faithScore / 10);
exitRoom();
_menu.setDestinationText(LANDING);
_menu->setDestinationText(LANDING);
int charIdx = convertBitIndexToCharacterIndex(_currBitIndex);
_caff = 69 + charIdx;
_crep = _caff;
_currMenu = MENU_DISCUSS;
_currAction = (_menu._discussMenu[charIdx]._menuId << 8) | _menu._discussMenu[charIdx]._actionId;
_currAction = (_menu->_discussMenu[charIdx]._menuId << 8) | _menu->_discussMenu[charIdx]._actionId;
_syn = true;
_col = true;
} else {
@ -3157,8 +3157,8 @@ L1:
prepareDisplayText();
}
}
if (_menu._menuDisplayed)
_menu.drawMenu();
if (_menu->_menuDisplayed)
_menu->drawMenu();
}
/**
@ -3206,12 +3206,12 @@ void MortevielleEngine::displayStatusArrow() {
touch = '\0';
do {
_mouse.moveMouse(qust, touch);
_mouse->moveMouse(qust, touch);
if (shouldQuit())
return;
if (getMouseClick())
inRect = (_mouse._pos.x < 256 * kResolutionScaler) && (_mouse._pos.y < 176) && (_mouse._pos.y > 12);
inRect = (_mouse->_pos.x < 256 * kResolutionScaler) && (_mouse->_pos.y < 176) && (_mouse->_pos.y > 12);
prepareRoom();
} while (!(qust || inRect || _anyone));
@ -3223,8 +3223,8 @@ void MortevielleEngine::displayStatusArrow() {
_keyPressedEsc = true;
if (inRect) {
_x = _mouse._pos.x;
_y = _mouse._pos.y;
_x = _mouse->_pos.x;
_y = _mouse->_pos.y;
}
}
@ -3292,7 +3292,7 @@ void MortevielleEngine::displayLookScreen(int objId) {
int mdes = _caff;
_caff = objId;
if (((_caff > 29) && (_caff < 33)) || (_caff == 144) || (_caff == 147) || (_caff == 149) || (_currAction == _menu._opcodeSLook)) {
if (((_caff > 29) && (_caff < 33)) || (_caff == 144) || (_caff == 147) || (_caff == 149) || (_currAction == _menu->_opcodeSLook)) {
drawPictureWithText();
if ((_caff > 29) && (_caff < 33))
handleDescriptionText(2, _caff);
@ -3305,7 +3305,7 @@ void MortevielleEngine::displayLookScreen(int objId) {
} else {
_obpart = true;
_crep = _caff + 400;
_menu.setSearchMenu();
_menu->setSearchMenu();
}
}
@ -3357,10 +3357,10 @@ int MortevielleEngine::checkLeaveSecretPassage() {
* @remarks Originally called 'fenat'
*/
void MortevielleEngine::displayStatusInDescriptionBar(char stat) {
_mouse.hideMouse();
_mouse->hideMouse();
_screenSurface.writeCharacter(Common::Point(306, 193), stat, 12);
_screenSurface.drawBox(300, 191, 16, 8, 15);
_mouse.showMouse();
_mouse->showMouse();
}
/**