DFROTZ(6)
π dfrotz β interpreter for Infocom and other Z-Machine games (dumb interface) π
okay bestie, gather round, because we're about to talk about dfrotz, and she is that girl π
β¨ NAME β¨
dfrotz β interpreter for Infocom and other Z-Machine games (dumb interface)
fr fr that's the whole vibe. it runs the Z-Machine games. it's the "dumb" interface version. let's get into it π¦
β¨ SYNOPSIS β¨
dfrotz [options] file [blorb_file]
okay so you have to give it at least one file on the command line. no file, no game, periodt. π
that file can be either a plain Z-code file or a Blorb file. let me break down what those are, because it matters:
- a Z-code file is a compiled executable for the Z-Machine. like, the actual game, compiled and ready.
- a Blorb file is the fancy one β it's got audio, graphics, and other things in addition to the game, all wrapped up into a single file. it can also optionally contain the Z-Machine executable itself. so sometimes it's the whole package deal. π
now here's the cute part: if you give it a plain Z-code file, Frotz will check for a Blorb file with the same base name but an extension of .blb, .blorb, or .zblorb, and load it if it finds one. so it's out here matching your files up like a good friend setting you up on a date. π«Ά
but if the file you supplied on the command line is a Blorb file, then Frotz checks to see if a Z-code file is contained within. if it's not found in there, Frotz will complain and exit. like, it will literally just be like "no β€οΈ" and leave. π
and you can also supply an alternatively-named Blorb file as the optional second parameter to the command line invocation. flexible queen. β¨
heads up bestie: if you want to play any of the games from Infocom that use sound or graphics, you're gonna need to get a corresponding Blorb file from the Interactive Fiction Archive. See FURTHER INFORMATION below. i'm not making this up, it says so. π
β¨ DESCRIPTION β¨
Frotz is a Z-Machine interpreter. and the Z-Machine? it's a virtual machine designed by Infocom to run all of their text adventures. iconic honestly. it went through multiple revisions during the lifetime of the company, and then two further revisions (V7 and V8) were created by Graham Nelson after the company's demise. so it kept evolving even after. the specification is now quite well documented; this version of Frotz supports version 1.1. See Z-MACHINE STANDARDS below. π
this version of Frotz fully supports all these versions of the Z-Machine except for version 6. V6 is only semi-supported β it displays the outlines of V6 graphics with the picture number in the bottom-right corner. so like, it's giving "we tried" but in a cute way. π«
and here's the important thing about this manpage: it's for Frotz with the dumb interface. dumb Frotz does not support sound-effects, graphics, colors, or even screen-handling (for instance, curses(3)). its purpose is to provide a Z-machine interpreter with the absolute minimum system requirements, or for applications where those features are not needed. so like, it's the low-maintenance bestie. no drama, no extras, just vibes and text. πβ¨
β¨ OPTIONS β¨
okay here comes the menu, and there are a LOT of them, so buckle up babes π
-aβ watch attribute setting. setting and clearing of attributes on objects will be noted in debugging messages. π-Aβ watch attribute testing. every single time the Z-machine tests an attribute value, the test and the result get reported. nosy in the best way.-f [irc | ansi | normal]β select type of format codes. dumb Frotz can optionally mark up its output with codes for color, bold, underline, and so on. currently, formatting codes for irc clients and ansi terminals are supported. specifyingnormal, or just not using this flag at all, will result in dumb Frotz's normal behavior of not using any sort of markup. so: no flag = no frills, and that's valid. β¨-h Nβ text height. everyNlines, aMOREprompt will be printed. and fyi, using the-moption renders this option moot. moot! π-iβ ignore fatal errors. so here's the tea: if a Z-Machine interpreter encounters a zcode error such as division-by-zero or addressing an illegal object, the proper response is to abort execution. why? because the zcode program doesn't have a clear idea of what is going on. but β there are some games out there that cause fatal errors because the authors were careless and used an interpreter that didn't properly check for errors. this option is intended to get around such bugs. > β οΈ but be warned that Strange Things may happen if fatal errors are not caught. like, capital-S Strange Things. don't say nobody told you. π-I Nβ set the interpreter number. Infocom designed the Z-machine such that a game could tell on what kind of machine the interpreter was running. See INTERPRETER NUMBER below. π-L <filename>β when the game starts, load this saved game file. instant nostalgia, no cap.-mβ turn offMOREprompts. this can be desirable when using a printing terminal. π¨οΈ-oβ watch object movement. this option enables debugging messages from the interpreter which describe the moving of objects in the object tree. π¦-Oβ watch object location. these debugging messages detail the locations of objects in the object tree. yes, it's different from-o. case-sensitive bestie, stay woke.-pβ plain ASCII output only. this inhibits the output of accented letters and other characters from the Latin-1 character set, replacing them with reasonable alternatives. this may be necessary on devices lacking these characters. also theOE/oedipthongs are missing from the Latin-1 set β and these are handled as well. so it's got you covered. π«Ά-Pβ alter the@piracyopcode. the@piracyopcode was never used by Infocom. this switch is really only useful for those who like to toy around with Z-code. so like, for the tinkerers. π§-qβ quiet mode. suppress startup messages such as"Loading zork1.z3". sometimes you just want to enter the room silently. π€«-r xxxβ set runtime options. this option may be used repeatedly. See CONFIGURATION below. there is no need to prepend a backslash. π-R <path>β restricted read/write. reading and writing files will be restricted only to the provided path. ordinarily Frotz will write or read its saves, transcripts, and move recordings in whatever path or directory the user provides when theSAVE,SCRIPT, orRECORDINGcommands are given. this can be undesirable if Frotz is run in a restricted environment, by a front end, or by a chatbot. this option will cause Frotz to write or read only to the provided path and nowhere else. then the controlling process can watch that directory for changes and need not worry about someone scribbling or snooping who-knows-where. so like, it's the "stay in your lane" option and honestly? respect. π§-s Nβ set the random number seed value. the given seed value is used as the initial seed value on every restart. by default, the random number generator is initialized based on the system clock; this allows you to make the random number generator predictable, for use in recorded scripts or debugging. for instance, Curses makes random decisions before the first input (such that the hot keyAlt-Sdoes not really help). π²-S Nβ set the transcript width. by default your transcript files are formatted to a width of 80 columns per line, regardless of the current text width. this switch allows you to change this setting. in particular, use-S 0to deactivate automatic line splitting in transcript files. βοΈ-tβ sets the Z-machine's Tandy bit, which may affect the behavior of certain Infocom games. for example, Zork I pretends not to have sequels, and Witness has its language toned down. so it's the "family-friendly filter" but canonically. π-u Nβ sets the number of slots available for Frotz's multiple undo hotkey (see below). this defaults to twenty, which should be sufficient for most purposes. > β οΈ setting too high a number here may be dangerous on machines with limited memory. so don't go wild with it bestie, she's fragile. π-w Nβ manually sets the text width. this should not be necessary except in special circumstances. fr fr, you probably don't need this one.-xβ expand the abbreviations"g","x", and"z"to"again","examine", and"wait". this switch is for use with old Infocom games that lack these common abbreviations which were introduced in later games. > β οΈ use it with caution: a few games might use"g","x"or"z"for different purposes. so like, check before you commit. π-vβ show version information and exit. this will display the version of Frotz, some information about what's enabled and what's not, the commit date of the source code, and agit(1)hash of that commit. the receipts, basically. π-Z Nβ error checking mode. and here are your options, queen:0= don't report errors.1= report first instance of an error.2= report all errors.3= exit after any error.
default is 1 (report first instance of an error). π¨
β¨ INTERPRETER NUMBER β¨
okay so this one's a little lore-heavy but stay with me because it's genuinely interesting π
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. Frotz will automatically choose the most appropriate number for a given Infocom-produced game. but should you want to override the number, the -I option is available. your call, bestie. β¨
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. and the DECSystem-20 was Infocom's own in-house mainframe. so like, the machine matters, no cap. π₯οΈ
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 202β Apple IIe3β Macintosh4β Amiga5β Atari ST6β IBM PC7β Commodore 1288β Commodore 649β Apple IIc10β Apple IIgs11β Tandy Color
so yeah, a whole little lineup of machines, each with their own number. vintage tech slay. πΉοΈβ¨
π CONFIGURATION π
Okay so unlike its curses-using or SDL-using siblings, dfrotz does not use configuration files. Nope, zero, none. All the config happens on the command line or while dfrotz is running. That's it, that's the whole thing. π
β¨ General Commands β¨
\helpβ shows the help message. bestie behavior fr fr.\setβ shows the current values of the runtime settings.\sβ shows the current contents of the whole screen.\dβ discards the part of the input before the cursor.\wNβ advances the clock by N/10 seconds, which may cause the current and subsequent inputs to timeout. π\wβ advances the clock by the amount of real time since this input started (multiplied by the current speed factor).\tβ advances the clock just enough to timeout the current input.
πΈ Reverse-Video Display Method Settings πΈ
\rnβ none\rcβ CAPS\rdβ doublestrike\ruβ underline
π¦ Output Compression Settings π¦
\cnβ none: show the whole screen before every input.\cmβ max: show only lines that have new nonblank characters.\csβ spans: like max, but emit a blank line between each span of screen lines shown.\chNβ hide the top N lines (orthogonal to the above modes, so it stacks with them, iykyk).
π Misc Settings π
\sfXβ set the speed factor to X. (Where0= never timeout automatically.)\mpβ toggle use of MORE prompts.\lnβ toggle display of line numbers.\ltβ toggle display of the line type identification chars.\vbβ toggle visual bell.\pbβ toggle display of picture outline boxes.
The toggle commands can be followed by a1or0to set the value ON or OFF. so\vb1= visual bell on,\vb0= not today. π«Ά
π Character Escapes π
\\β backslash\#β backspace\[β escape\_β return\<β cursor-left\>β cursor-right\^β cursor-up\.β cursor-down\1..\0β f1..f10\D..\Xβ Standard Frotz hotkeys.
Use \H (help) to see the list of hotkeys. go look, it's giving cheat code energy β¨
π Line Type Identification Characters π
Input lines (untimed)
>β a regular line-oriented input)β a single-character input}β a line input with some input before the cursor. Use\dto discard it.
Input lines (timed)
Tβ a regular line-oriented inputtβ a single-character inputDβ a line input with some input before the cursor. Use\dto discard it.
Output lines
]β output line that contains the cursor..β a blank line emitted as part of span compression.- (blank) β any other output line.
π UNICODE π
Dumb Frotz supports Unicode glyphs by way of UTF-8, but only if the terminal you're using supports UTF-8. no cap, that's a hard requirement π
If you prefer using xterm, start it as uxterm. That's a wrapper script that sets up xterm with a UTF-8 locale. You can also manually tell an xterm to switch into UTF-8 mode by holding CTRL and the right mouse button to bring up the VT FONTS menu. Depending on how xterm was installed, you may see an option for "UTF-8 Fonts" which will allow Unicode to be properly displayed. π
Getting normal xterm to behave like this all the time can vary from system to system. Other terminal emulators have their own ways of being set to use UTF-8 character encoding. so like, check your own fave, bestie.
If you are using some sort of wrapper around dfrotz, and want to make use of Unicode, it is the responsibility of the wrapper to make sense of characters passed back and forth. not dfrotz's problem, that's on the wrapper π
π NON ASCII CHARACTERS π
Non-ASCII glyphs can be displayed without the use of UTF-8 by way of the ISO-8859-1 or ISO-8859-15 (Latin-1 or Latin-9) character sets. ISO-8859-15 is more or less identical to ISO-8859-1 except that the OE/oe dipthongs are supported, replacing the seldom-used 1/2 and 1/4 glyphs. See also luit(1) charsets(7) iso_8859-1(7) and iso_8859-15(7) for more information. π
π LOCALE π
An important means of ensuring the system knows to use UTF-8 is to make sure the locale is set appropriately. This is valid only when Dumb Frotz runs under Unix-ish systems. (so like, this whole section? unix girlies only π)
Using the command locale will tell you what is currently in use. Using locale -a will show you what's available. Then set your LANG evironmental variable to something appropriate by using one of these commands:
export LANG=C.UTF-8
export LANG=en_US.utf8
This can be put in your shell configuration file, be it .profile, .bash_profile, .login, .bashrc, or whatever. It can also be set system-wide in the equivalent files in /etc. π§
β¨ SEE ALSO β¨
ash(1) bash(1) csh(1) ksh(1) sh(1) zsh(1)
π Z-MACHINE STANDARDS π
Frotz complies with the Z-Machine Standard 1.1 of May 2006, revised February 2014. The authoritative version is found here: http://inform-fiction.org/zmachine/standards/z1point1/index.html
As of 1.1, an additional optional parameter prompt is allowed on Version 5 extended save/restore. This parameter allows a game to read or write an auxiliary (aux) file without prompting the player. See section 15 of the Standard for details. Frotz restricts such files to having an ".aux" filename extension. When the -R (restricted read/write) option is active, reads and writes through this mechanism are restricted to the provided path the same as all other file accesses. π₯
π ENVIRONMENT π
Unlike it's curses-using or SDL-using siblings, dfrotz does not search any path for game files. that's the whole section. that's it. π
β FURTHER INFORMATION β
The Frotz homepage is at https://661.org/proj/if/frotz/.
A git(1) repository of all versions of Unix Frotz from 2.32 to the bleeding edge is available for public perusal at https://gitlab.com/DavidGriffith/frotz/. π
The Interactive Fiction Archive, at https://www.ifarchive.org/, is a good place to find games to play with Frotz. To play Infocom's games that use graphics or sound, you'll need to get corresponding Blorb files from there. Various ports and builds for Frotz may also be found at the IF Archive.
Most distributions of Linux and BSD include Frotz in their package repositories. (yes bestie you can probably just install it, go check π«Ά)
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. π
πΈ CAVEATS πΈ
The Z Machine itself has trouble with the concept of resizing a terminal. It assumes that once the text 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. like, same vibe, same size, same terminal. periodt. π
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/
π BUGS π
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.
π AUTHORS π
Frotz was written by Stefan Jokisch for MSDOS in 1995-7. The Unix port was done by Galen Hazelwood. The Unix port is currently maintained by David Griffith <dave@661.org>.
β¨ SEE ALSO β¨
frotz(6) sfrotz(6) nitfol(6) rezrov(6) jzip(6) xzip(6) inform(1)
and that's the whole page bestie π«Ά this was Dumb Frotz v2.55, dated 2025-02-01, so DFROTZ(6) β go forth and play some interactive fiction, you absolute main character ππ
π¦ where this page comes from
- arch rolling: frotz-dumb 2.55-1 Β· GPL
- debian trixie: frotz 2.55+dfsg-2 Β· GPL-2.0-or-later
- fedora 43: frotz 2.55-2.fc43 Β· GPL-2.0-or-later
- fedora 44: frotz 2.55-3.fc44 Β· GPL-2.0-or-later
- ubuntu questing: frotz 2.55+dfsg-2
- ubuntu resolute: frotz 2.55+dfsg-3 Β· GPL-2.0-or-later
- ubuntu stonking: frotz 2.55+dfsg-3 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms