From b7b637046355522ce75c3b18dfbc8f3e8cc0aa76 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 17 Aug 2009 12:22:15 +0000 Subject: Cleanup: don't copy the Kyrandia 1 Amiga credits data in a temporary buffer, and thus keeping it twice in memory. svn-id: r43473 --- engines/kyra/sequences_lok.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'engines/kyra') diff --git a/engines/kyra/sequences_lok.cpp b/engines/kyra/sequences_lok.cpp index 35f434698b..202e314e07 100644 --- a/engines/kyra/sequences_lok.cpp +++ b/engines/kyra/sequences_lok.cpp @@ -1354,15 +1354,12 @@ void KyraEngine_LoK::seq_playCreditsAmiga() { } int size = 0; - const uint8 *bufferTmp = _staticres->loadRawData(k1CreditsStrings, size); - char *buffer = new char[size]; - assert(buffer); - memcpy(buffer, bufferTmp, size); + const char *creditsData = (const char *)_staticres->loadRawData(k1CreditsStrings, size); char stringBuffer[81]; memset(stringBuffer, 0, sizeof(stringBuffer)); - char *cur = buffer; + const char *cur = creditsData; char *specialString = stringBuffer; bool fillRectFlag = false, subWidth = false, centerFlag = false; x = 0; @@ -1424,9 +1421,7 @@ void KyraEngine_LoK::seq_playCreditsAmiga() { removeInputTop(); break; } - } while (++cur != buffer + size && !shouldQuit()); - - delete[] buffer; + } while (++cur != (creditsData + size) && !shouldQuit()); } bool KyraEngine_LoK::seq_skipSequence() const { -- cgit v1.2.3 From 09a8fa4efb531b9420a621419101ceb2cad6f407 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 17 Aug 2009 12:22:30 +0000 Subject: Clear input queue before displaying the credits in Kyrandia 1. svn-id: r43474 --- engines/kyra/sequences_lok.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'engines/kyra') diff --git a/engines/kyra/sequences_lok.cpp b/engines/kyra/sequences_lok.cpp index 202e314e07..d2ef351767 100644 --- a/engines/kyra/sequences_lok.cpp +++ b/engines/kyra/sequences_lok.cpp @@ -1134,6 +1134,11 @@ void KyraEngine_LoK::seq_playEnding() { _seqPlayerFlag = false; _screen->showMouse(); + + // To avoid any remaining input events, we remove the queue + // over here. + _eventList.clear(); + if (_flags.platform == Common::kPlatformAmiga) { _screen->_charWidth = -2; _screen->setCurPage(2); -- cgit v1.2.3 From e548e71ba1092a1091da79c5d4652c9d52578e65 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Mon, 17 Aug 2009 12:47:57 +0000 Subject: Fix possible out of bounds access in Screen::drawShape. svn-id: r43475 --- engines/kyra/screen.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'engines/kyra') diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp index 73a3e675e8..f5570acd72 100644 --- a/engines/kyra/screen.cpp +++ b/engines/kyra/screen.cpp @@ -1253,8 +1253,7 @@ void Screen::drawShape(uint8 pageNum, const uint8 *shapeData, int x, int y, int } if (flags & 0x200) { - ++_drawShapeVar1; - _drawShapeVar1 &= (_vm->gameFlags().gameID == GI_KYRA1) ? 0x7 : 0xF; + _drawShapeVar1 = (_drawShapeVar1 + 1) & 0x7; _drawShapeVar3 = drawShapeVar2[_drawShapeVar1]; _drawShapeVar4 = 0; _drawShapeVar5 = 256; -- cgit v1.2.3