aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMartin Kiewitz2009-10-14 13:58:37 +0000
committerMartin Kiewitz2009-10-14 13:58:37 +0000
commitf286a6d5b9d37cc57367a01d13c397769d88957e (patch)
tree7c2d82042f890df23140bdbba1e995d7ac2b6122 /engines
parentb220471efdefd9533a1e52b96c3e91b6de6a0940 (diff)
downloadscummvm-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.cpp35
-rw-r--r--engines/sci/gui/gui_transitions.h4
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;