Ticket #8210: loom-palette-hack2.diff

File loom-palette-hack2.diff, 8.9 KB (added by eriktorbjorn, 22 years ago)

Patch against a May 2 CVS snapshot

  • scummvm/scumm/actor.cpp

    diff -ur ScummVM/scummvm/scumm/actor.cpp ScummVM+test/scummvm/scumm/actor.cpp
    old new  
    979979                        cr._zbuf = (byte)_vm->gdi._numZBuffer;
    980980
    981981                cr._shadow_mode = shadow_mode;
    982                 cr._shadow_table = _vm->_shadowPalette;
     982                if (_vm->_features & GF_SMALL_HEADER)
     983                        cr._shadow_table = NULL;
     984                else
     985                        cr._shadow_table = _vm->_shadowPalette;
    983986
    984987                cr.setCostume(costume);
    985988                cr.setPalette(palette);
  • scummvm/scumm/costume.cpp

    diff -ur ScummVM/scummvm/scumm/costume.cpp ScummVM+test/scummvm/scumm/costume.cpp
    old new  
    385385                do {
    386386                        if (color && y < scrheight) {
    387387                                pcolor = _palette[color];
    388                                 if (pcolor == 13) {
     388                                if (pcolor == 13 && _shadow_table)
    389389                                        pcolor = _shadow_table[*dst];
    390                                 }
    391390                                *dst = pcolor;
    392391                        }
    393392
     
    434433                do {
    435434                        if (color && y < scrheight && !(*mask & maskbit)) {
    436435                                pcolor = _palette[color];
    437                                 if (pcolor == 13)
     436                                if (pcolor == 13 && _shadow_table)
    438437                                        pcolor = _shadow_table[*dst];
    439438                                *dst = pcolor;
    440439                        }
     
    496495                do {
    497496                        if (color && y < scrheight && !((*mask | mask[_imgbufoffs]) & maskbit)) {
    498497                                pcolor = _palette[color];
    499                                 if (pcolor == 13)
     498                                if (pcolor == 13 && _shadow_table)
    500499                                        pcolor = _shadow_table[*dst];
    501500                                *dst = pcolor;
    502501                        }
     
    559558                        if (cost_scaleTable[_scaleIndexY++] < _scaleY) {
    560559                                if (color && y < _outheight && !((*mask | mask[_imgbufoffs]) & maskbit)) {
    561560                                        pcolor = _palette[color];
    562                                         if (pcolor == 13)
     561                                        if (pcolor == 13 && _shadow_table)
    563562                                                pcolor = _shadow_table[*dst];
    564563                                        *dst = pcolor;
    565564                                }
     
    620619                        if (cost_scaleTable[_scaleIndexY++] < _scaleY) {
    621620                                if (color && y < _outheight && !(*mask & maskbit)) {
    622621                                        pcolor = _palette[color];
    623                                         if (pcolor == 13)
     622                                        if (pcolor == 13 && _shadow_table)
    624623                                                pcolor = _shadow_table[*dst];
    625624                                        *dst = pcolor;
    626625                                }
     
    681680                        if (cost_scaleTable[_scaleIndexY++] < _scaleY) {
    682681                                if (color && y < _outheight) {
    683682                                        pcolor = _palette[color];
    684                                         if (pcolor == 13)
     683                                        if (pcolor == 13 && _shadow_table)
    685684                                                pcolor = _shadow_table[*dst];
    686685                                        *dst = pcolor;
    687686                                }
     
    737736                do {
    738737                        if (color && x >= 0 && x < _vm->_realWidth) {
    739738                                pcolor = _palette[color];
    740 /*                                if (pcolor == 13) {
    741                                         pcolor = _shadow_table[*dst];
    742                                 }*/
     739/*                                if (pcolor == 13 && _shadow_table)
     740                                        pcolor = _shadow_table[*dst];*/
    743741                                *dst = pcolor;
    744742                        }
    745743
     
    786784                do {
    787785                        if (color && x >=0 && x < _vm->_realWidth && !(*mask & maskbit)) {
    788786                                pcolor = _palette[color];
    789 /*                                if (pcolor == 13)
     787/*                                if (pcolor == 13 && _shadow_table)
    790788                                        pcolor = _shadow_table[*dst];*/
    791789                                *dst = pcolor;
    792790                        }
     
    851849                do {
    852850                        if (color && x >= 0 && x < _vm->_realWidth && !((*mask | mask[_imgbufoffs]) & maskbit)) {
    853851                                pcolor = _palette[color];
    854 /*                                if (pcolor == 13)
     852/*                                if (pcolor == 13 && _shadow_table)
    855853                                        pcolor = _shadow_table[*dst];*/
    856854                                *dst = pcolor;
    857855                        }
     
    914912                        if (cost_scaleTable[_scaleIndexY] < _scaleY) {
    915913                                if (color && _xpos >= 0 && _xpos < _vm->_realWidth && !((*mask | mask[_imgbufoffs]) & maskbit)) {
    916914                                        pcolor = _palette[color];
    917 /*                                        if (pcolor == 13)
     915/*                                        if (pcolor == 13 && _shadow_table)
    918916                                                pcolor = _shadow_table[*dst];*/
    919917                                        *dst = pcolor;
    920918                                }
     
    978976                        if (cost_scaleTable[_scaleIndexY] < _scaleY) {
    979977                                if (color && _xpos >= 0 && _xpos < _vm->_realWidth && !(*mask & maskbit)) {
    980978                                        pcolor = _palette[color];
    981 /*                                        if (pcolor == 13)
     979/*                                        if (pcolor == 13 && _shadow_table)
    982980                                                pcolor = _shadow_table[*dst];*/
    983981                                        *dst = pcolor;
    984982                                }
     
    10461044                        if (cost_scaleTable[_scaleIndexY] < _scaleY) {
    10471045                                if (color && _xpos >= 0 && _xpos < _vm->_realWidth) {
    10481046                                        pcolor = _palette[color];
    1049 /*                                        if (pcolor == 13)
     1047/*                                        if (pcolor == 13 && _shadow_table)
    10501048                                                pcolor = _shadow_table[*dst];*/
    10511049                                        *dst = pcolor;
    10521050                                }
  • scummvm/scumm/gfx.cpp

    diff -ur ScummVM/scummvm/scumm/gfx.cpp ScummVM+test/scummvm/scumm/gfx.cpp
    old new  
    10851085                                }
    10861086                                const register byte colors[2] = { color >> 4, color & 0xf };
    10871087                                for(z = 0; z < run; z++) {
    1088 
    1089                                         *(dst + y * _vm->_realWidth + x) = _vm->_shadowPalette[ colors[z&1] ];
     1088                                        *(dst + y * _vm->_realWidth + x) = colors[z&1];
    10901089
    10911090                                        y++;
    10921091                                        if(y >= height) {
     
    11161115                        }
    11171116                       
    11181117                        for(z = 0; z < run; z++) {
    1119                                 *(dst + y * _vm->_realWidth + x) = _vm->_shadowPalette[color & 0xf];
     1118                                *(dst + y * _vm->_realWidth + x) = color & 0xf;
    11201119
    11211120                                y++;
    11221121                                if(y >= height) {
     
    12221221                                if (run == 0) {
    12231222                                        run = *src++;
    12241223                                }
    1225                                 color = _vm->_shadowPalette[data & 0x0f];
     1224                                color = data & 0x0f;
    12261225                        }
    12271226                        if (!dither) {
    12281227                                *ptr_dither_table = color;
     
    12471246                                if (run == 0) {
    12481247                                        run = *src++;
    12491248                                }
    1250                                 color = _vm->_shadowPalette[data & 0x0f];
     1249                                color = data & 0x0f;
    12511250                        }
    12521251                        if (!dither) {
    12531252                                *ptr_dither_table = color;
     
    26652664#pragma mark --- Palette ---
    26662665#pragma mark -
    26672666
     2667void Scumm::setupEGAPalette() {
     2668        setPalColor( 0,   0,   0,   0);
     2669        setPalColor( 1,   0,   0, 168);
     2670        setPalColor( 2,   0, 168,   0);
     2671        setPalColor( 3,   0, 168, 168);
     2672        setPalColor( 4, 168,   0,   0);
     2673        setPalColor( 5, 168,   0, 168);
     2674        setPalColor( 6, 168,  84,   0);
     2675        setPalColor( 7, 168, 168, 168);
     2676        setPalColor( 8,  84,  84,  84);
     2677        setPalColor( 9,  84,  84, 168);
     2678        setPalColor(10,   0, 252,   0);
     2679        setPalColor(11,   0, 252, 252);
     2680        setPalColor(12, 252,  84,  84);
     2681        setPalColor(13, 252,   0, 252);
     2682        setPalColor(14, 252, 252,   0);
     2683        setPalColor(15, 252, 252, 252);
     2684}
     2685
    26682686void Scumm::setPaletteFromPtr(byte *ptr) {
    26692687        int i;
    26702688        byte *dest, r, g, b;
  • scummvm/scumm/saveload.cpp

    diff -ur ScummVM/scummvm/scumm/saveload.cpp ScummVM+test/scummvm/scumm/saveload.cpp
    old new  
    174174        initScreens(0, sb, _realWidth, sh);
    175175
    176176        _completeScreenRedraw = true;
    177        
    178         if (!(_features & GF_16COLOR))
     177
     178        if (_features & GF_16COLOR) {
     179                // HACK: There was a time when ScummVM didn't store the
     180                // palette in _currentPalette for 16-color games. To avoid
     181                // breaking savegame compatibility, always set up the default
     182                // palette after loading a game.
     183                setupEGAPalette();
     184                setDirtyColors(0, 15);
     185        } else
    179186                setDirtyColors(0, 255);
    180187
    181188        _lastCodePtr = NULL;
  • scummvm/scumm/script_v5.cpp

    diff -ur ScummVM/scummvm/scumm/script_v5.cpp ScummVM+test/scummvm/scumm/script_v5.cpp
    old new  
    16791679//                      printf("copyPalColor(%d, %d)\n", a, b);
    16801680//                      copyPalColor(a, b);
    16811681                        _shadowPalette[b] = a;
    1682                         if (!(_features & GF_16COLOR))
    1683                                 setDirtyColors(b, b);
     1682                        setDirtyColors(b, b);
    16841683                } else {
    16851684                        error("room-color is no longer a valid command");
    16861685                }
     
    17011700                        }
    17021701                        checkRange(256, 0, a, "o5_roomOps: 2: Illegal room color slot (%d)");
    17031702                        _shadowPalette[b] = a;
    1704                         if (!(_features & GF_16COLOR))
    1705                                 setDirtyColors(b, b);
     1703                        setDirtyColors(b, b);
    17061704                } else {
    17071705                        a = getVarOrDirectWord(0x80);
    17081706                        b = getVarOrDirectWord(0x40);
  • scummvm/scumm/scumm.h

    diff -ur ScummVM/scummvm/scumm/scumm.h ScummVM+test/scummvm/scumm/scumm.h
    old new  
    806806        void clampCameraPos(ScummPoint *pt);
    807807
    808808        byte *getPalettePtr();
     809        void setupEGAPalette();
    809810        void setPalette(int pal);
    810811        void setPaletteFromPtr(byte *ptr);
    811812        void setPaletteFromRes();
  • scummvm/scumm/scummvm.cpp

    diff -ur ScummVM/scummvm/scumm/scummvm.cpp ScummVM+test/scummvm/scumm/scummvm.cpp
    old new  
    544544        }
    545545
    546546        if (_features & GF_16COLOR) {
    547                 byte pal16[16 * 4] = {
    548                         0,   0,  0,  0,   0,   0,  168, 0,   0,   168, 0,  0,   0,   168, 168, 0,
    549                         168, 0,  0,  0,   168, 0,  168, 0,   168, 84,  0,  0,   168, 168, 168, 0,
    550                         84,  84, 84, 0,   84,  84, 168, 0,   0,   252, 0,  0,   0,   252, 252, 0,
    551                         252, 84, 84, 0,   252, 0,  252, 0,   252, 252, 0,  0,   252, 252, 252, 0
    552                 };
    553                 _system->set_palette(pal16, 0, 16);
     547                for (i = 0; i < 16; i++)
     548                        _shadowPalette[i] = i;
     549                setupEGAPalette();
    554550        }
    555551       
    556552        if (_features & GF_AFTER_V3)
     
    981977        }
    982978
    983979        if (!(_features & GF_AFTER_V7)) {
    984                 for (i = 0; i < 0x100; i++)
     980                for (i = 0; i < 256; i++)
    985981                        _shadowPalette[i] = i;
     982                if (_features & GF_SMALL_HEADER)
     983                        setDirtyColors(0, 255);
    986984        }
    987985
    988986        clearDrawObjectQueue();