SFROTZ(6) | Games Manual | SFROTZ(6) |
sfrotz - interpreter for Infocom and other Z-Machine games (SDL interface)
sfrotz [options] file [blorb_file]
At least one file must be specified on the command line. This can be either a plain Z-code file or a Blorb file. A Z-code file is a compiled executable for the Z-Machine. A Blorb file contains audio, graphics, and other things in addition to the game wrapped up into a single file. It can also optionally contain the Z-Machine executable. If a plain Z-code file is supplied, then Frotz will check for a Blorb file with the same base name but an extension of .blb, .blorb, or .zblorb and load it if found.
If the file supplied on the command line is a Blorb file, then Frotz will check to see if a Z-code file is contained within. If not found, then Frotz will complain and exit.
An alternatively-named Blorb file can be supplied as the optional second parameter to the command line invocatio
Frotz is a Z-Machine interpreter. The Z-machine is a virtual machine designed by Infocom to run all of their text adventures. It went through multiple revisions during the lifetime of the company, and two further revisions (V7 and V8) were created by Graham Nelson after the company's demise. The specification is now quite well documented; this version of Frotz supports version 1.0.
This version of Frotz fully supports all these versions of the Z-Machine including the graphical version 6. Graphics and sound are created through the use of the SDL libraries. AIFF sound effects and music in MOD and OGG formats are supported when packaged in Blorb container files or optionally from individual files.
Sfrotz supports the same hot keys as standard Frotz, plus the Ctl-Alt-X combination for immediate exit, which may be used in case of emergency. Note that these hot keys are enabled only when the Z-machine is waiting for line input (for Z-machine experts: @read opcode), with the exception of Ctl-Alt-X which also works in single character input mode (@read_char opcode).
Sfrotz has a hardwired default screen size of 640x400. The screen size can be changed by the values in this section, by the values found in the Reso chunk of a Blorb file, and finally by the -w and -h command line options (in that order). Note however that Sfrotz shall refuse to set a screen width less than 640 and/or a height less than 400. NOTE: for normal (windowed) usage, the screen size should obviously be less than the PC screen resolution (taking into account also window decorations, taskbars etc.) For fullscreen usage, the size should preferably be one of those supported by the PC video driver; otherwise, SDL shall try to use the next higher available resolution, with black borders around the Z-machine screen. In fullscreen mode, however, it may happen that for some strange resolutions SDL accepts the request, but the screen goes blank... In such a case, you may shut down the program by pressing Ctrl-Alt-X.
The interpreter number is a setting in the Z-machine header which is used to tell the game on what sort of machine the interpreter is running. Sfrotz will automatically choose the most appropriate number for a given Infocom-produced game. Should you want to override the number, the -I option is available.
An interpreter should choose the interpreter number most suitable for the machine it will run on. In Versions up to 5, the main consideration is that the behaviour of 'Beyond Zork' depends on the interpreter number (in terms of its usage of the character graphics font). In Version 6, the decision is more serious, as existing Infocom story files depend on interpreter number in many ways: moreover, some story files expect to be run only on the interpreters for a particular machine. There are, for instance, specifically Amiga versions. The DECSystem-20 was Infocom's own in-house mainframe.
For Infocom's four V6 games, the interpreter number will be automatically chosen based on the title and release number. Of course, this can be overridden at the command line.
Infocom used the following interpreter numbers:
1 DECSystem 20
2 Apple IIe
3 Macintosh
4 Amiga
5 Atari ST
6 IBM PC
7 Commodore128
8 Commodore64
9 Apple IIc
10 Apple IIgs
11 Tandy Color
Besides Blorb-packaged resources, Sfrotz can also render graphics and sound from individual files, provided the latter are either suitably named (e.g a common root with a numeric field specifying the resource number), or listed in a suitably formatted text file.
Note that this feature is not automatic, but must be enabled by the -% or -@ command line options. When the feature is enabled, resources found this way override those in the Blorb file, if present.
This feature can be useful to game designers, as it eases changing and adding resources without having to re-compile the Blorb file each time. The format of the list file used with the -@ option (see EXAMPLE BLC FILE) is identical to that of the BLC control file used by L. Ross Raszewski's iblorb package, so one can use the same list for compiling the final Blorb file for distribution.
Sfrotz can display text with Truetype or Type1 fonts, using the FreeType2 rendering library. The location of the necessary font files must be specified in the setup file. Also, antialiased rendering of Truetype fonts can be specified. Please note that this feature in sfrotz is still experimental, so don't expect too much (e.g., kerning is not supported).
Sfrotz does not need Truetype fonts to work; in fact it has a default monospaced font, based on an 8x16 VGA font, which can be used for both the TEXT_FONT and the FIXED_FONT of the z-machine, with suitable (though not very nice) modifications for the various styles. Even if Truetype fonts are specified in the setup file, Sfrotz can be forced to use the VGA font by the -V command line switch.
Sfrotz supports Unicode glyphs by way of UTF-8 as long as the fonts loaded contain the glyphs you need. The default font provided by SDL does not contain much beyond the Latin alphabet and some diacritical marks. Inverted punctuation marks as used in Spanish are missing. Two monospaced fonts known to work well with most commonly-encountered alphabetic languages are Leggie and FreeMono. They can be found at https://memleek.org/leggie/ (X11 BDF fonts) and https://www.gnu.org/software/freefont/ (Truetype fonts). Logographic glyphs (Kanji and Chinese are not currently supported.
If the ZCODE_PATH environmental variable is defined, Sfrotz will search that path for game files. If that doesn't exist, INFOCOM_PATH will be searched.
On startup, sfrotz will check $HOME/.sfrotzrc for setup information. The setup file has four sections: Interpreter, Display, Fonts, and Resources.
The Interpreter section deals with options having to do with how the Frotz core works.
The Window section deals with screen display. Sfrotz has a hardwired default screen size of 640x400. The screen size can be changed by the values in this section, by the values found in the Reso chunk of a Blorb file, and finally by the -w and -h command line options (in that order). Note however that sfrotz shall refuse to set a screen width less than 640 and/or a height less than 400.
NOTE: for normal (windowed) usage, the screen size should obviously be less than the PC screen resolution (taking into account also window decorations, taskbars etc.) For fullscreen usage, the size should preferably be one of those supported by the PC video driver; otherwise, SDL shall try to use the next higher available resolution, with black borders around the z-machine screen. In fullscreen mode, however, it may happen that for some strange resolutions SDL accepts the request, but the screen goes blank... In such a case, you may shut down the program by pressing Ctrl-Alt-X.
The Display section is reserved for future developments.
The Fonts section is for defining the font directory, font files, and if antialiasing is enabled (which is currently not supported).
The following eight statements: textroman, textbold, textitalic, textbolditalic, fixedroman, fixedbold, fixeditalic, and fixedbolditalic; specify the eight font faces used by the z-machine (not counting the so-called graphics font used in Beyond Zork, which is hardwired in the program), that is the normal TEXT_FONT and the monospaced FIXED_FONT, each in four styles (roman, bold, italic and bold+italic). A single face is specified by the file name (with its suffix!), optionally followed by an @ sign and a number, indicating the font size in pixels (default is 14). Multiple face files can be specified, separated by pipe (|) characters; Sfrotz shall use the first one it finds (see the example in EXAMPLE SETUP FILE). This feature allows e.g. to use the same setup file on different systems.
The Resources section is for configuring graphics and sound resources. Each template must contain exactly one C-style decimal format specifier (e.g. Pict%d) to be substituted by the resource number.
[Interpreter]
Number = number
Set the interpreter number (default is 4, i.e. Amiga Interpreter)
Error Reporting = level
Set the error reporting level (same as the -Z option)
Ignore Errors = 0/1
Ignore (1) or not (0) non-fatal runtime errors.
Expand Abbreviations = 0/1
Set/reset expansion of g/x/z abbreviations. Expansion is useful for old v1
games which do not understand such abbreviations. Default: 0 (the -xoption
can set this switch.)
Tandy Bit = 0/1
Set/reset the Tandy bit. Default: 0 (the -t option can set this switch.)
Wrap Script Lines = nc
Set the width (number of columns) of the transcript to nc. Same as -S
option.
SaveNames = date/name
Set the mode (date or name) for creating default file names for save/script
etc. For date, a timestamp is prepended to the filename extension.
For name, a four-digit number beginning with 0000 is prepended
to the filename extension.
[Window]
AcWidth = width
Set the screen width in pixels (default: 640)
AcHeight = height
Set the screen height in pixels (default: 400)
[Display]
(This section reserved for future developments)
[Fonts]
antialias = 0/1
Set antialiased rendering of Truetype fonts off (0) or on (nonzero). Note that
this option cannot be overridden by a command line switch.
fontdir = folder
Specify the directory containing the Truetype fonts. If this does not begin
with a slash, then the directory is assumed to be relative to the user's
home directory.
textroman = fontspec
Set the font file for TEXT_FONT, roman style.
textbold = fontspec
Set the font file for TEXT_FONT, bold style.
textitalic = fontspec
Set the font file for TEXT_FONT, italic style.
textbolditalic = fontspec
fixedroman = fontspec
Set the font file for FIXED_FONT, roman style.
fixedbold = fontspec
Set the font file for FIXED_FONT, bold style.
fixeditalic = fontspec
Set the font file for FIXED_FONT, italic style.
fixedbolditalic = fontspec
Set the font file for FIXED_FONT, bold and italic style
[Resources]
Dir = folder
Specify the folder for individual graphics/sound resource files.
Pict = template
Template for picture resource files.
Snd = template
Template for sound resource files.
# The # denotes the start of a comment
# Everything after the # is ignored, up to the end of the line
[Interpreter]
SaveNames=date
[Window]
# The following entries are commented out
# but they are the same as the hardwired defaults, anyway
#AcWidth = 640
#AcHeight = 400
[Display]
[Fonts]
antialias=1
fontdir=/usr/share/fonts/truetype/freefont
textroman=arial.ttf@16|FreeSans.ttf@16
textbold=arialbd.ttf@16|FreeSansBold.ttf@16
textitalic=ariali.ttf@16|FreeSansOblique.ttf@16
textbolditalic=arialbi.ttf@16|FreeSansBoldOblique.ttf@16
fixedroman=cour.ttf@16|FreeMono.ttf@16
fixedbold=courbd.ttf@16|FreeMonoBold.ttf@16
fixeditalic=couri.ttf@16|FreeMonoOblique.ttf@16
fixedbolditalic=courbi.ttf@16|FreeMonoBoldOblique.ttf@16
[Resources]
Dir=./ # the current dir
Pict=PIC%d # i.e. PIC1, PIC2, ...
Snd=SND%d # i.e. SND3, SND4, ...
Exec 0 ZCOD ani.z6
Snd 13 FORM busyalone.au.aiff
Snd 12 FORM s0020.au.aiff
Snd 11 FORM s0154.au.aiff
Snd 10 FORM s1484.au.aiff
Pict 10 PNG edleft.png0.png
Pict 11 PNG edleft.png1.png
Pict 12 PNG edleft.png2.png
Pict 13 PNG edleft.png3.png
Pict 14 PNG edleft.png4.png
Pict 15 PNG edleft.png5.png
Pict 16 PNG lauhoh.png0.png
Pict 17 PNG lauhoh.png1.png
Pict 18 PNG lauhoh.png2.png
Pict 19 PNG edfront.png0.png
Pict 20 PNG edfront.png1.png
Pict 21 PNG edfront.png2.png
Pict 22 PNG edfront.png3.png
Pict 23 PNG edfront.png4.png
Pict 24 PNG edfront.png5.png
Pict 25 PNG hoagie.png0.png
Pict 26 PNG hoagie.png1.png
Pict 30 PNG dott0.png
The Frotz homepage is at https://661.org/proj/if/frotz/.
A git(1) repository of all versions of Unix Frotz back to
2.32 is available for public perusal here:
https://gitlab.com/DavidGriffith/frotz/.
The bleeding edge of Frotz development may be followed there.
The Interactive Fiction Archive is a good place to find games to
play with Frotz. Various ports and builds for Frotz may also be found
here. Here is its URL:
http://www.ifarchive.org/
Most distributions of Linux and BSD include Frotz in their package repositories.
It is distributed under the GNU General Public License version 2
or (at your option) any later version.
https://www.gnu.org/licenses/gpl-2.0.en.html
This software is offered as-is with no warranty or liability. If you find a bug or would like Frotz to do something it doesn't currently do, please visit the above Gitlab website and report your concerns.
The Z Machine itself has trouble with the concept of resizing a terminal. It assumes that once the screen height and width are set, they will never change; even across saves. This made sense when 24x80 terminals were the norm and graphical user interfaces were mostly unknown. I'm fairly sure there's a way around this problem, but for now, don't resize an xterm in which frotz is running. Also, you should try to make sure the terminal on which you restore a saved game has the same dimensions as the one on which you saved the game.
Audio latency might be unreasonably long depending on the settings of your operating system. Linux generally has things right. The BSDs may need some sysctl(8) settings adjusted. See the sound(4) or audio(4) manpages for more information.
This manpage is not intended to tell users HOW to play interactive
fiction. Refer to the file HOW_TO_PLAY included in the Unix Frotz
documentation or visit one of the following sites:
http://www.microheaven.com/ifguide/
http://www.brasslantern.org/beginners/
http://www.musicwords.net/if/how_to_play.htm
http://ifarchive.org/
This program has no bugs. no bugs. no bugs. no *WHAP* thank you. If you find one, please report it to the Gitlab site referenced above in FURTHER INFORMATION.
frotz was written by Stefan Jokisch for MSDOS in 1995-7.
The SDL port was done in 2009 by Aldo Cumani and is currently maintained by
David Griffith <dave@661.org>.
frotz(6) dfrotz(6) nitfol(6) rezrov(6) jzip(6) xzip(6) inform(1)
2021-06-21 | SDL Frotz v2.54 |