diff options
author | Paul Gilbert | 2016-04-29 23:22:42 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-07-10 16:37:39 -0400 |
commit | 9205f22a43e6e5ae9a63012fe3ad545150a90b34 (patch) | |
tree | b9a17eddcc42fdd8a3b4c875d7798b306493e340 /engines/titanic/support/video_surface.cpp | |
parent | 44d95d8e51562d40e5049e9c1c110e6ef9ace83e (diff) | |
download | scummvm-rg350-9205f22a43e6e5ae9a63012fe3ad545150a90b34.tar.gz scummvm-rg350-9205f22a43e6e5ae9a63012fe3ad545150a90b34.tar.bz2 scummvm-rg350-9205f22a43e6e5ae9a63012fe3ad545150a90b34.zip |
TITANIC: Fix generation of shading palettes
Diffstat (limited to 'engines/titanic/support/video_surface.cpp')
-rw-r--r-- | engines/titanic/support/video_surface.cpp | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/engines/titanic/support/video_surface.cpp b/engines/titanic/support/video_surface.cpp index 6ce473172b..cdf9e228a7 100644 --- a/engines/titanic/support/video_surface.cpp +++ b/engines/titanic/support/video_surface.cpp @@ -164,7 +164,8 @@ bool CVideoSurface::proc45() { /*------------------------------------------------------------------------*/ -byte OSVideoSurface::_palette[32][32]; +byte OSVideoSurface::_palette1[32][32]; +byte OSVideoSurface::_palette2[32][32]; OSVideoSurface::OSVideoSurface(CScreenManager *screenManager, DirectDrawSurface *surface) : CVideoSurface(screenManager) { @@ -185,27 +186,18 @@ OSVideoSurface::OSVideoSurface(CScreenManager *screenManager, const CResourceKey } void OSVideoSurface::setupPalette(byte palette[32][32], byte val) { - int incr = 0; - for (uint idx1 = 0; idx1 < 32; ++idx1) { - for (uint idx2 = 0, base = 0; idx2 < 32; ++idx2, base += incr) { + for (uint idx2 = 0, base = 0; idx2 < 32; ++idx2, base += idx1) { int64 v = 0x84210843; v *= base; - v = ((v >> 32) + base) >> 4; - v += (v >> 31); + uint v2 = (v >> 36); + v = ((v2 >> 31) + v2) & 0xff; palette[idx1][idx2] = v; - if (val != 0xff) { - v &= 0xff; - if (v != idx2) { - v = 0x80808081 * val * v * val; - v = (v >> 32) + incr; - incr = idx1; - - v >>= 7; - v += (v >> 31); - palette[idx1][idx2] = v; - } + if (val != 0xff && v != idx2) { + v = 0x80808081 * v * val; + v2 = v >> 39; + palette[idx1][idx2] = (v2 >> 31) + v2; } } } @@ -376,16 +368,16 @@ void OSVideoSurface::changePixel(uint16 *pixelP, uint16 *color, byte srcVal, boo byte r, g, b; format.colorToRGB(*color, r, g, b); if (remapFlag) { - r = _palette[31 - srcVal][r >> 2] << 2; - g = _palette[31 - srcVal][g >> 2] << 2; - b = _palette[31 - srcVal][b >> 2] << 2; + r = _palette1[31 - srcVal][r >> 2] << 2; + g = _palette1[31 - srcVal][g >> 2] << 2; + b = _palette1[31 - srcVal][b >> 2] << 2; } byte r2, g2, b2; format.colorToRGB(*pixelP, r2, g2, b2); - r2 = _palette[srcVal][r2 >> 2] << 2; - g2 = _palette[srcVal][g2 >> 2] << 2; - b2 = _palette[srcVal][b2 >> 2] << 2; + r2 = _palette1[srcVal][r2 >> 2] << 2; + g2 = _palette1[srcVal][g2 >> 2] << 2; + b2 = _palette1[srcVal][b2 >> 2] << 2; *pixelP = format.RGBToColor(r + r2, g + g2, b + b2); } |