[Scummvm-cvs-logs] SF.net SVN: scummvm:[41746] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Mon Jun 22 04:37:58 CEST 2009


Revision: 41746
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41746&view=rev
Author:   lordhoto
Date:     2009-06-22 02:37:57 +0000 (Mon, 22 Jun 2009)

Log Message:
-----------
- Fixed regression in Screen::fadeToBlack
- Fixed some palette regressions in Kyra1 Amiga (only the intro works currently)

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/screen.cpp
    scummvm/trunk/engines/kyra/screen.h
    scummvm/trunk/engines/kyra/screen_lol.cpp
    scummvm/trunk/engines/kyra/sequences_lok.cpp

Modified: scummvm/trunk/engines/kyra/screen.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen.cpp	2009-06-22 02:37:41 UTC (rev 41745)
+++ scummvm/trunk/engines/kyra/screen.cpp	2009-06-22 02:37:57 UTC (rev 41746)
@@ -126,11 +126,9 @@
 
 	_screenPalette = new Palette(256);
 	assert(_screenPalette);
-	_tempPalette = new Palette(_screenPalette->getNumColors());
-	assert(_tempPalette);
 
 	if (_vm->gameFlags().platform == Common::kPlatformAmiga) {
-		for (int i = 0; i < 7; ++i) {
+		for (int i = 0; i < 12; ++i) {
 			_palettes[i] = new Palette(32);
 			assert(_palettes[i]);
 		}
@@ -141,6 +139,9 @@
 		}
 	}
 
+	_internFadePalette = new Palette(_palettes[0]->getNumColors());
+	assert(_internFadePalette);
+
 	setScreenPalette(getPalette(0));
 
 	_curDim = 0;
@@ -496,8 +497,8 @@
 }
 
 void Screen::fadeToBlack(int delay, const UpdateFunctor *upFunc) {
-	_tempPalette->clear();
-	fadePalette(*_tempPalette, delay, upFunc);
+	Palette pal(getPalette(0).getNumColors());
+	fadePalette(pal, delay, upFunc);
 }
 
 void Screen::fadePalette(const Palette &pal, int delay, const UpdateFunctor *upFunc) {
@@ -554,13 +555,13 @@
 }
 
 int Screen::fadePalStep(const Palette &pal, int diff) {
-	_tempPalette->copy(*_screenPalette);
+	_internFadePalette->copy(*_screenPalette);
 
 	bool needRefresh = false;
 
 	for (int i = 0; i < pal.getNumColors() * 3; ++i) {
 		int c1 = pal[i];
-		int c2 = (*_tempPalette)[i];
+		int c2 = (*_internFadePalette)[i];
 		if (c1 != c2) {
 			needRefresh = true;
 			if (c1 > c2) {
@@ -575,12 +576,12 @@
 					c2 = c1;
 			}
 
-			(*_tempPalette)[i] = (uint8)c2;
+			(*_internFadePalette)[i] = (uint8)c2;
 		}
 	}
 
 	if (needRefresh)
-		setScreenPalette(*_tempPalette);
+		setScreenPalette(*_internFadePalette);
 
 	return needRefresh ? 1 : 0;
 }
@@ -2642,7 +2643,7 @@
 }
 
 Palette &Screen::getPalette(int num) {
-	assert(num >= 0 && num < (_vm->gameFlags().platform == Common::kPlatformAmiga ? 7 : 4));
+	assert(num >= 0 && num < (_vm->gameFlags().platform == Common::kPlatformAmiga ? 12 : 4));
 	return *_palettes[num];
 }
 
@@ -2828,14 +2829,42 @@
 	debugC(3, kDebugLevelScreen, "Screen::loadPalette('%s', %p)", filename, (const void *)&pal);
 
 	if (_vm->gameFlags().platform == Common::kPlatformAmiga)
-		pal.loadAmigaPalette(*stream, stream->size() / 2);
+		pal.loadAmigaPalette(*stream, stream->size() / Palette::kAmigaBytesPerColor);
 	else
-		pal.loadVGAPalette(*stream, stream->size() / 3);
+		pal.loadVGAPalette(*stream, stream->size() / Palette::kVGABytesPerColor);
 
 	delete stream;
 	return true;
 }
 
+bool Screen::loadPaletteTable(const char *filename, int firstPalette) {
+	Common::SeekableReadStream *stream = _vm->resource()->createReadStream(filename);
+
+	if (!stream)
+		return false;
+
+	debugC(3, kDebugLevelScreen, "Screen::loadPaletteTable('%s', %d)", filename, firstPalette);
+
+	if (_vm->gameFlags().platform == Common::kPlatformAmiga) {
+		const int numColors = getPalette(firstPalette).getNumColors();
+		const int palSize = getPalette(firstPalette).getNumColors() * Palette::kAmigaBytesPerColor;
+		const int numPals = stream->size() / palSize;
+
+		for (int i = 0; i < numPals; ++i)
+			getPalette(i + firstPalette).loadAmigaPalette(*stream, numColors);
+	} else {
+		const int numColors = getPalette(firstPalette).getNumColors();
+		const int palSize = getPalette(firstPalette).getNumColors() * Palette::kVGABytesPerColor;
+		const int numPals = stream->size() / palSize;
+
+		for (int i = 0; i < numPals; ++i)
+			getPalette(i + firstPalette).loadVGAPalette(*stream, numColors);
+	}
+
+	delete stream;
+	return true;
+}
+
 void Screen::loadPalette(const byte *data, Palette &pal, int bytes) {
 	Common::MemoryReadStream stream(data, bytes, false);
 
@@ -3240,10 +3269,7 @@
 
 	assert(colors <= _numColors);
 
-	assert(colors % 2 == 0);
-	assert(colors / 2 <= 256);
-
-	for (int i = 0; i < (colors >> 1); ++i) {
+	for (int i = 0; i < colors; ++i) {
 		uint16 col = stream.readUint16BE();
 		_palData[i * 3 + 2] = (col & 0xF) << 2; col >>= 4;
 		_palData[i * 3 + 1] = (col & 0xF) << 2; col >>= 4;

Modified: scummvm/trunk/engines/kyra/screen.h
===================================================================
--- scummvm/trunk/engines/kyra/screen.h	2009-06-22 02:37:41 UTC (rev 41745)
+++ scummvm/trunk/engines/kyra/screen.h	2009-06-22 02:37:57 UTC (rev 41746)
@@ -72,6 +72,11 @@
 	Palette(const int numColors);
 	~Palette();
 
+	enum {
+		kVGABytesPerColor = 3,
+		kAmigaBytesPerColor = 2
+	};
+
 	/**
 	 * Load a VGA palette from the given stream.
 	 */
@@ -287,6 +292,7 @@
 	void loadBitmap(const char *filename, int tempPage, int dstPage, Palette *pal, bool skip=false);
 
 	bool loadPalette(const char *filename, Palette &pal);
+	bool loadPaletteTable(const char *filename, int firstPalette);
 	void loadPalette(const byte *data, Palette &pal, int bytes);
 
 	void setAnimBlockPtr(int size);
@@ -360,8 +366,8 @@
 	uint8 _sjisInvisibleColor;
 
 	Palette *_screenPalette;
-	Palette *_palettes[7];
-	Palette *_tempPalette;
+	Palette *_palettes[12];
+	Palette *_internFadePalette;
 
 	Font _fonts[FID_NUM];
 	uint8 _textColorsMap[16];

Modified: scummvm/trunk/engines/kyra/screen_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen_lol.cpp	2009-06-22 02:37:41 UTC (rev 41745)
+++ scummvm/trunk/engines/kyra/screen_lol.cpp	2009-06-22 02:37:57 UTC (rev 41746)
@@ -861,8 +861,8 @@
 }
 
 bool Screen_LoL::fadeColor(int dstColorIndex, int srcColorIndex, uint32 elapsedTime, uint32 targetTime) {
-	uint8 *dst = _screenPalette->getData() + 3 * dstColorIndex;
-	uint8 *src = _screenPalette->getData() + 3 * srcColorIndex;
+	const uint8 *dst = _screenPalette->getData() + 3 * dstColorIndex;
+	const uint8 *src = _screenPalette->getData() + 3 * srcColorIndex;
 	uint8 *p = getPalette(1).getData() + 3 * dstColorIndex;
 
 	bool res = false;
@@ -896,10 +896,9 @@
 		p++;
 	}
 
-	_tempPalette->copy(*_screenPalette);
-	_tempPalette->copy(*_screenPalette);
-	_tempPalette->copy(tmpPalEntry, 0, 1, dstColorIndex);
-	setScreenPalette(*_tempPalette);
+	_internFadePalette->copy(*_screenPalette);
+	_internFadePalette->copy(tmpPalEntry, 0, 1, dstColorIndex);
+	setScreenPalette(*_internFadePalette);
 	updateScreen();
 
 	return res;
@@ -924,10 +923,10 @@
 			res = false;
 		}
 
-		(*_tempPalette)[i] = out;
+		(*_internFadePalette)[i] = out;
 	}
 
-	setScreenPalette(*_tempPalette);
+	setScreenPalette(*_internFadePalette);
 	updateScreen();
 
 	return res;

Modified: scummvm/trunk/engines/kyra/sequences_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sequences_lok.cpp	2009-06-22 02:37:41 UTC (rev 41745)
+++ scummvm/trunk/engines/kyra/sequences_lok.cpp	2009-06-22 02:37:57 UTC (rev 41746)
@@ -141,7 +141,7 @@
 	_screen->clearPage(0);
 
 	if (_flags.platform == Common::kPlatformAmiga) {
-		_screen->loadPalette("INTRO.PAL", _screen->getPalette(0));
+		_screen->loadPaletteTable("INTRO.PAL", 0);
 		_screen->loadBitmap("BOTTOM.CPS", 3, 5, 0);
 		_screen->loadBitmap("TOP.CPS", 3, 3, 0);
 		_screen->copyRegion(0, 0, 0, 111, 320, 64, 2, 0);


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