diff options
author | Dmitry Iskrich | 2016-06-06 19:56:41 +0300 |
---|---|---|
committer | Eugene Sandulenko | 2016-08-03 23:40:36 +0200 |
commit | 61f15f16da5a88cc70522556d0a470371937eb76 (patch) | |
tree | dfa69e3e9e03f1e6970cba07f9addc3bf1cca069 | |
parent | 414a0b1c3505cba60696d294371ddb6022cb4af1 (diff) | |
download | scummvm-rg350-61f15f16da5a88cc70522556d0a470371937eb76.tar.gz scummvm-rg350-61f15f16da5a88cc70522556d0a470371937eb76.tar.bz2 scummvm-rg350-61f15f16da5a88cc70522556d0a470371937eb76.zip |
DIRECTOR: Add font map loading
-rw-r--r-- | engines/director/score.cpp | 28 | ||||
-rw-r--r-- | engines/director/score.h | 4 |
2 files changed, 31 insertions, 1 deletions
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<uint16> vwci = _movieArchive->getResourceIDList(MKTAG('V','W','C','I')); if (vwci.size() > 0) { Common::Array<uint16>::iterator iterator; @@ -284,6 +288,30 @@ Common::Array<Common::String> 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<Common::String> loadStrings(Common::SeekableReadStream &stream, uint32 &entryType, bool hasHeader = true); public: Common::Array<Frame *> _frames; Common::HashMap<int, Cast *> _casts; Common::HashMap<uint16, Common::String> _labels; Common::HashMap<uint16, Common::String> _actions; - + Common::HashMap<uint16, Common::String> _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; |