16. Font 3 and character graphics

icon16

16.1

The following table of 8 × 8 bitmaps gives a suitable appearance for font 3. The font must have a fixed pitch and characters must be printed immediately next to each other in all four directions.

 32( ):  76543210   33(!):  76543210   34("):  76543210   35(#):  76543210
        0                  0                  0                  0       #
        1                  1                  1                  1      #
        2                  2  #               2    #             2     #
        3                  3 ##               3    ##            3    #
        4                  4#######           4#######           4   #
        5                  5 ##               5    ##            5  #
        6                  6  #               6    #             6 #
        7                  7                  7                  7#

 36($):  76543210   37(%):  76543210   38(&):  76543210   39('):  76543210
        0#                 0                  0                  0
        1 #                1                  1                  1
        2  #               2                  2                  2
        3   #              3                  3                  3########
        4    #             4                  4########          4
        5     #            5                  5                  5
        6      #           6                  6                  6
        7       #          7                  7                  7

 40(():  76543210   41()):  76543210   42(*):  76543210   43(+):  76543210
        0    #             0   #              0    #             0
        1    #             1   #              1    #             1
        2    #             2   #              2    #             2
        3    #             3   #              3########          3
        4    #             4   #              4                  4########
        5    #             5   #              5                  5    #
        6    #             6   #              6                  6    #
        7    #             7   #              7                  7    #

 44(,):  76543210   45(-):  76543210   46(.):  76543210   47(/):  76543210
        0    #             0   #              0   #              0
        1    #             1   #              1   #              1
        2    #             2   #              2   #              2
        3    #             3   #              3   #              3   #####
        4    ####          4####              4   #####          4   #
        5    #             5   #              5                  5   #
        6    #             6   #              6                  6   #
        7    #             7   #              7                  7   #

 48(0):  76543210   49(1):  76543210   50(2):  76543210   51(3):  76543210
        0                  0    #             0   #              0#
        1                  1    #             1   #              1 #
        2                  2    #             2   #              2  #
        3#####             3    #             3   #              3   #####
        4    #             4#####             4   #####          4   #
        5    #             5                  5  #               5   #
        6    #             6                  6 #                6   #
        7    #             7                  7#                 7   #

 52(4):  76543210   53(5):  76543210   54(6):  76543210   55(7):  76543210
        0       #          0    #             0########          0########
        1      #           1    #             1########          1########
        2     #            2    #             2########          2########
        3#####             3    #             3########          3########
        4    #             4#####             4########          4########
        5    #             5     #            5########          5
        6    #             6      #           6########          6
        7    #             7       #          7########          7

 56(8):  76543210   57(9):  76543210   58(:):  76543210   59(;):  76543210
        0                  0#####             0   #####          0    #
        1                  1#####             1   #####          1    #
        2                  2#####             2   #####          2    #
        3########          3#####             3   #####          3########
        4########          4#####             4   #####          4########
        5########          5#####             5   #####          5########
        6########          6#####             6   #####          6########
        7########          7#####             7   #####          7########

 60(<):  76543210   61(=):  76543210   62(>):  76543210   63(?):  76543210
        0########          0#####             0   #####          0   #####
        1########          1#####             1   #####          1   #####
        2########          2#####             2   #####          2   #####
        3########          3#####             3   #####          3   #####
        4########          4########          4########          4   #####
        5    #             5#####             5   #####          5
        6    #             6#####             6   #####          6
        7    #             7#####             7   #####          7

 64(@):  76543210   65(A):  76543210   66(B):  76543210   67(C):  76543210
        0                  0                  0#####             0   #####
        1                  1                  1#####             1   #####
        2                  2                  2#####             2   #####
        3   #####          3#####             3#####             3   #####
        4   #####          4#####             4#####             4   #####
        5   #####          5#####             5                  5  #
        6   #####          6#####             6                  6 #
        7   #####          7#####             7                  7#

 68(D):  76543210   69(E):  76543210   70(F):  76543210   71(G):  76543210
        0#                 0       #          0#####             0       #
        1 #                1      #           1#####             1
        2  #               2     #            2#####             2
        3   #####          3#####             3#####             3
        4   #####          4#####             4#####             4
        5   #####          5#####             5     #            5
        6   #####          6#####             6      #           6
        7   #####          7#####             7       #          7

 72(H):  76543210   73(I):  76543210   74(J):  76543210   75(K):  76543210
        0                  0                  0#                 0########
        1                  1                  1                  1
        2                  2                  2                  2
        3                  3                  3                  3
        4                  4                  4                  4
        5                  5                  5                  5
        6                  6                  6                  6
        7       #          7#                 7                  7

 76(L):  76543210   77(M):  76543210   78(N):  76543210   79(O):  76543210
        0                  0#                 0       #          0
        1                  1#                 1       #          1########
        2                  2#                 2       #          2
        3                  3#                 3       #          3
        4                  4#                 4       #          4
        5                  5#                 5       #          5
        6                  6#                 6       #          6########
        7########          7#                 7       #          7

 80(P):  76543210   81(Q):  76543210   82(R):  76543210   83(S):  76543210
        0                  0                  0                  0
        1########          1########          1########          1########
        2#                 2##                2###               2####
        3#                 3##                3###               3####
        4#                 4##                4###               4####
        5#                 5##                5###               5####
        6########          6########          6########          6########
        7                  7                  7                  7

 84(T):  76543210   85(U):  76543210   86(V):  76543210   87(W):  76543210
        0                  0                  0                  0
        1########          1########          1########          1########
        2#####             2######            2#######           2########
        3#####             3######            3#######           3########
        4#####             4######            4#######           4########
        5#####             5######            5#######           5########
        6########          6########          6########          6########
        7                  7                  7                  7

 88(X):  76543210   89(Y):  76543210   90(Z):  76543210   91([):  76543210
        0                  0                  0#      #          0    #
        1       #          1#                 1 #    #           1    #
        2       #          2#                 2  #  #            2    #
        3       #          3#                 3   ##             3    #
        4       #          4#                 4   ##             4########
        5       #          5#                 5  #  #            5    #
        6       #          6#                 6 #    #           6    #
        7                  7                  7#      #          7    #

 92(\):  76543210   93(]):  76543210   94(^):  76543210   95(_):  76543210
        0   ##             0   ##             0   ##             0########
        1  ####            1   ##             1  ####            1#      #
        2## ## ##          2   ##             2## ## ##          2#      #
        3   ##             3   ##             3   ##             3#      #
        4   ##             4## ## ##          4## ## ##          4#      #
        5   ##             5  ####            5  ####            5#      #
        6   ##             6   ##             6   ##             6#      #
        7                  7                  7                  7########

 96('):  76543210   97(a):  76543210   98(b):  76543210   99(c):  76543210
        0  ####            0##   #            0 ##               0   #
        1 ##  ##           1# # #             1 # #              1   ##
        2     ##           2#  #              2 #  #             2   # #
        3    ##            3##                3 ###              3#  #  #
        4   ##             4# #               4 #  #             4 # #
        5                  5#  #              5 # #              5  ##
        6   ##             6#                 6 ##               6   #
        7                  7                  7                  7

100(d):  76543210  101(e):  76543210  102(f):  76543210  103(g):  76543210
        0#     #           0#     #           0#  # #            0#     #
        1##   ##           1##   ##           1# # #             1 #   #
        2# # # #           2# # # #           2## #              2  # #
        3#  #  #           3#  #  #           3# #               3   #
        4# # # #           4#     #           4##                4  # #
        5##   ##           5#     #           5#                 5 #   #
        6#     #           6#     #           6#                 6#     #
        7                  7                  7                  7

104(h):  76543210  105(i):  76543210  106(j):  76543210  107(k):  76543210
        0##    #           0   #              0   #              0   #
        1# #   #           1   #              1  ###             1   #
        2## #  #           2   #              2 # # #            2   #
        3# # # #           3   #              3#  #  #           3  ###
        4#  # ##           4   #              4 # # #            4 # # #
        5#   # #           5   #              5  ###             5#  #  #
        6#    ##           6   #              6   #              6#  #  #
        7                  7                  7                  7

108(l):  76543210  109(m):  76543210  110(n):  76543210  111(o):  76543210
        0   #              0##   ##           0#  #              0##   #
        1   ##             1# # # #           1 # #              1# # ##
        2   # #            2#  #  #           2  ###             2## # #
        3   #  #           3# # # #           3   # #            3# # #
        4   #              4##   ##           4   #  #           4#  #
        5   #              5#     #           5   #              5#
        6   #              6#     #           6   #              6#
        7                  7                  7                  7

112(p):  76543210  113(q):  76543210  114(r):  76543210  115(s):  76543210
        0#                 0 #                0 ##               0 #
        1#                 1 #                1 # #              1 #   #
        2#                 2 #                2 #  #             2 #  ##
        3#  #              3 ####             3 # #              3 # # #
        4# # #             4 #   #            4 ##               4 ##  #
        5##   #            5 #   #            5 # #              5 #   #
        6#     #           6 #   #            6 #  #             6     #
        7                  7                  7                  7

116(t):  76543210  117(u):  76543210  118(v):  76543210  119(w):  76543210
        0   #              0 ##               0   #              0 ##
        1  ###             1 # #              1# ### #           1 # #
        2 # # #            2 #  #             2 # # #            2 #  #
        3#  #  #           3 #   #            3   #              3 # #
        4   #              4 #   #            4   #              4 ##
        5   #              5 #   #            5   #              5 #
        6   #              6 #   #            6   #              6 #
        7                  7                  7                  7

120(x):  76543210  121(y):  76543210  122(z):  76543210  123({):  76543210
        0#  #  #           0###               0   #              0###  ###
        1 # # #            1## #              1  # #             1##    ##
        2  ###             2# # #             2 #   #            2  #  #
        3   #              3#  # #            3  # #             3###  ###
        4   #              4#  ## #           4   #              4###  ###
        5   #              5#  # ##           5  # #             5###  ###
        6   #              6#  #  #           6 #   #            6###  ###
        7                  7                  7                  7########

124( ):  76543210  125(}):  76543210  126(~):  76543210
        0###  ###          0###  ###          0##    ##
        1###  ###          1##    ##          1#  ##  #
        2###  ###          2  #  #            2#####  #
        3###  ###          3###  ###          3####  ##
        4  #  #            4  #  #            4###  ###
        5##    ##          5##    ##          5########
        6###  ###          6###  ###          6###  ###
        7########          7########          7########

Remarks

Two different versions of font 3 were supplied by Infocom, which we shall call the Amiga and PC forms (the Atari form is the same as for the PC). The arrow shape differed slightly and so did the rune alphabet. Each was an attempt to map the late Anglian (“futhorc”) runic alphabet, which has 33 characters, onto our Latin alphabet. The drawings above are from the Amiga set.

Most of the mappings are straightforward (e.g., Latin A maps to Anglian a), except that: Latin C is mapped to Anglian eo; K to “other k” (previously a z sound); Q to Anglian k (the same rune as c); V to ea; X to z and Z to oe. The PC runes differ as follows: G has an ornamental circle making it more look like “other z”; K maps to Anglian k (or c); Q is an Anglian ea (which resembles the late Anglian q); V is an oe; X is an “other k” and Z is a symbol Infocom seem to have invented themselves. (Though less well drawn the PC runes arguably have a better sound-mapping.)

The font behaviour of Beyond Zork, which does have bit 3 of ’Flags 2′ set, is rather complicated and depends on the interpreter number it finds in the header (see S11). Specifically:

  1. (a Digital terminal) BZ asks whether the player has a VT220 terminal (a model capable of character graphics) and uses font 3 if and only if the answer is yes. (An in-house convenience: Infocom used a Digital mainframe.)

  2. (Apple IIe) BZ never uses font 3.

  3. (Macintosh) BZ always uses font 3.

  4. (Amiga) BZ always uses font 3.

  5. (Atari ST) BZ always uses font 3.

  6. (MSDOS) BZ uses font 3 if it finds bit 3 of ’Flags 2′ set (indicating that a graphical screen mode is in use) and otherwise uses IBM PC graphics codes. These need to be converted back into ASCII. The conversion process used by the Zip interpreter is as follows:

    179

    a vertical stroke (ASCII 124)

    186

    a hash (ASCII 35)

    196

    a minus sign (ASCII 45)

    205

    an equals sign (ASCII 61)

    all others in the range 179 to 218 become a plus sign (ASCII 43)

  7. (Commodore 128) BZ always uses font 3.

  8. (Commodore 64) BZ always uses font 3.

  9. (Apple IIc) BZ uses Apple character graphics (possibly "Mousetext"), but has problems when the units used are not 1x1.

  10. (Apple IIgs) BZ always uses font 3.

  11. (Tandy) BZ crashes on the public interpreters.

A similarly tangled process is used in Journey. It is obviously highly unsatisfactory to have to make the decision in the above way, which is why set_font is now required to return 0 indicating non-availability of a font.

Stefan Jokisch suggests that Infocom originally intended the graphics bit as a way to develop Version 5 to allow a graphical version in parallel with the normal text one. For instance, when the Infocom MSDOS interpreter starts up, it looks at the graphics flag and:

  • if clear, it sets the font width/height to 1/1 (so that screen units are character positions);

  • if set, it enters MGCA, a graphical screen mode and sets the font width/height to 8/8 (so that screen units are pixels).

The COLOR command in BZ (typed at the keyboard) also behaves differently depending on the interpreter number, which is legal behaviour and has no impact on the specification.