Ticket #1745: smush.diff

File smush.diff, 4.8 KB (added by eriktorbjorn, 17 years ago)

Patch against an April 2 CVS snapshot

  • scumm/insane/insane.cpp

    diff -ur ScummVM-cvs20050402/scumm/insane/insane.cpp ScummVM-cvs20050402+hack/scumm/insane/insane.cpp
    old new  
    619619}
    620620
    621621void Insane::smush_warpMouse(int x, int y, int buttons) {
    622         _vm->_system->warpMouse(x, y);
     622        _player->warpMouse(x, y, buttons);
    623623}
    624624
    625625void Insane::putActors(void) {
  • scumm/smush/smush_player.cpp

    diff -ur ScummVM-cvs20050402/scumm/smush/smush_player.cpp ScummVM-cvs20050402+hack/scumm/smush/smush_player.cpp
    old new  
    696696                        _deltaPal[i] = b.getWord();
    697697                }
    698698                readPalette(_pal, b);
    699                 setPalette(_pal);
     699                setDirtyColors(0, 255);
    700700        } else if (b.getSize() == 6) {
    701701
    702702                b.getWord();
     
    706706                for (int i = 0; i < 0x300; i++) {
    707707                        _pal[i] = delta_color(_pal[i], _deltaPal[i]);
    708708                }
    709                 setPalette(_pal);
     709                setDirtyColors(0, 255);
    710710        } else {
    711711                error("SmushPlayer::handleDeltaPalette() Wrong size for DeltaPalette");
    712712        }
     
    720720                return;
    721721
    722722        readPalette(_pal, b);
    723         setPalette(_pal);
     723        setDirtyColors(0, 255);
    724724}
    725725
    726726void smush_decode_codec1(byte *dst, byte *src, int left, int top, int height, int width, int dstWidth);
     
    974974        b.getWord();
    975975        if (!_skipPalette) {
    976976                readPalette(_pal, b);
    977                 setPalette(_pal);
     977                setDirtyColors(0, 255);
    978978        }
    979979}
    980980
     
    10601060}
    10611061
    10621062void SmushPlayer::setPalette(const byte *palette) {
    1063         byte palette_colors[1024];
    1064         byte *p = palette_colors;
    1065 
    1066         for (int i = 0; i != 256; ++i) {
    1067                 *p++ = _pal[i * 3 + 0] = *palette++; // red
    1068                 *p++ = _pal[i * 3 + 1] = *palette++; // green
    1069                 *p++ = _pal[i * 3 + 2] = *palette++; // blue
    1070                 *p++ = 0;
    1071         }
    1072 
    1073         _vm->_system->setPalette(palette_colors, 0, 256);
     1063        memcpy(_pal, palette, 0x300);
     1064        setDirtyColors(0, 255);
    10741065}
    10751066
    10761067void SmushPlayer::setPaletteValue(int n, byte r, byte g, byte b) {
    10771068        _pal[n * 3 + 0] = r;
    10781069        _pal[n * 3 + 1] = g;
    10791070        _pal[n * 3 + 2] = b;
     1071        setDirtyColors(n, n);
     1072}
     1073
     1074void SmushPlayer::setDirtyColors(int min, int max) {
     1075        if (_palDirtyMin > min)
     1076                _palDirtyMin = min;
     1077        if (_palDirtyMax < max)
     1078                _palDirtyMax = max;
     1079}
    10801080
    1081         _vm->_system->setPalette(_pal, n, 1);
     1081void SmushPlayer::warpMouse(int x, int y, int buttons) {
     1082        _warpNeeded = true;
     1083        _warpX = x;
     1084        _warpY = y;
     1085        _warpButtons = buttons;
    10821086}
    10831087
    10841088void SmushPlayer::updateScreen() {
     
    11341138#endif
    11351139
    11361140        uint32 end_time, start_time = _vm->_system->getMillis();
    1137         _vm->_system->copyRectToScreen(_dst, _width, 0, 0, _width, _height);
    11381141        _updateNeeded = true;
    11391142        end_time = _vm->_system->getMillis();
    11401143        debugC(DEBUG_SMUSH, "Smush stats: updateScreen( %03d )", end_time - start_time);
     
    12281231        tryCmpFile(filename);
    12291232
    12301233        _updateNeeded = false;
     1234        _warpNeeded = false;
     1235        _palDirtyMin = 256;
     1236        _palDirtyMax = -1;
    12311237       
    12321238        // Hide mouse
    12331239        bool oldMouseState = _vm->_system->showMouse(false);
     
    12431249        }
    12441250
    12451251        for (;;) {
     1252                if (_warpNeeded) {
     1253                        _vm->_system->warpMouse(_warpX, _warpY);
     1254                        _warpNeeded = false;
     1255                }
    12461256                _vm->parseEvents();
    12471257                _vm->processKbd(true);
     1258                if (_palDirtyMax >= _palDirtyMin) {
     1259                        byte palette_colors[1024];
     1260                        byte *p = palette_colors;
     1261
     1262                        for (int i = _palDirtyMin; i <= _palDirtyMax; i++) {
     1263                                byte *data = _pal + i * 3;
     1264
     1265                                *p++ = data[0];
     1266                                *p++ = data[1];
     1267                                *p++ = data[2];
     1268                                *p++ = 0;
     1269                        }
     1270
     1271                        _vm->_system->setPalette(palette_colors, _palDirtyMin, _palDirtyMax - _palDirtyMin + 1);
     1272
     1273                        _palDirtyMax = -1;
     1274                        _palDirtyMin = 256;
     1275                }
    12481276                if (_updateNeeded) {
    12491277                       
    12501278                        uint32 end_time, start_time;
    12511279                       
    12521280                        start_time = _vm->_system->getMillis();
     1281                        _vm->_system->copyRectToScreen(_dst, _width, 0, 0, _width, _height);
    12531282                        _vm->_system->updateScreen();
    12541283                        _updateNeeded = false;
    12551284#ifdef _WIN32_WCE
  • scumm/smush/smush_player.h

    diff -ur ScummVM-cvs20050402/scumm/smush/smush_player.h ScummVM-cvs20050402+hack/scumm/smush/smush_player.h
    old new  
    7373
    7474        byte *_dst;
    7575        bool _updateNeeded;
     76        bool _warpNeeded;
     77        int _palDirtyMin, _palDirtyMax;
     78        int _warpX, _warpY;
     79        int _warpButtons;
    7680        bool _insanity;
    7781        bool _middleAudio;
    7882        bool _skipPalette;
     
    8993        ~SmushPlayer();
    9094
    9195        void play(const char *filename, int32 offset = 0, int32 startFrame = 0);
     96        void warpMouse(int x, int y, int buttons);
    9297
    9398protected:
    9499        SmushFont *_sf[5];
     
    99104        void insanity(bool);
    100105        void setPalette(const byte *palette);
    101106        void setPaletteValue(int n, byte r, byte g, byte b);
     107        void setDirtyColors(int min, int max);
    102108        void seekSan(const char *file, int32 pos, int32 contFrame);
    103109        const char *getString(int id);
    104110