From 7d1aed7c83fb8e83fbd0dcb05a6446be881110ad Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Tue, 17 Mar 2009 03:58:57 +0000 Subject: Add support for loading palette files in the Amiga version of BRA. svn-id: r39467 --- engines/parallaction/disk.h | 2 +- engines/parallaction/disk_br.cpp | 63 +++++++++++++++++++++------------------- 2 files changed, 34 insertions(+), 31 deletions(-) (limited to 'engines') diff --git a/engines/parallaction/disk.h b/engines/parallaction/disk.h index 0c13827220..7bad24fad1 100644 --- a/engines/parallaction/disk.h +++ b/engines/parallaction/disk.h @@ -252,7 +252,7 @@ class AmigaDisk_br : public DosDisk_br { protected: Sprites* createSprites(Common::ReadStream &stream); Font *createFont(const char *name, Common::SeekableReadStream &stream); - void loadBackground(BackgroundInfo& info, Common::SeekableReadStream &stream); + void loadBackground(BackgroundInfo& info, const char *filename); void adjustForPalette(Graphics::Surface &surf, int move); public: diff --git a/engines/parallaction/disk_br.cpp b/engines/parallaction/disk_br.cpp index 9c99a34816..38ff0995d2 100644 --- a/engines/parallaction/disk_br.cpp +++ b/engines/parallaction/disk_br.cpp @@ -444,40 +444,50 @@ void AmigaDisk_br::init() { void AmigaDisk_br::adjustForPalette(Graphics::Surface &surf, int move) { uint size = surf.w * surf.h; byte *data = (byte*)surf.pixels; + // Color zero is used for transparency, and shouldn't be adjusted for (uint i = 0; i < size; i++, data++) { if (*data) *data += move; } } -void AmigaDisk_br::loadBackground(BackgroundInfo& info, Common::SeekableReadStream &stream) { +void AmigaDisk_br::loadBackground(BackgroundInfo& info, const char *filename) { + byte r,g,b; + byte *pal, *p; + Common::SeekableReadStream *stream; + uint i; - byte *pal; + stream = tryOpenFile("backs/" + Common::String(filename), ".ap"); + if (stream) { + // NOTE: Always 15 palette entries, start at zero or one? + uint32 size = stream->size() / 3; + for (i = 0; i < size; i++) { + r = stream->readByte() >> 2; + g = stream->readByte() >> 2; + b = stream->readByte() >> 2; + info.palette.setEntry(i, r, g, b); + } + delete stream; + } else { + p = _braAmigaFramesDefaultPalette; + for (i = 0; i < 16; i++) { + r = *p >> 2; + p++; + g = *p >> 2; + p++; + b = *p >> 2; + p++; + info.palette.setEntry(i, r, g, b); + } + } - Graphics::ILBMDecoder decoder(stream, info.bg, pal); + stream = openFile("backs/" + Common::String(filename), ".bkg"); + Graphics::ILBMDecoder decoder(*stream, info.bg, pal); decoder.decode(); - int i; - info.width = info.bg.w; info.height = info.bg.h; - /* TODO: support loading of additional palette (*.ap files), for locations which - have them. If an additional palette is present then it is used in place of - _braAmigaFramesDefaultPalette. - */ - byte r,g,b; - byte *p = _braAmigaFramesDefaultPalette; - for (i = 0; i < 16; i++) { - r = *p >> 2; - p++; - g = *p >> 2; - p++; - b = *p >> 2; - p++; - info.palette.setEntry(i, r, g, b); - } - p = pal; for (i = 16; i < 32; i++) { r = *p >> 2; @@ -523,12 +533,8 @@ void AmigaDisk_br::loadMask(const char *name, MaskBuffer &buffer) { void AmigaDisk_br::loadScenery(BackgroundInfo& info, const char* name, const char* mask, const char* path) { debugC(1, kDebugDisk, "AmigaDisk_br::loadScenery '%s', '%s' '%s'", name, mask, path); - Common::SeekableReadStream *stream; - if (name) { - stream = openFile("backs/" + Common::String(name), ".bkg"); - loadBackground(info, *stream); - delete stream; + loadBackground(info, name); } if (mask) { #if 0 @@ -548,10 +554,7 @@ void AmigaDisk_br::loadScenery(BackgroundInfo& info, const char* name, const cha void AmigaDisk_br::loadSlide(BackgroundInfo& info, const char *name) { debugC(1, kDebugDisk, "AmigaDisk_br::loadSlide '%s'", name); - - Common::SeekableReadStream *stream = openFile("backs/" + Common::String(name), ".bkg"); - loadBackground(info, *stream); - delete stream; + loadBackground(info, name); } GfxObj* AmigaDisk_br::loadStatic(const char* name) { -- cgit v1.2.3