From 1bf9bb768ed3d6ef438c8ff81b5cceffd01a6232 Mon Sep 17 00:00:00 2001 From: James Brown Date: Fri, 8 Nov 2002 18:06:08 +0000 Subject: [PATCH] Fix Indy3 "Guard-Fighting" crash and properly fix the empty exits problem svn-id: r5467 --- scumm/script.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/scumm/script.cpp b/scumm/script.cpp index ec6ec742023..cc87340788e 100644 --- a/scumm/script.cpp +++ b/scumm/script.cpp @@ -640,10 +640,18 @@ void Scumm::runExitScript() // not actual data not even a 00 (stop code) // maybe we should be limiting ourselves to strictly reading the size // described in the header? - if ((_currentRoom == 7) && (_gameId == GID_INDY3_256)) - printf("skipping specific exit script as its empty, fix properly!\n"); - else - runScriptNested(slot); + if (_gameId == GID_INDY3_256) { + // FIXME: Oddly, Indy3 seems to contain exit scripts with only a size + // and a tag - not even a terminating NULL! + byte *roomptr = getResourceAddress(rtRoom, _roomResource); + byte *excd = findResourceData(MKID('EXCD'), roomptr) - _resourceHeaderSize; + if (!excd || (getResourceDataSize(excd) < 1)) { + debug(2, "Exit-%d is empty", _roomResource); + return; + } + } + + runScriptNested(slot); } if (_vars[VAR_EXIT_SCRIPT2]) runScript(_vars[VAR_EXIT_SCRIPT2], 0, 0, 0);