aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dists/engine-data/fonts.datbin1794977 -> 1850508 bytes
-rw-r--r--engines/glk/conf.cpp2
-rw-r--r--engines/glk/frotz/processor_screen.cpp30
-rw-r--r--engines/glk/glk_types.h3
-rw-r--r--engines/glk/screen.cpp9
-rw-r--r--engines/glk/screen.h4
6 files changed, 30 insertions, 18 deletions
diff --git a/dists/engine-data/fonts.dat b/dists/engine-data/fonts.dat
index b7dde60fe5..57ed2de6f5 100644
--- a/dists/engine-data/fonts.dat
+++ b/dists/engine-data/fonts.dat
Binary files differ
diff --git a/engines/glk/conf.cpp b/engines/glk/conf.cpp
index dffb79eabd..98cd515aa1 100644
--- a/engines/glk/conf.cpp
+++ b/engines/glk/conf.cpp
@@ -45,6 +45,7 @@ WindowStyle T_STYLES[style_NUMSTYLES] = {
{ PROPB, { 0xff, 0xff, 0xff }, { 0x00, 0x60, 0x00 }, 0 }, ///< Input
{ MONOR, { 0xff, 0xff, 0xff }, { 0x00, 0x00, 0x00 }, 0 }, ///< User1
{ MONOR, { 0xff, 0xff, 0xff }, { 0x00, 0x00, 0x00 }, 0 }, ///< User2
+ { RUNIC, { 0xff, 0xff, 0xff }, { 0x00, 0x00, 0x00 }, 0 }, ///< User3
};
WindowStyle G_STYLES[style_NUMSTYLES] = {
@@ -59,6 +60,7 @@ WindowStyle G_STYLES[style_NUMSTYLES] = {
{ MONOR, { 0xff, 0xff, 0xff }, { 0x60, 0x60, 0x60 }, 0 }, ///< Input
{ MONOR, { 0xff, 0xff, 0xff }, { 0x60, 0x60, 0x60 }, 0 }, ///< User1
{ MONOR, { 0xff, 0xff, 0xff }, { 0x60, 0x60, 0x60 }, 0 }, ///< User2
+ { MONOR, { 0xff, 0xff, 0xff }, { 0x60, 0x60, 0x60 }, 0 }, ///< User3
};
Conf *g_conf;
diff --git a/engines/glk/frotz/processor_screen.cpp b/engines/glk/frotz/processor_screen.cpp
index 76c10c05e4..97745a0e91 100644
--- a/engines/glk/frotz/processor_screen.cpp
+++ b/engines/glk/frotz/processor_screen.cpp
@@ -46,13 +46,6 @@ void Processor::screen_mssg_off() {
static const uint32 zchar_runes[] = {
// This mapping is based on the Amiga font in the Z-Machine
// specification, with some liberties taken.
- //
- // There are only runic characters for a-z. As I recall it, there was
- // at least one scene in Beyond Zork where it would use the runic font
- // to display text which contained upper case letters (if your
- // intelligence was too low to understand it), which came out as a
- // mixture of runes and map-drawing characters. Maybe that can be
- // fixed later?
0x16AA, // RUNIC LETTER AC A
0x16D2, // RUNIC LETTER BERKANAN BEORC BJARKAN B
@@ -83,7 +76,23 @@ static const uint32 zchar_runes[] = {
};
uint32 Processor::zchar_to_unicode_rune(zchar c) {
- return (c >= 'a' && c <= 'z') ? zchar_runes[c - 'a'] : 0;
+ // There are only runic characters for a-z. Some versions of Beyond
+ // Zork will render the conversation between Prince Foo and the black
+ // rider in runic script, even though it contained upper case letters.
+ // This produced an ugly mix of runes and map-drawing characters, etc.
+ // which is probably why it was removed in later versions.
+ //
+ // Apart from the runes, I believe the up/down arrows are the only
+ // special characters to be printed in the lower window. Maybe they,
+ // too, should be mapped to Unicode characters, but since they are
+ // mapped to \ and ] respectively that probably menas we can convert
+ // upper case to lower case and use the appropriate rune for that.
+ if (c >= 'a' && c <= 'z')
+ return zchar_runes[c - 'a'];
+ else if (c >= 'A' && c <= 'Z')
+ return zchar_runes[c - 'A'];
+ else
+ return 0;
}
void Processor::screen_char(zchar c) {
@@ -149,10 +158,7 @@ void Processor::screen_char(zchar c) {
if (curr_font == GRAPHICS_FONT) {
uint32 runic_char = zchar_to_unicode_rune(c);
if (runic_char != 0) {
- // FIXME: This will only work if we have a font which
- // supports the Unicode Runic block. We currently don't.
- // Perhaps Junicode is a good candidate for this?
- glk_set_style(style_Normal);
+ glk_set_style(style_User3);
glk_put_char_uni(runic_char);
glk_set_style(style_User1);
} else
diff --git a/engines/glk/glk_types.h b/engines/glk/glk_types.h
index aa573e2e29..3fdbf1e536 100644
--- a/engines/glk/glk_types.h
+++ b/engines/glk/glk_types.h
@@ -137,7 +137,8 @@ enum Style {
style_Input = 8,
style_User1 = 9,
style_User2 = 10,
- style_NUMSTYLES = 11
+ style_User3 = 11,
+ style_NUMSTYLES = 12
};
enum WinType {
diff --git a/engines/glk/screen.cpp b/engines/glk/screen.cpp
index 2276998b8f..7b3878298e 100644
--- a/engines/glk/screen.cpp
+++ b/engines/glk/screen.cpp
@@ -116,7 +116,7 @@ bool Screen::loadFonts() {
f.read(buffer, 3);
buffer[3] = '\0';
- if (Common::String(buffer) != "1.0") {
+ if (Common::String(buffer) != "1.1") {
delete archive;
return false;
}
@@ -144,14 +144,17 @@ void Screen::loadFonts(Common::Archive *archive) {
_fonts[5] = loadFont(PROPB, archive, propSize, propAspect, FONTB);
_fonts[6] = loadFont(PROPI, archive, propSize, propAspect, FONTI);
_fonts[7] = loadFont(PROPZ, archive, propSize, propAspect, FONTZ);
+
+ _fonts[8] = loadFont(RUNIC, archive, propSize, propAspect, RUNIC);
}
const Graphics::Font *Screen::loadFont(FACES face, Common::Archive *archive, double size, double aspect, int
style) {
Common::File f;
- const char *const FILENAMES[8] = {
+ const char *const FILENAMES[9] = {
"GoMono-Regular.ttf", "GoMono-Bold.ttf", "GoMono-Italic.ttf", "GoMono-Bold-Italic.ttf",
- "NotoSerif-Regular.ttf", "NotoSerif-Bold.ttf", "NotoSerif-Italic.ttf", "NotoSerif-Bold-Italic.ttf"
+ "NotoSerif-Regular.ttf", "NotoSerif-Bold.ttf", "NotoSerif-Italic.ttf", "NotoSerif-Bold-Italic.ttf",
+ "NotoSansRunic-Regular.ttf"
};
if (!f.open(FILENAMES[face], *archive))
diff --git a/engines/glk/screen.h b/engines/glk/screen.h
index 10f8b14a2f..25beaf105d 100644
--- a/engines/glk/screen.h
+++ b/engines/glk/screen.h
@@ -31,13 +31,13 @@
namespace Glk {
-#define FONTS_TOTAL 8
+#define FONTS_TOTAL 9
enum CaretShape {
SMALL_DOT = 0, FAT_DOT = 1, THIN_LINE = 2, FAT_LINE = 3, BLOCK = 4
};
-enum FACES { MONOR, MONOB, MONOI, MONOZ, PROPR, PROPB, PROPI, PROPZ, CUSTOM };
+enum FACES { MONOR, MONOB, MONOI, MONOZ, PROPR, PROPB, PROPI, PROPZ, RUNIC, CUSTOM };
enum TYPES { MONOF, PROPF };
enum STYLES { FONTR, FONTB, FONTI, FONTZ };