diff options
-rw-r--r-- | scumm/script_v5.cpp | 15 | ||||
-rw-r--r-- | scumm/scummvm.cpp | 3 |
2 files changed, 10 insertions, 8 deletions
diff --git a/scumm/script_v5.cpp b/scumm/script_v5.cpp index 9fab799e60..c5f3c95fa6 100644 --- a/scumm/script_v5.cpp +++ b/scumm/script_v5.cpp @@ -1461,12 +1461,7 @@ void Scumm_v5::o5_putActorInRoom() { int room = getVarOrDirectByte(0x40); a = derefActor(act, "o5_putActorInRoom"); - - 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(); } @@ -1529,10 +1524,16 @@ 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 diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp index 8ed884612c..db2ea574f6 100644 --- a/scumm/scummvm.cpp +++ b/scumm/scummvm.cpp @@ -1761,7 +1761,8 @@ 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 - runExitScript(); + if (_currentRoom) + runExitScript(); killScriptsAndResources(); clearEnqueue(); stopCycle(0); |