From 723f15c0848e828a6877365ff0453d16ebcb0589 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Sat, 17 Jul 2010 19:52:19 +0000 Subject: [PATCH] SCI: removing kSetPort 4 argument support from r44938, which was wrong - adding workaround for lsl6 ending - fixes lsl6 ending svn-id: r50967 --- engines/sci/engine/kernel.cpp | 8 +++++++- engines/sci/engine/kgraphics.cpp | 5 ++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index cc2374f7716..fd98f9c34dc 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -263,6 +263,12 @@ static const SciWorkaroundEntry kGraphFillBoxAny_workarounds[] = { SCI_WORKAROUNDENTRY_TERMINATOR }; +// gameID, scriptNr,lvl, object-name, method-name, call, index, replace +static const SciWorkaroundEntry kSetPort_workarounds[] = { + { GID_LSL6, 740, 0, "rm740", "drawPic", -1, 0, { 1, 0 } }, // ending scene, is called with additional 3 (!) parameters + SCI_WORKAROUNDENTRY_TERMINATOR +}; + // gameID, scriptNr,lvl, object-name, method-name, call, index, replace static const SciWorkaroundEntry kUnLoad_workarounds[] = { { GID_LSL6, 130, 0, "recruitLarryScr", "changeState", -1, 0, { 1, 0 } }, // during intro, a 3rd parameter is passed by accident @@ -656,7 +662,7 @@ static SciKernelMapEntry s_kernelMap[] = { { MAP_CALL(SetJump), SIG_EVERYWHERE, "oiii", NULL, NULL }, { MAP_CALL(SetMenu), SIG_EVERYWHERE, "i(.*)", NULL, NULL }, { MAP_CALL(SetNowSeen), SIG_EVERYWHERE, "o(i)", NULL, NULL }, - { MAP_CALL(SetPort), SIG_EVERYWHERE, "i(iii)(i)(i)(i)", NULL, NULL }, + { MAP_CALL(SetPort), SIG_EVERYWHERE, "i(iiiii)(i)", NULL, kSetPort_workarounds }, { MAP_CALL(SetQuitStr), SIG_EVERYWHERE, "r", NULL, NULL }, { MAP_CALL(SetSynonyms), SIG_EVERYWHERE, "o", NULL, NULL }, { MAP_CALL(SetVideoMode), SIG_EVERYWHERE, "i", NULL, NULL }, diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 7d5e30ed6e8..22ccf843d61 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -965,14 +965,13 @@ reg_t kSetPort(EngineState *s, int argc, reg_t *argv) { case 7: initPriorityBandsFlag = true; - case 4: case 6: picRect.top = argv[0].toSint16(); picRect.left = argv[1].toSint16(); picRect.bottom = argv[2].toSint16(); picRect.right = argv[3].toSint16(); - picTop = (argc >= 6) ? argv[4].toSint16() : 0; - picLeft = (argc >= 6) ? argv[5].toSint16() : 0; + picTop = argv[4].toSint16(); + picLeft = argv[5].toSint16(); g_sci->_gfxPorts->kernelSetPicWindow(picRect, picTop, picLeft, initPriorityBandsFlag); break;