diff options
Diffstat (limited to 'engines/scumm/script_v4.cpp')
-rw-r--r-- | engines/scumm/script_v4.cpp | 64 |
1 files changed, 12 insertions, 52 deletions
diff --git a/engines/scumm/script_v4.cpp b/engines/scumm/script_v4.cpp index 01927b02e7..b6e5834acc 100644 --- a/engines/scumm/script_v4.cpp +++ b/engines/scumm/script_v4.cpp @@ -60,6 +60,11 @@ void ScummEngine_v4::setupOpcodes() { OPCODE(0x22, o4_saveLoadGame); OPCODE(0xa2, o4_saveLoadGame); + + // Disable some opcodes which are unused in v4. + _opcodes[0x3b].setProc(0, 0); + _opcodes[0x4c].setProc(0, 0); + _opcodes[0xbb].setProc(0, 0); } void ScummEngine_v4::o4_ifState() { @@ -106,62 +111,17 @@ void ScummEngine_v4::o4_oldRoomEffect() { if ((_opcode & 0x1F) == 3) { a = getVarOrDirectWord(PARAM_1); -#if 1 if (_game.platform == Common::kPlatformFMTowns && _game.version == 3) { - // FIXME / TODO: OK the first thing to note is: at least in Zak256, - // maybe also in other games, this opcode does a bit more. I added - // some stubs here, but somebody with a full IDA or more knowledge - // about this will have to fill in the gaps. At least now we know - // that something is missing here :-) - if (a == 4) { - //printf("o5_oldRoomEffect ODDBALL: _opcode = 0x%x, a = 0x%x\n", _opcode, a); - // No idea what byte_2FCCF is, but it's a globale boolean flag. - // I only add it here as a temporary hack to make the pseudo code compile. - // Maybe it is just there as a reentry protection guard, given - // how it is used? It might also correspond to _screenEffectFlag. - int byte_2FCCF = 0; - - // For now, we force a redraw of the screen background. This - // way the Zak end credits seem to work mostly correct. - VirtScreen *vs = &_virtscr[kMainVirtScreen]; - restoreBackground(Common::Rect(0, vs->topline, vs->w, vs->topline + vs->h)); - vs->setDirtyRange(0, vs->h); - updateDirtyScreen(kMainVirtScreen); - - if (byte_2FCCF) { - // Here now "sub_1C44" is called, which sets byte_2FCCF to 0 then - // calls yet another sub (which also reads byte_2FCCF): - - byte_2FCCF = 0; - //call sub_0BB3 - - - // Now sub_085C is called. This is quite simply: it sets - // 0xF000 bytes. starting at 0x40000 to 0. No idea what that - // buffer is, maybe a screen buffer, though. Note that - // 0xF000 = 320*192. - // Maybe this is also the charset mask being cleaned? - - // call sub_085C - - - // And then sub_1C54 is called, which is almost identical to - // the above sub_1C44, only it sets byte_2FCCF to 1: - - byte_2FCCF = 1; - // call sub_0BB3 - - } else { - // Here only sub_085C is called (see comment above) - - // call sub_085C - } - return; - } + _textSurface.fillRect(Common::Rect(0, 0, _textSurface.w * _textSurfaceMultiplier, _textSurface.h * _textSurfaceMultiplier), 0); +#ifndef DISABLE_TOWNS_DUAL_LAYER_MODE + if (_townsScreen) + _townsScreen->clearLayer(1); #endif - + return; + } } + if (a) { _switchRoomEffect = (byte)(a & 0xFF); _switchRoomEffect2 = (byte)(a >> 8); |