[Scummvm-git-logs] scummvm master -> 39ffd5b7847f3661415937f082676180423ff438

djsrv dservilla at gmail.com
Mon Jul 5 18:36:38 UTC 2021


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

Summary:
39ffd5b784 DIRECTOR: Implement Fmap


Commit: 39ffd5b7847f3661415937f082676180423ff438
    https://github.com/scummvm/scummvm/commit/39ffd5b7847f3661415937f082676180423ff438
Author: djsrv (dservilla at gmail.com)
Date: 2021-07-05T14:34:33-04:00

Commit Message:
DIRECTOR: Implement Fmap

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


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 4b050703d3..bb53e8008f 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -339,6 +339,12 @@ void Cast::loadCast() {
 		delete r;
 	}
 
+	// Font Mapping V4
+	if (_castArchive->hasResource(MKTAG('F', 'm', 'a', 'p'), -1)) {
+		loadFontMapV4(*(r = _castArchive->getFirstResource(MKTAG('F', 'm', 'a', 'p'))));
+		delete r;
+	}
+
 	// Cross-Platform Font Mapping
 	if (_castArchive->hasResource(MKTAG('F', 'X', 'm', 'p'), -1)) {
 		loadFXmp(*(r = _castArchive->getFirstResource(MKTAG('F', 'X', 'm', 'p'))));
diff --git a/engines/director/cast.h b/engines/director/cast.h
index bde07e0a35..32236bbf90 100644
--- a/engines/director/cast.h
+++ b/engines/director/cast.h
@@ -93,6 +93,7 @@ private:
 	PaletteV4 loadPalette(Common::SeekableReadStreamEndian &stream);
 	void loadScriptText(Common::SeekableReadStreamEndian &stream, uint16 id);
 	void loadFontMap(Common::SeekableReadStreamEndian &stream);
+	void loadFontMapV4(Common::SeekableReadStreamEndian &stream);
 	void loadFXmp(Common::SeekableReadStreamEndian &stream);
 	bool readFXmpLine(Common::SeekableReadStreamEndian &stream);
 	Common::String getString(Common::String str);
diff --git a/engines/director/fonts.cpp b/engines/director/fonts.cpp
index 9d6d4e183e..8b43de1363 100644
--- a/engines/director/fonts.cpp
+++ b/engines/director/fonts.cpp
@@ -69,6 +69,55 @@ void Cast::loadFontMap(Common::SeekableReadStreamEndian &stream) {
 	}
 }
 
+void Cast::loadFontMapV4(Common::SeekableReadStreamEndian &stream) {
+	debugC(2, kDebugLoading, "****** Loading FontMap Fmap");
+
+	uint32 mapLength = stream.readUint32();
+	/* uint32 namesLength = */ stream.readUint32();
+	uint32 bodyStart = stream.pos();
+	uint32 namesStart = bodyStart + mapLength;
+
+	/* uint32 unk1 = */ stream.readUint32();
+	/* uint32 unk2 = */ stream.readUint32();
+	uint32 entriesUsed = stream.readUint32();
+	/* uint32 entriesTotal = */ stream.readUint32();
+	/* uint32 unk3 = */ stream.readUint32();
+	/* uint32 unk4 = */ stream.readUint32();
+	/* uint32 unk5 = */ stream.readUint32();
+
+	for (uint32 i = 0; i < entriesUsed; i++) {
+		uint32 nameOffset = stream.readUint32();
+
+		uint32 returnPos = stream.pos();
+		stream.seek(namesStart + nameOffset);
+		uint32 nameLength = stream.readUint32();
+		Common::String name = stream.readString(0, nameLength);
+		stream.seek(returnPos);
+
+		uint16 platform = stream.readUint16();
+		uint16 id = stream.readUint16();
+
+		Common::String platformName;
+		switch (platform) {
+		case 1:
+			platformName = "Mac";
+			break;
+		case 2:
+			platformName = "Win";
+			break;
+		default:
+			warning("Cast::loadFontMap: Unknown platform ID %d", platform);
+			platformName = "UNK";
+			break;
+		}
+
+		// Map cast font ID to window manager font ID
+		_fontMap[id] = _vm->_wm->_fontMan->registerFontName(name);
+
+		debugC(3, kDebugLoading, "Cast::loadFontMapV4: Mapping %s font %d (%s) to %d", platformName.c_str(), id, name.c_str(), _fontMap[id]);
+	}
+}
+
 enum FXmpTokenType {
 	FXMP_TOKEN_WORD,
 	FXMP_TOKEN_INT,




More information about the Scummvm-git-logs mailing list