[Scummvm-cvs-logs] SF.net SVN: scummvm:[34796] scummvm/trunk/engines/sword1

eriktorbjorn at users.sourceforge.net eriktorbjorn at users.sourceforge.net
Mon Oct 13 20:41:14 CEST 2008


Revision: 34796
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34796&view=rev
Author:   eriktorbjorn
Date:     2008-10-13 18:41:12 +0000 (Mon, 13 Oct 2008)

Log Message:
-----------
Fixed crash after using cutscene subtitles. (Now I *know* no one has used that
feature before. :-)

Modified Paths:
--------------
    scummvm/trunk/engines/sword1/animation.cpp
    scummvm/trunk/engines/sword1/text.cpp
    scummvm/trunk/engines/sword1/text.h

Modified: scummvm/trunk/engines/sword1/animation.cpp
===================================================================
--- scummvm/trunk/engines/sword1/animation.cpp	2008-10-13 15:07:37 UTC (rev 34795)
+++ scummvm/trunk/engines/sword1/animation.cpp	2008-10-13 18:41:12 UTC (rev 34796)
@@ -278,7 +278,7 @@
 				_textSpriteBuf = (byte *)calloc(_textHeight, _textWidth);
 			}
 			if (_currentFrame == _movieTexts[0]->_endFrame) {
-				_textMan->releaseText(2);
+				_textMan->releaseText(2, false);
 				free(_textSpriteBuf);
 				_textSpriteBuf = NULL;
 				delete _movieTexts.remove_at(0);
@@ -309,10 +309,15 @@
 	if (terminated)
 		_snd->stopHandle(_bgSoundHandle);
 
-	while (!_movieTexts.empty()) {
-		delete _movieTexts.remove_at(_movieTexts.size() - 1);
+	if (_textSpriteBuf) {
+		_textMan->releaseText(2, false);
+		free(_textSpriteBuf);
+		_textSpriteBuf = NULL;
 	}
 
+	while (!_movieTexts.empty())
+		delete _movieTexts.remove_at(_movieTexts.size() - 1);
+
 	while (_snd->isSoundHandleActive(_bgSoundHandle))
 		_system->delayMillis(100);
 

Modified: scummvm/trunk/engines/sword1/text.cpp
===================================================================
--- scummvm/trunk/engines/sword1/text.cpp	2008-10-13 15:07:37 UTC (rev 34795)
+++ scummvm/trunk/engines/sword1/text.cpp	2008-10-13 18:41:12 UTC (rev 34796)
@@ -89,7 +89,7 @@
 	assert(!_textBlocks[slot]); // if this triggers, the speechDriver failed to call Text::releaseText.
 	_textBlocks[slot] = (FrameHeader*)malloc(sprSize + sizeof(FrameHeader));
 
-	memcpy( _textBlocks[slot]->runTimeComp, "Nu  ", 4);
+	memcpy(_textBlocks[slot]->runTimeComp, "Nu  ", 4);
 	_textBlocks[slot]->compSize	= 0;
 	_textBlocks[slot]->width	= _resMan->toUint16(sprWidth);
 	_textBlocks[slot]->height	= _resMan->toUint16(sprHeight);
@@ -179,13 +179,14 @@
 	return _textBlocks[textTarget];
 }
 
-void Text::releaseText(uint32 id) {
+void Text::releaseText(uint32 id, bool updateCount) {
 	id &= ITM_ID;
 	assert(id < MAX_TEXT_OBS);
 	if (_textBlocks[id]) {
 		free(_textBlocks[id]);
 		_textBlocks[id] = NULL;
-		_textCount--;
+		if (updateCount)
+			_textCount--;
 	}
 }
 

Modified: scummvm/trunk/engines/sword1/text.h
===================================================================
--- scummvm/trunk/engines/sword1/text.h	2008-10-13 15:07:37 UTC (rev 34795)
+++ scummvm/trunk/engines/sword1/text.h	2008-10-13 18:41:12 UTC (rev 34796)
@@ -52,7 +52,7 @@
 	FrameHeader *giveSpriteData(uint32 textTarget);
 	uint32 lowTextManager(uint8 *text, int32 width, uint8 pen);
 	void makeTextSprite(uint8 slot, uint8 *text, uint16 maxWidth, uint8 pen);
-	void releaseText(uint32 id);
+	void releaseText(uint32 id, bool updateCount = true);
 
 private:
 	uint16 analyzeSentence(uint8 *text, uint16 maxWidth, LineInfo *info);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list