1FROTZ(6)                         Games Manual                         FROTZ(6)
2
3
4

NAME

6       frotz - interpreter for Infocom and other Z-Machine games
7
8
9

SYNOPSIS

11       frotz [options] file [blorbfile]
12
13       At  least  one file must be specified on the command line.  This can be
14       either a plain Z-code file or a Blorb file.  A Z-code file  is  a  com‐
15       piled  executable  for  the  Z-Machine.   A  Blorb file contains audio,
16       graphics, and other things in addition to the game wrapped  up  into  a
17       single  file.  It can also optionally contain the Z-Machine executable.
18       If a plain Z-code file is supplied, then Frotz will check for  a  Blorb
19       file  with  the  same  base  name  but an extension of .blb, .blorb, or
20       .zblorb and load it if found.
21
22       If the file supplied on the command line is a Blorb  file,  then  Frotz
23       will  check to see if a Z-code file is contained within.  If not found,
24       then Frotz will complain and exit.
25
26       An alternatively-named Blorb file can be supplied as the optional  sec‐
27       ond parameter to the command line invocation.
28
29
30

DESCRIPTION

32       Frotz  is  a Z-Machine interpreter.  The Z-machine is a virtual machine
33       designed by Infocom to run all  of  their  text  adventures.   It  went
34       through  multiple revisions during the lifetime of the company, and two
35       further revisions (V7 and V8) were created by Graham Nelson  after  the
36       company's demise.  The specification is now quite well documented; this
37       version of Frotz supports version 1.0.
38
39       This version of Frotz fully supports  all  these  versions  of  the  Z-
40       Machine  except for version 6.  Version 6 is semi-supported by display‐
41       ing the outlines of V6 graphics with the picture number in the  bottom-
42       right corner.
43
44
45

OPTIONS

47       -a     Watch  attribute setting.  Setting and clearing of attributes on
48              objects will be noted in debugging messages.
49
50
51       -A     Watch attribute testing.  Every  time  the  Z-machine  tests  an
52              attribute value, the test and the result will be reported.
53
54
55       -b <colorname>
56              Sets  the  default background color.  <colorname> corresponds to
57              one of the Z-machine colors, which are as follows:
58              black red green yellow blue magenta cyan white
59              If color support is disabled or not available on your  terminal,
60              this option does nothing.
61
62
63       -c N   Sets  the  number  of  context  lines used.  By default, after a
64              ``[MORE]'' prompt, and assuming there is enough output  pending,
65              Frotz  will  allow all the currently visible lines to scroll off
66              the screen before prompting again.  This  switch  specifies  how
67              many  lines  of text Frotz will hold over and display at the top
68              of the next screen.
69
70
71       -d     Disable color.
72
73
74       -e     Enable sound.  If you've disabled sound in  a  config  file  and
75              want to hear sound effects, use this.
76
77
78       -f <colorname>
79              Sets  the  default foreground color.  <colorname> corresponds to
80              one of the Z-machine colors, which are as follows
81              black red green yellow blue magenta cyan white
82              If color support is disabled or is not available on your  termi‐
83              nal, this option does nothing.
84
85
86       -F     Force color mode.  If you've disabled color in a config file and
87              want to Frotz to display colors, use this.
88
89
90       -h N   Manually sets the text height.  Though most curses libraries are
91              intelligent  enough to determine the current width from the ter‐
92              minal, it may sometimes be necessary to use this option to over‐
93              ride the default.
94
95
96       -i     Ignore  fatal  errors.   If a Z-Machine interpreter encounters a
97              zcode error such as division-by-zero or  addressing  an  illegal
98              object, the proper response is to abort execution.  This is done
99              because the zcode program doesn't have a clear idea of  what  is
100              going  on.   There  are  some  games  out there that cause fatal
101              errors because the authors were careless and used an interpreter
102              that  didn't properly check for errors.  This option is intended
103              to get around such bugs, but be warned that Strange  Things  may
104              happen if fatal errors are not caught.
105
106
107       -I N   Set the interpreter number.  Infocom designed the Z-machine such
108              that a game could tell on what kind of machine  the  interpreter
109              was running.  See INTERPRETER NUMBER below.
110
111
112       -l N   Sets  the left margin, for those who might have specific format‐
113              ting needs.
114
115
116       -L <filename>
117              When the game starts, load this saved game file.
118
119
120       -o     Watch object movement.  This option enables  debugging  messages
121              from the interpreter which describe the moving of objects in the
122              object tree.
123
124
125       -O     Watch object location.   These  debugging  messages  detail  the
126              locations of objects in the object tree.
127
128
129       -p     Plain  ASCII  output only.  This inhibits the output of accented
130              letters and other characters from  the  Latin-1  character  set,
131              replacing them with reasonable alternatives.  This may be neces‐
132              sary on devices lacking these characters.  The  OE/oe  dipthongs
133              are missing from the Latin-1 set.  These are handled as well.
134
135
136       -P     Alter  the  piracy  opcode.  The piracy opcode was never used by
137              Infocom.  This switch is really only useful for those  who  like
138              to toy around with Z-code.
139
140
141       -q     Quiet.  Turns off sound effects.  Useful when running Frotz on a
142              remote machine and you don't want to bother whoever's  near  the
143              console with weird noises.
144
145
146       -r N   Sets the right margin.
147
148
149       -R <path>
150              Restricted  read/write.   Reading  and  writing  files  will  be
151              restricted only to the  provided  path.  Ordinarily  Frotz  will
152              write  or  read  its  saves, transcripts, and move recordings in
153              whatever path or directory the  user  provides  when  the  SAVE,
154              SCRIPT,  or  RECORDING commands are given.  This can be undesir‐
155              able if Frotz is run in a restricted  environment,  by  a  front
156              end,  or by a chatbot.  This option will cause Frotz to write or
157              read only to the provided path and nowhere else.  Then the  con‐
158              trolling  process  can then watch that directory for changes and
159              need not worry about someone scribbling or  snooping  who-knows-
160              where.
161
162
163       -s N   Set  the random number seed value.  The given seed value is used
164              as the initial seed value on every restart. This is helpful  for
165              testing games like Curses which make random decisions before the
166              first input (such that the hot key Alt-S does not really help).
167
168
169       -S N   Set the transcript width.  By default your transcript files  are
170              formatted  to  a width of 80 columns per line, regardless of the
171              current text width.  This switch allows you to change this  set‐
172              ting.  In  particular,  use  -S  0  to deactivate automatic line
173              splitting in transcript files.
174
175
176       -t     Sets the Z-machine's Tandy bit, which may affect the behavior of
177              certain Infocom games.  For example, Zork I pretends not to have
178              sequels, and Witness has its language toned down.
179
180
181       -u N   Sets the number of slots available  for  Frotz's  multiple  undo
182              hotkey  (see  below).   This defaults to twenty, which should be
183              sufficient for most purposes.  Setting too high  a  number  here
184              may be dangerous on machines with limited memory.
185
186
187       -w N   Manually sets the text width.
188
189
190       -x     Expand  the  abbreviations  "g", "x", and "z" to "again", "exam‐
191              ine", and "wait".  This switch is for use with old Infocom games
192              that  lack  these  common abbreviations which were introduced in
193              later games.  Use it with caution: A few games  might  use  "g",
194              "x" or "z" for different purposes.
195
196
197       -v     Show  version  information and exit.  This will display the ver‐
198              sion of Frotz, some information about what's enabled and  what's
199              not,  the  commit  date of the source code, and a git(1) hash of
200              that commit.
201
202
203       -Z N   Error checking mode.
204              0 = don't report errors.
205              1 = report first instance of an error.
206              2 = report all errors.
207              3 = exit after any error.
208              Default is 1 (report first instance of an error).
209
210
211

HOT KEYS

213       These hot keys are enabled only when the Z-machine is waiting for  line
214       input (for Z-machine experts: the @read opcode).
215
216
217       Alt-D  Set debugging options.
218
219
220       Alt-H  Help (print the list of hot keys).
221
222
223       Alt-N  New game (restart).
224
225
226       Alt-P  Playback on.
227
228
229       Alt-R  Recording on/off.
230
231
232       Alt-S  Set random number seed.
233
234
235       Alt-U  Undo one turn.
236
237
238       Alt-X  Exit game (after confirmation).
239
240
241

INTERPRETER NUMBER

243       The  interpreter  number  is a setting in the Z-machine header which is
244       used to tell the game on what sort of machine the interpreter  is  run‐
245       ning. Frotz will automatically choose the most appropriate number for a
246       given Infocom-produced game.  Should you want to override  the  number,
247       the -I option is available.
248
249       An  interpreter  should choose the interpreter number most suitable for
250       the machine it will run on.  In Versions up to 5, the  main  considera‐
251       tion  is that the behaviour of 'Beyond Zork' depends on the interpreter
252       number (in terms of its usage of the character graphics font). In  Ver‐
253       sion  6,  the decision is more serious, as existing Infocom story files
254       depend on interpreter number in many ways: moreover, some  story  files
255       expect  to  be  run  only on the interpreters for a particular machine.
256       There are, for instance, specifically Amiga versions.  The DECSystem-20
257       was Infocom's own in-house mainframe.
258
259       Infocom used the following interpreter numbers:
260
261
262       1   DECSystem 20
263
264
265       2   Apple IIe
266
267
268       3   Macintosh
269
270
271       4   Amiga
272
273
274       5   Atari ST
275
276
277       6   IBM PC
278
279
280       7   Commodore128
281
282
283       8   Commodore64
284
285
286       9   Apple IIc
287
288
289       10   Apple IIgs
290
291
292       11   Tandy Color
293
294
295

CONFIGURATION FILES

297       On  startup,  frotz  will  first  check  the  system's  frotz.conf then
298       $HOME/.frotzrc for configuration information.  The  configuration  file
299       uses a simple syntax of
300       <variable> <whitespace> <value>
301
302
303       Color names may be any of the following:
304       black | red | green | blue | magenta | cyan | white
305
306
307
308       ascii   on | off
309       Use plain ASCII only.  Default is "off".
310
311
312       background   <colorname>
313       Set background color.  Default is terminal's default background color.
314
315
316       color   yes | no
317       Use color text.  Default is "yes" if supported.
318
319
320       errormode   never | once | always | fatal
321       Set error reporting mode.
322       never Don't report any errors except for fatal ones.
323       once Report only the first instance of an error.
324       always Report every instance of an error.
325       fatal Abort on any error, even non-fatal ones.
326       Default is "once".
327
328
329       expand_abb   on | off
330       Expand  abbreviations.   Default is off.  Expand the abbreviations "g",
331       "x", and "z" to "again", "examine", and "wait".  This switch is for use
332       with  old Infocom games that lack these common abbreviations which were
333       introduced in later games.  Use it with caution.  A few games might use
334       the "g", "x", or "z" for different purposes.
335
336
337       foreground   <colorname>
338       Set foreground color.  Default is terminal's default forground color.
339
340
341       ignore_fatal   on | off
342       Ignore  fatal  errors.   If  a Z-Machine interpreter encounters a zcode
343       error such as division-by-zero or addressing  an  illegal  object,  the
344       proper  response is to abort execution.  This is done because the zcode
345       program doesn't have a clear idea of what is going on.  There are  some
346       games  out there that cause fatal errors because the authors were care‐
347       less and used an interpreter that didn't  properly  check  for  errors.
348       This  option  is  intended  to get around such bugs, but be warned that
349       Strange Things may happen if fatal errors are not caught.
350       Default is "off"
351
352
353       piracy   on | off
354       Alter the piracy opcode.  Default is off.  The piracy opcode was  never
355       used  by  Infocom. This option is only useful for those who like to toy
356       around with Z-code.
357
358
359       randseed   <integer>
360       Set random number seed.  Default comes from the Unix epoch.
361
362
363       sound   on | off
364       Turn sound effects on or off.  Default is "on".
365
366
367       tandy   on | off
368       Set the machine's Tandy bit.  This may affect the behavior  of  certain
369       Infocom  games.   For example, Zork I pretends not to have sequels, and
370       Witness has its language toned down.  Default is "off".
371
372
373       undo_slots   <integer>
374       Set number of undo slots.  Default is 500.
375
376
377       zcode_path   /path/to/zcode/files:/another/path
378       Set path to search for zcode game files.  This is just like  the  $PATH
379       environmental  variable  except  that you can't put environmental vari‐
380       ables  in  the   path   or   use   other   shortcuts.    For   example,
381       "$HOME/games/zcode"  is  illegal because the shell can't interpret that
382       $HOME variable.
383
384
385       The following options are really only useful for weird terminals, weird
386       curses  libraries  or if you want to force a certain look (like play in
387       40-column mode).
388
389
390       context_lines   <integer>
391       Set the number of context lines used.  By default, after  a  ``[MORE]''
392       prompt,  and  assuming there is enough output pending, frotz will allow
393       all the currently visible lines to scroll off the screen before prompt‐
394       ing  again.   This  switch  specifies how many lines of text frotz will
395       hold over and display at the top of the next screen.  Default is "0".
396
397
398       left_margin   <integer>
399       Set the left margin.  This is for those who might have special  format‐
400       ting needs.
401
402
403       right_margin   <integer>
404       Set the right margin.  This is for those who might have special format‐
405       ting needs.
406
407
408       text_height   <integer>
409       Manually set text height.  Most curses libraries are intelligent enough
410       to  determine  the  current width of the terminal.  You may need to use
411       this option to override the default.
412
413
414       text_width   <integer>
415       Manually set text width.  Again, this should not be necessary except in
416       special circumstances.
417
418
419       script_width   <integer>
420       Set  the  transcript width.  Default is 80 columns per line, regardless
421       of the current text width.  This switch allows you to change this  set‐
422       ting.   You  may set this to "0" to deactivate automatic line-splitting
423       in transcript files.
424
425
426       The following options are mainly useful for debugging or cheating.
427
428
429       attrib_set   on | off
430       Watch attribute setting.  Setting and clearing of attributes on objects
431       will be noted in debugging messages.  Default is "off"
432
433
434       attrib_test   on | off
435       Watch  attribute  testing.  Every time the Z-machine tests an attribute
436       value, the test and the result will be reported.  Default is "off".
437
438
439       obj_loc   on | off
440       Watch object location.  These debugging messages detail  the  locations
441       of objects in the object tree.  Default is "off".
442
443
444       obj_move   on | off
445       Watch object movement.  This option enables debugging messages from the
446       interpreter which describe the movement of objects in the object  tree.
447       Default is "off".
448
449

COLOR

451       Whether or not Frotz will display color depends upon the curses library
452       and the terminal.  In general, an xterm  or  other  X11-based  terminal
453       emulator will support color.  Sometimes the value of $TERM will need to
454       be set to something like "xterm-color" or "rxvt-256color".  For a Linux
455       console,  $TERM  is  almost  always  set to "linux".  This will support
456       color.  For a NetBSD or OpenBSD console on an x86 or amd64, the default
457       value  of  $TERM is "vt100".  To get color supported there, you need to
458       set $TERM to "pc3".  A FreeBSD console's $TERM is "xterm" and will sup‐
459       port color.  Color on text consoles on machines other than x86 or amd64
460       is untested.
461
462       On some operating systems, Xterm will not change the  cursor  color  to
463       match  that  of  the text.  To fix this, add the following line to your
464       .Xresources file and type xrdb -merge $HOME/.Xresources
465
466       xterm*cursorColor:      *XtDefaultForeground
467
468       This can also be added to  a  systemwide  file  such  as  /etc/X11/Xre‐
469       sources/x11-common or /etc/X11/app-defaults/XTerm.  The names and loca‐
470       tions of the system-wide files can vary from OS to OS.
471
472

UNICODE

474       Frotz supports Unicode glyphs by way of UTF-8 if the terminal used sup‐
475       ports UTF-8.  If you prefer using xterm, start it as uxterm.  This is a
476       wrapper script that sets up xterm with UTF-8 locale.  You can also man‐
477       ually  tell  an xterm to switch into UTF-8 mode by holding CTRL and the
478       right mouse button to bring up the VT FONTS  menu.   Depending  on  how
479       xterm was installed, you may see an option for "UTF-8 Fonts" which will
480       allow Unicode to be properly displayed.
481
482       Getting normal xterm to behave like this all the  time  can  vary  from
483       system  to  system.   Other  terminal  emulators have their own ways of
484       being set to use UTF-8 character encoding.
485
486

NON ASCII CHARACTERS

488       Non-ASCII glyphs can be displayed without the use of UTF-8  by  way  of
489       the  ISO-8859-1  or  ISO-8859-15  (Latin-1  or Latin-9) character sets.
490       ISO-8859-15 is more or less identical to  ISO-8859-1  except  that  the
491       OE/oe  dipthongs  are  supported, replacing the seldom-used 1/2 and 1/4
492       glyphs.  See also luit(1) charsets(7) iso_8859-1(7) and  iso_8859-15(7)
493       for more information.
494
495
496   LOCALE
497       An important means of ensuring the system knows to use UTF-8 is to make
498       sure the locale is set appropriately.  This is  valid  only  when  Dumb
499       Frotz runs under Unix-ish systems.
500
501       Using the command locale will tell you what is currently in use.  Using
502       locale -a
503
504       will show you what's available.  Then set your LANG evironmental  vari‐
505       able to something appropriate by using one of these commands:
506
507           export LANG=C.UTF-8
508           export LANG=en_US.utf8
509
510       This  can  be  put  in  your  shell configuration file, be it .profile,
511       .bash_profile, .login, .bashrc, or whatever.
512
513       It can also be set system-wide in the equivalent files in /etc.
514
515
516   SEE ALSO
517       ash(1) bash(1) csh(1) ksh(1) sh(1) zsh(1)
518
519
520

ENVIRONMENT

522       If the ZCODE_PATH environmental variable is defined, frotz will  search
523       that  path for game files.  If that doesn't exist, INFOCOM_PATH will be
524       searched.
525
526       For the Alt key to be read correctly in an Xterm, the  following  lines
527       should be in your .Xresources file:
528
529       XTerm*metaSendsEscape: true
530       XTerm*eightBitInput: false
531
532
533

FURTHER INFORMATION

535       The Frotz homepage is at https://661.org/proj/if/frotz/.
536
537       A  git(1)  repository  of  all  versions  of Unix Frotz back to 2.32 is
538       available for public perusal here:
539       https://gitlab.com/DavidGriffith/frotz/.
540
541       The bleeding edge of Frotz development may be followed there.
542
543       The Interactive Fiction Archive is a good place to find games  to  play
544       with Frotz.  Various ports and builds for Frotz may also be found here.
545       Here is its URL:
546       http://www.ifarchive.org/
547
548       Most distributions of Linux and BSD  include  Frotz  in  their  package
549       repositories.
550
551
552

CAVEATS

554       The  Z Machine itself has trouble with the concept of resizing a termi‐
555       nal.  It assumes that once the text height and width are set, they will
556       never  change; even across saves.  This made sense when 24x80 terminals
557       were the norm and graphical user interfaces were mostly  unknown.   I'm
558       fairly  sure  there's  a  way  around  this problem, but for now, don't
559       resize an xterm in which frotz is running.  Also,  you  should  try  to
560       make  sure  the terminal on which you restore a saved game has the same
561       dimensions as the one on which you saved the game.
562
563
564       Audio latency might be unreasonably long depending on the  settings  of
565       your operating system.  Linux generally has things right.  The BSDs may
566       need some sysctl(8) settings adjusted.  See the  sound(4)  or  audio(4)
567       manpages for more information.
568
569
570       You  can  use  a  path  like  "/usr/local/games/zcode:$HOME/zcode" with
571       $ZCODE_PATH or $INFOCOM_PATH because the shell will digest  that  $HOME
572       variable   for   you   before  setting  $ZCODE_PATH.  While  processing
573       frotz.conf and $HOME/.frotzrc, a shell is not used. Therefore you  can‐
574       not  use  environmental  variables in the "zcodepath" option within the
575       config files.
576
577
578       This manpage is not intended to tell users HOW to play interactive fic‐
579       tion.   Refer  to the file HOW_TO_PLAY included in the Unix Frotz docu‐
580       mentation or visit one of the following sites:
581       http://www.microheaven.com/ifguide/
582       http://www.brasslantern.org/beginners/
583       http://www.musicwords.net/if/how_to_play.htm
584       http://ifarchive.org/
585
586
587

BUGS

589       This program has no bugs.  no bugs.  no bugs.  no *WHAP* thank you.  If
590       you  find  one, please report it to the Gitlab site referenced above in
591       FURTHER INFORMATION.
592
593
594

AUTHORS

596       Frotz was written by Stefan Jokisch for MSDOS in 1995-7.
597       The Unix port was done by Galen Hazelwood.
598       The Unix port is currently maintained by David Griffith <dave@661.org>.
599
600

CONTRIBUTORS

602       In 2019, a Kickstarter campaign was run to  raise  funds  to  pay  Mark
603       McCurry  to  overhaul the audio subsystem for the curses port of Frotz.
604       The following people contributed $100 towards that effort:
605       Simon Martin
606       Dan Sanderson
607       Justin de Vesine
608       Daniel Sharpe
609
610

SEE ALSO

612       sfrotz(6) dfrotz(6) nitfol(6) rezrov(6) jzip(6) xzip(6) inform(1)
613
614
615
616                                     2.51                             FROTZ(6)
Impressum