mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-13 12:39:56 +00:00
Fixed crash after using cutscene subtitles. (Now I *know* no one has used that
feature before. :-) svn-id: r34796
This commit is contained in:
parent
ffdbb474c4
commit
c2066b9c20
@ -278,7 +278,7 @@ void MoviePlayer::play(void) {
|
||||
_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 @@ void MoviePlayer::play(void) {
|
||||
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);
|
||||
|
||||
|
@ -89,7 +89,7 @@ void Text::makeTextSprite(uint8 slot, uint8 *text, uint16 maxWidth, uint8 pen) {
|
||||
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 @@ FrameHeader *Text::giveSpriteData(uint32 textTarget) {
|
||||
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--;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -52,7 +52,7 @@ public:
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user