CINE: Show splash screen in CD version of Future Wars

This commit is contained in:
Torbjörn Andersson 2015-09-17 22:19:36 +02:00
parent d227e40e53
commit 61b14539c4
2 changed files with 50 additions and 0 deletions

View File

@ -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

View File

@ -145,6 +145,7 @@ public:
private:
void initialize();
void showSplashScreen();
void resetEngine();
bool loadPlainSaveFW(Common::SeekableReadStream &in, CineSaveGameFormat saveGameFormat);
bool loadTempSaveOS(Common::SeekableReadStream &in);