mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-08 11:57:25 +00:00
SCI: Set first palette color when drawing a 1.1 pic
When drawing a pic while pal-very isn't active, SSCI 1.1 sets the first 255 palette colors, as opposed to skipping the first when normally inserting a palette. Without this, a palette cycle that includes the first color will permanently alter the system palette, such as in Hoyle4 when winning the Klondike game with certain table backgrounds. Fixes bugs #11164 and #11195
This commit is contained in:
parent
4a99c9e964
commit
3de471de36
@ -306,7 +306,7 @@ void GfxPalette::setEGA() {
|
||||
setOnScreen();
|
||||
}
|
||||
|
||||
void GfxPalette::set(Palette *newPalette, bool force, bool forceRealMerge) {
|
||||
void GfxPalette::set(Palette *newPalette, bool force, bool forceRealMerge, bool includeFirstColor) {
|
||||
uint32 systime = _sysPalette.timestamp;
|
||||
|
||||
if (force || newPalette->timestamp != systime) {
|
||||
@ -315,7 +315,7 @@ void GfxPalette::set(Palette *newPalette, bool force, bool forceRealMerge) {
|
||||
if ((forceRealMerge) || (_useMerging))
|
||||
_sysPaletteChanged |= merge(newPalette, force, forceRealMerge);
|
||||
else
|
||||
_sysPaletteChanged |= insert(newPalette, &_sysPalette);
|
||||
_sysPaletteChanged |= insert(newPalette, &_sysPalette, includeFirstColor && (_palVaryResourceId == -1));
|
||||
|
||||
// Adjust timestamp on newPalette, so it wont get merged/inserted w/o need
|
||||
newPalette->timestamp = _sysPalette.timestamp;
|
||||
@ -336,10 +336,10 @@ void GfxPalette::set(Palette *newPalette, bool force, bool forceRealMerge) {
|
||||
}
|
||||
}
|
||||
|
||||
bool GfxPalette::insert(Palette *newPalette, Palette *destPalette) {
|
||||
bool GfxPalette::insert(Palette *newPalette, Palette *destPalette, bool includeFirstColor) {
|
||||
bool paletteChanged = false;
|
||||
|
||||
for (int i = 1; i < 255; i++) {
|
||||
for (int i = (includeFirstColor ? 0 : 1); i < 255; i++) {
|
||||
if (newPalette->colors[i].used) {
|
||||
if ((newPalette->colors[i].r != destPalette->colors[i].r) ||
|
||||
(newPalette->colors[i].g != destPalette->colors[i].g) ||
|
||||
|
@ -52,8 +52,8 @@ public:
|
||||
bool setAmiga();
|
||||
void modifyAmigaPalette(const SciSpan<const byte> &data);
|
||||
void setEGA();
|
||||
void set(Palette *sciPal, bool force, bool forceRealMerge = false);
|
||||
bool insert(Palette *newPalette, Palette *destPalette);
|
||||
void set(Palette *sciPal, bool force, bool forceRealMerge = false, bool includeFirstColor = false);
|
||||
bool insert(Palette *newPalette, Palette *destPalette, bool includeFirstColor = false);
|
||||
bool merge(Palette *pFrom, bool force, bool forceRealMerge);
|
||||
uint16 matchColor(byte r, byte g, byte b);
|
||||
void getSys(Palette *pal);
|
||||
|
@ -127,7 +127,7 @@ void GfxPicture::drawSci11Vga() {
|
||||
if (has_cel) {
|
||||
// Create palette and set it
|
||||
_palette->createFromData(inbuffer.subspan(palette_data_ptr), &palette);
|
||||
_palette->set(&palette, true);
|
||||
_palette->set(&palette, true, false, true);
|
||||
|
||||
drawCelData(inbuffer, cel_headerPos, cel_RlePos, cel_LiteralPos, 0, 0, 0, 0, false);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user