aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Iskrich2016-06-06 19:56:41 +0300
committerEugene Sandulenko2016-08-03 23:40:36 +0200
commit61f15f16da5a88cc70522556d0a470371937eb76 (patch)
treedfa69e3e9e03f1e6970cba07f9addc3bf1cca069
parent414a0b1c3505cba60696d294371ddb6022cb4af1 (diff)
downloadscummvm-rg350-61f15f16da5a88cc70522556d0a470371937eb76.tar.gz
scummvm-rg350-61f15f16da5a88cc70522556d0a470371937eb76.tar.bz2
scummvm-rg350-61f15f16da5a88cc70522556d0a470371937eb76.zip
DIRECTOR: Add font map loading
-rw-r--r--engines/director/score.cpp28
-rw-r--r--engines/director/score.h4
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;