diff --git a/scumm/script_v5.cpp b/scumm/script_v5.cpp index c5f3c95fa62..b3f8458121c 100644 --- a/scumm/script_v5.cpp +++ b/scumm/script_v5.cpp @@ -1462,6 +1462,13 @@ void Scumm_v5::o5_putActorInRoom() { a = derefActor(act, "o5_putActorInRoom"); + if (_gameId & GID_MONKEY_EGA) { + if (room == 0 && a->room != _currentRoom && a->room != room && _currentRoom != room) { + warning ("o5_putActorInRoom (%d [%d], %d) ignored", act, a->room, room); + return; + } + } + if (a->visible && _currentRoom != room && VAR(VAR_TALK_ACTOR) == a->number) { clearMsgQueue(); } @@ -1524,22 +1531,15 @@ void Scumm_v5::o5_resourceRoutines() { ensureResourceLoaded(rtRoom, resid); break; - case 8: // nuke room - if (resid == _currentRoom) { - warning ("Nuking current room %d - exit script called early", resid); - runExitScript(); - _currentRoom = 0; - } - // Fall through case 5: // nuke script case 6: // nuke sound case 7: // nuke costume + case 8: // nuke room if (_gameId == GID_ZAK256) warning("o5_resourceRoutines %d should not occur in Zak256", op); else setResourceCounter(resType[op-5], resid, 0x7F); break; - case 9: // lock script if (resid >= _numGlobalScripts) break; diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp index db2ea574f61..f99ac2f159c 100644 --- a/scumm/scummvm.cpp +++ b/scumm/scummvm.cpp @@ -624,7 +624,7 @@ Scumm::Scumm (GameDetector *detector, OSystem *syst) _playerV2 = NULL; if (_features & GF_DIGI_IMUSE) { _imuseDigital = new IMuseDigital(this); - } else if ((_features & GF_AMIGA) && (_features & GF_OLD_BUNDLE)) { + } else if ((_features & GF_AMIGA) && (_version < 5)) { _playerV2 = NULL; } else if (((_midiDriver == MD_PCJR) || (_midiDriver == MD_PCSPK)) && ((_version > 2) && (_version < 5))) { _playerV2 = new Player_V2(this); @@ -1057,7 +1057,7 @@ void Scumm::initScummVars() { case MD_PCSPK: case MD_PCJR: VAR(VAR_SOUNDCARD) = 1; break; default: - if (_features & GF_SMALL_HEADER) + if (_features & GF_SMALL_HEADER && !(_features & GF_AMIGA)) VAR(VAR_SOUNDCARD) = 4; else VAR(VAR_SOUNDCARD) = 3; @@ -1761,8 +1761,7 @@ void Scumm::startScene(int room, Actor *a, int objectNr) { if (!(_features & GF_SMALL_HEADER) && VAR_NEW_ROOM != 0xFF) // Disable for SH games. Overwrites VAR(VAR_NEW_ROOM) = room; // gamevars, eg Zak cashcards - if (_currentRoom) - runExitScript(); + runExitScript(); killScriptsAndResources(); clearEnqueue(); stopCycle(0);