# HG changeset patch # User tmmm # Date 1063258791 0 # Node ID a315234e11eb72b716ec2bbb6205abf349b57a55 # Parent 3c299d432ca44b6937757b569c4776c30bd7c6d0 forgot to apply the palette component lookup table diff -r 3c299d432ca4 -r a315234e11eb wc3movie.c --- a/wc3movie.c Wed Sep 10 22:44:30 2003 +0000 +++ b/wc3movie.c Thu Sep 11 05:39:51 2003 +0000 @@ -93,7 +93,7 @@ } Wc3DemuxContext; /* bizarre palette lookup table */ -const unsigned char wc3_pal_lookup[] = { +static const unsigned char wc3_pal_lookup[] = { 0x00, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0E, 0x10, 0x12, 0x13, 0x15, 0x16, 0x18, 0x19, 0x1A, 0x1C, 0x1D, 0x1F, 0x20, 0x21, 0x23, 0x24, 0x25, @@ -154,7 +154,7 @@ int current_palette = 0; int bytes_to_read; int i; - int temp; + unsigned char rotate; /* default context members */ wc3->width = WC3_DEFAULT_WIDTH; @@ -225,9 +225,11 @@ /* transform the current palette in place */ for (i = current_palette * PALETTE_SIZE; i < (current_palette + 1) * PALETTE_SIZE; i++) { - /* rotate each palette component left by 2 */ - temp = wc3->palettes[i] << 2; - wc3->palettes[i] = (temp & 0xFF) | (temp >> 8); + /* rotate each palette component left by 2 and use the result + * as an index into the color component table */ + rotate = ((wc3->palettes[i] << 2) & 0xFF) | + ((wc3->palettes[i] >> 6) & 0xFF); + wc3->palettes[i] = wc3_pal_lookup[rotate]; } current_palette++; break;