diff options
author | Eugene Sandulenko | 2009-02-15 11:39:07 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2009-02-15 11:39:07 +0000 |
commit | e241843bec22600ab4ef98e7a085e82aac73fc93 (patch) | |
tree | 61a793884d3462e1feb80e80f202d8816d0c8ec4 /engines/sci/gfx/resource/sci_pal_1.cpp | |
parent | e9f742806362a84ffdb176a7414318dd2ab4df89 (diff) | |
download | scummvm-rg350-e241843bec22600ab4ef98e7a085e82aac73fc93.tar.gz scummvm-rg350-e241843bec22600ab4ef98e7a085e82aac73fc93.tar.bz2 scummvm-rg350-e241843bec22600ab4ef98e7a085e82aac73fc93.zip |
- Remove some unneeded files
- Mass rename .c to .cpp
svn-id: r38227
Diffstat (limited to 'engines/sci/gfx/resource/sci_pal_1.cpp')
-rw-r--r-- | engines/sci/gfx/resource/sci_pal_1.cpp | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/engines/sci/gfx/resource/sci_pal_1.cpp b/engines/sci/gfx/resource/sci_pal_1.cpp new file mode 100644 index 0000000000..2a127f4bb3 --- /dev/null +++ b/engines/sci/gfx/resource/sci_pal_1.cpp @@ -0,0 +1,178 @@ +/*************************************************************************** + pal_1.c Copyright (C) 2000 Christoph Reichenbach + + + This program may be modified and copied freely according to the terms of + the GNU general public license (GPL), as long as the above copyright + notice and the licensing information contained herein are preserved. + + Please refer to www.gnu.org for licensing details. + + This work is provided AS IS, without warranty of any kind, expressed or + implied, including but not limited to the warranties of merchantibility, + noninfringement, and fitness for a specific purpose. The author will not + be held liable for any damage caused by this work or derivatives of it. + + By using this source code, you agree to the licensing terms as stated + above. + + + Please contact the maintainer for bug reports or inquiries. + + Current Maintainer: + + Christoph Reichenbach (CR) <jameson@linuxgames.com> + +***************************************************************************/ +/* SCI1 palette resource defrobnicator */ + +#include "sci/include/sci_memory.h" +#include "sci/include/gfx_system.h" +#include "sci/include/gfx_resource.h" + +#define MAX_COLORS 256 +#define PALETTE_START 260 +#define COLOR_OK 0x01 + +#define SCI_PAL_FORMAT_VARIABLE_FLAGS 0 +#define SCI_PAL_FORMAT_CONSTANT_FLAGS 1 + +gfx_pixmap_color_t * +gfxr_read_pal11(int id, int *colors_nr, byte *resource, int size) +{ + int start_color = resource[25]; + int format = resource[32]; + int entry_size; + gfx_pixmap_color_t *retval; + byte *pal_data = resource + 37; + int _colors_nr = *colors_nr = getUInt16(resource + 29); + int i; + + switch (format) + { + case SCI_PAL_FORMAT_VARIABLE_FLAGS : + entry_size = 4; + break; + case SCI_PAL_FORMAT_CONSTANT_FLAGS : + entry_size = 3; + break; + } + + retval = (gfx_pixmap_color_t *) + sci_malloc(sizeof(gfx_pixmap_color_t) * (_colors_nr + start_color)); + memset(retval, 0, sizeof(gfx_pixmap_color_t) * (_colors_nr + start_color)); + + for (i = 0; i < start_color; i ++) + { + retval[i].global_index = GFX_COLOR_INDEX_UNMAPPED; + retval[i].r = 0; + retval[i].g = 0; + retval[i].b = 0; + } + for (i = start_color; i < start_color + _colors_nr; i ++) + { + switch (format) + { + case SCI_PAL_FORMAT_CONSTANT_FLAGS: + retval[i].global_index = GFX_COLOR_INDEX_UNMAPPED; + retval[i].r = pal_data[0]; + retval[i].g = pal_data[1]; + retval[i].b = pal_data[2]; + break; + case SCI_PAL_FORMAT_VARIABLE_FLAGS: + retval[i].global_index = GFX_COLOR_INDEX_UNMAPPED; + retval[i].r = pal_data[1]; + retval[i].g = pal_data[2]; + retval[i].b = pal_data[3]; + break; + } + pal_data += entry_size; + } + + return retval; +} + +gfx_pixmap_color_t * +gfxr_read_pal1(int id, int *colors_nr, byte *resource, int size) +{ + int counter = 0; + int pos; + unsigned int colors[MAX_COLORS] = {0}; + gfx_pixmap_color_t *retval; + + if (size < PALETTE_START + 4) { + GFXERROR("Palette resource too small in %04x\n", id); + return NULL; + } + + + pos = PALETTE_START; + + while (pos < size/* && resource[pos] == COLOR_OK && counter < MAX_COLORS*/) { + int color = resource[pos] + | (resource[pos + 1] << 8) + | (resource[pos + 2] << 16) + | (resource[pos + 3] << 24); + + pos += 4; + + colors[counter++] = color; + } + + if (counter < MAX_COLORS && resource[pos] != COLOR_OK) { + GFXERROR("Palette %04x uses unknown palette color prefix 0x%02x at offset 0x%04x\n", id, resource[pos], pos); + return NULL; + } + + if (counter < MAX_COLORS) { + GFXERROR("Palette %04x ends prematurely\n", id); + return NULL; + } + + retval = (gfx_pixmap_color_t*)sci_malloc(sizeof(gfx_pixmap_color_t) * counter); +#ifdef SATISFY_PURIFY + memset(retval, 0, sizeof(gfx_pixmap_color_t) * counter); +#endif + + *colors_nr = counter; + for (pos = 0; pos < counter; pos++) { + unsigned int color = colors[pos]; + + retval[pos].global_index = GFX_COLOR_INDEX_UNMAPPED; + retval[pos].r = (color >> 8) & 0xff; + retval[pos].g = (color >> 16) & 0xff; + retval[pos].b = (color >> 24) & 0xff; + } + + return retval; +} + +gfx_pixmap_color_t * +gfxr_read_pal1_amiga(int *colors_nr, FILE *f) +{ + int i; + gfx_pixmap_color_t *retval; + + retval = (gfx_pixmap_color_t*)sci_malloc(sizeof(gfx_pixmap_color_t) * 32); + + for (i = 0; i < 32; i++) { + int b1, b2; + + b1 = fgetc(f); + b2 = fgetc(f); + + if (b1 == EOF || b2 == EOF) { + GFXERROR("Palette file ends prematurely\n"); + return NULL; + } + + retval[i].global_index = GFX_COLOR_INDEX_UNMAPPED; + retval[i].r = (b1 & 0xf) * 0x11; + retval[i].g = ((b2 & 0xf0) >> 4) * 0x11; + retval[i].b = (b2 & 0xf) * 0x11; + } + + *colors_nr = 32; + return retval; +} + |