renamed fadeToBlackEffect to fadeOut; renamed screenEffect to fadeIn; implemented oldRoomEffect (fixes room transitions in MonkeyVGA and Indy3)
svn-id: r4536
This commit is contained in:
parent
1861053d33
commit
dc60238196
6 changed files with 78 additions and 65 deletions
81
gfx.cpp
81
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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
12
scumm.h
12
scumm.h
|
@ -254,6 +254,14 @@ enum ResTypes {
|
|||
rtNumTypes = 18
|
||||
};
|
||||
|
||||
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();
|
||||
|
|
13
scummvm.cpp
13
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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue