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' * @remarks Originally called 'taller'
*/ */
void MortevielleEngine::fctMove() { 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)) { if ((_coreVar._currPlace == ROOM26) && (_currAction == oldMenu)) {
_coreVar._currPlace = LANDING; _coreVar._currPlace = LANDING;
_caff = _coreVar._currPlace; _caff = _coreVar._currPlace;
@ -65,10 +65,10 @@ void MortevielleEngine::fctMove() {
if (_num == 1) { if (_num == 1) {
_coreVar._currPlace = OWN_ROOM; _coreVar._currPlace = OWN_ROOM;
_menu.setDestinationText(OWN_ROOM); _menu->setDestinationText(OWN_ROOM);
} else if (_num == 7) { } else if (_num == 7) {
_coreVar._currPlace = ATTIC; _coreVar._currPlace = ATTIC;
_menu.setDestinationText(ATTIC); _menu->setDestinationText(ATTIC);
} else if (_num != 6) } else if (_num != 6)
_coreVar._currPlace = ROOM26; _coreVar._currPlace = ROOM26;
@ -85,10 +85,10 @@ void MortevielleEngine::fctMove() {
} }
exitRoom(); exitRoom();
int menuChoice = 1; 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) { while (oldMenu != _currAction) {
++menuChoice; ++menuChoice;
oldMenu = (_menu._moveMenu[menuChoice]._menuId << 8) | _menu._moveMenu[menuChoice]._actionId; oldMenu = (_menu->_moveMenu[menuChoice]._menuId << 8) | _menu->_moveMenu[menuChoice]._actionId;
} }
switch (_coreVar._currPlace) { switch (_coreVar._currPlace) {
@ -97,14 +97,14 @@ void MortevielleEngine::fctMove() {
gotoManorFront(); gotoManorFront();
else if (menuChoice == 2) else if (menuChoice == 2)
checkManorDistance(); checkManorDistance();
_menu.setDestinationText(_coreVar._currPlace); _menu->setDestinationText(_coreVar._currPlace);
return; return;
case INSIDE_WELL: case INSIDE_WELL:
if (menuChoice == 1) if (menuChoice == 1)
floodedInWell(); floodedInWell();
else if (menuChoice == 2) else if (menuChoice == 2)
gotoManorBack(); gotoManorBack();
_menu.setDestinationText(_coreVar._currPlace); _menu->setDestinationText(_coreVar._currPlace);
return; return;
case BUREAU: case BUREAU:
if (menuChoice == 1) if (menuChoice == 1)
@ -193,7 +193,7 @@ void MortevielleEngine::fctMove() {
if ((menuChoice < 5) || (menuChoice == 13) || (menuChoice == 14)) if ((menuChoice < 5) || (menuChoice == 13) || (menuChoice == 14))
prepareDisplayText(); prepareDisplayText();
resetRoomVariables(_coreVar._currPlace); resetRoomVariables(_coreVar._currPlace);
_menu.setDestinationText(_coreVar._currPlace); _menu->setDestinationText(_coreVar._currPlace);
} }
/** /**
@ -224,7 +224,7 @@ void MortevielleEngine::fctTake() {
_coreVar._secretPassageObjectId = 0; _coreVar._secretPassageObjectId = 0;
if (_coreVar._currPlace == WELL) if (_coreVar._currPlace == WELL)
_coreVar._wellObjectId = 0; _coreVar._wellObjectId = 0;
_menu.unsetSearchMenu(); _menu->unsetSearchMenu();
_obpart = false; _obpart = false;
prepareDisplayText(); prepareDisplayText();
} else { } else {
@ -325,7 +325,7 @@ void MortevielleEngine::fctInventoryTake() {
int oldMenu = 0; int oldMenu = 0;
do { do {
++inventIndex; ++inventIndex;
oldMenu = (_menu._inventoryMenu[inventIndex]._menuId << 8) | _menu._inventoryMenu[inventIndex]._actionId; oldMenu = (_menu->_inventoryMenu[inventIndex]._menuId << 8) | _menu->_inventoryMenu[inventIndex]._actionId;
} while (oldMenu != _currAction); } while (oldMenu != _currAction);
int cz = 0; int cz = 0;
int cy = 0; int cy = 0;
@ -336,7 +336,7 @@ void MortevielleEngine::fctInventoryTake() {
} while (cz != inventIndex); } while (cz != inventIndex);
cz = _coreVar._inventory[cy]; cz = _coreVar._inventory[cy];
_coreVar._inventory[cy] = 0; _coreVar._inventory[cy] = 0;
_menu.setInventoryText(); _menu->setInventoryText();
putInHand(cz); putInHand(cz);
_crep = 998; _crep = 998;
clearDescriptionBar(); clearDescriptionBar();
@ -536,7 +536,7 @@ void MortevielleEngine::fctSearch() {
if (_curSearchObjId != 0) { if (_curSearchObjId != 0) {
_searchCount = 0; _searchCount = 0;
_heroSearching = true; _heroSearching = true;
_menu.setSearchMenu(); _menu->setSearchMenu();
prepareNextObject(); prepareNextObject();
} else } else
_crep = 997; _crep = 997;
@ -607,7 +607,7 @@ void MortevielleEngine::fctOpen() {
if (_caff == ROOM26) { if (_caff == ROOM26) {
if (_roomDoorId != OWN_ROOM) { if (_roomDoorId != OWN_ROOM) {
_currAction = _menu._opcodeEnter; _currAction = _menu->_opcodeEnter;
_syn = true; _syn = true;
} else } else
_crep = 997; _crep = 997;
@ -740,12 +740,12 @@ void MortevielleEngine::fctPlace() {
_dialogManager.show(alertTxt); _dialogManager.show(alertTxt);
bool enterPassageFl = _dialogManager.showKnowledgeCheck(); bool enterPassageFl = _dialogManager.showKnowledgeCheck();
_mouse.hideMouse(); _mouse->hideMouse();
clearScreen(); clearScreen();
drawRightFrame(); drawRightFrame();
clearDescriptionBar(); clearDescriptionBar();
clearVerbBar(); clearVerbBar();
_mouse.showMouse(); _mouse->showMouse();
prepareRoom(); prepareRoom();
drawClock(); drawClock();
if (_currBitIndex != 0) if (_currBitIndex != 0)
@ -753,12 +753,12 @@ void MortevielleEngine::fctPlace() {
else else
displayAloneText(); displayAloneText();
_menu.displayMenu(); _menu->displayMenu();
if (enterPassageFl) { if (enterPassageFl) {
_coreVar._currPlace = SECRET_PASSAGE; _coreVar._currPlace = SECRET_PASSAGE;
_menu.setDestinationText(SECRET_PASSAGE); _menu->setDestinationText(SECRET_PASSAGE);
} else { } else {
_menu.setDestinationText(_coreVar._currPlace); _menu->setDestinationText(_coreVar._currPlace);
setPal(14); setPal(14);
drawPicture(); drawPicture();
displayAnimFrame(1, 2); displayAnimFrame(1, 2);
@ -1132,7 +1132,7 @@ void MortevielleEngine::fctEat() {
_coreVar._currPlace = DINING_ROOM; _coreVar._currPlace = DINING_ROOM;
_caff = DINING_ROOM; _caff = DINING_ROOM;
resetRoomVariables(_coreVar._currPlace); resetRoomVariables(_coreVar._currPlace);
_menu.setDestinationText(_coreVar._currPlace); _menu->setDestinationText(_coreVar._currPlace);
int day, hour, minute; int day, hour, minute;
updateHour(day, hour, minute); updateHour(day, hour, minute);
@ -1168,7 +1168,7 @@ void MortevielleEngine::fctEat() {
void MortevielleEngine::fctEnter() { void MortevielleEngine::fctEnter() {
if ((_coreVar._currPlace == MANOR_FRONT) || (_coreVar._currPlace == MANOR_BACK)) { if ((_coreVar._currPlace == MANOR_FRONT) || (_coreVar._currPlace == MANOR_BACK)) {
gotoDiningRoom(); gotoDiningRoom();
_menu.setDestinationText(_coreVar._currPlace); _menu->setDestinationText(_coreVar._currPlace);
} else if (_coreVar._currPlace == LANDING) } else if (_coreVar._currPlace == LANDING)
showMoveMenuAlert(); showMoveMenuAlert();
else if (_roomDoorId == OWN_ROOM) else if (_roomDoorId == OWN_ROOM)
@ -1193,7 +1193,7 @@ void MortevielleEngine::fctEnter() {
++_coreVar._faithScore; ++_coreVar._faithScore;
_coreVar._currPlace = LANDING; _coreVar._currPlace = LANDING;
_currMenu = MENU_DISCUSS; _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; _syn = true;
if (_roomDoorId == JULIA_ROOM) { if (_roomDoorId == JULIA_ROOM) {
_col = true; _col = true;
@ -1214,7 +1214,7 @@ void MortevielleEngine::fctEnter() {
_coreVar._currPlace = _roomDoorId; _coreVar._currPlace = _roomDoorId;
prepareDisplayText(); prepareDisplayText();
resetRoomVariables(_coreVar._currPlace); resetRoomVariables(_coreVar._currPlace);
_menu.setDestinationText(_coreVar._currPlace); _menu->setDestinationText(_coreVar._currPlace);
_roomDoorId = OWN_ROOM; _roomDoorId = OWN_ROOM;
_savedBitIndex = 0; _savedBitIndex = 0;
_currBitIndex = 0; _currBitIndex = 0;
@ -1237,7 +1237,7 @@ void MortevielleEngine::fctSleep() {
prepareDisplayText(); prepareDisplayText();
drawPictureWithText(); drawPictureWithText();
resetRoomVariables(_coreVar._currPlace); resetRoomVariables(_coreVar._currPlace);
_menu.setDestinationText(_coreVar._currPlace); _menu->setDestinationText(_coreVar._currPlace);
} }
clearVerbBar(); clearVerbBar();
clearDescriptionBar(); clearDescriptionBar();
@ -1321,7 +1321,7 @@ void MortevielleEngine::fctLeave() {
if (_crep == 0) if (_crep == 0)
_crep = nextPlace; _crep = nextPlace;
resetRoomVariables(nextPlace); resetRoomVariables(nextPlace);
_menu.setDestinationText(nextPlace); _menu->setDestinationText(nextPlace);
} }
} }
@ -1394,7 +1394,7 @@ void MortevielleEngine::fctDiscuss() {
int oldMenu; int oldMenu;
do { do {
++cx; ++cx;
oldMenu = (_menu._discussMenu[cx]._menuId << 8) | _menu._discussMenu[cx]._actionId; oldMenu = (_menu->_discussMenu[cx]._menuId << 8) | _menu->_discussMenu[cx]._actionId;
} while (oldMenu != _currAction); } while (oldMenu != _currAction);
_caff = 69 + cx; _caff = 69 + cx;
drawPictureWithText(); drawPictureWithText();
@ -1403,7 +1403,7 @@ void MortevielleEngine::fctDiscuss() {
} }
testKey(false); testKey(false);
menuUp(); menuUp();
_mouse.hideMouse(); _mouse->hideMouse();
clearScreen(); clearScreen();
drawDiscussionBox(); drawDiscussionBox();
startDialog(displId); startDialog(displId);
@ -1417,7 +1417,7 @@ void MortevielleEngine::fctDiscuss() {
} }
lib[46] = lib[45]; lib[46] = lib[45];
lib[45] = ' '; lib[45] = ' ';
_mouse.showMouse(); _mouse->showMouse();
do { do {
choice = 0; choice = 0;
int posX = 0; int posX = 0;
@ -1444,11 +1444,11 @@ void MortevielleEngine::fctDiscuss() {
bool click; bool click;
do { do {
bool dummyFl; bool dummyFl;
_mouse.moveMouse(dummyFl, retKey); _mouse->moveMouse(dummyFl, retKey);
if (shouldQuit()) if (shouldQuit())
return; return;
_mouse.getMousePosition(x, y, click); _mouse->getMousePosition(x, y, click);
x *= (3 - kResolutionScaler); x *= (3 - kResolutionScaler);
if (x > 319) if (x > 319)
cx = 41; cx = 41;
@ -1533,11 +1533,11 @@ void MortevielleEngine::fctDiscuss() {
_coreVar._faithScore += 3; _coreVar._faithScore += 3;
displId = 139; displId = 139;
} }
_mouse.hideMouse(); _mouse->hideMouse();
clearScreen(); clearScreen();
drawDiscussionBox(); drawDiscussionBox();
startDialog(displId); startDialog(displId);
_mouse.showMouse(); _mouse->showMouse();
if ((displId == 84) || (displId == 86)) { if ((displId == 84) || (displId == 86)) {
_coreVar._pctHintFound[5] = '*'; _coreVar._pctHintFound[5] = '*';
_coreVar._availableQuestion[7] = '*'; _coreVar._availableQuestion[7] = '*';
@ -1551,32 +1551,32 @@ void MortevielleEngine::fctDiscuss() {
_coreVar._pctHintFound[8] = '*'; _coreVar._pctHintFound[8] = '*';
_coreVar._availableQuestion[32] = '*'; _coreVar._availableQuestion[32] = '*';
} }
_mouse.hideMouse(); _mouse->hideMouse();
clearScreen(); clearScreen();
_mouse.showMouse(); _mouse->showMouse();
} }
} while ((choice != 46) && (displId != 138)); } while ((choice != 46) && (displId != 138));
if (_col) { if (_col) {
_coreVar._faithScore += (3 * (_coreVar._faithScore / 10)); _coreVar._faithScore += (3 * (_coreVar._faithScore / 10));
_mouse.hideMouse(); _mouse->hideMouse();
clearScreen(); clearScreen();
drawDiscussionBox(); drawDiscussionBox();
startDialog(138); startDialog(138);
_mouse.showMouse(); _mouse->showMouse();
_col = false; _col = false;
_coreVar._currPlace = LANDING; _coreVar._currPlace = LANDING;
} }
_controlMenu = 0; _controlMenu = 0;
_mouse.hideMouse(); _mouse->hideMouse();
clearScreen(); clearScreen();
drawRightFrame(); drawRightFrame();
_mouse.showMouse(); _mouse->showMouse();
showPeoplePresent(_currBitIndex); showPeoplePresent(_currBitIndex);
prepareRoom(); prepareRoom();
drawClock(); drawClock();
prepareDisplayText(); prepareDisplayText();
/* chech;*/ /* chech;*/
_menu.setDestinationText(_coreVar._currPlace); _menu->setDestinationText(_coreVar._currPlace);
clearVerbBar(); clearVerbBar();
} }
@ -1625,13 +1625,13 @@ void MortevielleEngine::endGame() {
clearVerbBar(); clearVerbBar();
handleDescriptionText(9, 1509); handleDescriptionText(9, 1509);
testKey(false); testKey(false);
_mouse.hideMouse(); _mouse->hideMouse();
_caff = 70; _caff = 70;
_text.taffich(); _text.taffich();
clearScreen(); clearScreen();
drawDiscussionBox(); drawDiscussionBox();
startDialog(141); startDialog(141);
_mouse.showMouse(); _mouse->showMouse();
clearUpperLeftPart(); clearUpperLeftPart();
handleDescriptionText(9, 1509); handleDescriptionText(9, 1509);
handleDescriptionText(2, 142); 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 // Make a copy of the current screen surface for later restore
_vm->_backgroundSurface.copyFrom(_vm->_screenSurface); _vm->_backgroundSurface.copyFrom(_vm->_screenSurface);
_vm->_mouse.hideMouse(); _vm->_mouse->hideMouse();
while (_vm->keyPressed()) while (_vm->keyPressed())
_vm->getChar(); _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][1] = ((uint)(320 + ((uint)esp >> 1)) / 2) * kResolutionScaler;
limit[2][2] = (limit[2][1]) + 40; limit[2][2] = (limit[2][1]) + 40;
} }
_vm->_mouse.showMouse(); _vm->_mouse->showMouse();
int id = 0; int id = 0;
bool dummyFl = false; bool dummyFl = false;
bool test3; bool test3;
do { do {
char dummyKey = '\377'; char dummyKey = '\377';
_vm->_mouse.moveMouse(dummyFl, dummyKey); _vm->_mouse->moveMouse(dummyFl, dummyKey);
if (_vm->shouldQuit()) if (_vm->shouldQuit())
return 0; return 0;
curPos = _vm->_mouse._pos; curPos = _vm->_mouse->_pos;
bool newaff = false; bool newaff = false;
if ((curPos.y > 95) && (curPos.y < 105)) { if ((curPos.y > 95) && (curPos.y < 105)) {
bool test1 = (curPos.x > limit[1][1]) && (curPos.x < limit[1][2]); bool test1 = (curPos.x > limit[1][1]) && (curPos.x < limit[1][2]);
@ -125,7 +125,7 @@ int DialogManager::show(const Common::String &msg) {
else else
ix = 2; ix = 2;
if (ix != id) { if (ix != id) {
_vm->_mouse.hideMouse(); _vm->_mouse->hideMouse();
if (id != 0) { if (id != 0) {
setPosition(id, coldep, esp); setPosition(id, coldep, esp);
@ -142,12 +142,12 @@ int DialogManager::show(const Common::String &msg) {
_vm->_screenSurface.drawString(tmp2, 1); _vm->_screenSurface.drawString(tmp2, 1);
id = ix; id = ix;
_vm->_mouse.showMouse(); _vm->_mouse->showMouse();
} }
} }
} }
if ((id != 0) && !newaff) { if ((id != 0) && !newaff) {
_vm->_mouse.hideMouse(); _vm->_mouse->hideMouse();
setPosition(id, coldep, esp); setPosition(id, coldep, esp);
Common::String tmp3(" "); Common::String tmp3(" ");
@ -156,13 +156,13 @@ int DialogManager::show(const Common::String &msg) {
_vm->_screenSurface.drawString(tmp3, 0); _vm->_screenSurface.drawString(tmp3, 0);
id = 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])) 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]))); || ((curPos.x > limit[2][1]) && (curPos.x < limit[2][2])));
} while (!_vm->getMouseClick()); } while (!_vm->getMouseClick());
_vm->setMouseClick(false); _vm->setMouseClick(false);
_vm->_mouse.hideMouse(); _vm->_mouse->hideMouse();
if (!test3) { if (!test3) {
id = 1; id = 1;
setPosition(1, coldep, esp); setPosition(1, coldep, esp);
@ -171,7 +171,7 @@ int DialogManager::show(const Common::String &msg) {
tmp4 += " "; tmp4 += " ";
_vm->_screenSurface.drawString(tmp4, 1); _vm->_screenSurface.drawString(tmp4, 1);
} }
_vm->_mouse.showMouse(); _vm->_mouse->showMouse();
/* Restore the background area */ /* Restore the background area */
_vm->_screenSurface.copyFrom(_vm->_backgroundSurface, 0, 0); _vm->_screenSurface.copyFrom(_vm->_backgroundSurface, 0, 0);
@ -292,9 +292,9 @@ bool DialogManager::showKnowledgeCheck() {
int correctCount = 0; int correctCount = 0;
for (int indx = 0; indx < 10; ++indx) { for (int indx = 0; indx < 10; ++indx) {
_vm->_mouse.hideMouse(); _vm->_mouse->hideMouse();
_vm->clearScreen(); _vm->clearScreen();
_vm->_mouse.showMouse(); _vm->_mouse->showMouse();
int dialogHeight = 23; int dialogHeight = 23;
_vm->_screenSurface.fillRect(15, Common::Rect(0, 14, 630, dialogHeight)); _vm->_screenSurface.fillRect(15, Common::Rect(0, 14, 630, dialogHeight));
Common::String tmpStr = _vm->getString(textIndexArr[indx]); Common::String tmpStr = _vm->getString(textIndexArr[indx]);
@ -342,12 +342,12 @@ bool DialogManager::showKnowledgeCheck() {
_vm->setMouseClick(false); _vm->setMouseClick(false);
bool flag; bool flag;
char key; char key;
_vm->_mouse.moveMouse(flag, key); _vm->_mouse->moveMouse(flag, key);
if (_vm->shouldQuit()) if (_vm->shouldQuit())
return false; return false;
currChoice = 1; currChoice = 1;
while (coor[currChoice]._enabled && !_vm->_mouse.isMouseIn(coor[currChoice]._rect)) while (coor[currChoice]._enabled && !_vm->_mouse->isMouseIn(coor[currChoice]._rect))
++currChoice; ++currChoice;
if (coor[currChoice]._enabled) { if (coor[currChoice]._enabled) {
if ((prevChoice != 0) && (prevChoice != currChoice)) { if ((prevChoice != 0) && (prevChoice != currChoice)) {

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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