GLK: FROTZ: Use the Noto runic font for runes
We already bundle other Noto fonts in the font.dat file, so using further Noto fonts makes sense to me. Also, map upper-case letters to lower-case runes since there are versions of Beyond Zork that uses that. (The version I played many years ago did, and it looked very strange. The version I tested with now did not, probably for that very reason. So that part is untested for now.)
This commit is contained in:
parent
a163fee23b
commit
77f2330755
6 changed files with 30 additions and 18 deletions
Binary file not shown.
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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 };
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue