From 9bbfd7f628fd335c9c9f5e67e2b86f674ef23f1a Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 24 Jul 2013 15:16:56 +0200 Subject: MORTEVIELLE: Start working on displayPicture, misc renaming and refactoring --- engines/mortevielle/actions.cpp | 40 ++++++++++++------------- engines/mortevielle/dialogs.cpp | 8 ++--- engines/mortevielle/mortevielle.h | 11 +++---- engines/mortevielle/utils.cpp | 61 ++++++++++++++++++++++----------------- 4 files changed, 64 insertions(+), 56 deletions(-) (limited to 'engines/mortevielle') diff --git a/engines/mortevielle/actions.cpp b/engines/mortevielle/actions.cpp index 9a29bbfd29..91d9177dc6 100644 --- a/engines/mortevielle/actions.cpp +++ b/engines/mortevielle/actions.cpp @@ -241,17 +241,17 @@ void MortevielleEngine::fctTake() { if ((_coreVar._currPlace == ATTIC) && (_num == 1) && (_coreVar._atticBallHoleObjectId != 0)) { putInHand(_coreVar._atticBallHoleObjectId); if ((_crep != 997) && (_crep != 139)) - aniof(2, 7); + drawAnimFrame(2, 7); } if ((_coreVar._currPlace == ATTIC) && (_num == 2) && (_coreVar._atticRodHoleObjectId != 0)) { putInHand(_coreVar._atticRodHoleObjectId); if ((_crep != 997) && (_crep != 139)) - aniof(2, 6); + drawAnimFrame(2, 6); } if ((_coreVar._currPlace == CELLAR) && (_coreVar._cellarObjectId != 0)) { putInHand(_coreVar._cellarObjectId); if ((_crep != 997) && (_crep != 139)) - aniof(2, 2); + drawAnimFrame(2, 2); } if ((_coreVar._currPlace == CRYPT) && (_coreVar._cryptObjectId != 0)) putInHand(_coreVar._cryptObjectId); @@ -260,13 +260,13 @@ void MortevielleEngine::fctTake() { putInHand(_coreVar._secretPassageObjectId); if ((_crep != 997) && (_crep != 139)) { _crep = 182; - aniof(2, 1); + drawAnimFrame(2, 1); } } if ((_coreVar._currPlace == WELL) && (_coreVar._wellObjectId != 0)) { putInHand(_coreVar._wellObjectId); if ((_crep != 997) && (_crep != 139)) - aniof(2, 1); + drawAnimFrame(2, 1); } if ((_crep != 997) && (_crep != 182) && (_crep != 139)) _crep = 999; @@ -631,7 +631,7 @@ void MortevielleEngine::fctOpen() { _speechManager.startSpeech(7, 9, 1); } _openObjects[tmpPlace] = _num; - aniof(1, _num); + drawAnimFrame(1, _num); } tmpPlace = _coreVar._currPlace; if (_coreVar._currPlace == CRYPT) @@ -675,14 +675,14 @@ void MortevielleEngine::fctPlace() { } else { _coreVar._atticBallHoleObjectId = _coreVar._selectedObjectId; if (_coreVar._selectedObjectId == 141) - aniof(1, 7); + drawAnimFrame(1, 7); } } else if (_coreVar._atticRodHoleObjectId != 0) { _crep = 188; } else { _coreVar._atticRodHoleObjectId = _coreVar._selectedObjectId; if (_coreVar._selectedObjectId == 159) - aniof(1, 6); + drawAnimFrame(1, 6); } } @@ -693,8 +693,8 @@ void MortevielleEngine::fctPlace() { _coreVar._cellarObjectId = _coreVar._selectedObjectId; if (_coreVar._selectedObjectId == 151) { // Open hidden passage - aniof(1, 2); - aniof(1, 1); + drawAnimFrame(1, 2); + drawAnimFrame(1, 1); handleDescriptionText(2, 165); displayEmptyHand(); _speechManager.startSpeech(6, -9, 1); @@ -727,16 +727,16 @@ void MortevielleEngine::fctPlace() { _menu.setDestinationText(_coreVar._currPlace); setPal(14); drawPicture(); - aniof(1, 2); - aniof(1, 1); + drawAnimFrame(1, 2); + drawAnimFrame(1, 1); alertTxt = getString(577); _dialogManager.show(alertTxt, 1); - aniof(2, 1); + drawAnimFrame(2, 1); _crep = 166; } prepareDisplayText(); } else { - aniof(2, 1); + drawAnimFrame(2, 1); _crep = 166; } return; @@ -756,7 +756,7 @@ void MortevielleEngine::fctPlace() { _crep = 188; } else if (_coreVar._selectedObjectId == 143) { _coreVar._secretPassageObjectId = 143; - aniof(1, 1); + drawAnimFrame(1, 1); } else { _crep = 1512; loseGame(); @@ -768,7 +768,7 @@ void MortevielleEngine::fctPlace() { _crep = 188; } else if ((_coreVar._selectedObjectId == 140) || (_coreVar._selectedObjectId == 120)) { _coreVar._wellObjectId = _coreVar._selectedObjectId; - aniof(1, 1); + drawAnimFrame(1, 1); } else { _crep = 185; } @@ -856,7 +856,7 @@ void MortevielleEngine::fctAttach() { _crep = 999; if ((_coreVar._selectedObjectId == 120) || (_coreVar._selectedObjectId == 140)) { _coreVar._wellObjectId = _coreVar._selectedObjectId; - aniof(1, 1); + drawAnimFrame(1, 1); } else _crep = 185; displayEmptyHand(); @@ -886,7 +886,7 @@ void MortevielleEngine::fctClose() { ++cx; } while ((cx <= 6) && (_num != _openObjects[cx])); if (_num == _openObjects[cx]) { - aniof(2, _num); + drawAnimFrame(2, _num); _crep = 998; _openObjects[cx] = 0; --_openObjCount; @@ -1148,7 +1148,7 @@ void MortevielleEngine::fctEnter() { else { int randVal = (getRandomNumber(0, 10)) - 5; _speechManager.startSpeech(7, randVal, 1); - aniof(1, 1); + drawAnimFrame(1, 1); int charIndex = convertBitIndexToCharacterIndex(z); ++_coreVar._faithScore; @@ -1169,7 +1169,7 @@ void MortevielleEngine::fctEnter() { } else { int randVal = (getRandomNumber(0, 10)) - 5; _speechManager.startSpeech(7, randVal, 1); - aniof(1, 1); + drawAnimFrame(1, 1); _coreVar._currPlace = _roomDoorId; prepareDisplayText(); diff --git a/engines/mortevielle/dialogs.cpp b/engines/mortevielle/dialogs.cpp index 2536533251..f6fe9661ac 100644 --- a/engines/mortevielle/dialogs.cpp +++ b/engines/mortevielle/dialogs.cpp @@ -480,10 +480,10 @@ void DialogManager::displayIntroScreen(bool drawFrame2Fl) { * @remarks Originally called 'ani50' */ void DialogManager::displayIntroFrame2() { - _vm->_crep = _vm->animof(1, 1); - _vm->pictout(kAdrAni, _vm->_crep, 63, 12); - _vm->_crep = _vm->animof(2, 1); - _vm->pictout(kAdrAni, _vm->_crep, 63, 12); + _vm->_crep = _vm->getAnimOffset(1, 1); + _vm->displayPicture(&_vm->_mem[(kAdrAni * 16) + _vm->_crep], 63, 12); + _vm->_crep = _vm->getAnimOffset(2, 1); + _vm->displayPicture(&_vm->_mem[(kAdrAni * 16) + _vm->_crep], 63, 12); _vm->_largestClearScreen = (_vm->_resolutionScaler == 1); _vm->handleDescriptionText(2, kDialogStringIndex + 143); } diff --git a/engines/mortevielle/mortevielle.h b/engines/mortevielle/mortevielle.h index 4fd096aa43..27d590ddb7 100644 --- a/engines/mortevielle/mortevielle.h +++ b/engines/mortevielle/mortevielle.h @@ -434,14 +434,14 @@ private: void drawPictureWithText(); void addObjectToInventory(int objectId); void putInHand(int &objId); + void initMaxAnswer(); + void drawAnimFrame(int frameNum, int animId); void copcha(); void adzon(); void premtet(); void ajchai(); void ecr2(Common::String text); - void initMaxAnswer(); - void aniof(int ouf, int num); void tlu(int af, int ob); void mennor(); void tsuiv(); @@ -526,12 +526,13 @@ public: void testKeyboard(); int getPresence(int roomId); void displayEmptyHand(); + void displayPicture(const byte *pic, int x, int y); - void hirs(); int gettKeyPressed(); void handleDescriptionText(int f, int mesgId); - int animof(int ouf, int num); - void pictout(int seg, int dep, int x, int y); + int getAnimOffset(int frameNum, int animNum); + + void hirs(); }; extern MortevielleEngine *g_vm; diff --git a/engines/mortevielle/utils.cpp b/engines/mortevielle/utils.cpp index 87bcc874b4..0dd197840c 100644 --- a/engines/mortevielle/utils.cpp +++ b/engines/mortevielle/utils.cpp @@ -2240,7 +2240,7 @@ void MortevielleEngine::showTitleScreen() { void MortevielleEngine::draw(int x, int y) { _mouse.hideMouse(); setPal(_numpal); - pictout(kAdrCurrentPicture, 0, x, y); + displayPicture(&_mem[kAdrCurrentPicture * 16], x, y); _mouse.showMouse(); } @@ -2254,7 +2254,7 @@ void MortevielleEngine::drawRightFrame() { _mem[(kAdrCurrentPicture * 16) + 14] = 15; } _mouse.hideMouse(); - pictout(kAdrRightFramePic, 0, 0, 0); + displayPicture(&_mem[kAdrRightFramePic * 16], 0, 0); _mouse.showMouse(); } @@ -2535,9 +2535,13 @@ void MortevielleEngine::displayControlMenu() { _controlMenu = 0; } -void MortevielleEngine::pictout(int seg, int dep, int x, int y) { +/** + * Display picture at a given coordinate + * @remarks Originally called 'pictout' + */ +void MortevielleEngine::displayPicture(const byte *pic, int x, int y) { GfxSurface surface; - surface.decode(&_mem[(seg * 16) + dep]); + surface.decode(pic); if (_currGraphicalDevice == MODE_HERCULES) { _mem[(kAdrCurrentPicture * 16) + 2] = 0; @@ -2575,16 +2579,15 @@ void MortevielleEngine::adzon() { /** * Returns the offset within the compressed image data resource of the desired image + * @remarks Originally called 'animof' */ -int MortevielleEngine::animof(int ouf, int num) { - int nani = _mem[(kAdrAni * 16) + 1]; - int aux = num; - if (ouf != 1) - aux += nani; - - int animof_result = (nani << 2) + 2 + READ_BE_UINT16(&_mem[(kAdrAni * 16) + (aux << 1)]); +int MortevielleEngine::getAnimOffset(int frameNum, int animNum) { + int animCount = _mem[(kAdrAni * 16) + 1]; + int aux = animNum; + if (frameNum != 1) + aux += animCount; - return animof_result; + return (animCount << 2) + 2 + READ_BE_UINT16(&_mem[(kAdrAni * 16) + (aux << 1)]); } /** @@ -2947,20 +2950,24 @@ void MortevielleEngine::displayQuestionText(Common::String s, int cmd) { _screenSurface.drawString(copy(s, 1, 25), cmd); } -void MortevielleEngine::aniof(int ouf, int num) { - if ((_caff == BATHROOM) && ((num == 4) || (num == 5))) +/** + * Display animation frame + * @remarks Originally called 'aniof' + */ +void MortevielleEngine::drawAnimFrame(int frameNum, int animId) { + if ((_caff == BATHROOM) && ((animId == 4) || (animId == 5))) return; - if ((_caff == DINING_ROOM) && (num == 7)) - num = 6; + if ((_caff == DINING_ROOM) && (animId == 7)) + animId = 6; else if (_caff == KITCHEN) { - if (num == 3) - num = 4; - else if (num == 4) - num = 3; + if (animId == 3) + animId = 4; + else if (animId == 4) + animId = 3; } - int offset = animof(ouf, num); + int offset = getAnimOffset(frameNum, animId); GfxSurface surface; surface.decode(&_mem[(kAdrAni * 16) + offset]); @@ -2987,21 +2994,21 @@ void MortevielleEngine::drawPicture() { if ((_caff < 30) || (_caff > 32)) { for (int cx = 1; cx <= 6; ++cx) { if (_openObjects[cx] != 0) - aniof(1, _openObjects[cx]); + drawAnimFrame(1, _openObjects[cx]); } if (_caff == ATTIC) { if (_coreVar._atticBallHoleObjectId == 141) - aniof(1, 7); + drawAnimFrame(1, 7); if (_coreVar._atticRodHoleObjectId == 159) - aniof(1, 6); + drawAnimFrame(1, 6); } else if ((_caff == CELLAR) && (_coreVar._cellarObjectId == 151)) - aniof(1, 2); + drawAnimFrame(1, 2); else if ((_caff == SECRET_PASSAGE) && (_coreVar._secretPassageObjectId == 143)) - aniof(1, 1); + drawAnimFrame(1, 1); else if ((_caff == WELL) && (_coreVar._wellObjectId != 0)) - aniof(1, 1); + drawAnimFrame(1, 1); } if (_caff < ROOM26) -- cgit v1.2.3