diff options
author | Martin Kiewitz | 2009-10-14 13:58:37 +0000 |
---|---|---|
committer | Martin Kiewitz | 2009-10-14 13:58:37 +0000 |
commit | f286a6d5b9d37cc57367a01d13c397769d88957e (patch) | |
tree | 7c2d82042f890df23140bdbba1e995d7ac2b6122 /engines | |
parent | b220471efdefd9533a1e52b96c3e91b6de6a0940 (diff) | |
download | scummvm-rg350-f286a6d5b9d37cc57367a01d13c397769d88957e.tar.gz scummvm-rg350-f286a6d5b9d37cc57367a01d13c397769d88957e.tar.bz2 scummvm-rg350-f286a6d5b9d37cc57367a01d13c397769d88957e.zip |
SCI/newgui: SciGuiTransitions now supports block-pixelation as well (EGA and VGA), e.g. qfg1/ega
svn-id: r45079
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sci/gui/gui_transitions.cpp | 35 | ||||
-rw-r--r-- | engines/sci/gui/gui_transitions.h | 4 |
2 files changed, 38 insertions, 1 deletions
diff --git a/engines/sci/gui/gui_transitions.cpp b/engines/sci/gui/gui_transitions.cpp index 254a6253ec..b68d1b3f93 100644 --- a/engines/sci/gui/gui_transitions.cpp +++ b/engines/sci/gui/gui_transitions.cpp @@ -61,6 +61,11 @@ void SciGuiTransitions::doit(Common::Rect picRect) { case SCI_TRANSITIONS_VGA_PIXELATION: setNewPalette(); pixelation(); break; + + case SCI_TRANSITIONS_VGA_BLOCKS: + setNewPalette(); blocks(); + break; + case SCI_TRANSITIONS_VGA_FADEPALETTE: fadeOut(); setNewScreen(); fadeIn(); break; @@ -72,13 +77,21 @@ void SciGuiTransitions::doit(Common::Rect picRect) { } else { // === EGA transitions switch (_number) { + case SCI_TRANSITIONS_EGA_PIXELATION: + pixelation(); + break; + + case SCI_TRANSITIONS_EGA_BLOCKS: + blocks(); + break; + case SCI_TRANSITIONS_EGA_FADEPALETTE: fadeOut(); setNewScreen(); fadeIn(); break; default: warning("SciGuiTransitions: EGA-%d not implemented", _number); - setNewPalette(); setNewScreen(); + setNewScreen(); } } _screen->_picNotValid = 0; @@ -149,4 +162,24 @@ void SciGuiTransitions::pixelation () { } while (mask != 0x40); } +// like pixelation but uses 8x8 blocks +void SciGuiTransitions::blocks() { + uint16 mask = 0x40, stepNr = 0; + Common::Rect blockRect; + + do { + mask = (mask & 1) ? (mask >> 1) ^ 0x240 : mask >> 1; + if (mask >= 40 * 25) + continue; + blockRect.left = (mask % 40) << 3; blockRect.right = blockRect.left + 8; + blockRect.top = (mask / 40) << 3; blockRect.bottom = blockRect.top + 8; + _screen->copyRectToScreen(blockRect); + if ((stepNr & 7) == 0) { + g_system->updateScreen(); + g_system->delayMillis(4); + } + stepNr++; + } while (mask != 0x40); +} + } // End of namespace Sci diff --git a/engines/sci/gui/gui_transitions.h b/engines/sci/gui/gui_transitions.h index 32c77486d2..df4291403c 100644 --- a/engines/sci/gui/gui_transitions.h +++ b/engines/sci/gui/gui_transitions.h @@ -31,10 +31,13 @@ namespace Sci { enum { + SCI_TRANSITIONS_EGA_BLOCKS = 8, + SCI_TRANSITIONS_EGA_PIXELATION = 18, SCI_TRANSITIONS_EGA_FADEPALETTE = 30 }; enum { + SCI_TRANSITIONS_VGA_BLOCKS = 8, SCI_TRANSITIONS_VGA_PIXELATION = 9, SCI_TRANSITIONS_VGA_FADEPALETTE = 10 }; @@ -55,6 +58,7 @@ private: void fadeOut(); void fadeIn(); void pixelation(); + void blocks(); SciGui *_gui; SciGuiScreen *_screen; |