aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2002-05-12 17:51:40 +0000
committerMax Horn2002-05-12 17:51:40 +0000
commit271f50b044ec60cc97886a0927edc40dcc2bc329 (patch)
treefbc28ce4e31a653fd3678f45dcff4ab901f61ca7
parente78435b81799767dae965d1d833ca4dc6946e9c0 (diff)
downloadscummvm-rg350-271f50b044ec60cc97886a0927edc40dcc2bc329.tar.gz
scummvm-rg350-271f50b044ec60cc97886a0927edc40dcc2bc329.tar.bz2
scummvm-rg350-271f50b044ec60cc97886a0927edc40dcc2bc329.zip
renamed unkVirtScreen4 to fadeToBlackEffect; fixed graphic transition glitch (#551584)
svn-id: r4294
-rw-r--r--gfx.cpp13
-rw-r--r--saveload.cpp4
-rw-r--r--script_v2.cpp2
-rw-r--r--scumm.h2
-rw-r--r--scummvm.cpp2
5 files changed, 14 insertions, 9 deletions
diff --git a/gfx.cpp b/gfx.cpp
index 4b654ae231..8ba83cc8fa 100644
--- a/gfx.cpp
+++ b/gfx.cpp
@@ -555,13 +555,14 @@ void Scumm::moveMemInPalRes(int start, int end, byte direction)
}
}
-void Scumm::unkVirtScreen4(int a)
+void Scumm::fadeToBlackEffect(int a)
{
VirtScreen *vs;
setDirtyRange(0, 0, 0);
if (!(_features & GF_AFTER_V7))
camera._last.x = camera._cur.x;
+
if (!_screenEffectFlag)
return;
_screenEffectFlag = false;
@@ -569,10 +570,12 @@ void Scumm::unkVirtScreen4(int a)
if (a == 0)
return;
+ // Fill screen 0 with black
vs = &virtscr[0];
gdi._backbuff_ptr = vs->screenPtr + vs->xstart;
memset(gdi._backbuff_ptr, 0, vs->size);
+ // Fade to black with the specified effect, if any.
switch (a) {
case 1:
case 2:
@@ -583,8 +586,9 @@ void Scumm::unkVirtScreen4(int a)
unkScreenEffect6();
break;
case 129:
- //setDirtyRange(0, 0, vs->height);
- //updateDirtyScreen(0);
+ // Just blit screen 0 to the display (i.e. display will be black)
+ setDirtyRange(0, 0, vs->height);
+ updateDirtyScreen(0);
/* XXX: EGA_proc4(0); */
// warning("EGA_proc4"); /* FIXME */
break;
@@ -595,7 +599,7 @@ void Scumm::unkVirtScreen4(int a)
unkScreenEffect5(1);
break;
default:
- warning("unkVirtScreen4: default case %d", a);
+ warning("fadeToBlackEffect: default case %d", a);
}
}
@@ -1759,6 +1763,7 @@ static const byte screen_eff7_table3[4] = {
13, 25, 25, 25
};
+/* Transition effect */
void Scumm::unkScreenEffect7(int a)
{
int tab_1[16];
diff --git a/saveload.cpp b/saveload.cpp
index 8855623413..1c3eb44291 100644
--- a/saveload.cpp
+++ b/saveload.cpp
@@ -127,8 +127,8 @@ bool Scumm::loadState(int slot, bool compat)
gdi._mask_left = -1;
initScreens(0, 0, 320, 200);
- _screenEffectFlag = 1;
- unkVirtScreen4(129);
+ _screenEffectFlag = true;
+ fadeToBlackEffect(129);
initScreens(0, sb, 320, sh);
diff --git a/script_v2.cpp b/script_v2.cpp
index 4a25d761dd..f4dc5edf1c 100644
--- a/script_v2.cpp
+++ b/script_v2.cpp
@@ -2776,7 +2776,7 @@ void Scumm::o6_miscOps()
grabCursor(args[1], args[2], args[3], args[4]);
break;
case 5:
- unkVirtScreen4(args[1]);
+ fadeToBlackEffect(args[1]);
break;
case 6:
_fullRedraw = 1;
diff --git a/scumm.h b/scumm.h
index 432b631297..4d9e8e2e06 100644
--- a/scumm.h
+++ b/scumm.h
@@ -1212,7 +1212,7 @@ public:
void updateDirtyScreen(int slot);
VirtScreen *findVirtScreen(int y);
- void unkVirtScreen4(int a);
+ void fadeToBlackEffect(int a);
static void setVirtscreenDirty(VirtScreen *vs, int left, int top, int right, int bottom);
void screenEffect(int effect);
diff --git a/scummvm.cpp b/scummvm.cpp
index d610997324..a80a2e97a7 100644
--- a/scummvm.cpp
+++ b/scummvm.cpp
@@ -374,7 +374,7 @@ void Scumm::startScene(int room, Actor * a, int objectNr)
clearMsgQueue();
- unkVirtScreen4(_switchRoomEffect2);
+ fadeToBlackEffect(_switchRoomEffect2);
_newEffect = _switchRoomEffect;
if (_currentScript != 0xFF) {