diff options
-rw-r--r-- | engines/titanic/support/video_surface.cpp | 38 | ||||
-rw-r--r-- | engines/titanic/support/video_surface.h | 8 |
2 files changed, 21 insertions, 25 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); } diff --git a/engines/titanic/support/video_surface.h b/engines/titanic/support/video_surface.h index bf2a1a18f9..7521a53b4b 100644 --- a/engines/titanic/support/video_surface.h +++ b/engines/titanic/support/video_surface.h @@ -221,7 +221,8 @@ public: class OSVideoSurface : public CVideoSurface { friend class OSMovie; private: - static byte _palette[32][32]; + static byte _palette1[32][32]; + static byte _palette2[32][32]; /** * Setup the shading palettes @@ -231,7 +232,10 @@ public: /** * Setup statics */ - static void setup() { setupPalette(_palette, 0xff); } + static void setup() { + setupPalette(_palette1, 0xff); + setupPalette(_palette2, 0xe0); + } public: OSVideoSurface(CScreenManager *screenManager, DirectDrawSurface *surface); OSVideoSurface(CScreenManager *screenManager, const CResourceKey &key, bool flag = false); |