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