Ticket #4302: ihnm-palette.diff

File ihnm-palette.diff, 1.7 KB (added by eriktorbjorn, 15 years ago)

Patch against current SVN

  • engines/saga/gfx.cpp

     
    406406        int new_entry;
    407407        byte *ppal;
    408408        PalEntry *palE;
    409         double fpercent;
    410409
    411410        from = CLIP<int16>(from, 0, 256);
    412411        to   = CLIP<int16>(to,   0, 256);
     
    420419                        percent += 1 / x;
    421420        }
    422421
    423         // Exponential fade
    424422        percent = percent > 1.0 ? 1.0 : percent;
    425         fpercent = percent * percent;
    426 
    427423        if (from > to)
    428                 fpercent = 1.0 - fpercent;
     424                percent = 1.0 - percent;
    429425
     426        byte fadePal[PAL_ENTRIES * 4];
     427
    430428        // Use the correct percentage change per frame for each palette entry
    431         for (i = 0, ppal = _currentPal; i < PAL_ENTRIES; i++, ppal += 4) {
    432                 if (i < start || i >= start + numColors)
    433                         palE = &_globalPalette[i];
    434                 else
    435                         palE = &srcPal[i];
     429        for (i = start, ppal = fadePal + start * 4; i < start + numColors; i++, ppal += 4) {
     430                palE = &srcPal[i];
    436431
    437                 new_entry = (int)(palE->red * fpercent);
     432                new_entry = (int)(palE->red * percent);
    438433
    439434                if (new_entry < 0) {
    440435                        ppal[0] = 0;
     
    442437                        ppal[0] = (byte) new_entry;
    443438                }
    444439
    445                 new_entry = (int)(palE->green * fpercent);
     440                new_entry = (int)(palE->green * percent);
    446441
    447442                if (new_entry < 0) {
    448443                        ppal[1] = 0;
     
    450445                        ppal[1] = (byte) new_entry;
    451446                }
    452447
    453                 new_entry = (int)(palE->blue * fpercent);
     448                new_entry = (int)(palE->blue * percent);
    454449
    455450                if (new_entry < 0) {
    456451                        ppal[2] = 0;
     
    461456        }
    462457
    463458        // Color 0 should always be black in IHNM
    464         memset(&_currentPal[0 * 4], 0, 4);
     459        memset(&fadePal[0 * 4], 0, 4);
    465460
    466         _system->setPalette(_currentPal, 0, PAL_ENTRIES);
     461        _system->setPalette(&fadePal[start * 4], start, numColors);
    467462}
    468463
    469464#endif