LAB: Image accepts a Common::File now
This commit is contained in:
parent
359eda3b97
commit
8f4d9c9c05
5 changed files with 59 additions and 117 deletions
|
@ -181,26 +181,10 @@ bool LabEngine::setUpScreens() {
|
||||||
if (!createScreen(_isHiRes))
|
if (!createScreen(_isHiRes))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Loads in the graphics for the movement control panel */
|
Common::File *controlFile = g_lab->_resource->openDataFile("P:Control");
|
||||||
Common::File file;
|
|
||||||
file.open(translateFileName("P:Control"));
|
|
||||||
if (!file.isOpen())
|
|
||||||
warning("setUpScreens couldn't open %s", translateFileName("P:Control"));
|
|
||||||
|
|
||||||
if (file.err() || file.size() == 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
byte *movePanelBuffer;
|
|
||||||
if (!(movePanelBuffer = (byte *)calloc(file.size(), 1)))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
file.read(movePanelBuffer, file.size());
|
|
||||||
file.close();
|
|
||||||
|
|
||||||
byte *buffer = movePanelBuffer;
|
|
||||||
|
|
||||||
for (uint16 i = 0; i < 20; i++)
|
for (uint16 i = 0; i < 20; i++)
|
||||||
_moveImages[i] = new Image(&buffer);
|
_moveImages[i] = new Image(controlFile);
|
||||||
|
delete controlFile;
|
||||||
|
|
||||||
/* Creates the gadgets for the movement control panel */
|
/* Creates the gadgets for the movement control panel */
|
||||||
uint16 y = VGAScaleY(173) - SVGACord(2);
|
uint16 y = VGAScaleY(173) - SVGACord(2);
|
||||||
|
@ -247,25 +231,11 @@ bool LabEngine::setUpScreens() {
|
||||||
curGadget->NextGadget = createButton(289, y, 9, 0, _moveImages[10], _moveImages[11]);
|
curGadget->NextGadget = createButton(289, y, 9, 0, _moveImages[10], _moveImages[11]);
|
||||||
}
|
}
|
||||||
|
|
||||||
file.open(translateFileName("P:Inv"));
|
Common::File *invFile = g_lab->_resource->openDataFile("P:Inv");
|
||||||
if (!file.isOpen())
|
|
||||||
warning("setUpScreens couldn't open %s", translateFileName("P:Inv"));
|
|
||||||
|
|
||||||
if (file.err() || file.size() == 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
byte *invPanelBuffer;
|
|
||||||
if (!(invPanelBuffer = (byte *)calloc(file.size(), 1)))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
file.read(invPanelBuffer, file.size());
|
|
||||||
file.close();
|
|
||||||
|
|
||||||
buffer = invPanelBuffer;
|
|
||||||
|
|
||||||
if (getPlatform() == Common::kPlatformWindows) {
|
if (getPlatform() == Common::kPlatformWindows) {
|
||||||
for (uint16 imgIdx = 0; imgIdx < 10; imgIdx++)
|
for (uint16 imgIdx = 0; imgIdx < 10; imgIdx++)
|
||||||
_invImages[imgIdx] = new Image(&buffer);
|
_invImages[imgIdx] = new Image(invFile);
|
||||||
|
|
||||||
_invGadgetList = createButton(24, y, 0, 'm', _invImages[0], _invImages[1]);
|
_invGadgetList = createButton(24, y, 0, 'm', _invImages[0], _invImages[1]);
|
||||||
Gadget *curGadget = _invGadgetList;
|
Gadget *curGadget = _invGadgetList;
|
||||||
|
@ -285,7 +255,7 @@ bool LabEngine::setUpScreens() {
|
||||||
curGadget = curGadget->NextGadget;
|
curGadget = curGadget->NextGadget;
|
||||||
} else {
|
} else {
|
||||||
for (uint16 imgIdx = 0; imgIdx < 6; imgIdx++)
|
for (uint16 imgIdx = 0; imgIdx < 6; imgIdx++)
|
||||||
_invImages[imgIdx] = new Image(&buffer);
|
_invImages[imgIdx] = new Image(invFile);
|
||||||
|
|
||||||
_invGadgetList = createButton(58, y, 0, 0, _invImages[0], _invImages[1]);
|
_invGadgetList = createButton(58, y, 0, 0, _invImages[0], _invImages[1]);
|
||||||
Gadget *curGadget = _invGadgetList;
|
Gadget *curGadget = _invGadgetList;
|
||||||
|
@ -301,6 +271,8 @@ bool LabEngine::setUpScreens() {
|
||||||
curGadget = curGadget->NextGadget;
|
curGadget = curGadget->NextGadget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete invFile;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,21 +36,17 @@ namespace Lab {
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Reads in an image from disk. */
|
/* Reads in an image from disk. */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
Image::Image(byte **buffer) {
|
Image::Image(Common::File *s) {
|
||||||
uint32 size;
|
_width = s->readUint16LE();
|
||||||
|
_height = s->readUint16LE();
|
||||||
|
s->skip(4);
|
||||||
|
|
||||||
_width = READ_LE_UINT16(*buffer);
|
uint32 size = _width * _height;
|
||||||
_height = READ_LE_UINT16(*buffer + 2);
|
if (size & 1)
|
||||||
|
|
||||||
*buffer += 8; /* sizeof(struct Image); */
|
|
||||||
|
|
||||||
size = _width * _height;
|
|
||||||
|
|
||||||
if (1L & size)
|
|
||||||
size++;
|
size++;
|
||||||
|
|
||||||
_imageData = (byte *)(*buffer);
|
_imageData = new byte[size]; // FIXME: Memory leak!
|
||||||
(*buffer) += size;
|
s->read(_imageData, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -41,7 +41,7 @@ public:
|
||||||
|
|
||||||
Image() : _width(0), _height(0), _imageData(0) {}
|
Image() : _width(0), _height(0), _imageData(0) {}
|
||||||
Image(int w, int h, byte *d) : _width(w), _height(h), _imageData(d) {}
|
Image(int w, int h, byte *d) : _width(w), _height(h), _imageData(d) {}
|
||||||
Image(byte **buffer);
|
Image(Common::File *s);
|
||||||
|
|
||||||
void drawImage(uint16 x, uint16 y);
|
void drawImage(uint16 x, uint16 y);
|
||||||
void drawMaskImage(uint16 x, uint16 y);
|
void drawMaskImage(uint16 x, uint16 y);
|
||||||
|
|
|
@ -129,43 +129,37 @@ static uint16 mapScaleY(uint16 y) {
|
||||||
/* Loads in the map data. */
|
/* Loads in the map data. */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
static bool loadMapData() {
|
static bool loadMapData() {
|
||||||
byte **buffer;
|
|
||||||
uint32 Size;
|
|
||||||
Gadget *gptr;
|
Gadget *gptr;
|
||||||
uint16 counter;
|
uint16 counter;
|
||||||
|
|
||||||
resetBuffer(); /* Make images load into start of buffer */
|
Common::File *mapImages = g_lab->_resource->openDataFile("P:MapImage");
|
||||||
buffer = g_lab->_music->newOpen("P:MapImage", Size);
|
|
||||||
|
|
||||||
if (!buffer)
|
Map = new Image(mapImages);
|
||||||
return false;
|
|
||||||
|
|
||||||
stealBufMem(Size); /* Now freeze that buffer from further use */
|
Room = new Image(mapImages);
|
||||||
|
UpArrowRoom = new Image(mapImages);
|
||||||
|
DownArrowRoom = new Image(mapImages);
|
||||||
|
HRoom = new Image(mapImages);
|
||||||
|
VRoom = new Image(mapImages);
|
||||||
|
Maze = new Image(mapImages);
|
||||||
|
HugeMaze = new Image(mapImages);
|
||||||
|
|
||||||
Map = new Image(buffer);
|
MapNorth = new Image(mapImages);
|
||||||
|
MapEast = new Image(mapImages);
|
||||||
|
MapSouth = new Image(mapImages);
|
||||||
|
MapWest = new Image(mapImages);
|
||||||
|
|
||||||
Room = new Image(buffer);
|
Path = new Image(mapImages);
|
||||||
UpArrowRoom = new Image(buffer);
|
Bridge = new Image(mapImages);
|
||||||
DownArrowRoom = new Image(buffer);
|
|
||||||
HRoom = new Image(buffer);
|
|
||||||
VRoom = new Image(buffer);
|
|
||||||
Maze = new Image(buffer);
|
|
||||||
HugeMaze = new Image(buffer);
|
|
||||||
|
|
||||||
MapNorth = new Image(buffer);
|
Back = new Image(mapImages);
|
||||||
MapEast = new Image(buffer);
|
BackAlt = new Image(mapImages);
|
||||||
MapSouth = new Image(buffer);
|
Up = new Image(mapImages);
|
||||||
MapWest = new Image(buffer);
|
UpAlt = new Image(mapImages);
|
||||||
|
Down = new Image(mapImages);
|
||||||
|
DownAlt = new Image(mapImages);
|
||||||
|
|
||||||
Path = new Image(buffer);
|
delete mapImages;
|
||||||
Bridge = new Image(buffer);
|
|
||||||
|
|
||||||
Back = new Image(buffer);
|
|
||||||
BackAlt = new Image(buffer);
|
|
||||||
Up = new Image(buffer);
|
|
||||||
UpAlt = new Image(buffer);
|
|
||||||
Down = new Image(buffer);
|
|
||||||
DownAlt = new Image(buffer);
|
|
||||||
|
|
||||||
backgadget._image = Back;
|
backgadget._image = Back;
|
||||||
backgadget._altImage = BackAlt;
|
backgadget._altImage = BackAlt;
|
||||||
|
|
|
@ -137,8 +137,6 @@ static void doCombination() {
|
||||||
/* Reads in a backdrop picture. */
|
/* Reads in a backdrop picture. */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
void showCombination(const char *filename) {
|
void showCombination(const char *filename) {
|
||||||
byte **buffer;
|
|
||||||
|
|
||||||
resetBuffer();
|
resetBuffer();
|
||||||
g_lab->_anim->_doBlack = true;
|
g_lab->_anim->_doBlack = true;
|
||||||
g_lab->_anim->_noPalChange = true;
|
g_lab->_anim->_noPalChange = true;
|
||||||
|
@ -147,10 +145,12 @@ void showCombination(const char *filename) {
|
||||||
|
|
||||||
blackScreen();
|
blackScreen();
|
||||||
|
|
||||||
buffer = g_lab->_music->newOpen("P:Numbers");
|
Common::File *numFile = g_lab->_resource->openDataFile("P:Numbers");
|
||||||
|
|
||||||
for (uint16 CurBit = 0; CurBit < 10; CurBit++)
|
for (uint16 CurBit = 0; CurBit < 10; CurBit++)
|
||||||
Images[CurBit] = new Image(buffer);
|
Images[CurBit] = new Image(numFile);
|
||||||
|
|
||||||
|
delete numFile;
|
||||||
|
|
||||||
allocFile((void **)&g_lab->_tempScrollData, Images[0]->_width * Images[0]->_height * 2L, "tempdata");
|
allocFile((void **)&g_lab->_tempScrollData, Images[0]->_width * Images[0]->_height * 2L, "tempdata");
|
||||||
|
|
||||||
|
@ -279,8 +279,7 @@ static void doTile(bool showsolution) {
|
||||||
/* Reads in a backdrop picture. */
|
/* Reads in a backdrop picture. */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
void showTile(const char *filename, bool showsolution) {
|
void showTile(const char *filename, bool showsolution) {
|
||||||
uint16 start;
|
uint16 start = showsolution ? 0 : 1;
|
||||||
byte **buffer;
|
|
||||||
|
|
||||||
resetBuffer();
|
resetBuffer();
|
||||||
g_lab->_anim->_doBlack = true;
|
g_lab->_anim->_doBlack = true;
|
||||||
|
@ -289,19 +288,12 @@ void showTile(const char *filename, bool showsolution) {
|
||||||
g_lab->_anim->_noPalChange = false;
|
g_lab->_anim->_noPalChange = false;
|
||||||
blackScreen();
|
blackScreen();
|
||||||
|
|
||||||
if (showsolution) {
|
Common::File *tileFile = tileFile = g_lab->_resource->openDataFile(showsolution ? "P:TileSolution" : "P:Tile");
|
||||||
start = 0;
|
|
||||||
buffer = g_lab->_music->newOpen("P:TileSolution");
|
|
||||||
} else {
|
|
||||||
start = 1;
|
|
||||||
buffer = g_lab->_music->newOpen("P:Tile");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!buffer)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (uint16 curBit = start; curBit < 16; curBit++)
|
for (uint16 curBit = start; curBit < 16; curBit++)
|
||||||
Tiles[curBit] = new Image(buffer);
|
Tiles[curBit] = new Image(tileFile);
|
||||||
|
|
||||||
|
delete tileFile;
|
||||||
|
|
||||||
allocFile((void **)&g_lab->_tempScrollData, Tiles[1]->_width * Tiles[1]->_height * 2L, "tempdata");
|
allocFile((void **)&g_lab->_tempScrollData, Tiles[1]->_width * Tiles[1]->_height * 2L, "tempdata");
|
||||||
|
|
||||||
|
@ -506,7 +498,6 @@ void doWestPaper() {
|
||||||
/* Loads in the data for the journal. */
|
/* Loads in the data for the journal. */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
static bool loadJournalData() {
|
static bool loadJournalData() {
|
||||||
byte **buffer;
|
|
||||||
char filename[20];
|
char filename[20];
|
||||||
Gadget *TopGadget = &BackG;
|
Gadget *TopGadget = &BackG;
|
||||||
bool bridge, dirty, news, clean;
|
bool bridge, dirty, news, clean;
|
||||||
|
@ -543,17 +534,16 @@ static bool loadJournalData() {
|
||||||
journaltext = g_lab->_resource->getText(filename);
|
journaltext = g_lab->_resource->getText(filename);
|
||||||
journaltexttitle = g_lab->_resource->getText("Lab:Rooms/jt");
|
journaltexttitle = g_lab->_resource->getText("Lab:Rooms/jt");
|
||||||
|
|
||||||
buffer = g_lab->_music->newOpen("P:JImage");
|
Common::File *journalFile = g_lab->_resource->openDataFile("P:JImage");
|
||||||
|
|
||||||
if (!buffer)
|
BackG._image = new Image(journalFile);
|
||||||
return false;
|
BackG._altImage = new Image(journalFile);
|
||||||
|
ForwardG._image = new Image(journalFile);
|
||||||
|
ForwardG._altImage = new Image(journalFile);
|
||||||
|
CancelG._image = new Image(journalFile);
|
||||||
|
CancelG._altImage = new Image(journalFile);
|
||||||
|
|
||||||
BackG._image = new Image(buffer);
|
delete journalFile;
|
||||||
BackG._altImage = new Image(buffer);
|
|
||||||
ForwardG._image = new Image(buffer);
|
|
||||||
ForwardG._altImage = new Image(buffer);
|
|
||||||
CancelG._image = new Image(buffer);
|
|
||||||
CancelG._altImage = new Image(buffer);
|
|
||||||
|
|
||||||
BackG.KeyEquiv = VKEY_LTARROW;
|
BackG.KeyEquiv = VKEY_LTARROW;
|
||||||
ForwardG.KeyEquiv = VKEY_RTARROW;
|
ForwardG.KeyEquiv = VKEY_RTARROW;
|
||||||
|
@ -807,19 +797,9 @@ bool saveRestoreGame() {
|
||||||
/* Makes sure that the buttons are in memory. */
|
/* Makes sure that the buttons are in memory. */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
static void getMonImages() {
|
static void getMonImages() {
|
||||||
byte **buffer;
|
Common::File *buttonFile = g_lab->_resource->openDataFile("P:MonImage");
|
||||||
uint32 bufferSize;
|
MonButton = new Image(buttonFile);
|
||||||
|
delete buttonFile;
|
||||||
resetBuffer();
|
|
||||||
|
|
||||||
buffer = g_lab->_music->newOpen("P:MonImage", bufferSize);
|
|
||||||
|
|
||||||
if (!buffer)
|
|
||||||
return;
|
|
||||||
|
|
||||||
MonButton = new Image(buffer);
|
|
||||||
|
|
||||||
stealBufMem(bufferSize); /* Trick: protects the memory where the buttons are so they won't be over-written */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue