aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/support/video_surface.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2016-04-29 23:22:42 -0400
committerPaul Gilbert2016-07-10 16:37:39 -0400
commit9205f22a43e6e5ae9a63012fe3ad545150a90b34 (patch)
treeb9a17eddcc42fdd8a3b4c875d7798b306493e340 /engines/titanic/support/video_surface.cpp
parent44d95d8e51562d40e5049e9c1c110e6ef9ace83e (diff)
downloadscummvm-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.cpp38
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);
}