Index: engines/sky/screen.h
===================================================================
--- engines/sky/screen.h	(revision 26319)
+++ engines/sky/screen.h	(working copy)
@@ -64,8 +64,8 @@
 	void paletteFadeUp(uint8 *pal);
 	void paletteFadeUp(uint16 fileNr);
 
-	void showScreen(uint16 fileNum);
-	void showScreen(uint8 *pScreen);
+	void showScreen(uint16 fileNum, bool fullscreen = false);
+	void showScreen(uint8 *pScreen, bool fullscreen = false);
 
 	void handleTimer(void);
 	void startSequence(uint16 fileNum);
@@ -82,7 +82,7 @@
 	void fnFadeUp(uint32 palNum, uint32 scroll);
 	void fnFadeDown(uint32 scroll);
 	void fnDrawScreen(uint32 palette, uint32 scroll);
-	void clearScreen(void);
+	void clearScreen(bool fullscreen = false);
 	void setFocusRectangle(const Common::Rect& rect);
 
 	void recreate(void);
Index: engines/sky/intro.cpp
===================================================================
--- engines/sky/intro.cpp	(revision 26319)
+++ engines/sky/intro.cpp	(working copy)
@@ -63,8 +63,13 @@
 #define PLAYBG			15 // play background sound
 #define LOOPBG			16 // loop background sound
 #define STOPBG			17 // stop background sound
+#define CLEARGFX		18 // clear area of the screen
 #define SEQEND		 65535 // end of intro sequence
 
+// Modifier flag for SHOWSCREEN when we want the image to cover the entire
+// screen.
+#define FULLSCREEN		0x8000
+
 #define IC_PREPARE_TEXT 20 // commands used in COMMANDFLIRT block
 #define IC_SHOW_TEXT    21
 #define IC_REMOVE_TEXT  22
@@ -331,12 +336,13 @@
 	WAITFLIRT,
 	WAITVOICE,
 	FADEDOWN,
-	SHOWSCREEN,	CD_19_LOG,
+	SHOWSCREEN | FULLSCREEN,	CD_19_LOG,
 	FADEUP,		CD_19_PAL,
 	PLAYVOICE,	CDV_19,
 	WAITVOICE,
 	PLAYVOICE,	CDV_20,
 	FADEDOWN,
+	CLEARGFX,	0, 192, 320, 8,
 	SHOWSCREEN,	CD_20_LOG,
 	FADEUP,		CD_19_PAL,
 	WAITVOICE,
@@ -344,7 +350,7 @@
 	LOOPBG,
 	PLAYVOICE,	CDV_21,
 	FADEDOWN,
-	SHOWSCREEN,	CD_21_LOG,
+	SHOWSCREEN | FULLSCREEN,	CD_21_LOG,
 	FADEUP,		CD_19_PAL,
 	WAITVOICE,
 	PLAYVOICE,	CDV_22,
@@ -354,7 +360,7 @@
 	PLAYVOICE,	CDV_23,
 	FADEDOWN,
 	WAITVOICE,
-	SHOWSCREEN,	CD_24_LOG,
+	SHOWSCREEN | FULLSCREEN,	CD_24_LOG,
 	FADEUP,		CD_23_PAL,
 	PLAYVOICE,	CDV_24,
 	WAITVOICE,
@@ -363,6 +369,8 @@
 	PLAYVOICE,	CDV_26,
 	WAITVOICE,
 	FADEDOWN,
+	CLEARGFX,	0, 192, 320, 8,
+	// This one could be fullscreen, but that causes animation glitches.
 	SHOWSCREEN,	CD_27_LOG,
 	FADEUP,		CD_27_PAL,
 	PLAYVOICE,	CDV_27,
@@ -385,6 +393,7 @@
 	WAITVOICE,
 	PLAYVOICE,	CDV_36,
 		FADEDOWN,
+		// This one could be fullscreen, but that causes animation glitches.
 		SHOWSCREEN,	CD_35_LOG,
 		FADEUP,		CD_35_PAL,
 	WAITVOICE,
@@ -397,7 +406,7 @@
 	PLAYVOICE,	CDV_39,
 	WAITVOICE,
 	FADEDOWN,
-	SHOWSCREEN,	CD_40_LOG,
+	SHOWSCREEN | FULLSCREEN,	CD_40_LOG,
 	FADEUP,		CD_40_PAL,
 	PLAYVOICE,	CDV_40,
 	WAITVOICE,
@@ -406,6 +415,7 @@
 	PLAYVOICE,	CDV_42,
 	WAITVOICE,
 	FADEDOWN,
+	CLEARGFX,	0, 192, 320, 8,
 	SHOWSCREEN,	CD_43_LOG,
 	FADEUP,		CD_43_PAL,
 	PLAYVOICE,	CDV_43,
@@ -420,12 +430,13 @@
 	DOFLIRT,	CD_45,
 	WAITVOICE,
 	FADEDOWN,
-	SHOWSCREEN,	CD_47_LOG,
+	SHOWSCREEN | FULLSCREEN,	CD_47_LOG,
 	FADEUP,		CD_47_PAL,
 	PLAYVOICE,	CDV_47,
 	WAITVOICE,
 	PLAYVOICE,	CDV_48,
 	FADEDOWN,
+	CLEARGFX,	0, 192, 320, 8,
 	SHOWSCREEN,	CD_48_LOG,
 	FADEUP,		CD_48_PAL,
 	WAITVOICE,
@@ -499,11 +510,12 @@
 	FADEDOWN,
 	PLAYVOICE,	CDV_71,
 	WAITVOICE,
-	SHOWSCREEN,	CD_72_LOG,
+	SHOWSCREEN | FULLSCREEN,	CD_72_LOG,
 	FADEUP,		CD_72_PAL,
 	PLAYVOICE,	CDV_72,
 	WAITVOICE,
 	FADEDOWN,
+	CLEARGFX,	0, 192, 320, 8,
 	SHOWSCREEN,	CD_73_LOG,
 	FADEUP,		CD_73_PAL,
 	PLAYVOICE,	CDV_73,
@@ -512,7 +524,7 @@
 	WAITVOICE,
 	PLAYVOICE,	CDV_75,
 	FADEDOWN,
-	SHOWSCREEN,	CD_76_LOG,
+	SHOWSCREEN | FULLSCREEN,	CD_76_LOG,
 	FADEUP,		CD_76_PAL,
 	WAITVOICE,
 	PLAYVOICE,	CDV_76,
@@ -520,6 +532,7 @@
 	PLAYVOICE,	CDV_77,
 	WAITVOICE,
 	FADEDOWN,
+	CLEARGFX,	0, 192, 320, 8,
 	SHOWSCREEN,	CD_78_LOG,
 	FADEUP,		CD_78_PAL,
 	PLAYVOICE,	CDV_78,
@@ -547,6 +560,7 @@
 	PLAYVOICE,	CDV_86,
 	DOFLIRT,	CD_102,
 	FADEDOWN,
+	// This one could be fullscreen, but that causes animation glitches.
 	SHOWSCREEN,	CD_103_LOG,
 	FADEUP,		CD_103_PAL,
 	BGFLIRT,	CD_103,
@@ -556,7 +570,7 @@
 	WAITVOICE,
 	STARTMUSIC,	2,
 	FADEDOWN,
-	SHOWSCREEN,	CD_104_LOG,
+	SHOWSCREEN | FULLSCREEN,	CD_104_LOG,
 	FADEUP,		CD_104_PAL,
 	DOFLIRT,	CD_104,
 	DOFLIRT,	CD_105,
@@ -564,6 +578,7 @@
 };
 
 uint16 Intro::_floppyIntroSeq[] = {
+	// This one could be fullscreen, but that causes animation glitches.
 	SHOWSCREEN,   60081,
 	FADEUP,       60080,
 	DOFLIRT,      60082,
@@ -598,6 +613,7 @@
 		   4, IC_FX_VOLUME, 127,
 	COMMANDEND,
 	FADEDOWN,
+	// This one could be fullscreen, but that causes animation glitches.
 	SHOWSCREEN,  60093,
 	FADEUP,       60092,
 	COMMANDFLIRT, 60094, // => command list 5
@@ -605,7 +621,7 @@
 	COMMANDEND,
 	WAITMUSIC,
 	FADEDOWN,
-	SHOWSCREEN,   60096,
+	SHOWSCREEN | FULLSCREEN,   60096,
 	STARTMUSIC,       2,
 	FADEUP,       60095,
 	COMMANDFLIRT, 60097, // => command list 6a
@@ -687,9 +703,9 @@
 	uint8 *vData = NULL;
 	// return false means cancel intro
 	uint16 command = *data++;
-	switch (command) {
+	switch (command & 0x7fff) {
 	case SHOWSCREEN:
-		_skyScreen->showScreen(*data++);
+		_skyScreen->showScreen(*data++, (command & FULLSCREEN) ? true : false);
 		return true;
 	case FADEUP:
 		_skyScreen->paletteFadeUp(*data++);
@@ -769,6 +785,22 @@
 	case STOPBG:
 		_mixer->stopID(SOUND_BG);
 		return true;
+	case CLEARGFX:
+		{
+			int x = *data++;
+			int y = *data++;
+			int w = *data++;
+			int h = *data++;
+			byte *screenBuf = _skyScreen->giveCurrent() + x * GAME_SCREEN_WIDTH + y;
+
+			for (int i = 0; i < h; i++) {
+				memset(screenBuf + i * GAME_SCREEN_WIDTH + x, 0, w);
+			}
+
+			_system->copyRectToScreen(screenBuf, GAME_SCREEN_WIDTH, x, y, w, h);
+			_system->updateScreen();
+		}
+		break;
 	default:
 		error("Unknown intro command %X", command);
 	}
Index: engines/sky/sky.cpp
===================================================================
--- engines/sky/sky.cpp	(revision 26319)
+++ engines/sky/sky.cpp	(working copy)
@@ -281,6 +281,7 @@
 		}
 
 		if (!_systemVars.quitGame) {
+			_skyScreen->clearScreen(true);
 			_skyLogic->initScreen0();
 			if (introSkipped)
 				_skyControl->restartGame();
Index: engines/sky/screen.cpp
===================================================================
--- engines/sky/screen.cpp	(revision 26319)
+++ engines/sky/screen.cpp	(working copy)
@@ -99,10 +99,10 @@
 		free(_scrollScreen);
 }
 
-void Screen::clearScreen(void) {
+void Screen::clearScreen(bool fullscreen) {
 
 	memset(_currentScreen, 0, FULL_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
-	_system->copyRectToScreen(_currentScreen, GAME_SCREEN_WIDTH, 0, 0, GAME_SCREEN_WIDTH, GAME_SCREEN_HEIGHT);
+	_system->copyRectToScreen(_currentScreen, GAME_SCREEN_WIDTH, 0, 0, GAME_SCREEN_WIDTH, fullscreen ? FULL_SCREEN_HEIGHT : GAME_SCREEN_HEIGHT);
 	_system->updateScreen();
 }
 
@@ -154,21 +154,21 @@
 		warning("Screen::setPalette: can't load file nr. %d",fileNum);
 }
 
-void Screen::showScreen(uint16 fileNum) {
+void Screen::showScreen(uint16 fileNum, bool fullscreen) {
 
 	if (_currentScreen)
 		free(_currentScreen);
 	_currentScreen = _skyDisk->loadFile(fileNum);
 
 	if (_currentScreen)
-		showScreen(_currentScreen);
+		showScreen(_currentScreen, fullscreen);
 	else
 		warning("Screen::showScreen: can't load file nr. %d",fileNum);
 }
 
-void Screen::showScreen(uint8 *pScreen) {
+void Screen::showScreen(uint8 *pScreen, bool fullscreen) {
 
-	_system->copyRectToScreen(pScreen, 320, 0, 0, GAME_SCREEN_WIDTH, GAME_SCREEN_HEIGHT);
+	_system->copyRectToScreen(pScreen, 320, 0, 0, GAME_SCREEN_WIDTH, fullscreen ? FULL_SCREEN_HEIGHT : GAME_SCREEN_HEIGHT);
 	_system->updateScreen();
 }
 
