From 61f15f16da5a88cc70522556d0a470371937eb76 Mon Sep 17 00:00:00 2001 From: Dmitry Iskrich Date: Mon, 6 Jun 2016 19:56:41 +0300 Subject: DIRECTOR: Add font map loading --- engines/director/score.cpp | 28 ++++++++++++++++++++++++++++ engines/director/score.h | 4 +++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/engines/director/score.cpp b/engines/director/score.cpp index 315d431fe4..6d6f295e83 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 e93b6ba951..eea9bb955d 100644 --- a/engines/director/score.h +++ b/engines/director/score.h @@ -207,13 +207,14 @@ private: 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 @@ private: uint16 _castArrayStart; uint16 _currentFrame; uint32 _nextFrameTime; + uint32 _flags; bool _stopPlay; uint16 _castArrayEnd; Common::Rect _movieRect; -- cgit v1.2.3