From 552f0cce8e5af656568b4cac2a2fd665f2e8809d Mon Sep 17 00:00:00 2001
From: Paul Gilbert
Date: Sat, 27 Aug 2016 15:19:25 -0400
Subject: XEEN: Move game cutscene methods into their own classes

---
 engines/xeen/detection.cpp                      |   2 +-
 engines/xeen/module.mk                          |   8 +-
 engines/xeen/worldofxeen/clouds_cutscenes.cpp   |  43 +++++
 engines/xeen/worldofxeen/clouds_cutscenes.h     |  55 ++++++
 engines/xeen/worldofxeen/clouds_ending.cpp      |  36 ----
 engines/xeen/worldofxeen/clouds_ending.h        |  34 ----
 engines/xeen/worldofxeen/clouds_intro.cpp       |  36 ----
 engines/xeen/worldofxeen/clouds_intro.h         |  36 ----
 engines/xeen/worldofxeen/darkside_cutscenes.cpp | 241 ++++++++++++++++++++++++
 engines/xeen/worldofxeen/darkside_cutscenes.h   |  54 ++++++
 engines/xeen/worldofxeen/darkside_ending.cpp    |  32 ----
 engines/xeen/worldofxeen/darkside_ending.h      |  34 ----
 engines/xeen/worldofxeen/darkside_intro.cpp     | 234 -----------------------
 engines/xeen/worldofxeen/darkside_intro.h       |  36 ----
 engines/xeen/worldofxeen/worldofxeen.cpp        |  46 +++++
 engines/xeen/worldofxeen/worldofxeen.h          |  50 +++++
 engines/xeen/worldofxeen/worldofxeen_game.cpp   |  44 -----
 engines/xeen/worldofxeen/worldofxeen_game.h     |  47 -----
 18 files changed, 493 insertions(+), 575 deletions(-)
 create mode 100644 engines/xeen/worldofxeen/clouds_cutscenes.cpp
 create mode 100644 engines/xeen/worldofxeen/clouds_cutscenes.h
 delete mode 100644 engines/xeen/worldofxeen/clouds_ending.cpp
 delete mode 100644 engines/xeen/worldofxeen/clouds_ending.h
 delete mode 100644 engines/xeen/worldofxeen/clouds_intro.cpp
 delete mode 100644 engines/xeen/worldofxeen/clouds_intro.h
 create mode 100644 engines/xeen/worldofxeen/darkside_cutscenes.cpp
 create mode 100644 engines/xeen/worldofxeen/darkside_cutscenes.h
 delete mode 100644 engines/xeen/worldofxeen/darkside_ending.cpp
 delete mode 100644 engines/xeen/worldofxeen/darkside_ending.h
 delete mode 100644 engines/xeen/worldofxeen/darkside_intro.cpp
 delete mode 100644 engines/xeen/worldofxeen/darkside_intro.h
 create mode 100644 engines/xeen/worldofxeen/worldofxeen.cpp
 create mode 100644 engines/xeen/worldofxeen/worldofxeen.h
 delete mode 100644 engines/xeen/worldofxeen/worldofxeen_game.cpp
 delete mode 100644 engines/xeen/worldofxeen/worldofxeen_game.h

diff --git a/engines/xeen/detection.cpp b/engines/xeen/detection.cpp
index 64b28bf687..e5b137c394 100644
--- a/engines/xeen/detection.cpp
+++ b/engines/xeen/detection.cpp
@@ -21,7 +21,7 @@
  */
 
 #include "xeen/xeen.h"
-#include "xeen/worldofxeen/worldofxeen_game.h"
+#include "xeen/worldofxeen/worldofxeen.h"
 
 #include "base/plugins.h"
 #include "common/savefile.h"
diff --git a/engines/xeen/module.mk b/engines/xeen/module.mk
index 58a2f1a29a..de4df4a90f 100644
--- a/engines/xeen/module.mk
+++ b/engines/xeen/module.mk
@@ -1,11 +1,9 @@
 MODULE := engines/xeen
 
 MODULE_OBJS := \
-	worldofxeen/clouds_ending.o \
-	worldofxeen/clouds_intro.o \
-	worldofxeen/darkside_ending.o \
-	worldofxeen/darkside_intro.o \
-	worldofxeen/worldofxeen_game.o \
+	worldofxeen/clouds_cutscenes.o \
+	worldofxeen/darkside_cutscenes.o \
+	worldofxeen/worldofxeen.o \
 	character.o \
 	combat.o \
 	debugger.o \
diff --git a/engines/xeen/worldofxeen/clouds_cutscenes.cpp b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
new file mode 100644
index 0000000000..1d578bdbea
--- /dev/null
+++ b/engines/xeen/worldofxeen/clouds_cutscenes.cpp
@@ -0,0 +1,43 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "xeen/worldofxeen/clouds_cutscenes.h"
+#include "xeen/sound.h"
+
+namespace Xeen {
+
+bool CloudsCutscenes::showCloudsTitle() {
+	// TODO
+	return true;
+}
+
+bool CloudsCutscenes::showCloudsIntro() {
+	// TODO
+	return true;
+}
+
+bool CloudsCutscenes::showCloudsEnding() {
+	// TODO
+	return true;
+}
+
+} // End of namespace Xeen
diff --git a/engines/xeen/worldofxeen/clouds_cutscenes.h b/engines/xeen/worldofxeen/clouds_cutscenes.h
new file mode 100644
index 0000000000..2c2ed602ea
--- /dev/null
+++ b/engines/xeen/worldofxeen/clouds_cutscenes.h
@@ -0,0 +1,55 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef XEEN_WORLDOFXEEN_CLOUDS_CUTSCENES_H
+#define XEEN_WORLDOFXEEN_CLOUDS_CUTSCENES_H
+
+#include "xeen/xeen.h"
+
+namespace Xeen {
+
+class XeenEngine;
+
+class CloudsCutscenes {
+private:
+	XeenEngine *_vm;
+public:
+	CloudsCutscenes(XeenEngine *vm) : _vm(vm) {}
+
+	/**
+	 * Shows the Clouds of Xeen title screen
+	 */
+	bool showCloudsTitle();
+
+	/**
+	 * Shows the Clouds of Xeen intro sequence
+	 */
+	bool showCloudsIntro();
+
+	/**
+	 * Shows the Clouds of Xeen ending sequence
+	 */
+	bool showCloudsEnding();
+};
+} // End of namespace Xeen
+
+#endif /* XEEN_WORLDOFXEEN_CLOUDS_CUTSCENES_H */
diff --git a/engines/xeen/worldofxeen/clouds_ending.cpp b/engines/xeen/worldofxeen/clouds_ending.cpp
deleted file mode 100644
index 75c8755bb7..0000000000
--- a/engines/xeen/worldofxeen/clouds_ending.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "xeen/worldofxeen/clouds_ending.h"
-#include "xeen/sound.h"
-
-namespace Xeen {
-
-bool showCloudsEnding(XeenEngine &vm) {
-	EventsManager &events = *vm._events;
-	Screen &screen = *vm._screen;
-	SoundManager &sound = *vm._sound;
-
-	return true;
-}
-
-} // End of namespace Xeen
diff --git a/engines/xeen/worldofxeen/clouds_ending.h b/engines/xeen/worldofxeen/clouds_ending.h
deleted file mode 100644
index fc7945f2a1..0000000000
--- a/engines/xeen/worldofxeen/clouds_ending.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef XEEN_CLOUDS_ENDING_H
-#define XEEN_CLOUDS_ENDING_H
-
-#include "xeen/xeen.h"
-
-namespace Xeen {
-
-bool showCloudsEnding(XeenEngine &vm);
-
-} // End of namespace Xeen
-
-#endif /* XEEN_CLOUDS_ENDING_H */
diff --git a/engines/xeen/worldofxeen/clouds_intro.cpp b/engines/xeen/worldofxeen/clouds_intro.cpp
deleted file mode 100644
index 1ea6765761..0000000000
--- a/engines/xeen/worldofxeen/clouds_intro.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "xeen/worldofxeen/clouds_intro.h"
-#include "xeen/sound.h"
-
-namespace Xeen {
-
-bool showCloudsTitle(XeenEngine &vm) {
-	return true;
-}
-
-bool showCloudsIntro(XeenEngine &vm) {
-	return true;
-}
-
-} // End of namespace Xeen
diff --git a/engines/xeen/worldofxeen/clouds_intro.h b/engines/xeen/worldofxeen/clouds_intro.h
deleted file mode 100644
index 0bd5633315..0000000000
--- a/engines/xeen/worldofxeen/clouds_intro.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef XEEN_CLOUDS_INTRO_H
-#define XEEN_CLOUDS_INTRO_H
-
-#include "xeen/xeen.h"
-
-namespace Xeen {
-
-bool showCloudsTitle(XeenEngine &vm);
-
-bool showCloudsIntro(XeenEngine &vm);
-
-} // End of namespace Xeen
-
-#endif /* XEEN_CLOUDS_INTRO_H */
diff --git a/engines/xeen/worldofxeen/darkside_cutscenes.cpp b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
new file mode 100644
index 0000000000..90efef1a96
--- /dev/null
+++ b/engines/xeen/worldofxeen/darkside_cutscenes.cpp
@@ -0,0 +1,241 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "xeen/worldofxeen/darkside_cutscenes.h"
+#include "xeen/worldofxeen/worldofxeen.h"
+#include "xeen/sound.h"
+#include "xeen/xeen.h"
+
+namespace Xeen {
+
+bool DarkSideCutscenes::showDarkSideTitle() {
+	EventsManager &events = *_vm->_events;
+	Screen &screen = *_vm->_screen;
+	SoundManager &sound = *_vm->_sound;
+	
+	// TODO: Starting method, and sound
+	//sub_28F40
+	screen.loadPalette("dark.pal");
+	SpriteResource nwc[4] = {
+		SpriteResource("nwc1.int"), SpriteResource("nwc2.int"),
+		SpriteResource("nwc3.int"), SpriteResource("nwc4.int")
+	};
+	VOC voc[3];
+	voc[0].open("dragon1.voc");
+	voc[1].open("dragon2.voc");
+	voc[2].open("dragon3.voc");
+
+	// Load backgrounds
+	screen.loadBackground("nwc1.raw");
+	screen.loadPage(0);
+	screen.loadBackground("nwc2.raw");
+	screen.loadPage(1);
+
+	// Draw the screen and fade it in
+	screen.horizMerge(0);
+	screen.draw();
+	screen.fadeIn(4);
+
+	// Initial loop for dragon roaring
+	int nwcIndex = 0, nwcFrame = 0;
+	for (int idx = 0; idx < 55 && !_vm->shouldQuit(); ++idx) {
+		// Render the next frame
+		events.updateGameCounter();
+		screen.vertMerge(0);
+		nwc[nwcIndex].draw(screen, nwcFrame);
+		screen.draw();
+
+		switch (idx) {
+		case 17:
+			sound.playSound(voc[0]);
+			break;
+		case 34:
+		case 44:
+			++nwcIndex;
+			nwcFrame = 0;
+			break;
+		case 35:
+			sound.playSound(voc[1]);
+			break;
+		default:
+			++nwcFrame;
+		}
+
+		if (events.wait(2, true))
+			return false;
+	}
+
+	// Loop for dragon using flyspray
+	for (int idx = 0; idx < 42 && !_vm->shouldQuit(); ++idx) {
+		events.updateGameCounter();
+		screen.vertMerge(SCREEN_HEIGHT);
+		nwc[3].draw(screen, idx);
+		screen.draw();
+
+		switch (idx) {
+		case 3:
+			sound.startMusic(40);
+			break;
+		case 11:
+			sound.startMusic(0);
+		case 27:
+		case 30:
+			sound.startMusic(3);
+			break;
+		case 31:
+			sound.proc2(voc[2]);
+			break;
+		case 33:
+			sound.startMusic(2);
+			break;
+		default:
+			break;
+		}
+
+		if (events.wait(2, true))
+			return false;
+	}
+
+	// Pause for a bit
+	if (events.wait(10, true))
+		return false;
+
+	voc[0].stop();
+	voc[1].stop();
+	voc[2].stop();
+	sound.stopMusic(95);
+
+	screen.loadBackground("jvc.raw");
+	screen.fadeOut(8);
+	screen.draw();
+	screen.fadeIn(4);
+
+	events.updateGameCounter();
+	events.wait(60, true);
+	return true;
+}
+
+bool DarkSideCutscenes::showDarkSideIntro() {
+	EventsManager &events = *_vm->_events;
+	Screen &screen = *_vm->_screen;
+	SoundManager &sound = *_vm->_sound;
+	const int XLIST1[] = {
+		0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 58, 60, 62
+	};
+	const int YLIST1[] = {
+		0, 5, 10, 15, 20, 25, 30, 35, 40, 40, 39, 37, 35, 33, 31
+	};
+	const int XLIST2[] = {
+		160, 155, 150, 145, 140, 135, 130, 125, 120, 115, 110, 105, 98, 90, 82
+	};
+
+	screen.fadeOut(8);
+	screen.loadBackground("pyramid2.raw");
+	screen.loadPage(0);
+	screen.loadPage(1);
+	screen.loadBackground("pyramid3.raw");
+	screen.saveBackground(1);
+
+	SpriteResource sprites[3] = {
+		SpriteResource("title.int"), SpriteResource("pyratop.int"), SpriteResource("pyramid.int")
+	};
+	Common::File voc[2];
+	voc[0].open("pharoh1a.voc");
+	voc[1].open("pharoh1b.voc");
+
+	screen.vertMerge(SCREEN_HEIGHT);
+	screen.loadPage(0);
+	screen.loadPage(1);
+
+	// Show Might and Magic Darkside of Xeen title, and gradualy scroll
+	// the background vertically down to show the Pharoah's base
+	int yp = 0;
+	int frameNum = 0;
+	int idx1 = 0;
+	bool skipElapsed = false;
+	uint32 timeExpired = 0;
+	bool fadeFlag = true;
+
+	for (int yCtr = SCREEN_HEIGHT; yCtr > 0; ) {
+		events.updateGameCounter();
+		screen.vertMerge(yp);
+
+		sprites[0].draw(screen, 0);
+		if (frameNum)
+			sprites[0].draw(screen, frameNum);
+
+		idx1 = (idx1 + 1) % 4;
+		if (!idx1)
+			frameNum = (frameNum + 1) % 10;
+
+		screen.draw();
+		if (!skipElapsed) {
+			timeExpired = MAX((int)events.timeElapsed() - 1, 1);
+			skipElapsed = true;
+		}
+
+		yCtr -= timeExpired;
+		yp = MIN(yp + timeExpired, (uint)200);
+		 
+		if (events.wait(1, true))
+			return false;
+
+		if (fadeFlag) {
+			screen.fadeIn(4);
+			fadeFlag = false;
+		}
+	}
+
+	screen.vertMerge(SCREEN_HEIGHT);
+	screen.saveBackground(1);
+	screen.draw();
+	screen.freePages();
+
+	events.updateGameCounter();
+	events.wait(30, true);
+
+	// Zoom into the Pharoah's base closeup view
+	for (int idx = 14; idx >= 0; --idx) {
+		events.updateGameCounter();
+		sprites[1].draw(screen, 0, Common::Point(XLIST1[idx], YLIST1[idx]));
+		sprites[1].draw(screen, 1, Common::Point(XLIST2[idx], YLIST1[idx]));
+		screen.draw();
+
+		if (idx == 2)
+			sound.stopMusic(48);
+		if (events.wait(2, true))
+			return false;
+	}
+
+	// TODO: More
+	sound.playSong(voc[0]);
+	sound.playSong(voc[1]);
+
+	return true;
+}
+
+bool DarkSideCutscenes::showDarkSideEnding() {
+	// TODO
+	return true;
+}
+
+} // End of namespace Xeen
diff --git a/engines/xeen/worldofxeen/darkside_cutscenes.h b/engines/xeen/worldofxeen/darkside_cutscenes.h
new file mode 100644
index 0000000000..1b78e3ea2d
--- /dev/null
+++ b/engines/xeen/worldofxeen/darkside_cutscenes.h
@@ -0,0 +1,54 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef XEEN_WORLDOFXEEN_DARKSIDE_CUTSCENES_H
+#define XEEN_WORLDOFXEEN_DARKSIDE_CUTSCENES_H
+
+namespace Xeen {
+
+class XeenEngine;
+
+class DarkSideCutscenes {
+private:
+	XeenEngine *_vm;
+public:
+	DarkSideCutscenes(XeenEngine *vm) : _vm(vm) {}
+
+	/**
+	 * Shows the Dark Side of Xeen title screen
+	 */
+	bool showDarkSideTitle();
+
+	/**
+	 * Shows the Dark Side of Xeen intro sequence
+	 */
+	bool showDarkSideIntro();
+
+	/**
+	 * Shows the Dark Side of Xeen ending sequence
+	 */
+	bool showDarkSideEnding();
+};
+
+} // End of namespace Xeen
+
+#endif /* XEEN_WORLDOFXEEN_DARKSIDE_CUTSCENES_H */
diff --git a/engines/xeen/worldofxeen/darkside_ending.cpp b/engines/xeen/worldofxeen/darkside_ending.cpp
deleted file mode 100644
index 0a8211f55c..0000000000
--- a/engines/xeen/worldofxeen/darkside_ending.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "xeen/worldofxeen/darkside_ending.h"
-#include "xeen/sound.h"
-
-namespace Xeen {
-
-bool showDarkSideEnding(XeenEngine &vm) {
-	return true;
-}
-
-} // End of namespace Xeen
diff --git a/engines/xeen/worldofxeen/darkside_ending.h b/engines/xeen/worldofxeen/darkside_ending.h
deleted file mode 100644
index 49dcf2d40b..0000000000
--- a/engines/xeen/worldofxeen/darkside_ending.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef XEEN_DARKSIDE_ENDING_H
-#define XEEN_DARKSIDE_ENDING_H
-
-#include "xeen/xeen.h"
-
-namespace Xeen {
-
-bool showDarkSideEnding(XeenEngine &vm);
-
-} // End of namespace Xeen
-
-#endif /* XEEN_DARKSIDE_ENDING_H */
diff --git a/engines/xeen/worldofxeen/darkside_intro.cpp b/engines/xeen/worldofxeen/darkside_intro.cpp
deleted file mode 100644
index 7ea03286d3..0000000000
--- a/engines/xeen/worldofxeen/darkside_intro.cpp
+++ /dev/null
@@ -1,234 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "xeen/worldofxeen/darkside_intro.h"
-#include "xeen/sound.h"
-
-namespace Xeen {
-
-bool showDarkSideTitle(XeenEngine &vm) {
-	EventsManager &events = *vm._events;
-	Screen &screen = *vm._screen;
-	SoundManager &sound = *vm._sound;
-	
-	// TODO: Starting method, and sound
-	//sub_28F40
-	screen.loadPalette("dark.pal");
-	SpriteResource nwc[4] = {
-		SpriteResource("nwc1.int"), SpriteResource("nwc2.int"),
-		SpriteResource("nwc3.int"), SpriteResource("nwc4.int")
-	};
-	VOC voc[3];
-	voc[0].open("dragon1.voc");
-	voc[1].open("dragon2.voc");
-	voc[2].open("dragon3.voc");
-
-	// Load backgrounds
-	screen.loadBackground("nwc1.raw");
-	screen.loadPage(0);
-	screen.loadBackground("nwc2.raw");
-	screen.loadPage(1);
-
-	// Draw the screen and fade it in
-	screen.horizMerge(0);
-	screen.draw();
-	screen.fadeIn(4);
-
-	// Initial loop for dragon roaring
-	int nwcIndex = 0, nwcFrame = 0;
-	for (int idx = 0; idx < 55 && !vm.shouldQuit(); ++idx) {
-		// Render the next frame
-		events.updateGameCounter();
-		screen.vertMerge(0);
-		nwc[nwcIndex].draw(screen, nwcFrame);
-		screen.draw();
-
-		switch (idx) {
-		case 17:
-			sound.playSound(voc[0]);
-			break;
-		case 34:
-		case 44:
-			++nwcIndex;
-			nwcFrame = 0;
-			break;
-		case 35:
-			sound.playSound(voc[1]);
-			break;
-		default:
-			++nwcFrame;
-		}
-
-		if (events.wait(2, true))
-			return false;
-	}
-
-	// Loop for dragon using flyspray
-	for (int idx = 0; idx < 42 && !vm.shouldQuit(); ++idx) {
-		events.updateGameCounter();
-		screen.vertMerge(SCREEN_HEIGHT);
-		nwc[3].draw(screen, idx);
-		screen.draw();
-
-		switch (idx) {
-		case 3:
-			sound.startMusic(40);
-			break;
-		case 11:
-			sound.startMusic(0);
-		case 27:
-		case 30:
-			sound.startMusic(3);
-			break;
-		case 31:
-			sound.proc2(voc[2]);
-			break;
-		case 33:
-			sound.startMusic(2);
-			break;
-		default:
-			break;
-		}
-
-		if (events.wait(2, true))
-			return false;
-	}
-
-	// Pause for a bit
-	if (events.wait(10, true))
-		return false;
-
-	voc[0].stop();
-	voc[1].stop();
-	voc[2].stop();
-	sound.stopMusic(95);
-
-	screen.loadBackground("jvc.raw");
-	screen.fadeOut(8);
-	screen.draw();
-	screen.fadeIn(4);
-
-	events.updateGameCounter();
-	events.wait(60, true);
-	return true;
-}
-
-bool showDarkSideIntro(XeenEngine &vm) {
-	EventsManager &events = *vm._events;
-	Screen &screen = *vm._screen;
-	SoundManager &sound = *vm._sound;
-	const int XLIST1[] = {
-		0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 58, 60, 62
-	};
-	const int YLIST1[] = {
-		0, 5, 10, 15, 20, 25, 30, 35, 40, 40, 39, 37, 35, 33, 31
-	};
-	const int XLIST2[] = {
-		160, 155, 150, 145, 140, 135, 130, 125, 120, 115, 110, 105, 98, 90, 82
-	};
-
-	screen.fadeOut(8);
-	screen.loadBackground("pyramid2.raw");
-	screen.loadPage(0);
-	screen.loadPage(1);
-	screen.loadBackground("pyramid3.raw");
-	screen.saveBackground(1);
-
-	SpriteResource sprites[3] = {
-		SpriteResource("title.int"), SpriteResource("pyratop.int"), SpriteResource("pyramid.int")
-	};
-	Common::File voc[2];
-	voc[0].open("pharoh1a.voc");
-	voc[1].open("pharoh1b.voc");
-
-	screen.vertMerge(SCREEN_HEIGHT);
-	screen.loadPage(0);
-	screen.loadPage(1);
-
-	// Show Might and Magic Darkside of Xeen title, and gradualy scroll
-	// the background vertically down to show the Pharoah's base
-	int yp = 0;
-	int frameNum = 0;
-	int idx1 = 0;
-	bool skipElapsed = false;
-	uint32 timeExpired = 0;
-	bool fadeFlag = true;
-
-	for (int yCtr = SCREEN_HEIGHT; yCtr > 0; ) {
-		events.updateGameCounter();
-		screen.vertMerge(yp);
-
-		sprites[0].draw(screen, 0);
-		if (frameNum)
-			sprites[0].draw(screen, frameNum);
-
-		idx1 = (idx1 + 1) % 4;
-		if (!idx1)
-			frameNum = (frameNum + 1) % 10;
-
-		screen.draw();
-		if (!skipElapsed) {
-			timeExpired = MAX((int)events.timeElapsed() - 1, 1);
-			skipElapsed = true;
-		}
-
-		yCtr -= timeExpired;
-		yp = MIN(yp + timeExpired, (uint)200);
-		 
-		if (events.wait(1, true))
-			return false;
-
-		if (fadeFlag) {
-			screen.fadeIn(4);
-			fadeFlag = false;
-		}
-	}
-
-	screen.vertMerge(SCREEN_HEIGHT);
-	screen.saveBackground(1);
-	screen.draw();
-	screen.freePages();
-
-	events.updateGameCounter();
-	events.wait(30, true);
-
-	// Zoom into the Pharoah's base closeup view
-	for (int idx = 14; idx >= 0; --idx) {
-		events.updateGameCounter();
-		sprites[1].draw(screen, 0, Common::Point(XLIST1[idx], YLIST1[idx]));
-		sprites[1].draw(screen, 1, Common::Point(XLIST2[idx], YLIST1[idx]));
-		screen.draw();
-
-		if (idx == 2)
-			sound.stopMusic(48);
-		if (events.wait(2, true))
-			return false;
-	}
-
-	// TODO: More
-	sound.playSong(voc[0]);
-	sound.playSong(voc[1]);
-
-	return true;
-}
-
-} // End of namespace Xeen
diff --git a/engines/xeen/worldofxeen/darkside_intro.h b/engines/xeen/worldofxeen/darkside_intro.h
deleted file mode 100644
index e37f095347..0000000000
--- a/engines/xeen/worldofxeen/darkside_intro.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef XEEN_DARKSIDE_INTRO_H
-#define XEEN_DARKSIDE_INTRO_H
-
-#include "xeen/xeen.h"
-
-namespace Xeen {
-
-bool showDarkSideTitle(XeenEngine &vm);
-
-bool showDarkSideIntro(XeenEngine &vm);
-
-} // End of namespace Xeen
-
-#endif /* XEEN_DARKSIDE_INTRO_H */
diff --git a/engines/xeen/worldofxeen/worldofxeen.cpp b/engines/xeen/worldofxeen/worldofxeen.cpp
new file mode 100644
index 0000000000..86a6ee3da7
--- /dev/null
+++ b/engines/xeen/worldofxeen/worldofxeen.cpp
@@ -0,0 +1,46 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "xeen/worldofxeen/worldofxeen.h"
+#include "xeen/worldofxeen/darkside_cutscenes.h"
+#include "xeen/worldofxeen/clouds_cutscenes.h"
+#include "xeen/sound.h"
+
+namespace Xeen {
+
+WorldOfXeenEngine::WorldOfXeenEngine(OSystem *syst, const XeenGameDescription *gameDesc)
+		: XeenEngine(syst, gameDesc), CloudsCutscenes(this), 
+		DarkSideCutscenes(this) {
+	_seenDarkSideIntro = false;
+}
+
+void WorldOfXeenEngine::showIntro() {
+	// **DEBUG**
+	if (gDebugLevel == 0)
+		return;
+
+	bool completed = showDarkSideTitle();
+	if (!_seenDarkSideIntro && completed)
+		showDarkSideIntro();
+}
+
+} // End of namespace Xeen
diff --git a/engines/xeen/worldofxeen/worldofxeen.h b/engines/xeen/worldofxeen/worldofxeen.h
new file mode 100644
index 0000000000..68a83bb89d
--- /dev/null
+++ b/engines/xeen/worldofxeen/worldofxeen.h
@@ -0,0 +1,50 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef XEEN_WORLDOFXEEN_WORLDOFXEEN_H
+#define XEEN_WORLDOFXEEN_WORLDOFXEEN_H
+
+#include "xeen/xeen.h"
+#include "xeen/worldofxeen/clouds_cutscenes.h"
+#include "xeen/worldofxeen/darkside_cutscenes.h"
+
+namespace Xeen {
+
+/**
+ * Implements a descendant of the base Xeen engine to handle 
+ * Clouds of Xeen, Dark Side of Xeen, and Worlds of Xeen specific
+ * game code
+ */
+class WorldOfXeenEngine: public XeenEngine, public CloudsCutscenes, 
+		public DarkSideCutscenes {
+protected:
+	virtual void showIntro();
+public:
+	bool _seenDarkSideIntro;
+public:
+	WorldOfXeenEngine(OSystem *syst, const XeenGameDescription *gameDesc);
+	virtual ~WorldOfXeenEngine() {}
+};
+
+} // End of namespace Xeen
+
+#endif /* XEEN_WORLDOFXEEN_WORLDOFXEEN_H */
diff --git a/engines/xeen/worldofxeen/worldofxeen_game.cpp b/engines/xeen/worldofxeen/worldofxeen_game.cpp
deleted file mode 100644
index f7c9336c64..0000000000
--- a/engines/xeen/worldofxeen/worldofxeen_game.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "xeen/worldofxeen/worldofxeen_game.h"
-#include "xeen/worldofxeen/darkside_intro.h"
-#include "xeen/sound.h"
-
-namespace Xeen {
-
-WorldOfXeenEngine::WorldOfXeenEngine(OSystem *syst, const XeenGameDescription *gameDesc)
-		: XeenEngine(syst, gameDesc) {
-	_seenDarkSideIntro = false;
-}
-
-void WorldOfXeenEngine::showIntro() {
-	// **DEBUG**
-	if (gDebugLevel == 0)
-		return;
-
-	bool completed = showDarkSideTitle(*this);
-	if (!_seenDarkSideIntro && completed)
-		showDarkSideIntro(*this);
-}
-
-} // End of namespace Xeen
diff --git a/engines/xeen/worldofxeen/worldofxeen_game.h b/engines/xeen/worldofxeen/worldofxeen_game.h
deleted file mode 100644
index 97a8754470..0000000000
--- a/engines/xeen/worldofxeen/worldofxeen_game.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef XEEN_WORLDOFXEEN_GAME_H
-#define XEEN_WORLDOFXEEN_GAME_H
-
-#include "xeen/xeen.h"
-
-namespace Xeen {
-
-/**
- * Implements a descendant of the base Xeen engine to handle 
- * Clouds of Xeen, Dark Side of Xeen, and Worlds of Xeen specific
- * game code
- */
-class WorldOfXeenEngine: public XeenEngine {
-protected:
-	virtual void showIntro();
-public:
-	bool _seenDarkSideIntro;
-public:
-	WorldOfXeenEngine(OSystem *syst, const XeenGameDescription *gameDesc);
-	virtual ~WorldOfXeenEngine() {}
-};
-
-} // End of namespace Xeen
-
-#endif /* XEEN_WORLDOFXEEN_GAME_H */
-- 
cgit v1.2.3