[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