aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2002-07-13 14:07:37 +0000
committerMax Horn2002-07-13 14:07:37 +0000
commitdc60238196e1507d8a492735a32754b2d57c94a6 (patch)
treeba139aea4f5b75626c30df0f8ca0f68262121f10
parent1861053d3386b475a36b963d01d452dcf41f83b6 (diff)
downloadscummvm-rg350-dc60238196e1507d8a492735a32754b2d57c94a6.tar.gz
scummvm-rg350-dc60238196e1507d8a492735a32754b2d57c94a6.tar.bz2
scummvm-rg350-dc60238196e1507d8a492735a32754b2d57c94a6.zip
renamed fadeToBlackEffect to fadeOut; renamed screenEffect to fadeIn; implemented oldRoomEffect (fixes room transitions in MonkeyVGA and Indy3)
svn-id: r4536
-rw-r--r--gfx.cpp81
-rw-r--r--saveload.cpp2
-rw-r--r--script_v1.cpp29
-rw-r--r--script_v2.cpp6
-rw-r--r--scumm.h12
-rw-r--r--scummvm.cpp13
6 files changed, 78 insertions, 65 deletions
diff --git a/gfx.cpp b/gfx.cpp
index e07d0dc68f..94e5aa9137 100644
--- a/gfx.cpp
+++ b/gfx.cpp
@@ -552,7 +552,44 @@ void Scumm::moveMemInPalRes(int start, int end, byte direction)
}
}
-void Scumm::fadeToBlackEffect(int a)
+void Scumm::fadeIn(int effect)
+{
+ switch (effect) {
+ case 1:
+ case 2:
+ case 3:
+ transitionEffect(effect - 1);
+ break;
+ case 128:
+ unkScreenEffect6();
+ break;
+ case 130:
+ unkScreenEffect1();
+ break;
+ case 131:
+ unkScreenEffect2();
+ break;
+ case 132:
+ unkScreenEffect3();
+ break;
+ case 133:
+ unkScreenEffect4();
+ break;
+ case 134:
+ unkScreenEffect5(0);
+ break;
+ case 135:
+ unkScreenEffect5(1);
+ break;
+ case 129:
+ break;
+ default:
+ warning("Unknown screen effect, %d", effect);
+ }
+ _screenEffectFlag = true;
+}
+
+void Scumm::fadeOut(int a)
{
VirtScreen *vs;
@@ -594,7 +631,7 @@ void Scumm::fadeToBlackEffect(int a)
unkScreenEffect5(1);
break;
default:
- warning("fadeToBlackEffect: default case %d", a);
+ warning("fadeOut: default case %d", a);
}
}
@@ -2164,43 +2201,6 @@ void Scumm::swapPalColors(int a, int b)
setDirtyColors(a, b);
}
-void Scumm::screenEffect(int effect)
-{
- switch (effect) {
- case 1:
- case 2:
- case 3:
- transitionEffect(effect - 1);
- break;
- case 128:
- unkScreenEffect6();
- break;
- case 130:
- unkScreenEffect1();
- break;
- case 131:
- unkScreenEffect2();
- break;
- case 132:
- unkScreenEffect3();
- break;
- case 133:
- unkScreenEffect4();
- break;
- case 134:
- unkScreenEffect5(0);
- break;
- case 135:
- unkScreenEffect5(1);
- break;
- case 129:
- break;
- default:
- warning("Unknown screen effect, %d", effect);
- }
- _screenEffectFlag = true;
-}
-
void Gdi::resetBackground(int top, int bottom, int strip)
{
VirtScreen *vs = &_vm->virtscr[0];
@@ -2219,7 +2219,8 @@ void Gdi::resetBackground(int top, int bottom, int strip)
_numLinesToProcess = bottom - top;
if (_numLinesToProcess) {
- if (1 /*_vm->_vars[VAR_V5_DRAWFLAGS]&2*/ ) {
+ if ((_vm->_features & GF_AFTER_V7) || (_vm->_vars[_vm->VAR_CURRENT_LIGHTS] & LIGHTMODE_screen)) {
+// if (1 /*_vm->_vars[VAR_V5_DRAWFLAGS]&2*/ ) {
if (_vm->hasCharsetMask(strip << 3, top, (strip + 1) << 3, bottom))
draw8ColWithMasking();
else
diff --git a/saveload.cpp b/saveload.cpp
index b8f75f7f31..a0934917bb 100644
--- a/saveload.cpp
+++ b/saveload.cpp
@@ -134,7 +134,7 @@ bool Scumm::loadState(int slot, bool compat)
// Force a fade to black
int old_screenEffectFlag = _screenEffectFlag;
_screenEffectFlag = true;
- fadeToBlackEffect(129);
+ fadeOut(129);
_screenEffectFlag = old_screenEffectFlag;
initScreens(0, sb, 320, sh);
diff --git a/script_v1.cpp b/script_v1.cpp
index 2813504092..08d062c750 100644
--- a/script_v1.cpp
+++ b/script_v1.cpp
@@ -1547,11 +1547,14 @@ void Scumm::o5_lights()
b = fetchScriptByte();
c = fetchScriptByte();
-/* if (c==0)
- _vars[VAR_V5_DRAWFLAGS] = a;
- else if (c==1) {*/
- warning("o5_lights: lights not implemented");
-// }
+ warning("o5_lights(%d,%d,%d): lights not implemented", a, b, c);
+
+ if (c==0)
+ _vars[VAR_CURRENT_LIGHTS] = a;
+ else if (c==1) {
+ //LightDx = a;
+ //LightDy = b;
+ }
_fullRedraw = 1;
}
@@ -1967,10 +1970,10 @@ void Scumm::o5_roomOps()
case 10: /* ? */
a = getVarOrDirectWord(0x80);
if (a) {
- _switchRoomEffect = (byte)(a);
+ _switchRoomEffect = (byte)a;
_switchRoomEffect2 = (byte)(a >> 8);
} else {
- screenEffect(_newEffect);
+ fadeIn(_newEffect);
}
break;
case 11: /* ? */
@@ -2754,13 +2757,11 @@ void Scumm::o5_oldRoomEffect()
_opcode = fetchScriptByte();
if ((_opcode & 0x1F) == 3) {
a = getVarOrDirectWord(0x80);
- switch (a) {
- case 4:
- _fullRedraw = true;
- break;
- default:
- warning("Unsupported oldRoomEffect %d", a);
- break;
+ if (a) {
+ _switchRoomEffect = (byte)a;
+ _switchRoomEffect2 = (byte)(a >> 8);
+ } else {
+ fadeIn(_newEffect);
}
}
}
diff --git a/script_v2.cpp b/script_v2.cpp
index 618ba25009..b8d8b3bfed 100644
--- a/script_v2.cpp
+++ b/script_v2.cpp
@@ -1843,7 +1843,7 @@ void Scumm::o6_roomOps()
_switchRoomEffect = (byte)(a);
_switchRoomEffect2 = (byte)(a >> 8);
} else {
- screenEffect(_newEffect);
+ fadeIn(_newEffect);
}
break;
@@ -2785,7 +2785,7 @@ void Scumm::o6_miscOps()
grabCursor(args[1], args[2], args[3], args[4]);
break;
case 5:
- fadeToBlackEffect(args[1]);
+ fadeOut(args[1]);
break;
case 6:
_fullRedraw = 1;
@@ -2793,7 +2793,7 @@ void Scumm::o6_miscOps()
for (i = 0; i < NUM_ACTORS; i++)
derefActor(i)->needRedraw = true;
processActors();
- screenEffect(args[1]);
+ fadeIn(args[1]);
break;
case 8:
startManiac();
diff --git a/scumm.h b/scumm.h
index fb2f05dc99..40c5ee0350 100644
--- a/scumm.h
+++ b/scumm.h
@@ -255,6 +255,14 @@ enum ResTypes {
};
enum {
+ LIGHTMODE_dark = 0,
+ LIGHTMODE_actor_base = 1,
+ LIGHTMODE_screen = 2,
+ LIGHTMODE_flashlight = 4,
+ LIGHTMODE_actor_color = 8
+};
+
+enum {
OF_OWNER_MASK = 0x0F,
OF_STATE_MASK = 0xF0,
@@ -1112,10 +1120,10 @@ public:
void updateDirtyScreen(int slot);
VirtScreen *findVirtScreen(int y);
- void fadeToBlackEffect(int a);
+ void fadeOut(int a);
static void setVirtscreenDirty(VirtScreen *vs, int left, int top, int right, int bottom);
- void screenEffect(int effect);
+ void fadeIn(int effect);
void unkScreenEffect1();
void unkScreenEffect2();
void unkScreenEffect3();
diff --git a/scummvm.cpp b/scummvm.cpp
index 14b691997e..7de5b8c5ab 100644
--- a/scummvm.cpp
+++ b/scummvm.cpp
@@ -119,6 +119,8 @@ void Scumm::scummInit()
if (!(_features & GF_AFTER_V7)) {
_vars[VAR_V5_DRAWFLAGS] = 11;
_vars[VAR_59] = 3;
+
+ _vars[VAR_CURRENT_LIGHTS] = LIGHTMODE_actor_base | LIGHTMODE_actor_color | LIGHTMODE_screen;
}
mouse.x = 104;
@@ -330,9 +332,10 @@ int Scumm::scummLoop(int delta)
setActorRedrawFlags();
resetActorBgs();
-// if (!(_vars[VAR_V5_DRAWFLAGS]&2) && _vars[VAR_V5_DRAWFLAGS]&4) {
-// error("Flashlight not implemented in this version");
-// }
+ if (!(_vars[VAR_CURRENT_LIGHTS] & LIGHTMODE_screen) &&
+ _vars[VAR_CURRENT_LIGHTS] & LIGHTMODE_flashlight) {
+ error("Flashlight not implemented in this version");
+ }
processActors();
clear_fullRedraw();
@@ -341,7 +344,7 @@ int Scumm::scummLoop(int delta)
if (_doEffect) {
_doEffect = false;
- screenEffect(_newEffect);
+ fadeIn(_newEffect);
clearClickedStatus();
}
@@ -383,7 +386,7 @@ void Scumm::startScene(int room, Actor * a, int objectNr)
clearMsgQueue();
- fadeToBlackEffect(_switchRoomEffect2);
+ fadeOut(_switchRoomEffect2);
_newEffect = _switchRoomEffect;
if (_currentScript != 0xFF) {