diff options
Diffstat (limited to 'engines/sci/gui/gui_transitions.cpp')
| -rw-r--r-- | engines/sci/gui/gui_transitions.cpp | 35 |
1 files changed, 34 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 |
