[Scummvm-git-logs] scummvm master -> 8e2c8ee2d419687819cec9416e78063ffc42e6fb

djsrv dservilla at gmail.com
Sun Jul 4 14:12:15 UTC 2021


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
a611f674c5 DIRECTOR: Improve loadFontMap logging
8e2c8ee2d4 DIRECTOR: Map fonts in FontStyle::read


Commit: a611f674c53432b68164dae2a10c4a12894cba62
    https://github.com/scummvm/scummvm/commit/a611f674c53432b68164dae2a10c4a12894cba62
Author: djsrv (dservilla at gmail.com)
Date: 2021-07-04T10:07:27-04:00

Commit Message:
DIRECTOR: Improve loadFontMap logging

Changed paths:
    engines/director/fonts.cpp


diff --git a/engines/director/fonts.cpp b/engines/director/fonts.cpp
index 500f45853a..b90b3edd38 100644
--- a/engines/director/fonts.cpp
+++ b/engines/director/fonts.cpp
@@ -56,7 +56,7 @@ void Cast::loadFontMap(Common::SeekableReadStreamEndian &stream) {
 		// Map cast font ID to window manager font ID
 		_fontMap[id] = _vm->_wm->_fontMan->registerFontName(font);
 
-		debugC(3, kDebugLoading, "Fontmap. ID %d Font %s", id, font.c_str());
+		debugC(3, kDebugLoading, "Cast::loadFontMap: Mapping font %d (%s) to %d", id, font.c_str(), _fontMap[id]);
 		currentRawPosition = stream.pos();
 		stream.seek(positionInfo);
 	}


Commit: 8e2c8ee2d419687819cec9416e78063ffc42e6fb
    https://github.com/scummvm/scummvm/commit/8e2c8ee2d419687819cec9416e78063ffc42e6fb
Author: djsrv (dservilla at gmail.com)
Date: 2021-07-04T10:07:27-04:00

Commit Message:
DIRECTOR: Map fonts in FontStyle::read

The previous place I was mapping the font IDs didn't catch everything,
breaking text with more than one style.

Changed paths:
    engines/director/cast.cpp
    engines/director/cast.h
    engines/director/castmember.cpp
    engines/director/fonts.cpp
    engines/director/stxt.cpp
    engines/director/stxt.h


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 16af8bad7d..4b050703d3 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -1117,7 +1117,7 @@ void Cast::loadCastInfo(Common::SeekableReadStreamEndian &stream, uint16 id) {
 			int16 count = entryStream->readUint16();
 
 			for (int16 i = 0; i < count; i++)
-				ci->scriptStyle.read(*entryStream);
+				ci->scriptStyle.read(*entryStream, this);
 			delete entryStream;
 		}
 		// fallthrough
diff --git a/engines/director/cast.h b/engines/director/cast.h
index 014cc81f18..bde07e0a35 100644
--- a/engines/director/cast.h
+++ b/engines/director/cast.h
@@ -87,6 +87,8 @@ public:
 
 	void dumpScript(const char *script, ScriptType type, uint16 id);
 
+	uint16 mapFont(uint16 id);
+
 private:
 	PaletteV4 loadPalette(Common::SeekableReadStreamEndian &stream);
 	void loadScriptText(Common::SeekableReadStreamEndian &stream, uint16 id);
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index f5a6286b5f..68ec6ec93c 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -679,17 +679,7 @@ Graphics::TextAlign TextCastMember::getAlignment() {
 }
 
 void TextCastMember::importStxt(const Stxt *stxt) {
-	if (_cast->_version < kFileVer400) {
-		if (_cast->_fontMap.contains(stxt->_style.fontId)) {
-			_fontId = _cast->_fontMap[stxt->_style.fontId];
-		} else {
-			_fontId = 1; // fall back to Geneva
-		}
-	} else {
-		// FIXME: This should use the font map.
-		// D4 font maps are not implemented yet, so just use the unmapped ID.
-		_fontId = stxt->_style.fontId;
-	}
+	_fontId = stxt->_style.fontId;
 	_textSlant = stxt->_style.textSlant;
 	_fontSize = stxt->_style.fontSize;
 	_fgpalinfo1 = stxt->_style.r;
diff --git a/engines/director/fonts.cpp b/engines/director/fonts.cpp
index b90b3edd38..9d6d4e183e 100644
--- a/engines/director/fonts.cpp
+++ b/engines/director/fonts.cpp
@@ -30,6 +30,13 @@
 
 namespace Director {
 
+uint16 Cast::mapFont(uint16 id) {
+	if (_fontMap.contains(id)) {
+		return _fontMap[id];
+	}
+	return id;
+}
+
 void Cast::loadFontMap(Common::SeekableReadStreamEndian &stream) {
 	if (stream.size() == 0)
 		return;
diff --git a/engines/director/stxt.cpp b/engines/director/stxt.cpp
index dbec705993..48f9cadca2 100644
--- a/engines/director/stxt.cpp
+++ b/engines/director/stxt.cpp
@@ -23,6 +23,7 @@
 #include "common/substream.h"
 
 #include "director/director.h"
+#include "director/cast.h"
 #include "director/stxt.h"
 
 namespace Director {
@@ -68,7 +69,7 @@ Stxt::Stxt(Cast *cast, Common::SeekableReadStreamEndian &textStream) : _cast(cas
 
 	while (formattingCount) {
 		debugC(3, kDebugText, "Stxt init: formattingCount: %u", formattingCount);
-		_style.read(textStream);
+		_style.read(textStream, _cast);
 
 		assert(prevPos <= _style.formatStartOffset);  // If this is triggered, we have to implement sorting
 
@@ -110,12 +111,12 @@ FontStyle::FontStyle() {
 	r = g = b = 0;
 }
 
-void FontStyle::read(Common::ReadStreamEndian &stream) {
+void FontStyle::read(Common::ReadStreamEndian &stream, Cast *cast) {
 	formatStartOffset = stream.readUint32();
 	height = stream.readUint16();
 	ascent = stream.readUint16();
 
-	fontId = stream.readUint16();
+	fontId = cast->mapFont(stream.readUint16());
 	textSlant = stream.readByte();
 	stream.readByte(); // padding
 	fontSize = stream.readUint16();
diff --git a/engines/director/stxt.h b/engines/director/stxt.h
index 94e82298cb..0a2b2278ca 100644
--- a/engines/director/stxt.h
+++ b/engines/director/stxt.h
@@ -29,6 +29,8 @@ class ReadStreamEndian;
 
 namespace Director {
 
+class Cast;
+
 struct FontStyle {
 	uint32 formatStartOffset;
 	uint16 height;
@@ -42,7 +44,7 @@ struct FontStyle {
 	uint16 r, g, b;
 
 	FontStyle();
-	void read(Common::ReadStreamEndian &textStream);
+	void read(Common::ReadStreamEndian &textStream, Cast *cast);
 };
 
 class Stxt {




More information about the Scummvm-git-logs mailing list