16. Font 3 and character graphics
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:
-
(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.)
-
(Apple IIe) BZ never uses font 3.
-
(Macintosh) BZ always uses font 3.
-
(Amiga) BZ always uses font 3.
-
(Atari ST) BZ always uses font 3.
-
(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)
-
(Commodore 128) BZ always uses font 3.
-
(Commodore 64) BZ always uses font 3.
-
(Apple IIc) BZ uses Apple character graphics (possibly "Mousetext"), but has problems when the units used are not 1x1.
-
(Apple IIgs) BZ always uses font 3.
-
(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.