aboutsummaryrefslogtreecommitdiff
path: root/engines/lab/lab.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2015-12-04 23:04:48 +0200
committerWillem Jan Palenstijn2015-12-23 21:33:51 +0100
commitc42973604cbfa3a1c27c624a0b7caae8e70ec3c2 (patch)
tree595f2327c61bfabced6ef0ff01ad3131489e161a /engines/lab/lab.cpp
parentea6d4579e284e10778c1703ff6a1638505697cea (diff)
downloadscummvm-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.cpp350
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