diff options
| author | Filippos Karapetis | 2015-12-04 23:04:48 +0200 |
|---|---|---|
| committer | Willem Jan Palenstijn | 2015-12-23 21:33:51 +0100 |
| commit | c42973604cbfa3a1c27c624a0b7caae8e70ec3c2 (patch) | |
| tree | 595f2327c61bfabced6ef0ff01ad3131489e161a /engines/lab/lab.cpp | |
| parent | ea6d4579e284e10778c1703ff6a1638505697cea (diff) | |
| download | scummvm-rg350-c42973604cbfa3a1c27c624a0b7caae8e70ec3c2.tar.gz scummvm-rg350-c42973604cbfa3a1c27c624a0b7caae8e70ec3c2.tar.bz2 scummvm-rg350-c42973604cbfa3a1c27c624a0b7caae8e70ec3c2.zip | |
LAB: Split the tile puzzle related functions into a separate file
Diffstat (limited to 'engines/lab/lab.cpp')
| -rw-r--r-- | engines/lab/lab.cpp | 350 |
1 files changed, 1 insertions, 349 deletions
diff --git a/engines/lab/lab.cpp b/engines/lab/lab.cpp index 2cd237c99d..acd1ea963d 100644 --- a/engines/lab/lab.cpp +++ b/engines/lab/lab.cpp @@ -51,22 +51,6 @@ namespace Lab { LabEngine *g_lab; -const uint16 INIT_TILE[4][4] = { - { 1, 5, 9, 13 }, - { 2, 6, 10, 14 }, - { 3, 7, 11, 15 }, - { 4, 8, 12, 0 } -}; - -const uint16 SOLUTION[4][4] = { - { 7, 1, 8, 3 }, - { 2, 11, 15, 4 }, - { 9, 5, 14, 6 }, - { 10, 13, 12, 0 } -}; - -const int COMBINATION_X[6] = { 45, 83, 129, 166, 211, 248 }; - LabEngine::LabEngine(OSystem *syst, const ADGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc), _extraGameFeatures(0) { g_lab = this; @@ -123,16 +107,7 @@ LabEngine::LabEngine(OSystem *syst, const ADGameDescription *gameDesc) _msgFont = 0; _inventory = 0; - for (int i = 0; i < 16; i++) - Tiles[i] = nullptr; - - for (int i= 0; i < 4; i++) { - for (int j = 0; j < 4; j++) - CurTile[i][j] = INIT_TILE[i][j]; - } - - for (int i = 0; i < 6; i++) - combination[i] = 0; + initTilePuzzle(); //const Common::FSNode gameDataDir(ConfMan.get("path")); //SearchMan.addSubDirectoryMatching(gameDataDir, "game"); @@ -210,327 +185,4 @@ Common::String LabEngine::generateSaveFileName(uint slot) { return Common::String::format("%s.%03u", _targetName.c_str(), slot); } -/*****************************************************************************/ -/* Converts SVGA cords to VGA if necessary, otherwise returns VGA cords. */ -/*****************************************************************************/ -int LabEngine::VGAUnScaleX(int x) { - if (_isHiRes) - return (x / 2); - else - return x; -} - -/*****************************************************************************/ -/* Converts SVGA cords to VGA if necessary, otherwise returns VGA cords. */ -/*****************************************************************************/ -int LabEngine::VGAUnScaleY(int y) { - if (_isHiRes) - return ((y * 5) / 12); - else - return y; -} - -/*****************************************************************************/ -/* Processes mouse clicks and changes the combination. */ -/*****************************************************************************/ -void LabEngine::mouseTile(Common::Point pos) { - int x = VGAUnScaleX(pos.x); - int y = VGAUnScaleY(pos.y); - - if ((x < 101) || (y < 26)) - return; - - x = (x - 101) / 30; - y = (y - 26) / 25; - - if ((x < 4) && (y < 4)) - changeTile(x, y); -} - -/*****************************************************************************/ -/* Changes the combination number of one of the slots */ -/*****************************************************************************/ -void LabEngine::changeTile(uint16 col, uint16 row) { - int16 scrolltype = -1; - - if (row > 0) { - if (CurTile[col] [row - 1] == 0) { - CurTile[col] [row - 1] = CurTile[col] [row]; - CurTile[col] [row] = 0; - scrolltype = DOWNSCROLL; - } - } - - if (col > 0) { - if (CurTile[col - 1] [row] == 0) { - CurTile[col - 1] [row] = CurTile[col] [row]; - CurTile[col] [row] = 0; - scrolltype = RIGHTSCROLL; - } - } - - if (row < 3) { - if (CurTile[col] [row + 1] == 0) { - CurTile[col] [row + 1] = CurTile[col] [row]; - CurTile[col] [row] = 0; - scrolltype = UPSCROLL; - } - } - - if (col < 3) { - if (CurTile[col + 1] [row] == 0) { - CurTile[col + 1] [row] = CurTile[col] [row]; - CurTile[col] [row] = 0; - scrolltype = LEFTSCROLL; - } - } - - if (scrolltype != -1) { - doTileScroll(col, row, scrolltype); - - if (getFeatures() & GF_WINDOWS_TRIAL) { - GUI::MessageDialog trialMessage("This puzzle is not available in the trial version of the game"); - trialMessage.runModal(); - return; - } - - bool check = true; - row = 0; - col = 0; - - while (row < 4) { - while (col < 4) { - check = check && (CurTile[row] [col] == SOLUTION[row] [col]); - col++; - } - - row++; - col = 0; - } - - if (check) { - _conditions->inclElement(BRICKOPEN); /* unlocked combination */ - _anim->_doBlack = true; - check = _graphics->readPict("p:Up/BDOpen", true); - } - } -} - -/*****************************************************************************/ -/* Processes mouse clicks and changes the combination. */ -/*****************************************************************************/ -void LabEngine::mouseCombination(Common::Point pos) { - uint16 number; - - int x = VGAUnScaleX(pos.x); - int y = VGAUnScaleY(pos.y); - - if ((y >= 63) && (y <= 99)) { - if ((x >= 44) && (x < 83)) - number = 0; - else if (x < 127) - number = 1; - else if (x < 165) - number = 2; - else if (x < 210) - number = 3; - else if (x < 245) - number = 4; - else if (x < 286) - number = 5; - else - return; - - changeCombination(number); - } -} - -/*****************************************************************************/ -/* Draws the images of the combination lock to the display bitmap. */ -/*****************************************************************************/ -void LabEngine::doTile(bool showsolution) { - uint16 row = 0, col = 0, rowm, colm, num; - int16 rows, cols; - - if (showsolution) { - rowm = _graphics->VGAScaleY(23); - colm = _graphics->VGAScaleX(27); - - rows = _graphics->VGAScaleY(31); - cols = _graphics->VGAScaleX(105); - } else { - _graphics->setAPen(0); - _graphics->rectFill(_graphics->VGAScaleX(97), _graphics->VGAScaleY(22), _graphics->VGAScaleX(220), _graphics->VGAScaleY(126)); - - rowm = _graphics->VGAScaleY(25); - colm = _graphics->VGAScaleX(30); - - rows = _graphics->VGAScaleY(25); - cols = _graphics->VGAScaleX(100); - } - - while (row < 4) { - while (col < 4) { - if (showsolution) - num = SOLUTION[col] [row]; - else - num = CurTile[col] [row]; - - if (showsolution || num) - Tiles[num]->drawImage(cols + (col * colm), rows + (row * rowm)); - - col++; - } - - row++; - col = 0; - } -} - -/*****************************************************************************/ -/* Reads in a backdrop picture. */ -/*****************************************************************************/ -void LabEngine::showTile(const char *filename, bool showsolution) { - uint16 start = showsolution ? 0 : 1; - - _anim->_doBlack = true; - _anim->_noPalChange = true; - _graphics->readPict(filename, true); - _anim->_noPalChange = false; - _graphics->blackScreen(); - - Common::File *tileFile = tileFile = _resource->openDataFile(showsolution ? "P:TileSolution" : "P:Tile"); - - for (uint16 curBit = start; curBit < 16; curBit++) - Tiles[curBit] = new Image(tileFile); - - delete tileFile; - - doTile(showsolution); - setPalette(_anim->_diffPalette, 256); -} - -/*****************************************************************************/ -/* Does the scrolling for the tiles on the tile puzzle. */ -/*****************************************************************************/ -void LabEngine::doTileScroll(uint16 col, uint16 row, uint16 scrolltype) { - int16 dX = 0, dY = 0, dx = 0, dy = 0, sx = 0, sy = 0; - uint16 last = 0, x1, y1; - - if (scrolltype == LEFTSCROLL) { - dX = _graphics->VGAScaleX(5); - sx = _graphics->VGAScaleX(5); - last = 6; - } else if (scrolltype == RIGHTSCROLL) { - dX = _graphics->VGAScaleX(-5); - dx = _graphics->VGAScaleX(-5); - sx = _graphics->VGAScaleX(5); - last = 6; - } else if (scrolltype == UPSCROLL) { - dY = _graphics->VGAScaleY(5); - sy = _graphics->VGAScaleY(5); - last = 5; - } else if (scrolltype == DOWNSCROLL) { - dY = _graphics->VGAScaleY(-5); - dy = _graphics->VGAScaleY(-5); - sy = _graphics->VGAScaleY(5); - last = 5; - } - - sx += _graphics->SVGACord(2); - - x1 = _graphics->VGAScaleX(100) + (col * _graphics->VGAScaleX(30)) + dx; - y1 = _graphics->VGAScaleY(25) + (row * _graphics->VGAScaleY(25)) + dy; - - for (uint16 i = 0; i < last; i++) { - waitTOF(); - scrollRaster(dX, dY, x1, y1, x1 + _graphics->VGAScaleX(28) + sx, y1 + _graphics->VGAScaleY(23) + sy); - x1 += dX; - y1 += dY; - } -} - -/*****************************************************************************/ -/* Changes the combination number of one of the slots */ -/*****************************************************************************/ -void LabEngine::changeCombination(uint16 number) { - static const int solution[6] = { 0, 4, 0, 8, 7, 2 }; - - Image display; - uint16 combnum; - bool unlocked = true; - - if (combination[number] < 9) - (combination[number])++; - else - combination[number] = 0; - - combnum = combination[number]; - - display._imageData = getCurrentDrawingBuffer(); - display._width = _screenWidth; - display._height = _screenHeight; - - for (uint16 i = 1; i <= (Images[combnum]->_height / 2); i++) { - if (_isHiRes) { - if (i & 1) - waitTOF(); - } else - waitTOF(); - - display._imageData = getCurrentDrawingBuffer(); - - scrollDisplayY(2, _graphics->VGAScaleX(COMBINATION_X[number]), _graphics->VGAScaleY(65), _graphics->VGAScaleX(COMBINATION_X[number]) + (Images[combnum])->_width - 1, _graphics->VGAScaleY(65) + (Images[combnum])->_height); - - Images[combnum]->blitBitmap(0, (Images[combnum])->_height - (2 * i), &(display), _graphics->VGAScaleX(COMBINATION_X[number]), _graphics->VGAScaleY(65), (Images[combnum])->_width, 2, false); - } - - for (uint16 i = 0; i < 6; i++) - unlocked = (combination[i] == solution[i]) && unlocked; - - if (unlocked) - _conditions->inclElement(COMBINATIONUNLOCKED); - else - _conditions->exclElement(COMBINATIONUNLOCKED); -} - -void LabEngine::scrollRaster(int16 dx, int16 dy, uint16 x1, uint16 y1, uint16 x2, uint16 y2) { - if (dx) - scrollDisplayX(dx, x1, y1, x2, y2); - - if (dy) - scrollDisplayY(dy, x1, y1, x2, y2); -} - -/*****************************************************************************/ -/* Draws the images of the combination lock to the display bitmap. */ -/*****************************************************************************/ -void LabEngine::doCombination() { - for (uint16 i = 0; i <= 5; i++) - Images[combination[i]]->drawImage(_graphics->VGAScaleX(COMBINATION_X[i]), _graphics->VGAScaleY(65)); -} - -/*****************************************************************************/ -/* Reads in a backdrop picture. */ -/*****************************************************************************/ -void LabEngine::showCombination(const char *filename) { - _anim->_doBlack = true; - _anim->_noPalChange = true; - _graphics->readPict(filename, true); - _anim->_noPalChange = false; - - _graphics->blackScreen(); - - Common::File *numFile = _resource->openDataFile("P:Numbers"); - - for (uint16 CurBit = 0; CurBit < 10; CurBit++) - Images[CurBit] = new Image(numFile); - - delete numFile; - - doCombination(); - - setPalette(_anim->_diffPalette, 256); -} - } // End of namespace Lab |
