diff options
author | Filippos Karapetis | 2015-10-22 11:03:35 +0300 |
---|---|---|
committer | Filippos Karapetis | 2015-10-22 11:03:35 +0300 |
commit | bff515a2d936e5291c4bef3a7ee6ddfe605be3e6 (patch) | |
tree | c39c727fe4070762246297384b8ed4564fa2c085 | |
parent | 2bbc7b889a4d5d35cd02dd4660c5b06005187ff0 (diff) | |
parent | 61b14539c4f5c2ff366c9f6d07893808959f31be (diff) | |
download | scummvm-rg350-bff515a2d936e5291c4bef3a7ee6ddfe605be3e6.tar.gz scummvm-rg350-bff515a2d936e5291c4bef3a7ee6ddfe605be3e6.tar.bz2 scummvm-rg350-bff515a2d936e5291c4bef3a7ee6ddfe605be3e6.zip |
Merge pull request #616 from eriktorbjorn/fw-splash
CINE: Show splash screen in CD version of Future Wars
-rw-r--r-- | engines/cine/cine.cpp | 49 | ||||
-rw-r--r-- | engines/cine/cine.h | 1 |
2 files changed, 50 insertions, 0 deletions
diff --git a/engines/cine/cine.cpp b/engines/cine/cine.cpp index 5fed92051c..d2f088dcd8 100644 --- a/engines/cine/cine.cpp +++ b/engines/cine/cine.cpp @@ -22,10 +22,14 @@ #include "common/config-manager.h" #include "common/debug-channels.h" +#include "common/events.h" #include "engines/util.h" #include "graphics/cursorman.h" +#include "graphics/palette.h" + +#include "image/iff.h" #include "cine/cine.h" #include "cine/bg_list.h" @@ -89,6 +93,10 @@ void CineEngine::syncSoundSettings() { } Common::Error CineEngine::run() { + if (g_cine->getGameType() == GType_FW && (g_cine->getFeatures() & GF_CD)) { + showSplashScreen(); + } + // Initialize backend initGraphics(320, 200, false); @@ -239,4 +247,45 @@ void CineEngine::initialize() { } } +void CineEngine::showSplashScreen() { + Common::File file; + if (!file.open("sony.lbm")) + return; + + Image::IFFDecoder decoder; + if (!decoder.loadStream(file)) + return; + + const Graphics::Surface *surface = decoder.getSurface(); + if (surface->w == 640 && surface->h == 480) { + initGraphics(640, 480, true); + + const byte *palette = decoder.getPalette(); + int paletteColorCount = decoder.getPaletteColorCount(); + g_system->getPaletteManager()->setPalette(palette, 0, paletteColorCount); + + g_system->copyRectToScreen(surface->getPixels(), 640, 0, 0, 640, 480); + g_system->updateScreen(); + + Common::EventManager *eventMan = g_system->getEventManager(); + + bool done = false; + uint32 now = g_system->getMillis(); + + while (!done && g_system->getMillis() - now < 2000) { + Common::Event event; + while (eventMan->pollEvent(event)) { + if (event.type == Common::EVENT_KEYDOWN && event.kbd.keycode == Common::KEYCODE_ESCAPE) { + done = true; + break; + } + if (shouldQuit()) + done = true; + } + } + } + + decoder.destroy(); +} + } // End of namespace Cine diff --git a/engines/cine/cine.h b/engines/cine/cine.h index e620d2ffa5..71a0c242b6 100644 --- a/engines/cine/cine.h +++ b/engines/cine/cine.h @@ -145,6 +145,7 @@ public: private: void initialize(); + void showSplashScreen(); void resetEngine(); bool loadPlainSaveFW(Common::SeekableReadStream &in, CineSaveGameFormat saveGameFormat); bool loadTempSaveOS(Common::SeekableReadStream &in); |