mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-16 22:58:09 +00:00
LAB: Move all the tile puzzle related functionality into its own class
This commit is contained in:
parent
b77f726469
commit
8f5c91ee07
@ -40,6 +40,7 @@
|
||||
#include "lab/music.h"
|
||||
#include "lab/processroom.h"
|
||||
#include "lab/resource.h"
|
||||
#include "lab/tilepuzzle.h"
|
||||
#include "lab/utils.h"
|
||||
|
||||
namespace Lab {
|
||||
@ -122,8 +123,7 @@ void LabEngine::freeScreens() {
|
||||
|
||||
for (uint16 imgIdx = 0; imgIdx < 10; imgIdx++) {
|
||||
delete _invImages[imgIdx];
|
||||
delete _numberImages[imgIdx];
|
||||
_invImages[imgIdx] = _numberImages[imgIdx] = nullptr;
|
||||
_invImages[imgIdx] = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@ -459,13 +459,11 @@ void LabEngine::mainGameLoop() {
|
||||
|
||||
if (_closeDataPtr) {
|
||||
if ((_closeDataPtr->_closeUpType == SPECIALLOCK) && _mainDisplay)
|
||||
// LAB: Labyrinth specific code
|
||||
showCombination(_curFileName);
|
||||
_tilePuzzle->showCombination(_curFileName);
|
||||
else if (((_closeDataPtr->_closeUpType == SPECIALBRICK) ||
|
||||
(_closeDataPtr->_closeUpType == SPECIALBRICKNOMOUSE)) &&
|
||||
_mainDisplay)
|
||||
// LAB: Labyrinth specific code
|
||||
showTile(_curFileName, (bool)(_closeDataPtr->_closeUpType == SPECIALBRICKNOMOUSE));
|
||||
_tilePuzzle->showTile(_curFileName, (bool)(_closeDataPtr->_closeUpType == SPECIALBRICKNOMOUSE));
|
||||
else
|
||||
_graphics->readPict(_curFileName, false);
|
||||
} else
|
||||
@ -943,10 +941,9 @@ bool LabEngine::fromCrumbs(uint32 tmpClass, uint16 code, uint16 qualifier, Commo
|
||||
|
||||
if (_closeDataPtr) {
|
||||
if ((_closeDataPtr->_closeUpType == SPECIALLOCK) && _mainDisplay)
|
||||
// LAB: Labyrinth specific code
|
||||
mouseCombination(curPos);
|
||||
_tilePuzzle->mouseCombination(curPos);
|
||||
else if ((_closeDataPtr->_closeUpType == SPECIALBRICK) && _mainDisplay)
|
||||
mouseTile(curPos);
|
||||
_tilePuzzle->mouseTile(curPos);
|
||||
else
|
||||
doit = true;
|
||||
} else
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include "lab/music.h"
|
||||
#include "lab/processroom.h"
|
||||
#include "lab/resource.h"
|
||||
#include "lab/tilepuzzle.h"
|
||||
#include "lab/utils.h"
|
||||
|
||||
namespace Lab {
|
||||
@ -86,6 +87,7 @@ LabEngine::LabEngine(OSystem *syst, const ADGameDescription *gameDesc)
|
||||
_anim = nullptr;
|
||||
_graphics = nullptr;
|
||||
_rooms = nullptr;
|
||||
_tilePuzzle = nullptr;
|
||||
_utils = nullptr;
|
||||
|
||||
_lastTooLong = false;
|
||||
@ -97,12 +99,8 @@ LabEngine::LabEngine(OSystem *syst, const ADGameDescription *gameDesc)
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
_invImages[i] = nullptr;
|
||||
_numberImages[i] = nullptr;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 16; i++)
|
||||
_tiles[i] = nullptr;
|
||||
|
||||
_curFileName = nullptr;
|
||||
_nextFileName = nullptr;
|
||||
_newFileName = nullptr;
|
||||
@ -128,8 +126,6 @@ LabEngine::LabEngine(OSystem *syst, const ADGameDescription *gameDesc)
|
||||
_imgXMark = nullptr;
|
||||
_maps = nullptr;
|
||||
|
||||
initTilePuzzle();
|
||||
|
||||
//const Common::FSNode gameDataDir(ConfMan.get("path"));
|
||||
//SearchMan.addSubDirectoryMatching(gameDataDir, "game");
|
||||
//SearchMan.addSubDirectoryMatching(gameDataDir, "game/pict");
|
||||
@ -147,6 +143,7 @@ LabEngine::~LabEngine() {
|
||||
delete _anim;
|
||||
delete _graphics;
|
||||
delete[] _rooms;
|
||||
delete _tilePuzzle;
|
||||
delete _utils;
|
||||
delete _imgMap;
|
||||
delete _imgRoom;
|
||||
@ -164,9 +161,6 @@ LabEngine::~LabEngine() {
|
||||
delete _imgMapWest;
|
||||
delete _imgXMark;
|
||||
delete _maps;
|
||||
|
||||
for (int i = 0; i < 16; i++)
|
||||
delete _tiles[i];
|
||||
}
|
||||
|
||||
Common::Error LabEngine::run() {
|
||||
@ -180,6 +174,7 @@ Common::Error LabEngine::run() {
|
||||
_music = new Music(this);
|
||||
_graphics = new DisplayMan(this);
|
||||
_anim = new Anim(this);
|
||||
_tilePuzzle = new TilePuzzle(this);
|
||||
_utils = new Utils(this);
|
||||
|
||||
if (getPlatform() == Common::kPlatformWindows) {
|
||||
|
@ -58,6 +58,7 @@ class Image;
|
||||
class LargeSet;
|
||||
class Music;
|
||||
class Resource;
|
||||
class TilePuzzle;
|
||||
class Utils;
|
||||
|
||||
enum GameFeatures {
|
||||
@ -133,6 +134,7 @@ public:
|
||||
Anim *_anim;
|
||||
DisplayMan *_graphics;
|
||||
RoomData *_rooms;
|
||||
TilePuzzle *_tilePuzzle;
|
||||
Utils *_utils;
|
||||
|
||||
int _roomNum;
|
||||
@ -160,16 +162,12 @@ public:
|
||||
GadgetList _invGadgetList;
|
||||
Image *_moveImages[20];
|
||||
Image *_invImages[10];
|
||||
Image *_numberImages[10];
|
||||
uint16 _curTile[4][4];
|
||||
byte _combination[6];
|
||||
|
||||
private:
|
||||
int _lastWaitTOFTicks;
|
||||
bool _lastTooLong;
|
||||
CloseDataPtr _closeDataPtr;
|
||||
InventoryData *_inventory;
|
||||
Image *_tiles[16];
|
||||
GadgetList _journalGadgetList;
|
||||
GadgetList _mapGadgetList;
|
||||
Image *_imgMap, *_imgRoom, *_imgUpArrowRoom, *_imgDownArrowRoom, *_imgBridge;
|
||||
@ -213,7 +211,6 @@ public:
|
||||
char *getPictName(CloseDataPtr *closePtrList);
|
||||
|
||||
private:
|
||||
// engine.cpp
|
||||
void freeScreens();
|
||||
void perFlipGadget(uint16 gadID);
|
||||
bool doCloseUp(CloseDataPtr closePtr);
|
||||
@ -222,17 +219,6 @@ private:
|
||||
void mayShowCrumbIndicator();
|
||||
void mayShowCrumbIndicatorOff();
|
||||
const char *getInvName(uint16 curInv);
|
||||
void mouseTile(Common::Point pos);
|
||||
void changeTile(uint16 col, uint16 row);
|
||||
void mouseCombination(Common::Point pos);
|
||||
void doTile(bool showsolution);
|
||||
void showTile(const char *filename, bool showsolution);
|
||||
void doTileScroll(uint16 col, uint16 row, uint16 scrolltype);
|
||||
void changeCombination(uint16 number);
|
||||
void scrollRaster(int16 dx, int16 dy, uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte *buffer);
|
||||
void doCombination();
|
||||
void showCombination(const char *filename);
|
||||
void initTilePuzzle();
|
||||
bool saveRestoreGame();
|
||||
Common::Rect roomCoords(uint16 curRoom);
|
||||
void drawRoomMap(uint16 curRoom, bool drawMarkFl);
|
||||
|
@ -28,6 +28,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "common/savefile.h"
|
||||
#include "common/translation.h"
|
||||
|
||||
#include "gui/message.h"
|
||||
@ -43,6 +44,7 @@
|
||||
#include "lab/music.h"
|
||||
#include "lab/processroom.h"
|
||||
#include "lab/savegame.h"
|
||||
#include "lab/tilepuzzle.h"
|
||||
|
||||
namespace Lab {
|
||||
|
||||
@ -122,7 +124,7 @@ bool readSaveGameHeader(Common::InSaveFile *in, SaveGameHeader &header) {
|
||||
* Writes the game out to disk.
|
||||
*/
|
||||
bool saveGame(uint16 Direction, uint16 Quarters, int slot, Common::String desc) {
|
||||
uint16 i, j;
|
||||
uint16 i;
|
||||
Common::String fileName = g_lab->generateSaveFileName(slot);
|
||||
Common::SaveFileManager *saveFileManager = g_system->getSavefileManager();
|
||||
Common::OutSaveFile *file = saveFileManager->openForSaving(fileName);
|
||||
@ -147,14 +149,7 @@ bool saveGame(uint16 Direction, uint16 Quarters, int slot, Common::String desc)
|
||||
for (i = 0; i < g_lab->_roomsFound->_lastElement / (8 * 2); i++)
|
||||
file->writeUint16LE(g_lab->_roomsFound->_array[i]);
|
||||
|
||||
// Combination lock and tile stuff
|
||||
for (i = 0; i < 6; i++)
|
||||
file->writeByte(g_lab->_combination[i]);
|
||||
|
||||
// Tiles
|
||||
for (i = 0; i < 4; i++)
|
||||
for (j = 0; j < 4; j++)
|
||||
file->writeUint16LE(g_lab->_curTile[i][j]);
|
||||
g_lab->_tilePuzzle->save(file);
|
||||
|
||||
// Breadcrumbs
|
||||
for (i = 0; i < sizeof(g_lab->_breadCrumbs); i++) {
|
||||
@ -173,7 +168,7 @@ bool saveGame(uint16 Direction, uint16 Quarters, int slot, Common::String desc)
|
||||
* Reads the game from disk.
|
||||
*/
|
||||
bool loadGame(uint16 *Direction, uint16 *Quarters, int slot) {
|
||||
uint16 i, j;
|
||||
uint16 i;
|
||||
Common::String fileName = g_lab->generateSaveFileName(slot);
|
||||
Common::SaveFileManager *saveFileManager = g_system->getSavefileManager();
|
||||
Common::InSaveFile *file = saveFileManager->openForLoading(fileName);
|
||||
@ -195,14 +190,7 @@ bool loadGame(uint16 *Direction, uint16 *Quarters, int slot) {
|
||||
for (i = 0; i < g_lab->_roomsFound->_lastElement / (8 * 2); i++)
|
||||
g_lab->_roomsFound->_array[i] = file->readUint16LE();
|
||||
|
||||
// Combination lock and tile stuff
|
||||
for (i = 0; i < 6; i++)
|
||||
g_lab->_combination[i] = file->readByte();
|
||||
|
||||
// Tiles
|
||||
for (i = 0; i < 4; i++)
|
||||
for (j = 0; j < 4; j++)
|
||||
g_lab->_curTile[i][j] = file->readUint16LE();
|
||||
g_lab->_tilePuzzle->load(file);
|
||||
|
||||
// Breadcrumbs
|
||||
for (i = 0; i < 128; i++) {
|
||||
|
@ -33,12 +33,12 @@
|
||||
#include "gui/message.h"
|
||||
|
||||
#include "lab/lab.h"
|
||||
|
||||
#include "lab/anim.h"
|
||||
#include "lab/dispman.h"
|
||||
#include "lab/image.h"
|
||||
#include "lab/labsets.h"
|
||||
#include "lab/resource.h"
|
||||
#include "lab/tilepuzzle.h"
|
||||
#include "lab/utils.h"
|
||||
|
||||
namespace Lab {
|
||||
@ -59,7 +59,7 @@ const uint16 SOLUTION[4][4] = {
|
||||
|
||||
const int COMBINATION_X[6] = { 45, 83, 129, 166, 211, 248 };
|
||||
|
||||
void LabEngine::initTilePuzzle() {
|
||||
TilePuzzle::TilePuzzle(LabEngine *vm) : _vm(vm) {
|
||||
for (int i = 0; i < 16; i++)
|
||||
_tiles[i] = nullptr;
|
||||
|
||||
@ -70,13 +70,26 @@ void LabEngine::initTilePuzzle() {
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
_combination[i] = 0;
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
_numberImages[i] = nullptr;
|
||||
}
|
||||
|
||||
TilePuzzle::~TilePuzzle() {
|
||||
for (int i = 0; i < 16; i++)
|
||||
delete _tiles[i];
|
||||
|
||||
for (uint16 imgIdx = 0; imgIdx < 10; imgIdx++) {
|
||||
delete _numberImages[imgIdx];
|
||||
_numberImages[imgIdx] = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes mouse clicks and changes the combination.
|
||||
*/
|
||||
void LabEngine::mouseTile(Common::Point pos) {
|
||||
Common::Point realPos = _utils->vgaUnscale(pos);
|
||||
void TilePuzzle::mouseTile(Common::Point pos) {
|
||||
Common::Point realPos = _vm->_utils->vgaUnscale(pos);
|
||||
|
||||
if ((realPos.x < 101) || (realPos.y < 26))
|
||||
return;
|
||||
@ -91,7 +104,7 @@ void LabEngine::mouseTile(Common::Point pos) {
|
||||
/**
|
||||
* Changes the combination number of one of the slots
|
||||
*/
|
||||
void LabEngine::changeTile(uint16 col, uint16 row) {
|
||||
void TilePuzzle::changeTile(uint16 col, uint16 row) {
|
||||
int16 scrolltype = -1;
|
||||
|
||||
if (row > 0) {
|
||||
@ -129,7 +142,7 @@ void LabEngine::changeTile(uint16 col, uint16 row) {
|
||||
if (scrolltype != -1) {
|
||||
doTileScroll(col, row, scrolltype);
|
||||
|
||||
if (getFeatures() & GF_WINDOWS_TRIAL) {
|
||||
if (_vm->getFeatures() & GF_WINDOWS_TRIAL) {
|
||||
GUI::MessageDialog trialMessage("This puzzle is not available in the trial version of the game");
|
||||
trialMessage.runModal();
|
||||
return;
|
||||
@ -151,9 +164,9 @@ void LabEngine::changeTile(uint16 col, uint16 row) {
|
||||
|
||||
if (check) {
|
||||
// unlocked combination
|
||||
_conditions->inclElement(BRICKOPEN);
|
||||
_anim->_doBlack = true;
|
||||
_graphics->readPict("p:Up/BDOpen", true);
|
||||
_vm->_conditions->inclElement(BRICKOPEN);
|
||||
_vm->_anim->_doBlack = true;
|
||||
_vm->_graphics->readPict("p:Up/BDOpen", true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -161,8 +174,8 @@ void LabEngine::changeTile(uint16 col, uint16 row) {
|
||||
/**
|
||||
* Processes mouse clicks and changes the combination.
|
||||
*/
|
||||
void LabEngine::mouseCombination(Common::Point pos) {
|
||||
Common::Point realPos = _utils->vgaUnscale(pos);
|
||||
void TilePuzzle::mouseCombination(Common::Point pos) {
|
||||
Common::Point realPos = _vm->_utils->vgaUnscale(pos);
|
||||
|
||||
if (!Common::Rect(44, 63, 285, 99).contains(realPos))
|
||||
return;
|
||||
@ -187,25 +200,25 @@ void LabEngine::mouseCombination(Common::Point pos) {
|
||||
/**
|
||||
* Draws the images of the combination lock to the display bitmap.
|
||||
*/
|
||||
void LabEngine::doTile(bool showsolution) {
|
||||
void TilePuzzle::doTile(bool showsolution) {
|
||||
uint16 row = 0, col = 0, rowm, colm, num;
|
||||
int16 rows, cols;
|
||||
|
||||
if (showsolution) {
|
||||
rowm = _utils->vgaScaleY(23);
|
||||
colm = _utils->vgaScaleX(27);
|
||||
rowm = _vm->_utils->vgaScaleY(23);
|
||||
colm = _vm->_utils->vgaScaleX(27);
|
||||
|
||||
rows = _utils->vgaScaleY(31);
|
||||
cols = _utils->vgaScaleX(105);
|
||||
rows = _vm->_utils->vgaScaleY(31);
|
||||
cols = _vm->_utils->vgaScaleX(105);
|
||||
} else {
|
||||
_graphics->setAPen(0);
|
||||
_graphics->rectFillScaled(97, 22, 220, 126);
|
||||
_vm->_graphics->setAPen(0);
|
||||
_vm->_graphics->rectFillScaled(97, 22, 220, 126);
|
||||
|
||||
rowm = _utils->vgaScaleY(25);
|
||||
colm = _utils->vgaScaleX(30);
|
||||
rowm = _vm->_utils->vgaScaleY(25);
|
||||
colm = _vm->_utils->vgaScaleX(30);
|
||||
|
||||
rows = _utils->vgaScaleY(25);
|
||||
cols = _utils->vgaScaleX(100);
|
||||
rows = _vm->_utils->vgaScaleY(25);
|
||||
cols = _vm->_utils->vgaScaleX(100);
|
||||
}
|
||||
|
||||
while (row < 4) {
|
||||
@ -229,63 +242,63 @@ void LabEngine::doTile(bool showsolution) {
|
||||
/**
|
||||
* Reads in a backdrop picture.
|
||||
*/
|
||||
void LabEngine::showTile(const char *filename, bool showsolution) {
|
||||
uint16 start = showsolution ? 0 : 1;
|
||||
void TilePuzzle::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();
|
||||
_vm->_anim->_doBlack = true;
|
||||
_vm->_anim->_noPalChange = true;
|
||||
_vm->_graphics->readPict(filename, true);
|
||||
_vm->_anim->_noPalChange = false;
|
||||
_vm->_graphics->blackScreen();
|
||||
|
||||
Common::File *tileFile = tileFile = _resource->openDataFile(showsolution ? "P:TileSolution" : "P:Tile");
|
||||
Common::File *tileFile = _vm->_resource->openDataFile(showSolution ? "P:TileSolution" : "P:Tile");
|
||||
|
||||
for (uint16 curBit = start; curBit < 16; curBit++)
|
||||
_tiles[curBit] = new Image(tileFile);
|
||||
|
||||
delete tileFile;
|
||||
|
||||
doTile(showsolution);
|
||||
_graphics->setPalette(_anim->_diffPalette, 256);
|
||||
doTile(showSolution);
|
||||
_vm->_graphics->setPalette(_vm->_anim->_diffPalette, 256);
|
||||
}
|
||||
|
||||
/**
|
||||
* Does the scrolling for the tiles on the tile puzzle.
|
||||
*/
|
||||
void LabEngine::doTileScroll(uint16 col, uint16 row, uint16 scrolltype) {
|
||||
void TilePuzzle::doTileScroll(uint16 col, uint16 row, uint16 scrolltype) {
|
||||
int16 dX = 0, dY = 0, dx = 0, dy = 0, sx = 0, sy = 0;
|
||||
uint16 last = 0;
|
||||
|
||||
if (scrolltype == LEFTSCROLL) {
|
||||
dX = _utils->vgaScaleX(5);
|
||||
sx = _utils->vgaScaleX(5);
|
||||
dX = _vm->_utils->vgaScaleX(5);
|
||||
sx = _vm->_utils->vgaScaleX(5);
|
||||
last = 6;
|
||||
} else if (scrolltype == RIGHTSCROLL) {
|
||||
dX = _utils->vgaScaleX(-5);
|
||||
dx = _utils->vgaScaleX(-5);
|
||||
sx = _utils->vgaScaleX(5);
|
||||
dX = _vm->_utils->vgaScaleX(-5);
|
||||
dx = _vm->_utils->vgaScaleX(-5);
|
||||
sx = _vm->_utils->vgaScaleX(5);
|
||||
last = 6;
|
||||
} else if (scrolltype == UPSCROLL) {
|
||||
dY = _utils->vgaScaleY(5);
|
||||
sy = _utils->vgaScaleY(5);
|
||||
dY = _vm->_utils->vgaScaleY(5);
|
||||
sy = _vm->_utils->vgaScaleY(5);
|
||||
last = 5;
|
||||
} else if (scrolltype == DOWNSCROLL) {
|
||||
dY = _utils->vgaScaleY(-5);
|
||||
dy = _utils->vgaScaleY(-5);
|
||||
sy = _utils->vgaScaleY(5);
|
||||
dY = _vm->_utils->vgaScaleY(-5);
|
||||
dy = _vm->_utils->vgaScaleY(-5);
|
||||
sy = _vm->_utils->vgaScaleY(5);
|
||||
last = 5;
|
||||
}
|
||||
|
||||
sx += _utils->svgaCord(2);
|
||||
sx += _vm->_utils->svgaCord(2);
|
||||
|
||||
uint16 x1 = _utils->vgaScaleX(100) + (col * _utils->vgaScaleX(30)) + dx;
|
||||
uint16 y1 = _utils->vgaScaleY(25) + (row * _utils->vgaScaleY(25)) + dy;
|
||||
uint16 x1 = _vm->_utils->vgaScaleX(100) + (col * _vm->_utils->vgaScaleX(30)) + dx;
|
||||
uint16 y1 = _vm->_utils->vgaScaleY(25) + (row * _vm->_utils->vgaScaleY(25)) + dy;
|
||||
|
||||
byte *buffer = new byte[_tiles[1]->_width * _tiles[1]->_height * 2L];
|
||||
|
||||
for (uint16 i = 0; i < last; i++) {
|
||||
waitTOF();
|
||||
scrollRaster(dX, dY, x1, y1, x1 + _utils->vgaScaleX(28) + sx, y1 + _utils->vgaScaleY(23) + sy, buffer);
|
||||
_vm->waitTOF();
|
||||
scrollRaster(dX, dY, x1, y1, x1 + _vm->_utils->vgaScaleX(28) + sx, y1 + _vm->_utils->vgaScaleY(23) + sy, buffer);
|
||||
x1 += dX;
|
||||
y1 += dY;
|
||||
}
|
||||
@ -296,7 +309,7 @@ void LabEngine::doTileScroll(uint16 col, uint16 row, uint16 scrolltype) {
|
||||
/**
|
||||
* Changes the combination number of one of the slots
|
||||
*/
|
||||
void LabEngine::changeCombination(uint16 number) {
|
||||
void TilePuzzle::changeCombination(uint16 number) {
|
||||
const int solution[6] = { 0, 4, 0, 8, 7, 2 };
|
||||
|
||||
Image display;
|
||||
@ -310,22 +323,22 @@ void LabEngine::changeCombination(uint16 number) {
|
||||
|
||||
combnum = _combination[number];
|
||||
|
||||
display._imageData = _graphics->getCurrentDrawingBuffer();
|
||||
display._width = _graphics->_screenWidth;
|
||||
display._height = _graphics->_screenHeight;
|
||||
display._imageData = _vm->_graphics->getCurrentDrawingBuffer();
|
||||
display._width = _vm->_graphics->_screenWidth;
|
||||
display._height = _vm->_graphics->_screenHeight;
|
||||
|
||||
byte *buffer = new byte[_tiles[1]->_width * _tiles[1]->_height * 2L];
|
||||
|
||||
for (uint16 i = 1; i <= (_numberImages[combnum]->_height / 2); i++) {
|
||||
if (_isHiRes) {
|
||||
if (_vm->_isHiRes) {
|
||||
if (i & 1)
|
||||
waitTOF();
|
||||
_vm->waitTOF();
|
||||
} else
|
||||
waitTOF();
|
||||
_vm->waitTOF();
|
||||
|
||||
display._imageData = _graphics->getCurrentDrawingBuffer();
|
||||
_graphics->scrollDisplayY(2, _utils->vgaScaleX(COMBINATION_X[number]), _utils->vgaScaleY(65), _utils->vgaScaleX(COMBINATION_X[number]) + (_numberImages[combnum])->_width - 1, _utils->vgaScaleY(65) + (_numberImages[combnum])->_height, buffer);
|
||||
_numberImages[combnum]->blitBitmap(0, (_numberImages[combnum])->_height - (2 * i), &(display), _utils->vgaScaleX(COMBINATION_X[number]), _utils->vgaScaleY(65), (_numberImages[combnum])->_width, 2, false);
|
||||
display._imageData = _vm->_graphics->getCurrentDrawingBuffer();
|
||||
_vm->_graphics->scrollDisplayY(2, _vm->_utils->vgaScaleX(COMBINATION_X[number]), _vm->_utils->vgaScaleY(65), _vm->_utils->vgaScaleX(COMBINATION_X[number]) + (_numberImages[combnum])->_width - 1, _vm->_utils->vgaScaleY(65) + (_numberImages[combnum])->_height, buffer);
|
||||
_numberImages[combnum]->blitBitmap(0, (_numberImages[combnum])->_height - (2 * i), &(display), _vm->_utils->vgaScaleX(COMBINATION_X[number]), _vm->_utils->vgaScaleY(65), (_numberImages[combnum])->_width, 2, false);
|
||||
}
|
||||
|
||||
delete[] buffer;
|
||||
@ -334,39 +347,39 @@ void LabEngine::changeCombination(uint16 number) {
|
||||
unlocked &= (_combination[i] == solution[i]);
|
||||
|
||||
if (unlocked)
|
||||
_conditions->inclElement(COMBINATIONUNLOCKED);
|
||||
_vm->_conditions->inclElement(COMBINATIONUNLOCKED);
|
||||
else
|
||||
_conditions->exclElement(COMBINATIONUNLOCKED);
|
||||
_vm->_conditions->exclElement(COMBINATIONUNLOCKED);
|
||||
}
|
||||
|
||||
void LabEngine::scrollRaster(int16 dx, int16 dy, uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte *buffer) {
|
||||
void TilePuzzle::scrollRaster(int16 dx, int16 dy, uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte *buffer) {
|
||||
if (dx)
|
||||
_graphics->scrollDisplayX(dx, x1, y1, x2, y2, buffer);
|
||||
_vm->_graphics->scrollDisplayX(dx, x1, y1, x2, y2, buffer);
|
||||
|
||||
if (dy)
|
||||
_graphics->scrollDisplayY(dy, x1, y1, x2, y2, buffer);
|
||||
_vm->_graphics->scrollDisplayY(dy, x1, y1, x2, y2, buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the images of the combination lock to the display bitmap.
|
||||
*/
|
||||
void LabEngine::doCombination() {
|
||||
void TilePuzzle::doCombination() {
|
||||
for (uint16 i = 0; i <= 5; i++)
|
||||
_numberImages[_combination[i]]->drawImage(_utils->vgaScaleX(COMBINATION_X[i]), _utils->vgaScaleY(65));
|
||||
_numberImages[_combination[i]]->drawImage(_vm->_utils->vgaScaleX(COMBINATION_X[i]), _vm->_utils->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;
|
||||
void TilePuzzle::showCombination(const char *filename) {
|
||||
_vm->_anim->_doBlack = true;
|
||||
_vm->_anim->_noPalChange = true;
|
||||
_vm->_graphics->readPict(filename, true);
|
||||
_vm->_anim->_noPalChange = false;
|
||||
|
||||
_graphics->blackScreen();
|
||||
_vm->_graphics->blackScreen();
|
||||
|
||||
Common::File *numFile = _resource->openDataFile("P:Numbers");
|
||||
Common::File *numFile = _vm->_resource->openDataFile("P:Numbers");
|
||||
|
||||
for (uint16 CurBit = 0; CurBit < 10; CurBit++)
|
||||
_numberImages[CurBit] = new Image(numFile);
|
||||
@ -375,7 +388,33 @@ void LabEngine::showCombination(const char *filename) {
|
||||
|
||||
doCombination();
|
||||
|
||||
_graphics->setPalette(_anim->_diffPalette, 256);
|
||||
_vm->_graphics->setPalette(_vm->_anim->_diffPalette, 256);
|
||||
}
|
||||
|
||||
void TilePuzzle::save(Common::OutSaveFile *file) {
|
||||
uint16 i, j;
|
||||
|
||||
// Combination lock and tile stuff
|
||||
for (i = 0; i < 6; i++)
|
||||
file->writeByte(_combination[i]);
|
||||
|
||||
// Tiles
|
||||
for (i = 0; i < 4; i++)
|
||||
for (j = 0; j < 4; j++)
|
||||
file->writeUint16LE(_curTile[i][j]);
|
||||
}
|
||||
|
||||
void TilePuzzle::load(Common::InSaveFile *file) {
|
||||
uint16 i, j;
|
||||
|
||||
// Combination lock and tile stuff
|
||||
for (i = 0; i < 6; i++)
|
||||
_combination[i] = file->readByte();
|
||||
|
||||
// Tiles
|
||||
for (i = 0; i < 4; i++)
|
||||
for (j = 0; j < 4; j++)
|
||||
_curTile[i][j] = file->readUint16LE();
|
||||
}
|
||||
|
||||
} // End of namespace Lab
|
||||
|
70
engines/lab/tilepuzzle.h
Normal file
70
engines/lab/tilepuzzle.h
Normal file
@ -0,0 +1,70 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This code is based on Labyrinth of Time code with assistance of
|
||||
*
|
||||
* Copyright (c) 1993 Terra Nova Development
|
||||
* Copyright (c) 2004 The Wyrmkeep Entertainment Co.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LAB_TILEPUZZLE_H
|
||||
#define LAB_TILEPUZZLE_H
|
||||
|
||||
#include "common/savefile.h"
|
||||
|
||||
namespace Lab {
|
||||
|
||||
class LabEngine;
|
||||
|
||||
class TilePuzzle {
|
||||
private:
|
||||
LabEngine *_vm;
|
||||
Image *_tiles[16];
|
||||
Image *_numberImages[10];
|
||||
uint16 _curTile[4][4];
|
||||
byte _combination[6];
|
||||
|
||||
public:
|
||||
TilePuzzle(LabEngine *vm);
|
||||
virtual ~TilePuzzle();
|
||||
|
||||
void mouseTile(Common::Point pos);
|
||||
void showTile(const char *filename, bool showSolution);
|
||||
void mouseCombination(Common::Point pos);
|
||||
void showCombination(const char *filename);
|
||||
void save(Common::OutSaveFile *file);
|
||||
void load(Common::InSaveFile *file);
|
||||
|
||||
private:
|
||||
void doTile(bool showsolution);
|
||||
void doTileScroll(uint16 col, uint16 row, uint16 scrolltype);
|
||||
void changeCombination(uint16 number);
|
||||
void scrollRaster(int16 dx, int16 dy, uint16 x1, uint16 y1, uint16 x2, uint16 y2, byte *buffer);
|
||||
void doCombination();
|
||||
void changeTile(uint16 col, uint16 row);
|
||||
};
|
||||
|
||||
} // End of namespace Lab
|
||||
|
||||
#endif // LAB_TILEPUZZLE_H
|
Loading…
Reference in New Issue
Block a user