diff options
| author | Johannes Schickel | 2009-06-22 02:37:57 +0000 | 
|---|---|---|
| committer | Johannes Schickel | 2009-06-22 02:37:57 +0000 | 
| commit | 5767277d8d2910a9f9817a6b845ea5a91caec6bf (patch) | |
| tree | af7c10de3796eab51ea95c099bad9be181e303a8 | |
| parent | d7432e18eae9e6d632addcea1a0dd6933e5b0770 (diff) | |
| download | scummvm-rg350-5767277d8d2910a9f9817a6b845ea5a91caec6bf.tar.gz scummvm-rg350-5767277d8d2910a9f9817a6b845ea5a91caec6bf.tar.bz2 scummvm-rg350-5767277d8d2910a9f9817a6b845ea5a91caec6bf.zip | |
- Fixed regression in Screen::fadeToBlack
- Fixed some palette regressions in Kyra1 Amiga (only the intro works currently)
svn-id: r41746
| -rw-r--r-- | engines/kyra/screen.cpp | 58 | ||||
| -rw-r--r-- | engines/kyra/screen.h | 10 | ||||
| -rw-r--r-- | engines/kyra/screen_lol.cpp | 15 | ||||
| -rw-r--r-- | engines/kyra/sequences_lok.cpp | 2 | 
4 files changed, 58 insertions, 27 deletions
| diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp index e4f7e05dde..deee1cfb60 100644 --- a/engines/kyra/screen.cpp +++ b/engines/kyra/screen.cpp @@ -126,11 +126,9 @@ bool Screen::init() {  	_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 @@ bool Screen::init() {  		}  	} +	_internFadePalette = new Palette(_palettes[0]->getNumColors()); +	assert(_internFadePalette); +  	setScreenPalette(getPalette(0));  	_curDim = 0; @@ -496,8 +497,8 @@ void Screen::fadeFromBlack(int delay, const UpdateFunctor *upFunc) {  }  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 @@ void Screen::getFadeParams(const Palette &pal, int delay, int &delayInc, int &di  }  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 @@ int Screen::fadePalStep(const Palette &pal, int diff) {  					c2 = c1;  			} -			(*_tempPalette)[i] = (uint8)c2; +			(*_internFadePalette)[i] = (uint8)c2;  		}  	}  	if (needRefresh) -		setScreenPalette(*_tempPalette); +		setScreenPalette(*_internFadePalette);  	return needRefresh ? 1 : 0;  } @@ -2642,7 +2643,7 @@ void Screen::setMouseCursor(int x, int y, const byte *shape) {  }  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,9 +2829,37 @@ bool Screen::loadPalette(const char *filename, Palette &pal) {  	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; @@ -3240,10 +3269,7 @@ void Palette::loadAmigaPalette(Common::ReadStream &stream, int colors) {  	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; diff --git a/engines/kyra/screen.h b/engines/kyra/screen.h index b35b2dd3af..b4541a53fb 100644 --- a/engines/kyra/screen.h +++ b/engines/kyra/screen.h @@ -72,6 +72,11 @@ public:  	Palette(const int numColors);  	~Palette(); +	enum { +		kVGABytesPerColor = 3, +		kAmigaBytesPerColor = 2 +	}; +  	/**  	 * Load a VGA palette from the given stream.  	 */ @@ -287,6 +292,7 @@ public:  	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 @@ protected:  	uint8 _sjisInvisibleColor;  	Palette *_screenPalette; -	Palette *_palettes[7]; -	Palette *_tempPalette; +	Palette *_palettes[12]; +	Palette *_internFadePalette;  	Font _fonts[FID_NUM];  	uint8 _textColorsMap[16]; diff --git a/engines/kyra/screen_lol.cpp b/engines/kyra/screen_lol.cpp index fc8740a9d3..f2d6a2565e 100644 --- a/engines/kyra/screen_lol.cpp +++ b/engines/kyra/screen_lol.cpp @@ -861,8 +861,8 @@ void Screen_LoL::copyColor(int dstColorIndex, int srcColorIndex) {  }  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 @@ bool Screen_LoL::fadeColor(int dstColorIndex, int srcColorIndex, uint32 elapsedT  		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 @@ bool Screen_LoL::fadePaletteStep(uint8 *pal1, uint8 *pal2, uint32 elapsedTime, u  			res = false;  		} -		(*_tempPalette)[i] = out; +		(*_internFadePalette)[i] = out;  	} -	setScreenPalette(*_tempPalette); +	setScreenPalette(*_internFadePalette);  	updateScreen();  	return res; diff --git a/engines/kyra/sequences_lok.cpp b/engines/kyra/sequences_lok.cpp index 1bc512adf5..d483409090 100644 --- a/engines/kyra/sequences_lok.cpp +++ b/engines/kyra/sequences_lok.cpp @@ -141,7 +141,7 @@ void KyraEngine_LoK::seq_introLogos() {  	_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); | 
