void ImageFile::loadPalette(Common::SeekableReadStream &stream) { // Check for palette uint16 width = stream.readUint16LE() + 1; uint16 height = stream.readUint16LE() + 1; byte paletteBase = stream.readByte(); byte rleEncoded = stream.readByte(); byte offsetX = stream.readByte(); byte offsetY = stream.readByte(); uint32 palSignature = 0; if ((width == 390) && (height == 2) && (!paletteBase) && (!rleEncoded) && (!offsetX) && (!offsetY)) { // We check for these specific values // We can't do "width * height", because at least the first German+Spanish menu bar is 60 x 13 // which is 780, which is the size of the palette. We obviously don't want to detect it as palette. // As another security measure, we also check for the signature text palSignature = stream.readUint32BE(); if (palSignature != MKTAG('V', 'G', 'A', ' ')) { // signature mismatch, rewind stream.seek(-12, SEEK_CUR); return; } // Found palette, so read it in stream.seek(8, SEEK_CUR); // Skip over the rest of the signature text "VGA palette" for (int idx = 0; idx < PALETTE_SIZE; ++idx) _palette[idx] = VGA_COLOR_TRANS(stream.readByte()); } else { // Not a palette, so rewind to start of frame data for normal frame processing stream.seek(-8, SEEK_CUR); } }
void Screen::setIconPalette() { if (_vm->getGameID() == GType_MartianMemorandum) { for (int i = 0; i < 0x1B; i++) { _rawPalette[741 + i] = VGA_COLOR_TRANS(Martian::ICON_PALETTE[i]); } } }
void ImageFile::loadPalette(Common::SeekableReadStream &stream) { // Check for palette int v1 = stream.readUint16LE() + 1; int v2 = stream.readUint16LE() + 1; stream.skip(1); // Skip paletteBase byte bool rleEncoded = stream.readByte() == 1; int palSize = v1 * v2; if ((palSize - 12) == PALETTE_SIZE && !rleEncoded) { // Found palette, so read it in stream.seek(2 + 12, SEEK_CUR); for (int idx = 0; idx < PALETTE_SIZE; ++idx) _palette[idx] = VGA_COLOR_TRANS(stream.readByte()); } else { // Not a palette, so rewind to start of frame data for normal frame processing stream.seek(-6, SEEK_CUR); } }
void Screen::translatePalette(byte palette[PALETTE_SIZE]) { for (int idx = 0; idx < PALETTE_SIZE; ++idx) palette[idx] = VGA_COLOR_TRANS(palette[idx]); }
void Screen::loadRawPalette(Common::SeekableReadStream *stream) { stream->read(&_rawPalette[0], PALETTE_SIZE); for (byte *p = &_rawPalette[0]; p < &_rawPalette[PALETTE_SIZE]; ++p) *p = VGA_COLOR_TRANS(*p); }
void Screen::setManPalette() { for (int i = 0; i < 0x42; i++) { _rawPalette[672 + i] = VGA_COLOR_TRANS(_manPal[i]); } }