[Scummvm-cvs-logs] SF.net SVN: scummvm:[39467] scummvm/trunk/engines/parallaction

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Tue Mar 17 04:59:00 CET 2009


Revision: 39467
          http://scummvm.svn.sourceforge.net/scummvm/?rev=39467&view=rev
Author:   Kirben
Date:     2009-03-17 03:58:57 +0000 (Tue, 17 Mar 2009)

Log Message:
-----------
Add support for loading palette files in the Amiga version of BRA.

Modified Paths:
--------------
    scummvm/trunk/engines/parallaction/disk.h
    scummvm/trunk/engines/parallaction/disk_br.cpp

Modified: scummvm/trunk/engines/parallaction/disk.h
===================================================================
--- scummvm/trunk/engines/parallaction/disk.h	2009-03-17 03:32:03 UTC (rev 39466)
+++ scummvm/trunk/engines/parallaction/disk.h	2009-03-17 03:58:57 UTC (rev 39467)
@@ -252,7 +252,7 @@
 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:

Modified: scummvm/trunk/engines/parallaction/disk_br.cpp
===================================================================
--- scummvm/trunk/engines/parallaction/disk_br.cpp	2009-03-17 03:32:03 UTC (rev 39466)
+++ scummvm/trunk/engines/parallaction/disk_br.cpp	2009-03-17 03:58:57 UTC (rev 39467)
@@ -444,40 +444,50 @@
 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::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::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) {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list