diff options
author | Max Horn | 2002-07-13 14:07:37 +0000 |
---|---|---|
committer | Max Horn | 2002-07-13 14:07:37 +0000 |
commit | dc60238196e1507d8a492735a32754b2d57c94a6 (patch) | |
tree | ba139aea4f5b75626c30df0f8ca0f68262121f10 | |
parent | 1861053d3386b475a36b963d01d452dcf41f83b6 (diff) | |
download | scummvm-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.cpp | 81 | ||||
-rw-r--r-- | saveload.cpp | 2 | ||||
-rw-r--r-- | script_v1.cpp | 29 | ||||
-rw-r--r-- | script_v2.cpp | 6 | ||||
-rw-r--r-- | scumm.h | 12 | ||||
-rw-r--r-- | scummvm.cpp | 13 |
6 files changed, 78 insertions, 65 deletions
@@ -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(); @@ -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) { |