diff options
Diffstat (limited to 'engines/lab/map.cpp')
-rw-r--r-- | engines/lab/map.cpp | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/engines/lab/map.cpp b/engines/lab/map.cpp index 458ff215df..cb51a51fff 100644 --- a/engines/lab/map.cpp +++ b/engines/lab/map.cpp @@ -59,20 +59,15 @@ extern uint16 RoomNum; /*****************************************************************************/ void setAmigaPal(uint16 *pal, uint16 numcolors) { byte vgapal[16 * 3]; - uint16 counter, vgacount; + uint16 vgacount = 0; if (numcolors > 16) numcolors = 16; - vgacount = 0; - - for (counter = 0; counter < numcolors; counter++) { - vgapal[vgacount] = (byte)(((pal[counter] & 0xf00) >> 8) << 2); - vgacount++; - vgapal[vgacount] = (byte)(((pal[counter] & 0x0f0) >> 4) << 2); - vgacount++; - vgapal[vgacount] = (byte)(((pal[counter] & 0x00f)) << 2); - vgacount++; + for (uint16 counter = 0; counter < numcolors; counter++) { + vgapal[vgacount++] = (byte)(((pal[counter] & 0xf00) >> 8) << 2); + vgapal[vgacount++] = (byte)(((pal[counter] & 0x0f0) >> 4) << 2); + vgapal[vgacount++] = (byte)(((pal[counter] & 0x00f)) << 2); } writeColorRegsSmooth(vgapal, 0, 16); @@ -83,18 +78,39 @@ void setAmigaPal(uint16 *pal, uint16 numcolors) { /* Gets a font from disk and puts it into temporary memory. */ /*****************************************************************************/ bool getFont(const char *filename, TextFont *textfont) { - byte *fontbuffer; + byte **file = NULL; + char header[5]; + uint32 filesize, headersize = 4L + 2L + 256 * 3 + 4L; - fontbuffer = (byte *)stealBufMem(sizeOfFile(filename) - (sizeof(TextFont) + 4)); + file = g_music->newOpen(filename, filesize); g_music->checkMusic(); - if (fontbuffer == NULL) - return false; + if ((file != NULL) && (filesize > headersize)) { + byte *fontbuffer = (byte *)stealBufMem(filesize - (sizeof(TextFont) + 4)); + if (!fontbuffer) + return false; - return openFontMem(filename, textfont, fontbuffer); -} + header[4] = 0; + readBlock(&header, 4L, file); + + if (strcmp(header, "VGAF") == 0) { + textfont->DataLength = filesize - headersize; + readBlock(&(textfont->Height), 2L, file); + swapUShortPtr(&(textfont->Height), 1); + + readBlock(textfont->Widths, 256L, file); + readBlock(textfont->Offsets, 256L * 2L, file); + swapUShortPtr(textfont->Offsets, 256); + skip(file, 4L); + textfont->data = fontbuffer; + readBlock(textfont->data, textfont->DataLength, file); + return true; + } + } + return false; +} /*****************************************************************************/ |