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

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Mon Jun 22 04:35:45 CEST 2009


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

Log Message:
-----------
Changed Screen::getPalette to return a reference to a Palette object.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/gui_hof.cpp
    scummvm/trunk/engines/kyra/gui_lok.cpp
    scummvm/trunk/engines/kyra/gui_lol.cpp
    scummvm/trunk/engines/kyra/gui_mr.cpp
    scummvm/trunk/engines/kyra/kyra_hof.cpp
    scummvm/trunk/engines/kyra/kyra_lok.cpp
    scummvm/trunk/engines/kyra/kyra_mr.cpp
    scummvm/trunk/engines/kyra/lol.cpp
    scummvm/trunk/engines/kyra/scene_hof.cpp
    scummvm/trunk/engines/kyra/scene_lok.cpp
    scummvm/trunk/engines/kyra/scene_lol.cpp
    scummvm/trunk/engines/kyra/scene_mr.cpp
    scummvm/trunk/engines/kyra/screen.cpp
    scummvm/trunk/engines/kyra/screen.h
    scummvm/trunk/engines/kyra/screen_lok.cpp
    scummvm/trunk/engines/kyra/screen_lol.cpp
    scummvm/trunk/engines/kyra/script_hof.cpp
    scummvm/trunk/engines/kyra/script_lok.cpp
    scummvm/trunk/engines/kyra/script_lol.cpp
    scummvm/trunk/engines/kyra/script_tim.cpp
    scummvm/trunk/engines/kyra/seqplayer.cpp
    scummvm/trunk/engines/kyra/sequences_hof.cpp
    scummvm/trunk/engines/kyra/sequences_lok.cpp
    scummvm/trunk/engines/kyra/sequences_lol.cpp
    scummvm/trunk/engines/kyra/sprites.cpp
    scummvm/trunk/engines/kyra/staticres.cpp
    scummvm/trunk/engines/kyra/text_lok.cpp
    scummvm/trunk/engines/kyra/vqa.cpp

Modified: scummvm/trunk/engines/kyra/gui_hof.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_hof.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/gui_hof.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -281,7 +281,7 @@
 	int frames = movie.opened() ? movie.frames() : 6;
 	memcpy(_screenBuffer, _screen->getCPagePtr(2), 64000);
 	uint8 overlay[0x100];
-	_screen->generateOverlay(_screen->getPalette(0), overlay, 0, 50);
+	_screen->generateOverlay(_screen->getPalette(0).getData(), overlay, 0, 50);
 	_screen->hideMouse();
 	_screen->copyRegion(0x46, 0x90, 0x46, 0x79, 0x71, 0x17, 0, 2, Screen::CR_NO_P_CHECK);
 	_screen->showMouse();
@@ -365,9 +365,9 @@
 		_screen->showMouse();
 	}
 
-	memcpy(_screen->getPalette(2), _screen->getPalette(0), 768);
+	_screen->getPalette(2).copy(_screen->getPalette(0));
 	_screen->fadeToBlack(7, &_updateFunctor);
-	_res->loadFileToBuf("_BOOK.COL", _screen->getPalette(0), 768);
+	_res->loadFileToBuf("_BOOK.COL", _screen->getPalette(0).getData(), 768);
 	loadBookBkgd();
 	showBookPage();
 	_screen->copyRegion(0, 0, 0, 0, 0x140, 0xC8, 2, 0, Screen::CR_NO_P_CHECK);
@@ -375,7 +375,7 @@
 
 	int oldItemInHand = _itemInHand;
 	removeHandItem();
-	_screen->fadePalette(_screen->getPalette(0), 7);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 7);
 	_screen->showMouse();
 
 	bookLoop();
@@ -393,8 +393,8 @@
 	}
 
 	setHandItem(_itemInHand);
-	memcpy(_screen->getPalette(0), _screen->getPalette(2), 768);
-	_screen->fadePalette(_screen->getPalette(0), 7, &_updateFunctor);
+	_screen->getPalette(0).copy(_screen->getPalette(2));
+	_screen->fadePalette(_screen->getPalette(0).getData(), 7, &_updateFunctor);
 	_screen->showMouse();
 
 	if (!queryGameFlag(4) && !queryGameFlag(0xB8)) {
@@ -800,26 +800,26 @@
 }
 
 void GUI_HoF::setupPalette() {
-	memcpy(_screen->getPalette(1), _screen->getPalette(0), 768);
+	_screen->getPalette(1).copy(_screen->getPalette(0));
 
-	uint8 *palette = _screen->getPalette(0);
+	uint8 *palette = _screen->getPalette(0).getData();
 	for (int i = 0; i < 768; ++i)
 		palette[i] >>= 1;
 
 	static const uint8 guiPal[] = { 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFc, 0xFD, 0xFE };
 
 	for (uint i = 0; i < ARRAYSIZE(guiPal); ++i)
-		memcpy(_screen->getPalette(0)+guiPal[i]*3, _screen->getPalette(1)+guiPal[i]*3, 3);
+		_screen->getPalette(0).copy(_screen->getPalette(1), guiPal[i], 1);
 
 	if (_isDeathMenu)
-		_screen->fadePalette(_screen->getPalette(0), 0x64);
+		_screen->fadePalette(_screen->getPalette(0).getData(), 0x64);
 	else
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 }
 
 void GUI_HoF::restorePalette() {
-	memcpy(_screen->getPalette(0), _screen->getPalette(1), 768);
-	_screen->setScreenPalette(_screen->getPalette(0));
+	_screen->getPalette(0).copy(_screen->getPalette(1));
+	_screen->setScreenPalette(_screen->getPalette(0).getData());
 }
 
 void GUI_HoF::resetState(int item) {

Modified: scummvm/trunk/engines/kyra/gui_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_lok.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/gui_lok.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -1024,25 +1024,25 @@
 	static const int16 menuPalIndexes[] = {248, 249, 250, 251, 252, 253, 254, -1};
 	int index = 0;
 
-	memcpy(_screen->getPalette(2), _screen->getPalette(0), 768);
+	_screen->getPalette(2).copy(_screen->getPalette(0));
 
 	for (int i = 0; i < 768; i++)
 		_screen->getPalette(0)[i] >>= 1;
 
 	while (menuPalIndexes[index] != -1) {
-		memcpy(&_screen->getPalette(0)[menuPalIndexes[index]*3], &_screen->getPalette(2)[menuPalIndexes[index]*3], 3);
-		index++;
+		_screen->getPalette(0).copy(_screen->getPalette(2), menuPalIndexes[index], 1);
+		++index;
 	}
 
-	_screen->fadePalette(_screen->getPalette(0), 2);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 2);
 }
 
 void GUI_LoK::restorePalette() {
 	if (_vm->gameFlags().platform == Common::kPlatformAmiga)
 		return;
 
-	memcpy(_screen->getPalette(0), _screen->getPalette(2), 768);
-	_screen->fadePalette(_screen->getPalette(0), 2);
+	_screen->getPalette(0).copy(_screen->getPalette(2));
+	_screen->fadePalette(_screen->getPalette(0).getData(), 2);
 }
 
 #pragma mark -

Modified: scummvm/trunk/engines/kyra/gui_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_lol.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/gui_lol.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -1814,7 +1814,7 @@
 	displayAutomap();
 
 	gui_drawPlayField();
-	setPaletteBrightness(_screen->getPalette(0), _brightness, _lampEffect);
+	setPaletteBrightness(_screen->getPalette(0).getData(), _brightness, _lampEffect);
 	return 1;
 }
 
@@ -1842,7 +1842,7 @@
 	}
 
 	if (_brightness)
-		setPaletteBrightness(_screen->getPalette(0), _brightness, _lampEffect);
+		setPaletteBrightness(_screen->getPalette(0).getData(), _brightness, _lampEffect);
 
 	return 1;
 }

Modified: scummvm/trunk/engines/kyra/gui_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_mr.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/gui_mr.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -674,13 +674,13 @@
 	_screen->copyRegionToBuffer(0, 0, 0, 320, 200, _screenBuffer);
 	_screen->copyRegionToBuffer(4, 0, 0, 320, 200, _album.backUpPage);
 
-	memcpy(_screen->getPalette(1), _screen->getPalette(0), 768);
+	_screen->getPalette(1).copy(_screen->getPalette(0));
 	_screen->fadeToBlack(9);
 
 	int itemInHand = _itemInHand;
 	removeHandItem();
 
-	_res->loadFileToBuf("ALBUM.COL", _screen->getPalette(0), 768);
+	_res->loadFileToBuf("ALBUM.COL", _screen->getPalette(0).getData(), 768);
 	loadAlbumPage();
 	loadAlbumPageWSA();
 
@@ -693,7 +693,7 @@
 	printAlbumPageText();
 	_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0, Screen::CR_NO_P_CHECK);
 	_screen->updateScreen();
-	_screen->fadePalette(_screen->getPalette(0), 9);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 9);
 
 	processAlbum();
 
@@ -707,8 +707,8 @@
 	_screen->copyBlockToPage(0, 0, 0, 320, 200, _screenBuffer);
 	_screen->copyBlockToPage(4, 0, 0, 320, 200, _album.backUpPage);
 
-	memcpy(_screen->getPalette(0), _screen->getPalette(1), 768);
-	_screen->fadePalette(_screen->getPalette(0), 9);
+	_screen->getPalette(0).copy(_screen->getPalette(1));
+	_screen->fadePalette(_screen->getPalette(0).getData(), 9);
 
 	delete[] _album.backUpRect;
 	_album.backUpRect = 0;

Modified: scummvm/trunk/engines/kyra/kyra_hof.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_hof.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/kyra_hof.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -415,7 +415,7 @@
 	setupLangButtonShapes();
 	loadInventoryShapes();
 
-	_res->loadFileToBuf("PALETTE.COL", _screen->getPalette(0), 0x300);
+	_res->loadFileToBuf("PALETTE.COL", _screen->getPalette(0).getData(), 0x300);
 	_screen->loadBitmap("_PLAYFLD.CPS", 3, 3, 0);
 	_screen->copyPage(3, 0);
 	_screen->showMouse();
@@ -919,9 +919,9 @@
 	if (string) {
 		if (palIndex != -1 || _fadeMessagePalette) {
 			palIndex *= 3;
-			memcpy(_messagePal, _screen->getPalette(0) + palIndex, 3);
-			memmove(_screen->getPalette(0) + 765, _screen->getPalette(0) + palIndex, 3);
-			_screen->setScreenPalette(_screen->getPalette(0));
+			memcpy(_messagePal, _screen->getPalette(0).getData() + palIndex, 3);
+			_screen->getPalette(0).copy(_screen->getPalette(0), palIndex / 3, 1, 255);
+			_screen->setScreenPalette(_screen->getPalette(0).getData());
 		}
 
 		int x = _text->getCenterStringX(string, 0, 320);
@@ -978,8 +978,8 @@
 	}
 
 	if (updatePalette) {
-		memcpy(_screen->getPalette(0) + 765, _messagePal, 3);
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->getPalette(0).copy(_messagePal, 0, 1, 255);
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 	} else {
 		_fadeMessagePalette = false;
 	}
@@ -1139,18 +1139,18 @@
 
 	if (palEntry != _charPalEntry && unk1) {
 		const uint8 *src = &_scenePal[(palEntry << 4) * 3];
-		uint8 *ptr = _screen->getPalette(0) + 336;
+		uint8 *ptr = _screen->getPalette(0).getData() + 336;
 		for (int i = 0; i < 48; ++i) {
 			*ptr -= (*ptr - *src) >> 1;
 			++ptr;
 			++src;
 		}
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 		unkVar1 = true;
 		_charPalEntry = palEntry;
 	} else if (unkVar1 || !unk1) {
-		memcpy(_screen->getPalette(0) + 336, &_scenePal[(palEntry << 4) * 3], 48);
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->getPalette(0).copy(_scenePal, palEntry << 4, 16, 112);
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 		unkVar1 = false;
 	}
 }
@@ -1656,24 +1656,24 @@
 #pragma mark -
 
 void KyraEngine_HoF::setCauldronState(uint8 state, bool paletteFade) {
-	memcpy(_screen->getPalette(2), _screen->getPalette(0), 768);
+	_screen->getPalette(2).copy(_screen->getPalette(0));
 	Common::SeekableReadStream *file = _res->createReadStream("_POTIONS.PAL");
 	if (!file)
 		error("Couldn't load cauldron palette");
 	file->seek(state*18, SEEK_SET);
-	file->read(_screen->getPalette(2)+723, 18);
+	file->read(_screen->getPalette(2).getData() + 723, 18);
 	delete file;
 	file = 0;
 
 	if (paletteFade) {
 		snd_playSoundEffect((state == 0) ? 0x6B : 0x66);
-		_screen->fadePalette(_screen->getPalette(2), 0x4B, &_updateFunctor);
+		_screen->fadePalette(_screen->getPalette(2).getData(), 0x4B, &_updateFunctor);
 	} else {
-		_screen->setScreenPalette(_screen->getPalette(2));
+		_screen->setScreenPalette(_screen->getPalette(2).getData());
 		_screen->updateScreen();
 	}
 
-	memcpy(_screen->getPalette(0)+723, _screen->getPalette(2)+723, 18);
+	_screen->getPalette(0).copy(_screen->getPalette(2), 241, 6);
 	_cauldronState = state;
 	_cauldronUseCount = 0;
 	//if (state == 5)
@@ -1833,13 +1833,13 @@
 	if (!file)
 		error("Couldn't load cauldron palette");
 	file->seek(index*18, SEEK_SET);
-	file->read(_screen->getPalette(0)+723, 18);
+	file->read(_screen->getPalette(0).getData()+723, 18);
 	snd_playSoundEffect(0x6A);
-	_screen->fadePalette(_screen->getPalette(0), 0x1E, &_updateFunctor);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 0x1E, &_updateFunctor);
 	file->seek(0, SEEK_SET);
-	file->read(_screen->getPalette(0)+723, 18);
+	file->read(_screen->getPalette(0).getData()+723, 18);
 	delete file;
-	_screen->fadePalette(_screen->getPalette(0), 0x1E, &_updateFunctor);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 0x1E, &_updateFunctor);
 }
 
 void KyraEngine_HoF::resetCauldronStateTable(int idx) {

Modified: scummvm/trunk/engines/kyra/kyra_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_lok.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/kyra_lok.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -358,7 +358,7 @@
 	loadButtonShapes();
 	initMainButtonList();
 	loadMainScreen();
-	_screen->loadPalette("PALETTE.COL", _screen->getPalette(0));
+	_screen->loadPalette("PALETTE.COL", _screen->getPalette(0).getData());
 
 	// XXX
 	_animator->initAnimStateList();

Modified: scummvm/trunk/engines/kyra/kyra_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_mr.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/kyra_mr.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -230,8 +230,8 @@
 	_screen->setAnimBlockPtr(3500);
 	_screen->setScreenDim(0);
 
-	_res->loadFileToBuf("PALETTE.COL", _screen->getPalette(0), 768);
-	_screen->setScreenPalette(_screen->getPalette(0));
+	_res->loadFileToBuf("PALETTE.COL", _screen->getPalette(0).getData(), 768);
+	_screen->setScreenPalette(_screen->getPalette(0).getData());
 
 	return Common::kNoError;
 }
@@ -267,7 +267,7 @@
 		_screen->_curPage = 0;
 		_screen->clearPage(0);
 
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 
 		// XXX
 		playMenuAudioFile();
@@ -328,8 +328,8 @@
 
 void KyraEngine_MR::initMainMenu() {
 	_menuAnim = new WSAMovie_v2(this);
-	_menuAnim->open("REVENGE.WSA", 1, _screen->getPalette(0));
-	memset(_screen->getPalette(0), 0, 3);
+	_menuAnim->open("REVENGE.WSA", 1, _screen->getPalette(0).getData());
+	memset(_screen->getPalette(0).getData(), 0, 3);
 
 	_menu = new MainMenu(this);
 	MainMenu::StaticData data = {
@@ -378,7 +378,7 @@
 		}
 
 		_screen->hideMouse();
-		memcpy(_screen->getPalette(1), _screen->getPalette(0), 768);
+		_screen->getPalette(1).copy(_screen->getPalette(0));
 		fadeOutMusic(60);
 		_screen->fadeToBlack(60);
 		_screen->clearPage(0);
@@ -395,7 +395,7 @@
 		memset(pal, 1, sizeof(pal));
 		_screen->setScreenPalette(pal);
 		_screen->clearPage(0);
-		memcpy(_screen->getPalette(0), _screen->getPalette(1), 768);
+		_screen->getPalette(0).copy(_screen->getPalette(1));
 		_wasPlayingVQA = true;
 	}
 }
@@ -627,9 +627,9 @@
 	loadInterfaceShapes();
 
 	musicUpdate(0);
-	_res->loadFileToBuf("PALETTE.COL", _screen->getPalette(0), 768);
+	_res->loadFileToBuf("PALETTE.COL", _screen->getPalette(0).getData(), 768);
 	_paletteOverlay = new uint8[256];
-	_screen->generateOverlay(_screen->getPalette(0), _paletteOverlay, 0xF0, 0x19);
+	_screen->generateOverlay(_screen->getPalette(0).getData(), _paletteOverlay, 0xF0, 0x19);
 
 	loadInterface();
 	musicUpdate(0);
@@ -899,7 +899,7 @@
 void KyraEngine_MR::updateCharPal(int unk1) {
 	int layer = _screen->getLayer(_mainCharacter.x1, _mainCharacter.y1) - 1;
 	const uint8 *src = _costPalBuffer + _characterShapeFile * 72;
-	uint8 *dst = _screen->getPalette(0) + 432;
+	uint8 *dst = _screen->getPalette(0).getData() + 432;
 	const int8 *sceneDatPal = &_sceneDatPalette[layer * 3];
 
 	if (layer != _lastCharPalLayer && unk1) {
@@ -919,7 +919,7 @@
 			}
 		}
 		_charPalUpdate = true;
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 		_lastCharPalLayer = layer;
 	} else if (_charPalUpdate || !unk1) {
 		memcpy(dst, src, 72);
@@ -936,7 +936,7 @@
 			}
 		}
 
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 		_charPalUpdate = false;
 	}
 }

Modified: scummvm/trunk/engines/kyra/lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/lol.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/lol.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -778,20 +778,20 @@
 
 void LoLEngine::startup() {
 	_screen->clearPage(0);
-	_screen->loadBitmap("PLAYFLD.CPS", 3, 3, _screen->getPalette(0));
+	_screen->loadBitmap("PLAYFLD.CPS", 3, 3, _screen->getPalette(0).getData());
 
 	uint8 *tmpPal = new uint8[0x300];
-	memcpy(tmpPal, _screen->getPalette(0), 0x300);
-	memset(_screen->getPalette(0), 0x3f, 0x180);
-	memcpy(_screen->getPalette(0) + 3, tmpPal + 3, 3);
-	memset(_screen->getPalette(0) + 0x240, 0x3f, 12);
-	_screen->generateOverlay(_screen->getPalette(0), _screen->_paletteOverlay1, 1, 96);
-	_screen->generateOverlay(_screen->getPalette(0), _screen->_paletteOverlay2, 144, 65);
-	memcpy(_screen->getPalette(0), tmpPal, 0x300);
+	memcpy(tmpPal, _screen->getPalette(0).getData(), 0x300);
+	memset(_screen->getPalette(0).getData(), 0x3f, 0x180);
+	_screen->getPalette(0).copy(tmpPal, 1, 1);
+	memset(_screen->getPalette(0).getData() + 0x240, 0x3f, 12);
+	_screen->generateOverlay(_screen->getPalette(0).getData(), _screen->_paletteOverlay1, 1, 96);
+	_screen->generateOverlay(_screen->getPalette(0).getData(), _screen->_paletteOverlay2, 144, 65);
+	_screen->getPalette(0).copy(tmpPal, 0, 256);
 	delete[] tmpPal;
 
-	memset(_screen->getPalette(1), 0, 0x300);
-	memset(_screen->getPalette(2), 0, 0x300);
+	_screen->getPalette(1).clear();
+	_screen->getPalette(2).clear();
 
 	loadItemIconShapes();
 	_screen->setMouseCursor(0, 0, _itemIconShapes[0x85]);
@@ -1541,7 +1541,7 @@
 		if (_screen->_fadeFlag != 2)
 			_screen->fadeClearSceneWindow(10);
 		gui_drawPlayField();
-		setPaletteBrightness(_screen->getPalette(0), _brightness, _lampEffect);
+		setPaletteBrightness(_screen->getPalette(0).getData(), _brightness, _lampEffect);
 		_screen->_fadeFlag = 0;
 	}
 
@@ -1676,8 +1676,8 @@
 }
 
 void LoLEngine::setPaletteBrightness(uint8 *palette, int brightness, int modifier) {
-	generateBrightnessPalette(palette, _screen->getPalette(1), brightness, modifier);
-	_screen->fadePalette(_screen->getPalette(1), 5, 0);
+	generateBrightnessPalette(palette, _screen->getPalette(1).getData(), brightness, modifier);
+	_screen->fadePalette(_screen->getPalette(1).getData(), 5, 0);
 	_screen->_fadeFlag = 0;
 }
 
@@ -2067,7 +2067,7 @@
 int LoLEngine::processMagicHeal(int charNum, int spellLevel) {
 	if (!_healOverlay) {
 		_healOverlay = new uint8[256];
-		_screen->generateGrayOverlay(_screen->getPalette(1), _healOverlay, 52, 22, 20, 0, 256, true);
+		_screen->generateGrayOverlay(_screen->getPalette(1).getData(), _healOverlay, 52, 22, 20, 0, 256, true);
 	}
 
 	const uint8 *healShpFrames = 0;
@@ -2189,8 +2189,8 @@
 	uint8 *swampCol = new uint8[768];
 
 	if (_currentLevel == 11 && !(_flagsTable[52] & 0x04)) {
-		uint8 *sc = _screen->getPalette(0);
-		uint8 *dc = _screen->getPalette(2);
+		uint8 *sc = _screen->getPalette(0).getData();
+		uint8 *dc = _screen->getPalette(2).getData();
 		for (int i = 1; i < 768; i++)
 			SWAP(sc[i], dc[i]);
 		_flagsTable[52] |= 0x04;
@@ -2200,7 +2200,7 @@
 
 	uint8 *sc = _res->fileData("swampice.col", 0);
 	memcpy(swampCol, sc, 384);
-	uint8 *s = _screen->getPalette(1);
+	uint8 *s = _screen->getPalette(1).getData();
 	for (int i = 384; i < 768; i++)
 		swampCol[i] = tpal[i] = s[i] & 0x3f;
 
@@ -2217,7 +2217,7 @@
 	generateBrightnessPalette(swampCol, swampCol, _brightness, _lampEffect);
 	swampCol[0] = swampCol[1] = swampCol[2] = tpal[0] = tpal[1] = tpal[2] = 0;
 
-	generateBrightnessPalette(_screen->getPalette(0), s, _brightness, _lampEffect);
+	generateBrightnessPalette(_screen->getPalette(0).getData(), s, _brightness, _lampEffect);
 
 	int sX = 112;
 	int sY = 0;
@@ -2306,7 +2306,7 @@
 	enableSysTimer(2);
 
 	if (_currentLevel != 11)
-		generateBrightnessPalette(_screen->getPalette(0), swampCol, _brightness, _lampEffect);
+		generateBrightnessPalette(_screen->getPalette(0).getData(), swampCol, _brightness, _lampEffect);
 
 	playSpellAnimation(0, 0, 0, 2, 0, 0, 0, tpal, swampCol, 40, 0);
 
@@ -2617,7 +2617,7 @@
 	mov->close();
 	delete mov;
 
-	_screen->setScreenPalette(_screen->getPalette(1));
+	_screen->setScreenPalette(_screen->getPalette(1).getData());
 	_screen->copyPage(12, 2);
 	_screen->copyPage(12, 0);
 	updateDrawPage2();
@@ -2736,7 +2736,7 @@
 int LoLEngine::processMagicVaelansCube() {
 	uint8 *tmpPal1 = new uint8[768];
 	uint8 *tmpPal2 = new uint8[768];
-	uint8 *sp1 = _screen->getPalette(1);
+	uint8 *sp1 = _screen->getPalette(1).getData();
 
 	memcpy(tmpPal1, sp1, 768);
 	memcpy(tmpPal2, sp1, 768);
@@ -2840,7 +2840,7 @@
 	if (_lightningDiv == 2)
 		shakeScene(1, 2, 3, 0);
 
-	uint8 *p1 = _screen->getPalette(1);
+	uint8 *p1 = _screen->getPalette(1).getData();
 
 	if (_lightningSfxFrame % _lightningDiv) {
 		_screen->setScreenPalette(p1);
@@ -3659,9 +3659,9 @@
 	if (_currentLevel != 11)
 		return;
 
-	uint8 *s = _screen->getPalette(2);
-	uint8 *d = _screen->getPalette(0);
-	uint8 *d2 = _screen->getPalette(1);
+	uint8 *s = _screen->getPalette(2).getData();
+	uint8 *d = _screen->getPalette(0).getData();
+	uint8 *d2 = _screen->getPalette(1).getData();
 
 	for (int i = 1; i < 768; i++)
 		SWAP(s[i], d[i]);
@@ -3841,14 +3841,14 @@
 	uint8 *tmpWll = new uint8[80];
 	memcpy(tmpWll, _wllBuffer4, 80);
 
-	_screen->loadBitmap("parch.cps", 2, 2, _screen->getPalette(3));
+	_screen->loadBitmap("parch.cps", 2, 2, _screen->getPalette(3).getData());
 	_screen->loadBitmap("autobut.shp", 3, 5, 0);
 	const uint8 *shp = _screen->getCPagePtr(5);
 
 	for (int i = 0; i < 109; i++)
 		_automapShapes[i] = _screen->getPtrToShape(shp, i + 11);
 
-	_screen->generateGrayOverlay(_screen->getPalette(3), _mapOverlay, 52, 0, 0, 0, 256, false);
+	_screen->generateGrayOverlay(_screen->getPalette(3).getData(), _mapOverlay, 52, 0, 0, 0, 256, false);
 
 	_screen->loadFont(Screen::FID_9_FNT, "FONT9PN.FNT");
 	_screen->loadFont(Screen::FID_6_FNT, "FONT6PN.FNT");
@@ -3871,7 +3871,7 @@
 
 	_screen->copyPage(2, 0);
 	_screen->updateScreen();
-	_screen->fadePalette(_screen->getPalette(3), 10);
+	_screen->fadePalette(_screen->getPalette(3).getData(), 10);
 	uint32 delayTimer = _system->getMillis() + 8 * _tickLength;
 
 	while (!exitAutomap && !shouldQuit()) {
@@ -4009,7 +4009,7 @@
 
 void LoLEngine::drawMapPage(int pageNum) {
 	for (int i = 0; i < 2; i++) {
-		_screen->loadBitmap("parch.cps", pageNum, pageNum, _screen->getPalette(3));
+		_screen->loadBitmap("parch.cps", pageNum, pageNum, _screen->getPalette(3).getData());
 
 		int cp = _screen->setCurPage(pageNum);
 		Screen::FontId of = _screen->setFont(Screen::FID_9_FNT);

Modified: scummvm/trunk/engines/kyra/scene_hof.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene_hof.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/scene_hof.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -396,14 +396,14 @@
 
 void KyraEngine_HoF::loadScenePal() {
 	uint16 sceneId = _mainCharacter.sceneId;
-	memcpy(_screen->getPalette(1), _screen->getPalette(0), 768);
+	_screen->getPalette(1).copy(_screen->getPalette(0));
 
 	char filename[14];
 	strcpy(filename, _sceneList[sceneId].filename1);
 	strcat(filename, ".COL");
 	_screen->loadBitmap(filename, 3, 3, 0);
-	memcpy(_screen->getPalette(1), _screen->getCPagePtr(3), 384);
-	memset(_screen->getPalette(1), 0, 3);
+	_screen->getPalette(1).copy(_screen->getCPagePtr(3), 0, 128);
+	memset(_screen->getPalette(1).getData(), 0, 3);
 	memcpy(_scenePal, _screen->getCPagePtr(3)+336, 432);
 }
 
@@ -669,15 +669,15 @@
 	}
 
 	if (_noScriptEnter) {
-		memset(_screen->getPalette(0), 0, 384);
-		_screen->setScreenPalette(_screen->getPalette(0));
+		memset(_screen->getPalette(0).getData(), 0, 384);
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 	}
 
 	_screen->copyRegion(0, 0, 0, 0, 320, 144, 2, 0, Screen::CR_NO_P_CHECK);
 
 	if (_noScriptEnter) {
-		_screen->setScreenPalette(_screen->getPalette(1));
-		memcpy(_screen->getPalette(0), _screen->getPalette(1), 384);
+		_screen->setScreenPalette(_screen->getPalette(1).getData());
+		_screen->getPalette(0).copy(_screen->getPalette(1), 0, 128);
 	}
 
 	updateCharPal(0);
@@ -695,11 +695,8 @@
 }
 
 void KyraEngine_HoF::fadeScenePal(int srcIndex, int delayTime) {
-	uint8 *dst = _screen->getPalette(0) + 336;
-	const uint8 *src = _scenePal + (srcIndex << 4)*3;
-	memcpy(dst, src, 48);
-
-	_screen->fadePalette(_screen->getPalette(0), delayTime, &_updateFunctor);
+	_screen->getPalette(0).copy(_scenePal, srcIndex << 4, 16, 112);
+	_screen->fadePalette(_screen->getPalette(0).getData(), delayTime, &_updateFunctor);
 }
 
 #pragma mark -

Modified: scummvm/trunk/engines/kyra/scene_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene_lok.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/scene_lok.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -406,7 +406,7 @@
 	_screen->clearPage(3);
 	_res->exists(fileNameBuffer, true);
 	// FIXME: check this hack for amiga version
-	_screen->loadBitmap(fileNameBuffer, 3, 3, (_flags.platform == Common::kPlatformAmiga ? _screen->getPalette(0) : 0));
+	_screen->loadBitmap(fileNameBuffer, 3, 3, (_flags.platform == Common::kPlatformAmiga ? _screen->getPalette(0).getData() : 0));
 	_sprites->loadSceneShapes();
 	_exitListPtr = 0;
 
@@ -770,9 +770,9 @@
 void KyraEngine_LoK::initSceneScreen(int brandonAlive) {
 	if (_flags.platform == Common::kPlatformAmiga) {
 		if (_unkScreenVar1 && !queryGameFlag(0xF0)) {
-			memset(_screen->getPalette(2), 0, 32*3);
+			_screen->getPalette(2).clear();
 			if (_currentCharacter->sceneId != 117 || !queryGameFlag(0xB3))
-				_screen->setScreenPalette(_screen->getPalette(2));
+				_screen->setScreenPalette(_screen->getPalette(2).getData());
 		}
 
 		if (_unkScreenVar2 == 1)
@@ -782,12 +782,12 @@
 
 		if (_unkScreenVar1 && !queryGameFlag(0xA0)) {
 			if (_currentCharacter->sceneId == 45 && _paletteChanged)
-				memcpy(_screen->getPalette(0) + 12*3, _screen->getPalette(4) + 12*3, 2);
+				_screen->getPalette(0).copy(_screen->getPalette(4), 12, 1);
 
 			if (_currentCharacter->sceneId >= 229 && _currentCharacter->sceneId <= 245 && (_brandonStatusBit & 1))
-				memcpy(_screen->getPalette(0), _screen->getPalette(0) + 320*3, 64);
+				_screen->getPalette(0).copy(_screen->getPalette(10));
 
-			_screen->setScreenPalette(_screen->getPalette(0));
+			_screen->setScreenPalette(_screen->getPalette(0).getData());
 		}
 	} else {
 		if (_unkScreenVar1 && !queryGameFlag(0xA0)) {
@@ -797,7 +797,7 @@
 				col >>= 2;
 				_screen->getPalette(0)[684+i] = col;
 			}
-			_screen->setScreenPalette(_screen->getPalette(0));
+			_screen->setScreenPalette(_screen->getPalette(0).getData());
 		}
 
 		if (_unkScreenVar2 == 1)
@@ -807,10 +807,10 @@
 
 		if (_unkScreenVar1 && _paletteChanged) {
 			if (!queryGameFlag(0xA0)) {
-				memcpy(_screen->getPalette(0) + 684, _screen->getPalette(1) + 684, 60);
-				_screen->setScreenPalette(_screen->getPalette(0));
+				_screen->getPalette(0).copy(_screen->getPalette(1), 228, 20);
+				_screen->setScreenPalette(_screen->getPalette(0).getData());
 			} else {
-				memset(_screen->getPalette(0), 0, 768);
+				_screen->getPalette(0).clear();
 			}
 		}
 	}

Modified: scummvm/trunk/engines/kyra/scene_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene_lol.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/scene_lol.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -86,7 +86,7 @@
 	addLevelItems();
 	deleteMonstersFromBlock(_currentBlock);
 
-	_screen->generateGrayOverlay(_screen->getPalette(0), _screen->_grayOverlay, 32, 16, 0, 0, 128, true);
+	_screen->generateGrayOverlay(_screen->getPalette(0).getData(), _screen->_grayOverlay, 32, 16, 0, 0, 128, true);
 
 	_sceneDefaultUpdate = 0;
 	if (_screen->_fadeFlag == 3)
@@ -94,7 +94,7 @@
 
 	gui_drawPlayField();
 
-	setPaletteBrightness(_screen->getPalette(0), _brightness, _lampEffect);
+	setPaletteBrightness(_screen->getPalette(0).getData(), _brightness, _lampEffect);
 	setMouseCursorToItemInHand();
 
 	snd_playTrack(_curMusicTheme);
@@ -379,11 +379,9 @@
 	v += 128;
 
 	if (_lastOverridePalFilePtr) {
-		uint8 *tpal = _res->fileData(_lastOverridePalFilePtr, 0);
-		memcpy(_screen->getPalette(0), tpal, 384);
-		delete[] tpal;
+		_res->loadFileToBuf(_lastOverridePalFilePtr, _screen->getPalette(0).getData(), 384);
 	} else {
-		memcpy(_screen->getPalette(0), v, 384);
+		_screen->getPalette(0).copy(v, 0, 128);
 	}
 
 	v += 384;
@@ -393,14 +391,12 @@
 	memcpy(_screen->getPalette(0) + 384, tmpPal, 384);*/
 
 	if (_currentLevel == 11) {
-		uint8 *swampPal = _res->fileData("SWAMPICE.COL", 0);
-		memcpy(_screen->getPalette(2), swampPal, 384);
-		memcpy(_screen->getPalette(2) + 384, _screen->getPalette(0) + 384, 384);
-		delete[] swampPal;
+		_res->loadFileToBuf("SWAMPICE.COL", _screen->getPalette(2).getData(), 384);
+		_screen->getPalette(2).copy(_screen->getPalette(0), 128);
 
 		if (_flagsTable[52] & 0x04) {
-			uint8 *pal0 = _screen->getPalette(0);
-			uint8 *pal2 = _screen->getPalette(2);
+			uint8 *pal0 = _screen->getPalette(0).getData();
+			uint8 *pal2 = _screen->getPalette(2).getData();
 			for (int i = 1; i < 768; i++)
 				SWAP(pal0[i], pal2[i]);
 		}
@@ -427,7 +423,7 @@
 	for (int i = 0; i < 7; i++) {
 		weight = 100 - (i * _lastSpecialColorWeight);
 		weight = (weight > 0) ? (weight * 255) / 100 : 0;
-		_screen->generateLevelOverlay(_screen->getPalette(0), _screen->getLevelOverlay(i), _lastSpecialColor, weight);
+		_screen->generateLevelOverlay(_screen->getPalette(0).getData(), _screen->getLevelOverlay(i), _lastSpecialColor, weight);
 
 		for (int ii = 0; ii < 128; ii++) {
 			if (_screen->getLevelOverlay(i)[ii] == 255)
@@ -442,7 +438,7 @@
 		_screen->getLevelOverlay(7)[i] = i & 0xff;
 
 	_loadSuppFilesFlag = 0;
-	generateBrightnessPalette(_screen->getPalette(0), _screen->getPalette(1), _brightness, _lampEffect);
+	generateBrightnessPalette(_screen->getPalette(0).getData(), _screen->getPalette(1).getData(), _brightness, _lampEffect);
 
 	char tname[13];
 	snprintf(tname, sizeof(tname), "LEVEL%.02d.TLC", _currentLevel);
@@ -548,14 +544,14 @@
 	if (!_brightness || !_lampOilStatus) {
 		newLampEffect = 8;
 		if (newLampEffect != _lampEffect && _screen->_fadeFlag == 0)
-			setPaletteBrightness(_screen->getPalette(0), _brightness, newLampEffect);
+			setPaletteBrightness(_screen->getPalette(0).getData(), _brightness, newLampEffect);
 	} else {
 		tmpOilStatus = (_lampOilStatus < 100) ? _lampOilStatus : 100;
 		newLampEffect = (3 - ((tmpOilStatus - 1) / 25)) << 1;
 
 		if (_lampEffect == -1) {
 			if (_screen->_fadeFlag == 0)
-				setPaletteBrightness(_screen->getPalette(0), _brightness, newLampEffect);
+				setPaletteBrightness(_screen->getPalette(0).getData(), _brightness, newLampEffect);
 			_lampStatusTimer = _system->getMillis() + (10 + _rnd.getRandomNumberRng(1, 30)) * _tickLength;
 		} else {
 			if ((_lampEffect & 0xfe) == (newLampEffect & 0xfe)) {
@@ -567,7 +563,7 @@
 				}
 			} else {
 				if (_screen->_fadeFlag == 0)
-					setPaletteBrightness(_screen->getPalette(0), _lampEffect, newLampEffect);
+					setPaletteBrightness(_screen->getPalette(0).getData(), _lampEffect, newLampEffect);
 			}
 		}
 	}
@@ -1308,8 +1304,8 @@
 	uint16 targetBlock = 0;
 	int dist = getSpellTargetBlock(_currentBlock, _currentDirection, 3, targetBlock);
 
-	uint8 *p1 = _screen->getPalette(1);
-	uint8 *p2 = _screen->getPalette(3);
+	uint8 *p1 = _screen->getPalette(1).getData();
+	uint8 *p2 = _screen->getPalette(3).getData();
 
 	if (dist) {
 		WSAMovie_v2 *mov = new WSAMovie_v2(this);
@@ -1331,11 +1327,11 @@
 			p2[i * 3] = 0x3f;
 
 		uint32 ctime = _system->getMillis();
-		while (_screen->fadePaletteStep(_screen->getPalette(0), p2, _system->getMillis() - ctime, 10))
+		while (_screen->fadePaletteStep(_screen->getPalette(0).getData(), p2, _system->getMillis() - ctime, 10))
 			updateInput();
 
 		ctime = _system->getMillis();
-		while (_screen->fadePaletteStep(p2, _screen->getPalette(0), _system->getMillis() - ctime, 50))
+		while (_screen->fadePaletteStep(p2, _screen->getPalette(0).getData(), _system->getMillis() - ctime, 50))
 			updateInput();
 	}
 
@@ -1421,7 +1417,7 @@
 			initDialogueSequence(fieldType, 0);
 
 		if (fadeFlag) {
-			_screen->fadePalette(_screen->getPalette(3), 10);
+			_screen->fadePalette(_screen->getPalette(3).getData(), 10);
 			_screen->_fadeFlag = 0;
 		}
 
@@ -1437,9 +1433,9 @@
 		gui_disableControls(controlMode);
 
 		if (fadeFlag) {
-			memcpy(_screen->getPalette(3) + 384, _screen->getPalette(0) + 384, 384);
-			_screen->loadSpecialColors(_screen->getPalette(3));
-			_screen->fadePalette(_screen->getPalette(3), 10);
+			_screen->getPalette(3).copy(_screen->getPalette(0), 128);
+			_screen->loadSpecialColors(_screen->getPalette(3).getData());
+			_screen->fadePalette(_screen->getPalette(3).getData(), 10);
 			_screen->_fadeFlag = 0;
 		}
 
@@ -1495,7 +1491,7 @@
 		if (redrawPlayField)
 			gui_drawPlayField();
 
-		setPaletteBrightness(_screen->getPalette(0), _brightness, _lampEffect);
+		setPaletteBrightness(_screen->getPalette(0).getData(), _brightness, _lampEffect);
 
 	} else {
 		_currentControlMode = 0;

Modified: scummvm/trunk/engines/kyra/scene_mr.cpp
===================================================================
--- scummvm/trunk/engines/kyra/scene_mr.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/scene_mr.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -328,25 +328,23 @@
 
 void KyraEngine_MR::loadScenePal() {
 	char filename[16];
-	memcpy(_screen->getPalette(2), _screen->getPalette(0), 768);
+	_screen->getPalette(2).copy(_screen->getPalette(0));
 	strcpy(filename, _sceneList[_mainCharacter.sceneId].filename1);
 	strcat(filename, ".COL");
 
 	_screen->loadBitmap(filename, 3, 3, 0);
-	memcpy(_screen->getPalette(2), _screen->getCPagePtr(3), 432);
-	memset(_screen->getPalette(2), 0, 3);
+	_screen->getPalette(2).copy(_screen->getCPagePtr(3), 0, 144);
+	memset(_screen->getPalette(2).getData(), 0, 3);
 
 	for (int i = 144; i <= 167; ++i) {
-		uint8 *palette = _screen->getPalette(2) + i * 3;
+		uint8 *palette = _screen->getPalette(2).getData() + i * 3;
 		palette[0] = palette[2] = 63;
 		palette[1] = 0;
 	}
 
-	_screen->generateOverlay(_screen->getPalette(2), _paletteOverlay, 0xF0, 0x19);
+	_screen->generateOverlay(_screen->getPalette(2).getData(), _paletteOverlay, 0xF0, 0x19);
 
-	uint8 *palette = _screen->getPalette(2) + 432;
-	const uint8 *costPal = _costPalBuffer + _characterShapeFile * 72;
-	memcpy(palette, costPal, 24*3);
+	_screen->getPalette(2).copy(_costPalBuffer, _characterShapeFile * 24, 24, 144);
 }
 
 void KyraEngine_MR::loadSceneMsc() {
@@ -609,17 +607,17 @@
 	}
 
 	if (_noScriptEnter) {
-		memset(_screen->getPalette(0), 0, 432);
+		memset(_screen->getPalette(0).getData(), 0, 432);
 		if (!_wasPlayingVQA)
-			_screen->setScreenPalette(_screen->getPalette(0));
+			_screen->setScreenPalette(_screen->getPalette(0).getData());
 	}
 
 	_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0, Screen::CR_NO_P_CHECK);
 
 	if (_noScriptEnter) {
 		if (!_wasPlayingVQA)
-			_screen->setScreenPalette(_screen->getPalette(2));
-		memcpy(_screen->getPalette(0), _screen->getPalette(2), 432);
+			_screen->setScreenPalette(_screen->getPalette(2).getData());
+		_screen->getPalette(0).copy(_screen->getPalette(2), 0, 144);
 		if (_wasPlayingVQA) {
 			_screen->fadeFromBlack(0x3C);
 			_wasPlayingVQA = false;

Modified: scummvm/trunk/engines/kyra/screen.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/screen.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -139,7 +139,7 @@
 		}
 	}
 
-	setScreenPalette(getPalette(0));
+	setScreenPalette(getPalette(0).getData());
 
 	_curDim = 0;
 	_charWidth = 0;
@@ -490,7 +490,7 @@
 }
 
 void Screen::fadeFromBlack(int delay, const UpdateFunctor *upFunc) {
-	fadePalette(getPalette(0), delay, upFunc);
+	fadePalette(getPalette(0).getData(), delay, upFunc);
 }
 
 void Screen::fadeToBlack(int delay, const UpdateFunctor *upFunc) {
@@ -592,12 +592,12 @@
 	getPalette(0)[index * 3 + 0] = red;
 	getPalette(0)[index * 3 + 1] = green;
 	getPalette(0)[index * 3 + 2] = blue;
-	setScreenPalette(getPalette(0));
+	setScreenPalette(getPalette(0).getData());
 }
 
 void Screen::getRealPalette(int num, uint8 *dst) {
 	const int colors = (_vm->gameFlags().platform == Common::kPlatformAmiga ? 32 : 256);
-	const uint8 *palData = getPalette(num);
+	const uint8 *palData = getPalette(num).getData();
 
 	if (!palData) {
 		memset(dst, 0, colors * 3);
@@ -2661,9 +2661,9 @@
 	_system->updateScreen();
 }
 
-uint8 *Screen::getPalette(int num) {
+Palette &Screen::getPalette(int num) {
 	assert(num >= 0 && num < (_vm->gameFlags().platform == Common::kPlatformAmiga ? 7 : 4));
-	return _palettes[num]->getData();
+	return *_palettes[num];
 }
 
 byte Screen::getShapeFlag1(int x, int y) {
@@ -3288,9 +3288,9 @@
 	if (dstStart == -1)
 		dstStart = firstCol;
 
-	assert(numCols >= 0 && numCols < _numColors);
-	assert(firstCol >= 0 && firstCol < source.getNumColors());
-	assert(dstStart >= 0 && dstStart + numCols < _numColors);
+	assert(numCols >= 0 && numCols <= _numColors);
+	assert(firstCol >= 0 && firstCol <= source.getNumColors());
+	assert(dstStart >= 0 && dstStart + numCols <= _numColors);
 
 	memcpy(_palData + dstStart * 3, source._palData + firstCol * 3, numCols * 3);
 }
@@ -3302,9 +3302,9 @@
 	if (dstStart == -1)
 		dstStart = firstCol;
 
-	assert(numCols >= 0 && numCols < _numColors);
+	assert(numCols >= 0 && numCols <= _numColors);
 	assert(firstCol >= 0);
-	assert(dstStart >= 0 && dstStart + numCols < _numColors);
+	assert(dstStart >= 0 && dstStart + numCols <= _numColors);
 
 	memcpy(_palData + dstStart * 3, source + firstCol * 3, numCols * 3);
 }

Modified: scummvm/trunk/engines/kyra/screen.h
===================================================================
--- scummvm/trunk/engines/kyra/screen.h	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/screen.h	2009-06-22 02:35:45 UTC (rev 41741)
@@ -232,7 +232,7 @@
 	const uint8 *getScreenPalette() const { return _screenPalette->getData(); }
 
 	void getRealPalette(int num, uint8 *dst);
-	uint8 *getPalette(int num);
+	Palette &getPalette(int num);
 
 	// gui specific (processing on _curPage)
 	enum ShadeType {

Modified: scummvm/trunk/engines/kyra/screen_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen_lok.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/screen_lok.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -80,13 +80,15 @@
 
 void Screen_LoK::fadeSpecialPalette(int palIndex, int startIndex, int size, int fadeTime) {
 	assert(_vm->palTable1()[palIndex]);
-	assert(getPalette(0));
+
 	uint8 tempPal[768];
-	memcpy(tempPal, getPalette(0), 768);
+	memcpy(tempPal, getPalette(0).getData(), 768);
 	memcpy(&tempPal[startIndex*3], _vm->palTable1()[palIndex], size*3);
+
 	fadePalette(tempPal, fadeTime*18);
-	memcpy(&getPalette(0)[startIndex*3], &tempPal[startIndex*3], size*3);
-	setScreenPalette(getPalette(0));
+
+	getPalette(0).copy(tempPal, startIndex, size);
+	setScreenPalette(getPalette(0).getData());
 	_system->updateScreen();
 }
 

Modified: scummvm/trunk/engines/kyra/screen_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen_lol.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/screen_lol.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -284,7 +284,7 @@
 
 	uint8 *tpal = new uint8[768];
 
-	memcpy(tpal, getPalette(0), 768);
+	memcpy(tpal, getPalette(0).getData(), 768);
 	memset(tpal, 0, 384);
 	loadSpecialColors(tpal);
 	fadePalette(tpal, delay);
@@ -838,8 +838,8 @@
 }
 
 void Screen_LoL::fadeToPalette1(int delay) {
-	loadSpecialColors(getPalette(1));
-	fadePalette(getPalette(1), delay);
+	loadSpecialColors(getPalette(1).getData());
+	fadePalette(getPalette(1).getData(), delay);
 	_fadeFlag = 0;
 }
 
@@ -864,7 +864,7 @@
 bool Screen_LoL::fadeColor(int dstColorIndex, int srcColorIndex, uint32 elapsedTime, uint32 targetTime) {
 	uint8 *dst = _screenPalette->getData() + 3 * dstColorIndex;
 	uint8 *src = _screenPalette->getData() + 3 * srcColorIndex;
-	uint8 *p = getPalette(1) + 3 * dstColorIndex;
+	uint8 *p = getPalette(1).getData() + 3 * dstColorIndex;
 
 	bool res = false;
 
@@ -908,7 +908,7 @@
 
 bool Screen_LoL::fadePaletteStep(uint8 *pal1, uint8 *pal2, uint32 elapsedTime, uint32 targetTime) {
 	uint8 tpal[768];
-	uint8 *p1 = getPalette(1);
+	uint8 *p1 = getPalette(1).getData();
 
 	bool res = false;
 	for (int i = 0; i < 768; i++) {

Modified: scummvm/trunk/engines/kyra/script_hof.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_hof.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/script_hof.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -146,10 +146,10 @@
 	const char *palfile = stackPosString(1);
 
 	_screen->loadBitmap(cpsfile, 3, 3, 0);
-	memcpy(_screen->getPalette(2), _screen->getPalette(0), 768);
-	_screen->loadPalette(palfile, _screen->getPalette(2));
+	_screen->getPalette(2).copy(_screen->getPalette(0));
+	_screen->loadPalette(palfile, _screen->getPalette(2).getData());
 	_screen->fillRect(0, 0, 319, 199, 207);
-	_screen->setScreenPalette(_screen->getPalette(2));
+	_screen->setScreenPalette(_screen->getPalette(2).getData());
 	_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
 	if (!scumm_stricmp(cpsfile, "_MEANWIL.CPS") && _flags.lang == Common::JA_JPN) {
 		Screen::FontId o = _screen->setFont(Screen::FID_6_FNT);
@@ -559,15 +559,15 @@
 
 int KyraEngine_HoF::o2_loadPalette384(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_HoF::o2_loadPalette384(%p) ('%s')", (const void *)script, stackPosString(0));
-	memcpy(_screen->getPalette(1), _screen->getPalette(0), 768);
-	_res->loadFileToBuf(stackPosString(0), _screen->getPalette(1), 384);
+	_screen->getPalette(1).copy(_screen->getPalette(0));
+	_res->loadFileToBuf(stackPosString(0), _screen->getPalette(1).getData(), 384);
 	return 0;
 }
 
 int KyraEngine_HoF::o2_setPalette384(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_HoF::o2_setPalette384(%p) ()", (const void *)script);
-	memcpy(_screen->getPalette(0), _screen->getPalette(1), 384);
-	_screen->setScreenPalette(_screen->getPalette(0));
+	_screen->getPalette(0).copy(_screen->getPalette(1), 0, 128);
+	_screen->setScreenPalette(_screen->getPalette(0).getData());
 	return 0;
 }
 
@@ -774,13 +774,13 @@
 	displayInvWsaLastFrame();
 	backUpPage0();
 
-	memcpy(_screen->getPalette(2), _screen->getPalette(0), 768);
+	_screen->getPalette(2).copy(_screen->getPalette(0));
 
 	_screen->clearPage(3);
 	_screen->loadBitmap("_NOTE.CPS", 3, 3, 0);
 
 	sprintf(filename, "_NTEPAL%.1d.COL", letter+1);
-	_res->loadFileToBuf(filename, _screen->getPalette(0), 768);
+	_res->loadFileToBuf(filename, _screen->getPalette(0).getData(), 768);
 
 	_screen->fadeToBlack(0x14);
 
@@ -798,7 +798,7 @@
 	}
 
 	_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0, Screen::CR_NO_P_CHECK);
-	_screen->fadePalette(_screen->getPalette(0), 0x14);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 0x14);
 	_screen->setMouseCursor(0, 0, getShapePtr(0));
 	setMousePos(280, 160);
 
@@ -819,8 +819,8 @@
 	_screen->hideMouse();
 	_screen->fadeToBlack(0x14);
 	restorePage0();
-	memcpy(_screen->getPalette(0), _screen->getPalette(2), 768);
-	_screen->fadePalette(_screen->getPalette(0), 0x14);
+	_screen->getPalette(0).copy(_screen->getPalette(2));
+	_screen->fadePalette(_screen->getPalette(0).getData(), 0x14);
 	setHandItem(_itemInHand);
 	_screen->showMouse();
 
@@ -1125,13 +1125,13 @@
 
 int KyraEngine_HoF::o2_mushroomEffect(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_HoF::o2_mushroomEffect(%p)", (const void *)script);
-	memcpy(_screen->getPalette(2), _screen->getPalette(0), 768);
+	_screen->getPalette(2).copy(_screen->getPalette(0));
 
 	for (int i = 1; i < 768; i += 3)
 		_screen->getPalette(0)[i] = 0;
 	snd_playSoundEffect(106);
-	_screen->fadePalette(_screen->getPalette(0), 90, &_updateFunctor);
-	memcpy(_screen->getPalette(0), _screen->getPalette(2), 768);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 90, &_updateFunctor);
+	_screen->getPalette(0).copy(_screen->getPalette(2));
 
 	for (int i = 0; i < 768; i += 3) {
 		_screen->getPalette(0)[i] = _screen->getPalette(0)[i + 1] = 0;
@@ -1140,10 +1140,10 @@
 			_screen->getPalette(0)[i + 2] = 63;
 	}
 	snd_playSoundEffect(106);
-	_screen->fadePalette(_screen->getPalette(0), 90, &_updateFunctor);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 90, &_updateFunctor);
 
-	memcpy(_screen->getPalette(0), _screen->getPalette(2), 768);
-	_screen->fadePalette(_screen->getPalette(0), 30, &_updateFunctor);
+	_screen->getPalette(0).copy(_screen->getPalette(2));
+	_screen->fadePalette(_screen->getPalette(0).getData(), 30, &_updateFunctor);
 
 	return 0;
 }
@@ -1262,19 +1262,23 @@
 
 int KyraEngine_HoF::o2_processPaletteIndex(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_HoF::o2_processPaletteIndex(%p) (%d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5));
-	uint8 *palette = _screen->getPalette(0);
+	uint8 *palette = _screen->getPalette(0).getData();
+
 	const int index = stackPos(0);
 	const bool updatePalette = (stackPos(4) != 0);
 	const int delayTime = stackPos(5);
+
 	palette[index*3+0] = (stackPos(1) * 0x3F) / 100;
 	palette[index*3+1] = (stackPos(2) * 0x3F) / 100;
 	palette[index*3+2] = (stackPos(3) * 0x3F) / 100;
+
 	if (updatePalette) {
 		if (delayTime > 0)
 			_screen->fadePalette(palette, delayTime, &_updateFunctor);
 		else
 			_screen->setScreenPalette(palette);
 	}
+
 	return 0;
 }
 
@@ -1396,7 +1400,7 @@
 	assert(strings);
 
 	_screen->clearPage(0);
-	_screen->loadPalette("THANKS.COL", _screen->getPalette(0));
+	_screen->loadPalette("THANKS.COL", _screen->getPalette(0).getData());
 	_screen->loadBitmap("THANKS.CPS", 3, 3, 0);
 	_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
 
@@ -1406,7 +1410,7 @@
 	for (int i = 0; i < 6; i++)
 		_text->printText(strings[i], _text->getCenterStringX(strings[i], 1, 319), y + i * 10, 255, 207, 0);
 
-	_screen->setScreenPalette(_screen->getPalette(0));
+	_screen->setScreenPalette(_screen->getPalette(0).getData());
 	_screen->updateScreen();
 
 	_eventList.clear();

Modified: scummvm/trunk/engines/kyra/script_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lok.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/script_lok.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -231,8 +231,9 @@
 		debugC(3, kDebugLevelScriptFuncs, "KyraEngine_LoK::o1_fadeSpecialPalette(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
 		if (_currentCharacter->sceneId != 45) {
 			if (stackPos(0) == 13) {
-				memcpy(_screen->getPalette(0), _screen->getPalette(0) + 384*3, 32*3);
-				_screen->setScreenPalette(_screen->getPalette(0));
+				// TODO: Check this!
+				_screen->getPalette(0).copy(_screen->getPalette(12));
+				_screen->setScreenPalette(_screen->getPalette(0).getData());
 			}
 		} else {
 			warning("KyraEngine_LoK::o1_fadeSpecialPalette not implemented");
@@ -578,7 +579,7 @@
 
 int KyraEngine_LoK::o1_setCustomPaletteRange(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_LoK::o1_setCustomPaletteRange(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
-	memcpy(_screen->getPalette(1) + stackPos(1)*3, _specialPalettes[stackPos(0)], stackPos(2)*3);
+	_screen->getPalette(1).copy(_specialPalettes[stackPos(0)], 0, stackPos(2), stackPos(1));
 	return 0;
 }
 
@@ -1243,8 +1244,9 @@
 			palIndex = 14;
 		}
 	}
-	const uint8 *palette = _specialPalettes[palIndex];
-	memcpy(_screen->getPalette(1) + 684, palette, 44);
+
+	// TODO: Original used "44" here, which would be 14.666... colors. That looks strange, we should verify this one again.
+	_screen->getPalette(1).copy(_specialPalettes[palIndex], 0, 15, 228);
 	return 0;
 }
 
@@ -1505,32 +1507,29 @@
 
 	if (_flags.platform == Common::kPlatformAmiga) {
 		if (cmd == 0) {
-			fadePal = _screen->getPalette(2);
-			memset(fadePal, 0, 32*3);
-			memcpy(_screen->getPalette(4), _screen->getPalette(0), 32*3);
+			_screen->getPalette(2).clear();
+			fadePal = _screen->getPalette(2).getData();
+			_screen->getPalette(4).copy(_screen->getPalette(0));
 		} else if (cmd == 1) {
-			fadePal = _screen->getPalette(0);
-			memcpy(_screen->getPalette(0), _screen->getPalette(4), 32*3);
+			fadePal = _screen->getPalette(0).getData();
+			_screen->getPalette(0).copy(_screen->getPalette(4));
 		} else if (cmd == 2) {
-			fadePal = _screen->getPalette(0);
-			memset(_screen->getPalette(2), 0, 32*3);
+			fadePal = _screen->getPalette(0).getData();
+			_screen->getPalette(2).clear();
 		}
 	} else {
 		if (cmd == 0) {
-			fadePal = _screen->getPalette(2);
-			uint8 *screenPal = _screen->getPalette(0);
-			uint8 *backUpPal = _screen->getPalette(3);
-
-			memcpy(backUpPal, screenPal, sizeof(uint8)*768);
-			memset(fadePal, 0, sizeof(uint8)*768);
+			_screen->getPalette(2).clear();
+			fadePal = _screen->getPalette(2).getData();
+			_screen->getPalette(3).copy(_screen->getPalette(0));
 		} else if (cmd == 1) {
 			//fadePal = _screen->getPalette(3);
 			warning("unimplemented o1_fadeEntirePalette function");
 			return 0;
 		} else if (cmd == 2) {
-			memset(_screen->getPalette(2), 0, 768);
-			memcpy(_screen->getPalette(0), _screen->getPalette(1), 768);
-			fadePal = _screen->getPalette(0);
+			_screen->getPalette(2).clear();
+			_screen->getPalette(0).copy(_screen->getPalette(1));
+			fadePal = _screen->getPalette(0).getData();
 		}
 	}
 

Modified: scummvm/trunk/engines/kyra/script_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lol.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/script_lol.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -602,14 +602,14 @@
 
 int LoLEngine::olol_fadePalette(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_fadePalette(%p)", (const void *)script);
-	_screen->fadePalette(_screen->getPalette(3), 10);
+	_screen->fadePalette(_screen->getPalette(3).getData(), 10);
 	_screen->_fadeFlag = 0;
 	return 1;
 }
 
 int LoLEngine::olol_loadBitmap(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_clearDialogueField(%p) (%s, %d)", (const void *)script, stackPosString(0), stackPos(1));
-	_screen->loadBitmap(stackPosString(0), 3, 3, _screen->getPalette(3));
+	_screen->loadBitmap(stackPosString(0), 3, 3, _screen->getPalette(3).getData());
 	if (stackPos(1) != 2)
 		_screen->copyPage(3, stackPos(1));
 	return 1;
@@ -864,9 +864,9 @@
 
 int LoLEngine::olol_fadeSequencePalette(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_fadeSequencePalette(%p)", (const void *)script);
-	memcpy(_screen->getPalette(3) + 0x180, _screen->getPalette(0) + 0x180, 0x180);
-	_screen->loadSpecialColors(_screen->getPalette(3));
-	_screen->fadePalette(_screen->getPalette(3), 10);
+	_screen->getPalette(3).copy(_screen->getPalette(0), 128);
+	_screen->loadSpecialColors(_screen->getPalette(3).getData());
+	_screen->fadePalette(_screen->getPalette(3).getData(), 10);
 	_screen->_fadeFlag = 0;
 	return 1;
 }
@@ -876,7 +876,7 @@
 	if (_screen->_fadeFlag != 2)
 		_screen->fadeClearSceneWindow(10);
 	gui_drawPlayField();
-	setPaletteBrightness(_screen->getPalette(0), _brightness, _lampEffect);
+	setPaletteBrightness(_screen->getPalette(0).getData(), _brightness, _lampEffect);
 	_screen->_fadeFlag = 0;
 	return 1;
 }
@@ -1408,7 +1408,7 @@
 	
 	_eventList.clear();
 	_screen->hideMouse();
-	memset(_screen->getPalette(1), 0, 768);
+	_screen->getPalette(1).clear();
 	
 	showOutro(c, (_monsterDifficulty == 2));
 	quitGame();
@@ -1428,7 +1428,7 @@
 	uint16 old = _brightness;
 	_brightness = stackPos(0);
 	if (stackPos(1) == 1)
-		setPaletteBrightness(_screen->getPalette(0), stackPos(0), _lampEffect);
+		setPaletteBrightness(_screen->getPalette(0).getData(), stackPos(0), _lampEffect);
 	return old;
 }
 
@@ -2002,8 +2002,8 @@
 
 int LoLEngine::olol_restoreFadePalette(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_restoreFadePalette(%p)", (const void *)script);
-	memcpy(_screen->getPalette(0), _screen->getPalette(1), 384);
-	_screen->fadePalette(_screen->getPalette(0), 10);
+	_screen->getPalette(0).copy(_screen->getPalette(1), 0, 128);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 10);
 	_screen->_fadeFlag = 0;
 	return 1;
 }
@@ -2101,8 +2101,8 @@
 
 int LoLEngine::olol_paletteFlash(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_paletteFlash(%p) (%d)", (const void *)script, stackPos(0));
-	uint8 *s = _screen->getPalette(1);
-	uint8 *d = _screen->getPalette(3);
+	uint8 *s = _screen->getPalette(1).getData();
+	uint8 *d = _screen->getPalette(3).getData();
 	uint8 ovl[256];
 	generateFlashPalette(s, d, stackPos(0));
 	_screen->loadSpecialColors(s);
@@ -2289,7 +2289,7 @@
 
 int LoLEngine::tlol_setupPaletteFade(const TIM *tim, const uint16 *param) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::t2_playSoundEffect(%p, %p) (%d)", (const void *)tim, (const void *)param, param[0]);
-	_screen->getFadeParams(_screen->getPalette(0), param[0], _tim->_palDelayInc, _tim->_palDiff);
+	_screen->getFadeParams(_screen->getPalette(0).getData(), param[0], _tim->_palDelayInc, _tim->_palDiff);
 	_tim->_palDelayAcc = 0;
 	return 1;
 }
@@ -2297,15 +2297,15 @@
 int LoLEngine::tlol_loadPalette(const TIM *tim, const uint16 *param) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_loadPalette(%p, %p) (%d)", (const void *)tim, (const void *)param, param[0]);
 	const char *palFile = (const char *)(tim->text + READ_LE_UINT16(tim->text + (param[0]<<1)));
-	_screen->loadPalette(palFile, _screen->getPalette(0));
+	_screen->loadPalette(palFile, _screen->getPalette(0).getData());
 	return 1;
 }
 
 int LoLEngine::tlol_setupPaletteFadeEx(const TIM *tim, const uint16 *param) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_setupPaletteFadeEx(%p, %p) (%d)", (const void *)tim, (const void *)param, param[0]);
-	memcpy(_screen->getPalette(0), _screen->getPalette(1), 768);
+	_screen->getPalette(0).copy(_screen->getPalette(1));
 
-	_screen->getFadeParams(_screen->getPalette(0), param[0], _tim->_palDelayInc, _tim->_palDiff);
+	_screen->getFadeParams(_screen->getPalette(0).getData(), param[0], _tim->_palDelayInc, _tim->_palDiff);
 	_tim->_palDelayAcc = 0;
 	return 1;
 }
@@ -2381,7 +2381,6 @@
 
 int LoLEngine::tlol_fadeClearWindow(const TIM *tim, const uint16 *param) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_fadeClearWindow(%p, %p) (%d)", (const void *)tim, (const void *)param, param[0]);
-	uint8 *tmp = 0;
 
 	switch (param[0]) {
 	case 0:
@@ -2389,10 +2388,9 @@
 		break;
 
 	case 1:
-		tmp = _screen->getPalette(3);
-		memcpy(tmp + 0x180, _screen->getPalette(0) + 0x180, 0x180);
-		_screen->loadSpecialColors(tmp);
-		_screen->fadePalette(tmp, 10);
+		_screen->getPalette(3).copy(_screen->getPalette(0), 128);
+		_screen->loadSpecialColors(_screen->getPalette(3).getData());
+		_screen->fadePalette(_screen->getPalette(3).getData(), 10);
 		_screen->_fadeFlag = 0;
 		break;
 
@@ -2401,9 +2399,8 @@
 		break;
 
 	case 3:
-		tmp = _screen->getPalette(3);
-		_screen->loadSpecialColors(tmp);
-		_screen->fadePalette(tmp, 10);
+		_screen->loadSpecialColors(_screen->getPalette(3).getData());
+		_screen->fadePalette(_screen->getPalette(3).getData(), 10);
 		_screen->_fadeFlag = 0;
 		break;
 
@@ -2411,14 +2408,13 @@
 		if (_screen->_fadeFlag != 2)
 			_screen->fadeClearSceneWindow(10);
 		gui_drawPlayField();
-		setPaletteBrightness(_screen->getPalette(0), _brightness, _lampEffect);
+		setPaletteBrightness(_screen->getPalette(0).getData(), _brightness, _lampEffect);
 		_screen->_fadeFlag = 0;
 		break;
 
 	case 5:
-		tmp = _screen->getPalette(3);
-		_screen->loadSpecialColors(tmp);
-		_screen->fadePalette(_screen->getPalette(1), 10);
+		_screen->loadSpecialColors(_screen->getPalette(3).getData());
+		_screen->fadePalette(_screen->getPalette(1).getData(), 10);
 		_screen->_fadeFlag = 0;
 		break;
 
@@ -2517,7 +2513,7 @@
 	strcpy(filename, sceneFile);
 	strcat(filename, ".CPS");
 
-	_screen->loadBitmap(filename, 7, 5, _screen->getPalette(0));
+	_screen->loadBitmap(filename, 7, 5, _screen->getPalette(0).getData());
 
 	filename[0] = 0;
 

Modified: scummvm/trunk/engines/kyra/script_tim.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_tim.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/script_tim.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -427,7 +427,7 @@
 	};
 
 	for (int i = 0; i < 15; ++i) {
-		uint8 *palette = _screen->getPalette(0) + (240 + i) * 3;
+		uint8 *palette = _screen->getPalette(0).getData() + (240 + i) * 3;
 
 		uint8 c1 = (((15 - i) << 2) * palTable[index*3+0]) / 100;
 		uint8 c2 = (((15 - i) << 2) * palTable[index*3+1]) / 100;
@@ -439,9 +439,9 @@
 	}
 
 	if (!fadePalette && !_palDiff) {
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 	} else {
-		_screen->getFadeParams(_screen->getPalette(0), fadePalette, _palDelayInc, _palDiff);
+		_screen->getFadeParams(_screen->getPalette(0).getData(), fadePalette, _palDelayInc, _palDiff);
 		_palDelayAcc = 0;
 	}
 }
@@ -478,7 +478,7 @@
 			anim->wsa = new WSAMovie_v2(_vm);
 		assert(anim->wsa);
 
-		anim->wsa->open(file, wsaOpenFlags, (index == 1) ? _screen->getPalette(0) : 0);
+		anim->wsa->open(file, wsaOpenFlags, (index == 1) ? _screen->getPalette(0).getData() : 0);
 	}
 
 	if (anim->wsa && anim->wsa->opened()) {
@@ -504,7 +504,7 @@
 		}
 
 		if (wsaFlags & 2) {
-			_screen->fadePalette(_screen->getPalette(1), 15, 0);
+			_screen->fadePalette(_screen->getPalette(1).getData(), 15, 0);
 			_screen->clearPage(_drawPage2);
 			if (_drawPage2)
 				_screen->checkedPageUpdate(8, 4);
@@ -515,7 +515,7 @@
 			snprintf(file, 32, "%s.CPS", filename);
 
 			if (_vm->resource()->exists(file)) {
-				_screen->loadBitmap(file, 3, 3, _screen->getPalette(0));
+				_screen->loadBitmap(file, 3, 3, _screen->getPalette(0).getData());
 				_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, _drawPage2, Screen::CR_NO_P_CHECK);
 				if (_drawPage2)
 					_screen->checkedPageUpdate(8, 4);
@@ -526,10 +526,10 @@
 		}
 
 		if (wsaFlags & 2)
-			_screen->fadePalette(_screen->getPalette(0), 30, 0);
+			_screen->fadePalette(_screen->getPalette(0).getData(), 30, 0);
 	} else {
 		if (wsaFlags & 2) {
-			_screen->fadePalette(_screen->getPalette(1), 15, 0);
+			_screen->fadePalette(_screen->getPalette(1).getData(), 15, 0);
 			_screen->clearPage(_drawPage2);
 			if (_drawPage2)
 				_screen->checkedPageUpdate(8, 4);
@@ -539,7 +539,7 @@
 		snprintf(file, 32, "%s.CPS", filename);
 
 		if (_vm->resource()->exists(file)) {
-			_screen->loadBitmap(file, 3, 3, _screen->getPalette(0));
+			_screen->loadBitmap(file, 3, 3, _screen->getPalette(0).getData());
 			_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, _drawPage2, Screen::CR_NO_P_CHECK);
 			if (_drawPage2)
 				_screen->checkedPageUpdate(8, 4);
@@ -547,7 +547,7 @@
 		}
 
 		if (wsaFlags & 2)
-			_screen->fadePalette(_screen->getPalette(0), 30, 0);
+			_screen->fadePalette(_screen->getPalette(0).getData(), 30, 0);
 	}
 
 	return anim;
@@ -947,13 +947,13 @@
 	if (_vm->resource()->exists(file)) {
 		anim->wsa = new WSAMovie_v2(_vm);
 		assert(anim->wsa);
-		anim->wsa->open(file, wsaOpenFlags, _screen->getPalette(3));
+		anim->wsa->open(file, wsaOpenFlags, _screen->getPalette(3).getData());
 	}
 
 	if (wsaFlags & 1) {
 		if (_screen->_fadeFlag != 1)
 			_screen->fadeClearSceneWindow(10);
-		memcpy(_screen->getPalette(3) + 384, _screen->getPalette(0) + 384, 384);
+		_screen->getPalette(3).copy(_screen->getPalette(0), 128, 128);
 	} else if (wsaFlags & 2) {
 		_screen->fadeToBlack(10);
 	}
@@ -962,8 +962,8 @@
 		anim->wsa->displayFrame(0, 0, x, y, 0, 0, 0);
 
 	if (wsaFlags & 3) {
-		_screen->loadSpecialColors(_screen->getPalette(3));
-		_screen->fadePalette(_screen->getPalette(3), 10);
+		_screen->loadSpecialColors(_screen->getPalette(3).getData());
+		_screen->fadePalette(_screen->getPalette(3).getData(), 10);
 		_screen->_fadeFlag = 0;
 	}
 

Modified: scummvm/trunk/engines/kyra/seqplayer.cpp
===================================================================
--- scummvm/trunk/engines/kyra/seqplayer.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/seqplayer.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -92,7 +92,7 @@
 }
 
 void SeqPlayer::makeHandShapes() {
-	_screen->loadBitmap("WRITING.CPS", 3, 3, _screen->getPalette(0));
+	_screen->loadBitmap("WRITING.CPS", 3, 3, _screen->getPalette(0).getData());
 	if (_vm->gameFlags().platform == Common::kPlatformMacintosh || _vm->gameFlags().platform == Common::kPlatformAmiga) {
 		freeHandShapes();
 
@@ -241,25 +241,25 @@
 
 	if (_vm->gameFlags().platform == Common::kPlatformAmiga) {
 		if (!colNum)
-			memcpy(_screen->getPalette(0), _screen->getPalette(0) + 576, 3*32);
+			_screen->getPalette(0).copy(_screen->getPalette(6));
 		else if (colNum == 3)
-			memcpy(_screen->getPalette(0), _screen->getPalette(0) + 672, 3*32);
+			_screen->getPalette(0).copy(_screen->getPalette(7));
 		else if (colNum == 4)
-			memcpy(_screen->getPalette(0), _screen->getPalette(0) + 288, 3*32);
+			_screen->getPalette(0).copy(_screen->getPalette(3));
 
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 	} else {
 		uint32 fileSize;
 		uint8 *srcData;
 		srcData = _res->fileData(_vm->seqCOLTable()[colNum], &fileSize);
-		memcpy(_screen->getPalette(0), srcData, fileSize);
+		memcpy(_screen->getPalette(0).getData(), srcData, fileSize);
 		delete[] srcData;
 	}
 }
 
 void SeqPlayer::s1_loadBitmap() {
 	uint8 cpsNum = *_seqData++;
-	_screen->loadBitmap(_vm->seqCPSTable()[cpsNum], 3, 3, _screen->getPalette(0));
+	_screen->loadBitmap(_vm->seqCPSTable()[cpsNum], 3, 3, _screen->getPalette(0).getData());
 }
 
 void SeqPlayer::s1_fadeToBlack() {

Modified: scummvm/trunk/engines/kyra/sequences_hof.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sequences_hof.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/sequences_hof.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -62,7 +62,7 @@
 	int oldPage = _screen->setCurPage(2);
 
 	for (int i = 0; i < 4; ++i)
-		memset(_screen->getPalette(i), 0, 0x300);
+		_screen->getPalette(i).clear();
 
 	_screen->clearPage(10);
 	_screen->clearPage(12);
@@ -77,7 +77,7 @@
 	for (int seqNum = startSeq; seqNum <= endSeq && !((skipFlag() && allowSkip) || shouldQuit() || (_abortIntroFlag && allowSkip) || _menuChoice); seqNum++) {
 		_screen->clearPage(0);
 		_screen->clearPage(8);
-		memcpy(_screen->getPalette(1), _screen->getPalette(0), 0x300);
+		_screen->getPalette(1).copy(_screen->getPalette(0));
 		_seqFrameCounter = 0;
 		_seqStartTime = _system->getMillis();
 
@@ -87,12 +87,12 @@
 		SeqProc cb = _callbackS[seqNum];
 
 		if (cseq.flags & 2) {
-			_screen->loadBitmap(cseq.cpsFile, 2, 2, _screen->getPalette(0));
-			_screen->setScreenPalette(_screen->getPalette(0));
+			_screen->loadBitmap(cseq.cpsFile, 2, 2, _screen->getPalette(0).getData());
+			_screen->setScreenPalette(_screen->getPalette(0).getData());
 		} else {
 			_screen->setCurPage(2);
 			_screen->clearPage(2);
-			_screen->loadPalette("goldfont.col", _screen->getPalette(0));
+			_screen->loadPalette("goldfont.col", _screen->getPalette(0).getData());
 		}
 
 		if (cb && !(_flags.isDemo && !_flags.isTalkie))
@@ -100,8 +100,8 @@
 
 		if (cseq.flags & 1) {
 			_seqWsa->close();
-			_seqWsa->open(cseq.wsaFile, 0, _screen->getPalette(0));
-			_screen->setScreenPalette(_screen->getPalette(0));
+			_seqWsa->open(cseq.wsaFile, 0, _screen->getPalette(0).getData());
+			_screen->setScreenPalette(_screen->getPalette(0).getData());
 			_seqWsa->displayFrame(0, 2, cseq.xPos, cseq.yPos, 0, 0, 0);
 		}
 
@@ -361,7 +361,7 @@
 }
 
 int KyraEngine_HoF::seq_introOverview(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
-	uint8 *tmpPal = &(_screen->getPalette(3)[0x101]);
+	uint8 *tmpPal = _screen->getPalette(3).getData() + 0x101;
 	memset(tmpPal, 0, 256);
 	_seqSubFrameEndTimeInternal = 0;
 	uint32 now = 0;
@@ -372,9 +372,9 @@
 		_sound->playTrack(4);
 		_seqSubFrameEndTimeInternal = _system->getMillis() + 60 * _tickLength;
 
-		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0) + 3, 255) & 0xff;
+		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 		memset(_seqTextColorMap, _seqTextColor[1], 16);
-		_seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0) + 3, 255) & 0xff;
+		_seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 
 		_screen->setTextColorMap(_seqTextColorMap);
 
@@ -384,7 +384,7 @@
 		break;
 
 	case 1:
-		_screen->generateGrayOverlay(_screen->getPalette(0), _screen->getPalette(3), 0x40, 0, 0, 0, 0x100, true);
+		_screen->generateGrayOverlay(_screen->getPalette(0).getData(), _screen->getPalette(3).getData(), 0x40, 0, 0, 0, 0x100, true);
 		for (int i = 0; i < 256; i++)
 			tmpPal[_screen->getPalette(3)[i]] = 1;
 
@@ -411,16 +411,16 @@
 
 	case 200:
 		seq_waitForTextsTimeout();
-		_screen->fadePalette(_screen->getPalette(2), 64);
+		_screen->fadePalette(_screen->getPalette(2).getData(), 64);
 		break;
 
 	case 201:
-		_screen->setScreenPalette(_screen->getPalette(2));
+		_screen->setScreenPalette(_screen->getPalette(2).getData());
 		_screen->updateScreen();
-		_screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3));
+		_screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3).getData());
 		_screen->copyPage(2, 12);
 		_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 		_screen->updateScreen();
 		seq_resetActiveWSA(0);
 		seq_resetActiveWSA(1);
@@ -465,10 +465,10 @@
 		_seqSubframePlaying = true;
 		_sound->playTrack(5);
 
-		_screen->generateGrayOverlay(_screen->getPalette(0), _screen->getPalette(3), 0x24, 0, 0, 0, 0x100, false);
-		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0) + 3, 255) & 0xff;
+		_screen->generateGrayOverlay(_screen->getPalette(0).getData(), _screen->getPalette(3).getData(), 0x24, 0, 0, 0, 0x100, false);
+		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 		memset(_seqTextColorMap, _seqTextColor[1], 16);
-		_seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0) + 3, 255) & 0xff;
+		_seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 
 		_screen->setTextColorMap(_seqTextColorMap);
 		break;
@@ -482,7 +482,7 @@
 		seq_waitForTextsTimeout();
 
 		_screen->copyPage(12, 2);
-		_screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3));
+		_screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3).getData());
 		_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
 		_screen->updateScreen();
 		_screen->copyPage(2, 12);
@@ -503,7 +503,7 @@
 
 	case 340:
 		seq_resetActiveWSA(0);
-		_screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3));
+		_screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3).getData());
 		_screen->copyPage(2, 12);
 		_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
 		_screen->updateScreen();
@@ -539,10 +539,10 @@
 		_seqSubframePlaying = true;
 		_sound->playTrack(6);
 
-		_screen->generateGrayOverlay(_screen->getPalette(0), _screen->getPalette(3), 0x24, 0, 0, 0, 0x100, false);
-		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0) + 3, 255) & 0xff;
+		_screen->generateGrayOverlay(_screen->getPalette(0).getData(), _screen->getPalette(3).getData(), 0x24, 0, 0, 0, 0x100, false);
+		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 		memset(_seqTextColorMap, _seqTextColor[1], 16);
-		_seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0) + 3, 255) & 0xff;
+		_seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 
 		_screen->setTextColorMap(_seqTextColorMap);
 		break;
@@ -556,7 +556,7 @@
 
 	case 201:
 		seq_waitForTextsTimeout();
-		_screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3));
+		_screen->applyOverlay(0, 0, 320, 200, 2, _screen->getPalette(3).getData());
 		_screen->copyPage(2, 12);
 		_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
 		_screen->updateScreen();
@@ -631,9 +631,9 @@
 
 		_seqTextColor[1] = 0xf7;
 		memset(_seqTextColorMap, _seqTextColor[1], 16);
-		_seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0) + 3, 255) & 0xff;
+		_seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 		_screen->setTextColorMap(_seqTextColorMap);
-		_screen->generateGrayOverlay(_screen->getPalette(0), _screen->getPalette(3), 0x24, 0, 0, 0, 0x100, false);
+		_screen->generateGrayOverlay(_screen->getPalette(0).getData(), _screen->getPalette(3).getData(), 0x24, 0, 0, 0, 0x100, false);
 		break;
 
 	case 1:
@@ -661,7 +661,7 @@
 
 		_seqTextColor[1] = 0xfd;
 		memset(_seqTextColorMap, _seqTextColor[1], 16);
-		_seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0) + 3, 255) & 0xff;
+		_seqTextColorMap[1] = _seqTextColor[0] = _screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 		_screen->setTextColorMap(_seqTextColorMap);
 		break;
 
@@ -831,7 +831,7 @@
 	case 0:
 		_sound->playTrack(3);
 
-		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0) + 3, 255) & 0xff;
+		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 		memset(_seqTextColorMap, _seqTextColor[1], 16);
 		_seqTextColor[0] = _seqTextColorMap[1] = 0xff;
 		_screen->setTextColorMap(_seqTextColorMap);
@@ -924,7 +924,7 @@
 		break;
 
 	case 0:
-		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0) + 3, 255) & 0xff;
+		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 		memset(_seqTextColorMap, _seqTextColor[1], 16);
 		_seqTextColor[0] = _seqTextColorMap[1] = 255;
 		_screen->setTextColorMap(_seqTextColorMap);
@@ -1006,7 +1006,7 @@
 		break;
 
 	case 0:
-		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0) + 3, 255) & 0xff;
+		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 		memset(_seqTextColorMap, _seqTextColor[1], 16);
 		_seqTextColor[0] = _seqTextColorMap[1] = 0xff;
 		_screen->setTextColorMap(_seqTextColorMap);
@@ -1096,7 +1096,7 @@
 		break;
 
 	case 0:
-		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0) + 3, 255) & 0xff;
+		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 		memset(_seqTextColorMap, _seqTextColor[1], 16);
 		_seqTextColor[0] = _seqTextColorMap[1] = 0xff;
 		_screen->setTextColorMap(_seqTextColorMap);
@@ -1172,9 +1172,9 @@
 		break;
 
 	case 0:
-		_seqTextColor[1] = 1 + (_screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0) + 3, 254) & 0xff);
+		_seqTextColor[1] = 1 + (_screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0).getData() + 3, 254) & 0xff);
 		memset(_seqTextColorMap, _seqTextColor[1], 16);
-		_seqTextColorMap[1] = _seqTextColor[0] = 1 + (_screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0) + 3, 254) & 0xff);
+		_seqTextColorMap[1] = _seqTextColor[0] = 1 + (_screen->findLeastDifferentColor(_seqTextColorPresets + 3, _screen->getPalette(0).getData() + 3, 254) & 0xff);
 		_screen->setTextColorMap(_seqTextColorMap);
 		seq_playTalkText(_flags.isTalkie ? 30 : 26);
 		break;
@@ -1339,7 +1339,7 @@
 		break;
 
 	case 0:
-		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0) + 3, 255) & 0xff;
+		_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 		memset(_seqTextColorMap, _seqTextColor[1], 16);
 		_seqTextColor[0] = _seqTextColorMap[1] = 0xff;
 		_screen->setTextColorMap(_seqTextColorMap);
@@ -1426,7 +1426,7 @@
 	case 0:
 		if (_seqFrameCounter == 1) {
 			_sound->playTrack(4);
-			_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0) + 3, 255) & 0xff;
+			_seqTextColor[1] = _screen->findLeastDifferentColor(_seqTextColorPresets, _screen->getPalette(0).getData() + 3, 255) & 0xff;
 			memset(_seqTextColorMap, _seqTextColor[1], 16);
 			_seqTextColor[0] = _seqTextColorMap[1] = 0xff;
 			_screen->setTextColorMap(_seqTextColorMap);
@@ -1501,7 +1501,7 @@
 	static const uint8 colormap[] = {0, 0, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 	static const ScreenDim d = { 0x00, 0x0C, 0x28, 0xB4, 0xFF, 0x00, 0x00, 0x00 };
 
-	_screen->loadBitmap("finale.cps", 3, 3, _screen->getPalette(0));
+	_screen->loadBitmap("finale.cps", 3, 3, _screen->getPalette(0).getData());
 	_screen->setFont(Screen::FID_GOLDFONT_FNT);
 
 	int talkieCreditsSize, talkieCreditsSpecialSize;
@@ -1781,14 +1781,14 @@
 
 #ifdef ENABLE_LOL
 int KyraEngine_HoF::seq_lolDemoScene1(WSAMovie_v2 *wsaObj, int x, int y, int frm) {
-	uint8 *tmpPal = _screen->getPalette(2);
+	uint8 *tmpPal = _screen->getPalette(2).getData();
 
 	if (!(_seqFrameCounter % 100)) {
 		if (_seqFrameCounter == 0) {
 			_sound->haltTrack();
 			_sound->playTrack(6);
 		}
-		memcpy(tmpPal, _screen->getPalette(0), 0x300);
+		memcpy(tmpPal, _screen->getPalette(0).getData(), 0x300);
 		for (int i = 3; i < 0x300; i++) {
 			tmpPal[i] = ((int)tmpPal[i] * 120) / 64;
 			if (tmpPal[i] > 0x3f)
@@ -1799,7 +1799,7 @@
 		_screen->updateScreen();
 		delay(8);
 	} else {
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 		_screen->updateScreen();
 		if (_seqFrameCounter == 40)
 			seq_playTalkText(3);
@@ -1924,10 +1924,10 @@
 		}
 
 		if (_seqFrameCounter % 175) {
-			_screen->setScreenPalette(_screen->getPalette(0));
+			_screen->setScreenPalette(_screen->getPalette(0).getData());
 		} else {
-			uint8 *tmpPal = _screen->getPalette(2);
-			memcpy(tmpPal, _screen->getPalette(0), 0x300);
+			uint8 *tmpPal = _screen->getPalette(2).getData();
+			memcpy(tmpPal, _screen->getPalette(0).getData(), 0x300);
 			for (int i = 3; i < 0x300; i++) {
 				tmpPal[i] = ((int)tmpPal[i] * 120) / 64;
 				if (tmpPal[i] > 0x3f)
@@ -2054,28 +2054,28 @@
 	case 0:
 		memset(pal, 0, 0x300);
 		_screen->fadePalette(pal, 36);
-		memcpy(_screen->getPalette(0), pal, 0x300);
-		memcpy(_screen->getPalette(1), pal, 0x300);
+		_screen->getPalette(0).clear();
+		_screen->getPalette(1).clear();
 		break;
 
 	case 1:
 		memset(pal, 0x3F, 0x300);
 		seq_playTalkText(_rnd.getRandomBit());
 		_screen->fadePalette(pal, 16);
-		memcpy(_screen->getPalette(0), pal, 0x300);
-		memcpy(_screen->getPalette(1), pal, 0x300);
+		_screen->getPalette(0).copy(pal, 0, 256);
+		_screen->getPalette(1).copy(pal, 0, 256);
 		break;
 
 	case 3:
 		_screen->copyPage(2, 0);
-		_screen->fadePalette(_screen->getPalette(0), 16);
-		memcpy(_screen->getPalette(1), _screen->getPalette(0), 0x300);
+		_screen->fadePalette(_screen->getPalette(0).getData(), 16);
+		_screen->getPalette(1).copy(_screen->getPalette(0));
 		break;
 
 	case 4:
 		_screen->copyPage(2, 0);
-		_screen->fadePalette(_screen->getPalette(0), 36);
-		memcpy(_screen->getPalette(1), _screen->getPalette(0), 0x300);
+		_screen->fadePalette(_screen->getPalette(0).getData(), 36);
+		_screen->getPalette(1).copy(_screen->getPalette(0));
 		break;
 
 	case 5:
@@ -2095,8 +2095,8 @@
 	case 8:
 		memset(pal, 0, 0x300);
 		_screen->fadePalette(pal, 16);
-		memcpy(_screen->getPalette(0), pal, 0x300);
-		memcpy(_screen->getPalette(1), pal, 0x300);
+		_screen->getPalette(0).copy(pal, 0, 256);
+		_screen->getPalette(1).copy(pal, 0, 256);
 
 		delay(120 * _tickLength);
 		break;
@@ -2112,8 +2112,8 @@
 		//pal[3 * i] = pal[3 * i + 1] = pal[3 * i + 2] = 0x3f;
 
 		_screen->fadePalette(pal, 64);
-		memcpy(_screen->getPalette(0), pal, 0x300);
-		memcpy(_screen->getPalette(1), pal, 0x300);
+		_screen->getPalette(0).copy(pal, 0, 256);
+		_screen->getPalette(1).copy(pal, 0, 256);
 		break;
 
 	default:
@@ -2435,7 +2435,7 @@
 	_screen->getPalette(0)[0x2f7] = _screen->getPalette(0)[textcolor * 3];
 	_screen->getPalette(0)[0x2f8] = _screen->getPalette(0)[textcolor * 3 + 1];
 	_screen->getPalette(0)[0x2f9] = _screen->getPalette(0)[textcolor * 3 + 2];
-	_screen->fadePalette(_screen->getPalette(0), 0x18);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 0x18);
 
 	_seqTextColor[0] = textcolor;
 	_screen->setTextColorMap(colorMap);
@@ -2445,7 +2445,7 @@
 	_screen->copyPage(2, 0);
 	_screen->updateScreen();
 	_screen->getPalette(0)[0x2f7] = _screen->getPalette(0)[0x2f8] = _screen->getPalette(0)[0x2f9] = 0;
-	_screen->fadePalette(_screen->getPalette(0), 1);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 1);
 	_screen->copyPage(2, 12);
 	seq_resetAllTextEntries();
 
@@ -2663,9 +2663,9 @@
 
 		if (palCycle) {
 			for (int col = 133; col > 112; col--)
-				memcpy(_screen->getPalette(0) + (col * 3), _screen->getPalette(0) + ((col - 1) * 3), 3);
-			memcpy(_screen->getPalette(0) + 336, _screen->getPalette(0) + 399, 3);
-			_screen->setScreenPalette(_screen->getPalette(0));
+				_screen->getPalette(0).copy(_screen->getPalette(0), col - 1, 1, col);
+			_screen->getPalette(0).copy(_screen->getPalette(0), 133, 1, 112);
+			_screen->setScreenPalette(_screen->getPalette(0).getData());
 		}
 
 		delayUntil(_seqSubFrameEndTimeInternal);
@@ -2725,7 +2725,7 @@
 	assert(ci);
 	_screen->clearPage(2);
 	_res->loadPakFile("INTROGEN.PAK");
-	int endframe = ci->open("ci.wsa", 0, _screen->getPalette(0));
+	int endframe = ci->open("ci.wsa", 0, _screen->getPalette(0).getData());
 	_res->unloadPakFile("INTROGEN.PAK");
 	if (!ci->opened()) {
 		delete ci;

Modified: scummvm/trunk/engines/kyra/sequences_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sequences_lok.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/sequences_lok.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -42,7 +42,7 @@
 void KyraEngine_LoK::seq_demo() {
 	snd_playTheme(0, 2);
 
-	_screen->loadBitmap("START.CPS", 7, 7, _screen->getPalette(0));
+	_screen->loadBitmap("START.CPS", 7, 7, _screen->getPalette(0).getData());
 	_screen->copyRegion(0, 0, 0, 0, 320, 200, 6, 0, Screen::CR_NO_P_CHECK);
 	_screen->updateScreen();
 	_screen->fadeFromBlack();
@@ -51,7 +51,7 @@
 
 	_screen->clearPage(0);
 	_screen->loadBitmap("TOP.CPS", 7, 7, NULL);
-	_screen->loadBitmap("BOTTOM.CPS", 5, 5, _screen->getPalette(0));
+	_screen->loadBitmap("BOTTOM.CPS", 5, 5, _screen->getPalette(0).getData());
 	_screen->copyRegion(0, 91, 0, 8, 320, 103, 6, 0);
 	_screen->copyRegion(0, 0, 0, 111, 320, 64, 6, 0);
 	_screen->updateScreen();
@@ -77,7 +77,7 @@
 	_seq->playSequence(_seq_Demo4, true);
 
 	_screen->clearPage(0);
-	_screen->loadBitmap("FINAL.CPS", 7, 7, _screen->getPalette(0));
+	_screen->loadBitmap("FINAL.CPS", 7, 7, _screen->getPalette(0).getData());
 	_screen->_curPage = 0;
 	_screen->copyRegion(0, 0, 0, 0, 320, 200, 6, 0);
 	_screen->updateScreen();
@@ -128,7 +128,7 @@
 
 void KyraEngine_LoK::seq_introLogos() {
 	if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98) {
-		_screen->loadBitmap("LOGO.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("LOGO.CPS", 3, 3, _screen->getPalette(0).getData());
 		_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0);
 		_screen->updateScreen();
 		_screen->fadeFromBlack();
@@ -141,7 +141,7 @@
 	_screen->clearPage(0);
 
 	if (_flags.platform == Common::kPlatformAmiga) {
-		_screen->loadPalette("INTRO.PAL", _screen->getPalette(0));
+		_screen->loadPalette("INTRO.PAL", _screen->getPalette(0).getData());
 		_screen->loadBitmap("BOTTOM.CPS", 3, 5, 0);
 		_screen->loadBitmap("TOP.CPS", 3, 3, 0);
 		_screen->copyRegion(0, 0, 0, 111, 320, 64, 2, 0);
@@ -149,7 +149,7 @@
 		_screen->copyRegion(0, 0, 0, 0, 320, 190, 0, 2);
 	} else {
 		_screen->loadBitmap("TOP.CPS", 7, 7, 0);
-		_screen->loadBitmap("BOTTOM.CPS", 5, 5, _screen->getPalette(0));
+		_screen->loadBitmap("BOTTOM.CPS", 5, 5, _screen->getPalette(0).getData());
 		_screen->copyRegion(0, 91, 0, 8, 320, 103, 6, 0);
 		_screen->copyRegion(0, 0, 0, 111, 320, 64, 6, 0);
 	}
@@ -166,8 +166,8 @@
 	delay(60 * _tickLength);
 
 	if (_flags.platform == Common::kPlatformAmiga) {
-		memcpy(_screen->getPalette(0), _screen->getPalette(0) + 3*32, 3*32);
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->getPalette(0).copy(_screen->getPalette(1));
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 	}
 
 	if ((_seq->playSequence(_seq_KyrandiaLogo, skipFlag()) && !seq_skipSequence()) || shouldQuit()) {
@@ -181,7 +181,7 @@
 		return;
 
 	if (_flags.platform == Common::kPlatformAmiga) {
-		memcpy(_screen->getPalette(0), _screen->getPalette(0) + 3*64, 3*32);
+		_screen->getPalette(0).copy(_screen->getPalette(2));
 		_screen->fadeToBlack();
 		_screen->copyRegion(0, 0, 0, 0, 320, 200, 4, 0);
 		_screen->fadeFromBlack();
@@ -236,22 +236,22 @@
 		return;
 
 	if (_flags.lang == Common::EN_ANY && !_flags.isTalkie && (_flags.platform == Common::kPlatformPC || _flags.platform == Common::kPlatformAmiga))
-		_screen->loadBitmap("TEXT.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("TEXT.CPS", 3, 3, _screen->getPalette(0).getData());
 	else if (_flags.lang == Common::EN_ANY || _flags.lang == Common::JA_JPN)
-		_screen->loadBitmap("TEXT_ENG.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("TEXT_ENG.CPS", 3, 3, _screen->getPalette(0).getData());
 	else if (_flags.lang == Common::DE_DEU)
-		_screen->loadBitmap("TEXT_GER.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("TEXT_GER.CPS", 3, 3, _screen->getPalette(0).getData());
 	else if (_flags.lang == Common::FR_FRA)
-		_screen->loadBitmap("TEXT_FRE.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("TEXT_FRE.CPS", 3, 3, _screen->getPalette(0).getData());
 	else if (_flags.lang == Common::ES_ESP)
-		_screen->loadBitmap("TEXT_SPA.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("TEXT_SPA.CPS", 3, 3, _screen->getPalette(0).getData());
 	else if (_flags.lang == Common::IT_ITA && !_flags.isTalkie)
-		_screen->loadBitmap("TEXT_ITA.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("TEXT_ITA.CPS", 3, 3, _screen->getPalette(0).getData());
 	else if (_flags.lang == Common::IT_ITA && _flags.isTalkie)
-		_screen->loadBitmap("TEXT_ENG.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("TEXT_ENG.CPS", 3, 3, _screen->getPalette(0).getData());
 	else
 		warning("no story graphics file found");
-	_screen->setScreenPalette(_screen->getPalette(0));
+	_screen->setScreenPalette(_screen->getPalette(0).getData());
 	_screen->copyRegion(0, 0, 0, 0, 320, 200, 3, 0);
 
 	if (_flags.lang == Common::JA_JPN) {
@@ -570,11 +570,11 @@
 			_animator->sprites()[i].active = 0;
 		}
 		uint8 tmpPal[768];
-		memcpy(tmpPal, _screen->getPalette(0), 768);
+		memcpy(tmpPal, _screen->getPalette(0).getData(), 768);
 		memcpy(&tmpPal[684], palTable2()[0], 60);
 		_screen->fadePalette(tmpPal, 72);
-		memcpy(&_screen->getPalette(0)[684], palTable2()[0], 60);
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->getPalette(0).copy(palTable2()[0], 0, 20, 228);
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 		setGameFlag(0xB3);
 	} else {
 		delayWithTicks(120);
@@ -950,8 +950,8 @@
 			_screen->hideMouse();
 			_screen->fadeSpecialPalette(32, 228, 20, 60);
 			delay(60 * _tickLength);
-			_screen->loadBitmap("GEMHEAL.CPS", 3, 3, _screen->getPalette(0));
-			_screen->setScreenPalette(_screen->getPalette(0));
+			_screen->loadBitmap("GEMHEAL.CPS", 3, 3, _screen->getPalette(0).getData());
+			_screen->setScreenPalette(_screen->getPalette(0).getData());
 			_screen->shuffleScreen(8, 8, 304, 128, 2, 0, 1, 0);
 			uint32 nextTime = _system->getMillis() + 120 * _tickLength;
 			_finalA = new WSAMovie_v1(this);
@@ -1004,15 +1004,15 @@
 	_screen->hideMouse();
 	_screen->_curPage = 0;
 	_screen->fadeToBlack();
-	_screen->loadBitmap("REUNION.CPS", 3, 3, _screen->getPalette(0));
+	_screen->loadBitmap("REUNION.CPS", 3, 3, _screen->getPalette(0).getData());
 	_screen->copyRegion(8, 8, 8, 8, 304, 128, 2, 0);
 	_screen->_curPage = 0;
 	// XXX
 	assert(_homeString);
 	drawSentenceCommand(_homeString[0], 179);
 
-	memset(_screen->getPalette(2), 0, sizeof(uint8)*768);
-	_screen->setScreenPalette(_screen->getPalette(2));
+	_screen->getPalette(2).clear();
+	_screen->setScreenPalette(_screen->getPalette(2).getData());
 
 	_seqPlayerFlag = true;
 	_seq->playSequence(_seq_Reunion, false);
@@ -1045,7 +1045,7 @@
 	} else
 		_screen->setFont(Screen::FID_8_FNT);
 
-	_screen->loadBitmap("CHALET.CPS", 4, 4, _screen->getPalette(0));
+	_screen->loadBitmap("CHALET.CPS", 4, 4, _screen->getPalette(0).getData());
 
 	_screen->setCurPage(0);
 	_screen->clearCurPage();
@@ -1123,10 +1123,10 @@
 
 	_screen->setCurPage(2);
 
-	memset(_screen->getPalette(2), 0, sizeof(uint8)*768);
-	_screen->setScreenPalette(_screen->getPalette(2));
+	_screen->getPalette(2).clear();
+	_screen->setScreenPalette(_screen->getPalette(2).getData());
 	_screen->copyRegion(8, 32, 8, 32, 312, 128, 4, 0, Screen::CR_NO_P_CHECK);
-	_screen->fadePalette(_screen->getPalette(0), 0x5A);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 0x5A);
 
 	Common::Event event;
 	bool finished = false;
@@ -1683,7 +1683,7 @@
 		_screen->getPalette(0)[palPos++] = kyraGemPalette[i + _kyragemFadingState.gOffset];
 		_screen->getPalette(0)[palPos++] = kyraGemPalette[i + _kyragemFadingState.bOffset];
 	}
-	_screen->setScreenPalette(_screen->getPalette(0));
+	_screen->setScreenPalette(_screen->getPalette(0).getData());
 	_animator->_updateScreen = true;
 	switch (_kyragemFadingState.nextOperation) {
 	case 0:

Modified: scummvm/trunk/engines/kyra/sequences_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sequences_lol.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/sequences_lol.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -42,12 +42,12 @@
 		showIntro();
 
 	if (_flags.isDemo) {
-		_screen->fadePalette(_screen->getPalette(1), 30, 0);
-		_screen->loadBitmap("FINAL.CPS", 2, 2, _screen->getPalette(0));
+		_screen->fadePalette(_screen->getPalette(1).getData(), 30, 0);
+		_screen->loadBitmap("FINAL.CPS", 2, 2, _screen->getPalette(0).getData());
 		_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0, Screen::CR_NO_P_CHECK);
-		_screen->fadePalette(_screen->getPalette(0), 30, 0);
+		_screen->fadePalette(_screen->getPalette(0).getData(), 30, 0);
 		delayWithTicks(300);
-		_screen->fadePalette(_screen->getPalette(1), 60, 0);
+		_screen->fadePalette(_screen->getPalette(1).getData(), 60, 0);
 
 		setupPrologueData(false);
 		return -1;
@@ -57,7 +57,7 @@
 
 	int processSelection = -1;
 	while (!shouldQuit() && processSelection == -1) {
-		_screen->loadBitmap("TITLE.CPS", 2, 2, _screen->getPalette(0));
+		_screen->loadBitmap("TITLE.CPS", 2, 2, _screen->getPalette(0).getData());
 		_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0, Screen::CR_NO_P_CHECK);
 
 		_screen->setFont(Screen::FID_6_FNT);
@@ -66,7 +66,7 @@
 		_screen->fprintString("SVM %s", 300 - width, 193, 0x67, 0x00, 0x04, gScummVMVersion);
 		_screen->setFont(Screen::FID_9_FNT);
 
-		_screen->fadePalette(_screen->getPalette(0), 0x1E);
+		_screen->fadePalette(_screen->getPalette(0).getData(), 0x1E);
 		_screen->updateScreen();
 
 		_eventList.clear();
@@ -74,9 +74,10 @@
 
 		if (selection != 3) {
 			_screen->hideMouse();
+
 			// Unlike the original, we add a nice fade to black
-			memset(_screen->getPalette(0), 0, 768);
-			_screen->fadePalette(_screen->getPalette(0), 0x54);
+			_screen->getPalette(0).clear();
+			_screen->fadeToBlack(0x54);
 		}
 
 		switch (selection) {
@@ -168,7 +169,7 @@
 		_selectionAnimFrames[1] = _selectionAnimFrames[3] = 1;
 
 		memset(_selectionAnimTimers, 0, sizeof(_selectionAnimTimers));
-		memset(_screen->getPalette(1), 0, 768);
+		_screen->getPalette(1).clear();
 
 		_sound->setSoundList(&_soundData[kMusicIntro]);
 
@@ -184,9 +185,8 @@
 	} else {
 		delete _chargenWSA; _chargenWSA = 0;
 
-		uint8 *pal = _screen->getPalette(0);
-		memset(pal, 0, 768);
-		_screen->setScreenPalette(pal);
+		_screen->getPalette(0).clear();
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 
 		if (shouldQuit())
 			return;
@@ -203,9 +203,8 @@
 	if (_flags.platform == Common::kPlatformPC98)
 		showStarcraftLogo();
 
-	uint8 *pal = _screen->getPalette(0);
-	memset(pal, 0, 768);
-	_screen->setScreenPalette(pal);
+	_screen->getPalette(0).clear();
+	_screen->setScreenPalette(_screen->getPalette(0).getData());
 
 	_screen->clearPage(0);
 	_screen->clearPage(4);
@@ -235,8 +234,8 @@
 				palNextFadeStep = _system->getMillis() + ((_tim->_palDelayAcc >> 8) * _tickLength);
 				_tim->_palDelayAcc &= 0xFF;
 
-				if (!_screen->fadePalStep(_screen->getPalette(0), _tim->_palDiff)) {
-					_screen->setScreenPalette(_screen->getPalette(0));
+				if (!_screen->fadePalStep(_screen->getPalette(0).getData(), _tim->_palDiff)) {
+					_screen->setScreenPalette(_screen->getPalette(0).getData());
 					_tim->_palDiff = 0;
 				}
 			}
@@ -260,7 +259,7 @@
 	delete _tim;
 	_tim = 0;
 
-	_screen->fadePalette(_screen->getPalette(1), 30, 0);
+	_screen->fadePalette(_screen->getPalette(1).getData(), 30, 0);
 }
 
 int LoLEngine::chooseCharacter() {
@@ -277,8 +276,8 @@
 	while (!_screen->isMouseVisible())
 		_screen->showMouse();
 
-	_screen->loadBitmap("CHAR.CPS", 2, 2, _screen->getPalette(0));
-	_screen->loadBitmap("BACKGRND.CPS", 4, 4, _screen->getPalette(0));
+	_screen->loadBitmap("CHAR.CPS", 2, 2, _screen->getPalette(0).getData());
+	_screen->loadBitmap("BACKGRND.CPS", 4, 4, _screen->getPalette(0).getData());
 
 	if (!_chargenWSA->open("CHARGEN.WSA", 1, 0))
 		error("Couldn't load CHARGEN.WSA");
@@ -305,9 +304,9 @@
 	_screen->_curPage = 0;
 
 	if (_flags.use16ColorMode)
-		_screen->loadPalette("LOL.NOL", _screen->getPalette(0));
+		_screen->loadPalette("LOL.NOL", _screen->getPalette(0).getData());
 
-	_screen->fadePalette(_screen->getPalette(0), 30, 0);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 30, 0);
 
 	bool kingIntro = true;
 	while (!shouldQuit()) {
@@ -650,7 +649,7 @@
 	_screen->clearPage(0);
 	_screen->clearPage(2);
 
-	int endframe = ci->open("ci01.wsa", 0, _screen->getPalette(0));
+	int endframe = ci->open("ci01.wsa", 0, _screen->getPalette(0).getData());
 	if (!ci->opened()) {
 		delete ci;
 		return;
@@ -728,9 +727,8 @@
 		if (_flags.platform == Common::kPlatformPC98)
 			_sound->loadSoundFile("SOUND.DAT");
 	} else {
-		uint8 *pal = _screen->getPalette(0);
-		memset(pal, 0, 768);
-		_screen->setScreenPalette(pal);
+		_screen->getPalette(0).clear();
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 
 		if (shouldQuit())
 			return;
@@ -745,9 +743,8 @@
 	TIMInterpreter *timBackUp = _tim;
 	_tim = new TIMInterpreter(this, _screen, _system);
 
-	uint8 *pal = _screen->getPalette(0);
-	memset(pal, 0, 768);
-	_screen->setScreenPalette(pal);
+	_screen->getPalette(0).clear();
+	_screen->setScreenPalette(_screen->getPalette(0).getData());
 
 	_screen->clearPage(0);
 	_screen->clearPage(4);
@@ -776,8 +773,8 @@
 				palNextFadeStep = _system->getMillis() + ((_tim->_palDelayAcc >> 8) * _tickLength);
 				_tim->_palDelayAcc &= 0xFF;
 
-				if (!_screen->fadePalStep(_screen->getPalette(0), _tim->_palDiff)) {
-					_screen->setScreenPalette(_screen->getPalette(0));
+				if (!_screen->fadePalStep(_screen->getPalette(0).getData(), _tim->_palDiff)) {
+					_screen->setScreenPalette(_screen->getPalette(0).getData());
 					_tim->_palDiff = 0;
 				}
 			}
@@ -806,24 +803,24 @@
 
 	switch (character) {
 	case 0:
-		_screen->loadBitmap("KIERAN.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("KIERAN.CPS", 3, 3, _screen->getPalette(0).getData());
 		break;
 
 	case 1:
-		_screen->loadBitmap("AK'SHEL.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("AK'SHEL.CPS", 3, 3, _screen->getPalette(0).getData());
 		break;
 
 	case 2:
-		_screen->loadBitmap("MICHAEL.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("MICHAEL.CPS", 3, 3, _screen->getPalette(0).getData());
 		break;
 
 	case 3:
-		_screen->loadBitmap("CONRAD.CPS", 3, 3, _screen->getPalette(0));
+		_screen->loadBitmap("CONRAD.CPS", 3, 3, _screen->getPalette(0).getData());
 		break;
 
 	default:
 		_screen->clearPage(3);
-		memset(_screen->getPalette(0), 0, 768);
+		memset(_screen->getPalette(0).getData(), 0, 768);
 		break;
 	}
 
@@ -831,7 +828,7 @@
 	if (maxDifficulty)
 		_tim->displayText(0x8000, 0, 0xDC);
 	_screen->updateScreen();
-	_screen->fadePalette(_screen->getPalette(0), 30, 0);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 30, 0);
 
 	while (!checkInput(0) && !shouldQuit())
 		delay(_tickLength);
@@ -859,8 +856,8 @@
 	_screen->setTextColorMap(colorMap);
 	_screen->_charWidth = 0;
 
-	_screen->loadBitmap("ROOM.CPS", 2, 2, _screen->getPalette(0));
-	memset(_screen->getPalette(0) + 764, 0, 3);
+	_screen->loadBitmap("ROOM.CPS", 2, 2, _screen->getPalette(0).getData());
+	memset(_screen->getPalette(0).getData() + 764, 0, 3);
 	_screen->fadeToBlack(30);
 
 	_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0, Screen::CR_NO_P_CHECK);
@@ -909,8 +906,8 @@
 	uint8 *monsterPal = _res->fileData("MONSTERS.PAL", 0);
 	assert(monsterPal);
 
-	memcpy(_screen->getPalette(0) + 88 * 3, monsterPal + 0 * 3, 40 * 3);
-	_screen->fadePalette(_screen->getPalette(0), 30);
+	_screen->getPalette(0).copy(monsterPal, 0, 40, 88);
+	_screen->fadePalette(_screen->getPalette(0).getData(), 30);
 
 	uint32 waitTimer = _system->getMillis();
 
@@ -1052,7 +1049,7 @@
 				doorRedraw = false;
 			} else {
 				if (!monsterAnimFrame)
-					_screen->setScreenPalette(_screen->getPalette(0));
+					_screen->setScreenPalette(_screen->getPalette(0).getData());
 
 				_screen->copyRegion(0, 0, 0, 0, 320, 200, 2, page, Screen::CR_NO_P_CHECK);
 
@@ -1132,8 +1129,8 @@
 			curShapeFile = curShapeFile % 28;
 
 			loadOutroShapes(curShapeFile, shapes);
-			memcpy(_screen->getPalette(0) + 88 * 3, monsterPal + curShapeFile * 40 * 3, 40 * 3);
-			_screen->setScreenPalette(_screen->getPalette(0));
+			_screen->getPalette(0).copy(monsterPal, curShapeFile * 40, 40, 88);
+			_screen->setScreenPalette(_screen->getPalette(0).getData());
 
 			needNewShape = false;
 		}

Modified: scummvm/trunk/engines/kyra/sprites.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sprites.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/sprites.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -420,16 +420,16 @@
 
 	if (_vm->gameFlags().platform == Common::kPlatformAmiga) {
 		if (_vm->queryGameFlag(0xA0))
-			memcpy(_screen->getPalette(3), _screen->getPalette(4), 32*3);
+			_screen->getPalette(3).copy(_screen->getPalette(4));
 		else
-			memcpy(_screen->getPalette(3), _screen->getPalette(0), 32*3);
+			_screen->getPalette(3).copy(_screen->getPalette(0));
 	} else {
 		if (_vm->queryGameFlag(0xA0))
-			memcpy(_screen->getPalette(1), _screen->getPalette(3), 768);
+			_screen->getPalette(1).copy(_screen->getPalette(3));
 		else
-			memcpy(_screen->getPalette(1), _screen->getPalette(0), 768);
+			_screen->getPalette(1).copy(_screen->getPalette(0));
 
-		_screen->loadPalette(_dat + 0x17, _screen->getPalette(1) + 684, 60);
+		_screen->loadPalette(_dat + 0x17, _screen->getPalette(1).getData() + 684, 60);
 	}
 	uint8 *data = _dat + 0x6B;
 

Modified: scummvm/trunk/engines/kyra/staticres.cpp
===================================================================
--- scummvm/trunk/engines/kyra/staticres.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/staticres.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -1584,7 +1584,7 @@
 	_screen->clearPage(page);
 
 	if (_flags.lang == Common::EN_ANY && !_flags.isTalkie && (_flags.platform == Common::kPlatformPC || _flags.platform == Common::kPlatformAmiga))
-		_screen->loadBitmap("MAIN15.CPS", page, page, _screen->getPalette(0));
+		_screen->loadBitmap("MAIN15.CPS", page, page, _screen->getPalette(0).getData());
 	else if (_flags.lang == Common::EN_ANY || _flags.lang == Common::JA_JPN || (_flags.isTalkie && _flags.lang == Common::IT_ITA))
 		_screen->loadBitmap("MAIN_ENG.CPS", page, page, 0);
 	else if (_flags.lang == Common::FR_FRA)
@@ -1599,7 +1599,7 @@
 		warning("no main graphics file found");
 
 	if (_flags.platform == Common::kPlatformAmiga)
-		memcpy(_screen->getPalette(1), _screen->getPalette(0), 32*3);
+		_screen->getPalette(1).copy(_screen->getPalette(0));
 
 	_screen->copyRegion(0, 0, 0, 0, 320, 200, page, 0);
 }

Modified: scummvm/trunk/engines/kyra/text_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/text_lok.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/text_lok.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -333,7 +333,7 @@
 		_currSentenceColor[1] = _screen->getPalette(0)[766] = _screen->getPalette(0)[color*3+1];
 		_currSentenceColor[2] = _screen->getPalette(0)[767] = _screen->getPalette(0)[color*3+2];
 
-		_screen->setScreenPalette(_screen->getPalette(0));
+		_screen->setScreenPalette(_screen->getPalette(0).getData());
 		_startSentencePalIndex = 0;
 	}
 
@@ -371,7 +371,7 @@
 	_screen->getPalette(0)[765] = _currSentenceColor[0];
 	_screen->getPalette(0)[766] = _currSentenceColor[1];
 	_screen->getPalette(0)[767] = _currSentenceColor[2];
-	_screen->setScreenPalette(_screen->getPalette(0));
+	_screen->setScreenPalette(_screen->getPalette(0).getData());
 
 	if (finished) {
 		_fadeText = false;

Modified: scummvm/trunk/engines/kyra/vqa.cpp
===================================================================
--- scummvm/trunk/engines/kyra/vqa.cpp	2009-06-22 02:35:04 UTC (rev 41740)
+++ scummvm/trunk/engines/kyra/vqa.cpp	2009-06-22 02:35:45 UTC (rev 41741)
@@ -474,13 +474,13 @@
 
 				case MKID_BE('CPL0'):	// Palette
 					assert(size <= 3 * 256);
-					_file->read(_vm->screen()->getPalette(0), size);
+					_file->read(_vm->screen()->getPalette(0).getData(), size);
 					break;
 
 				case MKID_BE('CPLZ'):	// Palette
 					inbuf = (byte *)allocBuffer(0, size);
 					_file->read(inbuf, size);
-					Screen::decodeFrame4(inbuf, _vm->screen()->getPalette(0), 768);
+					Screen::decodeFrame4(inbuf, _vm->screen()->getPalette(0).getData(), 768);
 					break;
 
 				case MKID_BE('VPT0'):	// Frame data
@@ -521,7 +521,7 @@
 	// The frame has been decoded
 
 	if (_frameInfo[frameNum] & 0x80000000) {
-		_vm->screen()->setScreenPalette(_vm->screen()->getPalette(0));
+		_vm->screen()->setScreenPalette(_vm->screen()->getPalette(0).getData());
 	}
 
 	int blockPitch = _header.width / _header.blockW;


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