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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Thu Feb 1 00:48:12 CET 2007


Revision: 25316
          http://scummvm.svn.sourceforge.net/scummvm/?rev=25316&view=rev
Author:   lordhoto
Date:     2007-01-31 15:48:12 -0800 (Wed, 31 Jan 2007)

Log Message:
-----------
Some changes to be closer to the original with palette handling.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/kyra.h
    scummvm/trunk/engines/kyra/scene.cpp
    scummvm/trunk/engines/kyra/screen.cpp
    scummvm/trunk/engines/kyra/script_v1.cpp
    scummvm/trunk/engines/kyra/sprites.cpp

Modified: scummvm/trunk/engines/kyra/kyra.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra.h	2007-01-31 20:00:48 UTC (rev 25315)
+++ scummvm/trunk/engines/kyra/kyra.h	2007-01-31 23:48:12 UTC (rev 25316)
@@ -317,6 +317,10 @@
 	int mouseX() { return _mouseX; }
 	int mouseY() { return _mouseY; }
 	
+	int setGameFlag(int flag);
+	int queryGameFlag(int flag);
+	int resetGameFlag(int flag);
+	
 	virtual int runOpcode(ScriptState *script, uint8 opcode);
 protected:
 	int o1_magicInMouseItem(ScriptState *script);
@@ -493,9 +497,6 @@
 	void characterSays(int vocFile, const char *chatStr, int8 charNum, int8 chatDuration);
 
 	void setCharactersPositions(int character);
-	int setGameFlag(int flag);
-	int queryGameFlag(int flag);
-	int resetGameFlag(int flag);
 	
 	void setupSceneResource(int sceneId);
 	

Modified: scummvm/trunk/engines/kyra/scene.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene.cpp	2007-01-31 20:00:48 UTC (rev 25315)
+++ scummvm/trunk/engines/kyra/scene.cpp	2007-01-31 23:48:12 UTC (rev 25316)
@@ -822,18 +822,28 @@
 }
 
 void KyraEngine::initSceneScreen(int brandonAlive) {
-	// XXX Palette stuff
+	if (_unkScreenVar1 && !queryGameFlag(0xA0)) {
+		for (int i = 0; i < 60; ++i) {
+			uint16 col = _screen->getPalette(0)[684+i];
+			col += _screen->getPalette(1)[684+i] << 1;
+			col >>= 2;
+			_screen->getPalette(0)[684+i] = col;
+		}
+		_screen->setScreenPalette(_screen->getPalette(0));
+	}
+
 	if (_unkScreenVar2 == 1) {
 		_screen->shuffleScreen(8, 8, 304, 128, 2, 0, _unkScreenVar3, false);
 	} else {
 		_screen->copyRegion(8, 8, 8, 8, 304, 128, 2, 0);
 	}
+
 	if (_unkScreenVar1 && _paletteChanged) {
 		if (!queryGameFlag(0xA0)) {
-			// XXX Palette stuff
-			_screen->setScreenPalette(_screen->_currentPalette);
+			memcpy(_screen->getPalette(0) + 684, _screen->getPalette(1) + 684, 60);
+			_screen->setScreenPalette(_screen->getPalette(0));
 		} else {
-			// XXX Palette stuff
+			memset(_screen->getPalette(0), 0, 768);
 		}
 	}
 	// really call this here?

Modified: scummvm/trunk/engines/kyra/screen.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen.cpp	2007-01-31 20:00:48 UTC (rev 25315)
+++ scummvm/trunk/engines/kyra/screen.cpp	2007-01-31 23:48:12 UTC (rev 25316)
@@ -307,7 +307,8 @@
 
 void Screen::setScreenPalette(const uint8 *palData) {
 	debugC(9, kDebugLevelScreen, "Screen::setScreenPalette(%p)", (const void *)palData);
-	memcpy(_screenPalette, palData, 768);
+	if (palData != _screenPalette)
+		memcpy(_screenPalette, palData, 768);
 	uint8 screenPal[256 * 4];
 	for (int i = 0; i < 256; ++i) {
 		screenPal[4 * i + 0] = (palData[0] << 2) | (palData[0] & 3);
@@ -2023,7 +2024,7 @@
 	debugC(9, kDebugLevelScreen, "Screen::getPalette(%d)", num);
 	assert(num >= 0 && num < ARRAYSIZE(_palettes)+1);
 	if (num == 0) {
-		return _screenPalette;
+		return _currentPalette;
 	}
 	
 	return _palettes[num-1];

Modified: scummvm/trunk/engines/kyra/script_v1.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_v1.cpp	2007-01-31 20:00:48 UTC (rev 25315)
+++ scummvm/trunk/engines/kyra/script_v1.cpp	2007-01-31 23:48:12 UTC (rev 25316)
@@ -1547,10 +1547,9 @@
 		warning("unimplemented o1_fadeEntirePalette function");
 		return 0;
 	} else if (cmd == 2) {
-		// HACK
-		uint8 *clearPal = _screen->getPalette(0);
-		fadePal = _screen->getPalette(1);		
-		memset(clearPal, 0, sizeof(uint8)*768);
+		memset(_screen->getPalette(2), 0, 768);
+		memcpy(_screen->getPalette(0), _screen->getPalette(1), 768);
+		fadePal = _screen->getPalette(0);
 	}
 	
 	_screen->fadePalette(fadePal, stackPos(1));

Modified: scummvm/trunk/engines/kyra/sprites.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sprites.cpp	2007-01-31 20:00:48 UTC (rev 25315)
+++ scummvm/trunk/engines/kyra/sprites.cpp	2007-01-31 23:48:12 UTC (rev 25316)
@@ -415,10 +415,15 @@
 	_engine->_northExitHeight = READ_LE_UINT16(_dat + 0x15);
 	if (_engine->_northExitHeight & 1)
 		_engine->_northExitHeight += 1;
+
+	if (_engine->queryGameFlag(0xA0)) {
+		memcpy(_screen->getPalette(1), _screen->getPalette(3), 768);
+	} else {
+		memcpy(_screen->getPalette(1), _screen->getPalette(0), 768);
+	}
 	// XXX
-	memcpy(_screen->_currentPalette + 744 - 60, _dat + 0x17, 60);
 	_engine->_paletteChanged = 1;
-	memcpy(_screen->getPalette(1), _screen->_currentPalette, sizeof(uint8)*768);
+	memcpy(_screen->getPalette(1) + 684, _dat + 0x17, 60);
 	uint8 *data = _dat + 0x6B;
 
 	uint16 length = READ_LE_UINT16(data);


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