The speech text glyphs are corrupted in a number of cases including on the Two Stumps Scene and during a number of the
slides of the closing credits.
ScummVM 1.1.0pre48399 (Mar 25 2010 02:42:50)
Features compiled in: Vorbis FLAC MP3 ALSA RGB zLib FluidSynth
built on Linux x86_32 2.6.31 by GCC 4.3.4
Screenshot of Stumps Scene Corruption
Screenshot of Credits #1 Corruption
Screenshot of Credits #2 Corruption
Screenshot of Credits #3 Corruption
Screenshot of Credits #4 Corruption
Screenshot of Credits #5 Corruption
Screenshot of Credits #6 Corruption
Savegame at End for Credits Replication
Attached are screenshots of the corruption, which is not completely deterministic.
The attached savegame can be used to replicate, by loading then :
* Go to bottom of screen to access map
* Go To Dragons House
* Wait For Cutscene to complete
* Credits will be played with corruption as per screenshots supplied.
Running this with valgrind yields the following relevant output :
==6690== Invalid read of size 1
==6690== at 0x82C813E: Draci::Font::getStringWidth(Common::String const&, int) const (font.cpp:260)
==6690== by 0x82D656A: Draci::Text::setText(Common::String const&) (sprite.cpp:283)
==6690== by 0x82D3415: Draci::Script::talk(Common::Array<int> const&) (script.cpp:720)
==6690== by 0x82D4A22: Draci::Script::run(Draci::GPL2Program const&, unsigned short) (script.cpp:1173)
==6690== by 0x82D4B8B: Draci::Script::runWrapper(Draci::GPL2Program const&, unsigned short, bool, bool) (script.cpp:1199)
==6690== by 0x82CE50E: Draci::Game::enterNewRoom() (game.cpp:1303)
==6690== by 0x82CE5EE: Draci::Game::start() (game.cpp:165)
==6690== by 0x82C75D2: Draci::DraciEngine::run() (draci.cpp:365)
==6690== by 0x80565C0: runGame(PluginSubclass<MetaEngine> const*, OSystem&, Common::String const&) (main.cpp:216)
==6690== by 0x8056F69: scummvm_main (main.cpp:389)
==6690== by 0x8053451: main (main.cpp:65)
==6690== Address 0x63b695c is not stack'd, malloc'd or (recently) free'd
==6690==
==6690== Invalid read of size 1
==6690== at 0x82C813E: Draci::Font::getStringWidth(Common::String const&, int) const (font.cpp:260)
==6690== by 0x82C846B: Draci::Font::drawString(Draci::Surface*, Common::String const&, int, int, int, int, bool) const (font.cpp:212)
==6690== by 0x82D653B: Draci::Text::draw(Draci::Surface*, bool, int, int) const (sprite.cpp:297)
==6690== by 0x82D7629: Draci::Text::drawReScaled(Draci::Surface*, bool, Draci::Displacement const&) const (sprite.h:159)
==6690== by 0x82DAE06: Draci::Animation::drawFrame(Draci::Surface*) (animation.cpp:164)
==6690== by 0x82DBD00: Draci::AnimationManager::drawScene(Draci::Surface*) (animation.cpp:363)
==6690== by 0x82CBD23: Draci::Game::advanceAnimationsAndTestLoopExit() (game.cpp:470)
==6690== by 0x82CC478: Draci::Game::loop(Draci::LoopSubstatus, bool) (game.cpp:550)
==6690== by 0x82D3745: Draci::Script::talk(Common::Array<int> const&) (script.cpp:767)
==6690== by 0x82D4A22: Draci::Script::run(Draci::GPL2Program const&, unsigned short) (script.cpp:1173)
==6690== by 0x82D4B8B: Draci::Script::runWrapper(Draci::GPL2Program const&, unsigned short, bool, bool) (script.cpp:1199)
==6690== by 0x82CE50E: Draci::Game::enterNewRoom() (game.cpp:1303)
==6690== Address 0x63b695c is not stack'd, malloc'd or (recently) free'd
==6690==
==6690== Invalid read of size 1
==6690== at 0x82C809D: Draci::Font::getLineWidth(Common::String const&, unsigned int, int) const (font.cpp:295)
==6690== by 0x82C8504: Draci::Font::drawString(Draci::Surface*, Common::String const&, int, int, int, int, bool) const (font.cpp:223)
==6690== by 0x82D653B: Draci::Text::draw(Draci::Surface*, bool, int, int) const (sprite.cpp:297)
==6690== by 0x82D7629: Draci::Text::drawReScaled(Draci::Surface*, bool, Draci::Displacement const&) const (sprite.h:159)
==6690== by 0x82DAE06: Draci::Animation::drawFrame(Draci::Surface*) (animation.cpp:164)
==6690== by 0x82DBD00: Draci::AnimationManager::drawScene(Draci::Surface*) (animation.cpp:363)
==6690== by 0x82CBD23: Draci::Game::advanceAnimationsAndTestLoopExit() (game.cpp:470)
==6690== by 0x82CC478: Draci::Game::loop(Draci::LoopSubstatus, bool) (game.cpp:550)
==6690== by 0x82D3745: Draci::Script::talk(Common::Array<int> const&) (script.cpp:767)
==6690== by 0x82D4A22: Draci::Script::run(Draci::GPL2Program const&, unsigned short) (script.cpp:1173)
==6690== by 0x82D4B8B: Draci::Script::runWrapper(Draci::GPL2Program const&, unsigned short, bool, bool) (script.cpp:1199)
==6690== by 0x82CE50E: Draci::Game::enterNewRoom() (game.cpp:1303)
==6690== Address 0x63b695c is not stack'd, malloc'd or (recently) free'd
==6690==
==6690== Invalid read of size 1
==6690== at 0x82C828B: Draci::Font::drawChar(Draci::Surface*, unsigned char, int, int, int) const (font.cpp:131)
==6690== by 0x82C858B: Draci::Font::drawString(Draci::Surface*, Common::String const&, int, int, int, int, bool) const (font.cpp:232)
==6690== by 0x82D653B: Draci::Text::draw(Draci::Surface*, bool, int, int) const (sprite.cpp:297)
==6690== by 0x82D7629: Draci::Text::drawReScaled(Draci::Surface*, bool, Draci::Displacement const&) const (sprite.h:159)
==6690== by 0x82DAE06: Draci::Animation::drawFrame(Draci::Surface*) (animation.cpp:164)
==6690== by 0x82DBD00: Draci::AnimationManager::drawScene(Draci::Surface*) (animation.cpp:363)
==6690== by 0x82CBD23: Draci::Game::advanceAnimationsAndTestLoopExit() (game.cpp:470)
==6690== by 0x82CC478: Draci::Game::loop(Draci::LoopSubstatus, bool) (game.cpp:550)
==6690== by 0x82D3745: Draci::Script::talk(Common::Array<int> const&) (script.cpp:767)
==6690== by 0x82D4A22: Draci::Script::run(Draci::GPL2Program const&, unsigned short) (script.cpp:1173)
==6690== by 0x82D4B8B: Draci::Script::runWrapper(Draci::GPL2Program const&, unsigned short, bool, bool) (script.cpp:1199)
==6690== by 0x82CE50E: Draci::Game::enterNewRoom() (game.cpp:1303)
==6690== Address 0x63b695c is not stack'd, malloc'd or (recently) free'd
==6690==
==6690== Invalid read of size 1
==6690== at 0x82C7FA8: Draci::Font::getCharWidth(unsigned char) const (font.cpp:111)
==6690== by 0x82C85AF: Draci::Font::drawString(Draci::Surface*, Common::String const&, int, int, int, int, bool) const (font.cpp:233)
==6690== by 0x82D653B: Draci::Text::draw(Draci::Surface*, bool, int, int) const (sprite.cpp:297)
==6690== by 0x82D7629: Draci::Text::drawReScaled(Draci::Surface*, bool, Draci::Displacement const&) const (sprite.h:159)
==6690== by 0x82DAE06: Draci::Animation::drawFrame(Draci::Surface*) (animation.cpp:164)
==6690== by 0x82DBD00: Draci::AnimationManager::drawScene(Draci::Surface*) (animation.cpp:363)
==6690== by 0x82CBD23: Draci::Game::advanceAnimationsAndTestLoopExit() (game.cpp:470)
==6690== by 0x82CC478: Draci::Game::loop(Draci::LoopSubstatus, bool) (game.cpp:550)
==6690== by 0x82D3745: Draci::Script::talk(Common::Array<int> const&) (script.cpp:767)
==6690== by 0x82D4A22: Draci::Script::run(Draci::GPL2Program const&, unsigned short) (script.cpp:1173)
==6690== by 0x82D4B8B: Draci::Script::runWrapper(Draci::GPL2Program const&, unsigned short, bool, bool) (script.cpp:1199)
==6690== by 0x82CE50E: Draci::Game::enterNewRoom() (game.cpp:1303)
Fixed by commit 48462.