diff --git a/engines/director/score.cpp b/engines/director/score.cpp index 315d431fe4b6..6d6f295e83f6 100644 --- a/engines/director/score.cpp +++ b/engines/director/score.cpp @@ -63,6 +63,10 @@ Score::Score(Archive &movie) { loadFileInfo(*_movieArchive->getResource(MKTAG('V','W','F','I'), 1024)); } + if (_movieArchive->hasResource(MKTAG('V','W','F','M'), 1024)) { + loadFontMap(*_movieArchive->getResource(MKTAG('V','W','F','M'), 1024)); + } + Common::Array vwci = _movieArchive->getResourceIDList(MKTAG('V','W','C','I')); if (vwci.size() > 0) { Common::Array::iterator iterator; @@ -284,6 +288,30 @@ Common::Array Score::loadStrings(Common::SeekableReadStream &str return strings; } +void Score::loadFontMap(Common::SeekableReadStream &stream) { + uint16 count = stream.readUint16BE(); + uint32 offset = (count * 2) + 2; + uint16 currentRawPosition = offset; + + for (uint16 i = 0; i < count; i++) { + uint16 id = stream.readUint16BE(); + uint32 positionInfo = stream.pos(); + + stream.seek(currentRawPosition); + + uint16 size = stream.readByte(); + Common::String font; + + for (uint16 k = 0; k < size; k++) { + font += stream.readByte(); + } + + _fontMap[id] = font; + currentRawPosition = stream.pos(); + stream.seek(positionInfo); + } +} + BitmapCast::BitmapCast(Common::SeekableReadStream &stream) { /*byte flags = */ stream.readByte(); uint16 someFlaggyThing = stream.readUint16BE(); diff --git a/engines/director/score.h b/engines/director/score.h index e93b6ba9510c..eea9bb955d89 100644 --- a/engines/director/score.h +++ b/engines/director/score.h @@ -207,13 +207,14 @@ class Score { void loadActions(Common::SeekableReadStream &stream); void loadCastInfo(Common::SeekableReadStream &stream); void loadFileInfo(Common::SeekableReadStream &stream); + void loadFontMap(Common::SeekableReadStream &stream); Common::Array loadStrings(Common::SeekableReadStream &stream, uint32 &entryType, bool hasHeader = true); public: Common::Array _frames; Common::HashMap _casts; Common::HashMap _labels; Common::HashMap _actions; - + Common::HashMap _fontMap; private: uint16 _versionMinor; uint16 _versionMajor; @@ -225,6 +226,7 @@ class Score { uint16 _castArrayStart; uint16 _currentFrame; uint32 _nextFrameTime; + uint32 _flags; bool _stopPlay; uint16 _castArrayEnd; Common::Rect _movieRect;