diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sci/engine/kgraphics.cpp | 19 | ||||
-rw-r--r-- | engines/sci/gfx/seq_decoder.cpp | 6 | ||||
-rw-r--r-- | engines/sci/gfx/seq_decoder.h | 2 | ||||
-rw-r--r-- | engines/sci/gui/gui_palette.cpp | 20 | ||||
-rw-r--r-- | engines/sci/gui/gui_palette.h | 2 |
5 files changed, 29 insertions, 20 deletions
diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 76aa9dc11b..9693f05b63 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -1041,24 +1041,29 @@ static reg_t kShowMovie_DOS(EngineState *s, int argc, reg_t *argv) { Common::String filename = s->_segMan->getString(argv[0]); int delay = argv[1].toUint16(); // Time between frames in ticks SeqDecoder seq; - SciGuiScreen *videoScreen = new SciGuiScreen(320, 200, 1); - if (!seq.loadFile(filename, s->resMan, videoScreen) && - !seq.loadFile(Common::String("SEQ/") + filename, s->resMan, videoScreen)) { + if (!seq.loadFile(filename, s->resMan) && + !seq.loadFile(Common::String("SEQ/") + filename, s->resMan)) { warning("Failed to open movie file %s", filename.c_str()); - delete videoScreen; return s->r_acc; } - delete videoScreen; - bool play = true; while (play) { uint32 startTime = g_system->getMillis(); SeqFrame *frame = seq.getFrame(play); Common::Rect frameRect = frame->frameRect; - g_system->copyRectToScreen(frame->data, frameRect.width(), frameRect.left, frameRect.top, frameRect.width(), frameRect.height()); + byte *scr = (byte *)g_system->lockScreen()->pixels; + int cur = 0; + for (int y = frameRect.top; y < frameRect.bottom; y++) { + for (int x = frameRect.left; x < frameRect.right; x++) { + if (frame->data[cur] != frame->colorKey) + scr[y * 320 + x] = frame->data[cur]; + cur++; + } + } + g_system->unlockScreen(); g_system->updateScreen(); delete frame->data; diff --git a/engines/sci/gfx/seq_decoder.cpp b/engines/sci/gfx/seq_decoder.cpp index 047ec4294a..dc119551d0 100644 --- a/engines/sci/gfx/seq_decoder.cpp +++ b/engines/sci/gfx/seq_decoder.cpp @@ -35,7 +35,7 @@ SeqDecoder::~SeqDecoder() { closeFile(); } -bool SeqDecoder::loadFile(Common::String fileName, ResourceManager *resMan, SciGuiScreen *screen) { +bool SeqDecoder::loadFile(Common::String fileName, ResourceManager *resMan) { closeFile(); _fileStream = SearchMan.createReadStreamForMember(fileName); @@ -48,11 +48,13 @@ bool SeqDecoder::loadFile(Common::String fileName, ResourceManager *resMan, SciG byte *paletteData = new byte[paletteSize]; _fileStream->read(paletteData, paletteSize); GuiPalette seqPalette; - SciGuiPalette *pal = new SciGuiPalette(resMan, screen); + SciGuiScreen *videoScreen = new SciGuiScreen(320, 200, 1); + SciGuiPalette *pal = new SciGuiPalette(resMan, videoScreen, false); pal->createFromData(paletteData, &seqPalette); pal->set(&seqPalette, 2); delete pal; delete[] paletteData; + delete videoScreen; _currentFrame = 0; diff --git a/engines/sci/gfx/seq_decoder.h b/engines/sci/gfx/seq_decoder.h index af90ef1eb8..c4a9dc6d4a 100644 --- a/engines/sci/gfx/seq_decoder.h +++ b/engines/sci/gfx/seq_decoder.h @@ -44,7 +44,7 @@ class SeqDecoder { public: SeqDecoder() : _fileStream(0) { } ~SeqDecoder(); - bool loadFile(Common::String fileName, ResourceManager *resMan, SciGuiScreen *screen); + bool loadFile(Common::String fileName, ResourceManager *resMan); void closeFile(); SeqFrame *getFrame(bool &hasNext); diff --git a/engines/sci/gui/gui_palette.cpp b/engines/sci/gui/gui_palette.cpp index 5a237822e1..d30c499d4c 100644 --- a/engines/sci/gui/gui_palette.cpp +++ b/engines/sci/gui/gui_palette.cpp @@ -34,7 +34,7 @@ namespace Sci { -SciGuiPalette::SciGuiPalette(ResourceManager *resMan, SciGuiScreen *screen) +SciGuiPalette::SciGuiPalette(ResourceManager *resMan, SciGuiScreen *screen, bool autoSetPalette) : _resMan(resMan), _screen(screen) { int16 color; @@ -54,14 +54,16 @@ SciGuiPalette::SciGuiPalette(ResourceManager *resMan, SciGuiScreen *screen) _sysPalette.colors[255].g = 255; _sysPalette.colors[255].b = 255; - // Load default palette from resource 999 - if (!setFromResource(999, 2)) { - // if not found, we try to set amiga palette - if (!setAmiga()) { - // if that also doesnt work out, set EGA palette - setEGA(); - } - }; + if (autoSetPalette) { + // Load default palette from resource 999 + if (!setFromResource(999, 2)) { + // if not found, we try to set amiga palette + if (!setAmiga()) { + // if that also doesnt work out, set EGA palette + setEGA(); + } + }; + } // Init _clrPowers used in MatchColor for(color = 0; color < 256; color++) diff --git a/engines/sci/gui/gui_palette.h b/engines/sci/gui/gui_palette.h index 5d7b3ba867..038ced7e2b 100644 --- a/engines/sci/gui/gui_palette.h +++ b/engines/sci/gui/gui_palette.h @@ -33,7 +33,7 @@ namespace Sci { class SciGuiScreen; class SciGuiPalette { public: - SciGuiPalette(ResourceManager *resMan, SciGuiScreen *screen); + SciGuiPalette(ResourceManager *resMan, SciGuiScreen *screen, bool autoSetPalette = true); ~SciGuiPalette(); void createFromData(byte *data, GuiPalette *paletteOut); |