XFROTZ(6)

πŸ“¦ version 2.55, in fedora 43, fedora 44

πŸ’– XFROTZ πŸ’– (section 6 of the Games Manual, bestie)

okay so. hi. you're about to meet xfrotz, an interpreter for Infocom and other Z-Machine games with an X11 interface, and honestly? she's a whole vibe. let's get into it πŸ¦‹


✨ NAME ✨

xfrotz β€” the interpreter for Infocom and other Z-Machine games (X11 interface, periodt).


🌸 SYNOPSIS 🌸

xfrotz [options] file [blorb_file]

So like, you gotta give at least one file on the command line. That file 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 is the little bundle where audio, graphics, and other stuff get wrapped up together with the game into one single file β€” and it can also optionally hold the Z-Machine executable inside it too. Iconic, honestly.

If you hand it a plain Z-code file, Frotz will go looking for a Blorb file with the same base name but an extension of .blb, .blorb, or .zblorb, and load it if it finds one. πŸ‘‘

If the file you gave it is a Blorb file, then Frotz checks whether a Z-code file is contained within. If not found? Frotz will complain and exit. like, it will simply not be doing that today πŸ’€

You can also supply an alternatively-named Blorb file as the optional second parameter of the command line invocation.

And hiii, heads up: if you wanna play any of the Infocom games that use sound or graphics, you'll need a corresponding Blorb file from the Interactive Fiction Archive. See FURTHER INFORMATION below. 🫢


πŸ’… DESCRIPTION πŸ’…

The xfrotz program is an Xlib-based interpreter for Z-machine code β€” that's the byte code used by Infocom games and, more recently, Inform. xfrotz supports versions 1 through 8 of the format, and it uses the standard Quetzal format for its saved games. no cap.

xfrotz supports Version 6 graphical games. Right now it supports color, and graphics (in the .mg1 format only) by way of Blorb archives or by parsing Infocom's original files. Sound is supported through OSS. she does it all πŸ’–


⭐ OPTIONS ⭐

Okay bestie, listen. In each of the following options that enables some feature, replacing - with + explicitly disables that feature, overriding any X resources. Also, every option has a corresponding X resource, which is listed in parentheses right after the option name. slay.

  • -aa β€” (class WatchAttribute, name watchAttrAssign) Enables watching of attribute assignment.
  • -at β€” (class WatchAttribute, name watchAttrTest) Enables watching of attribute testing.
  • -bg <color> β€” (class Background, name background) Sets the default background color. In addition to the standard X color specification formats, xfrotz supports the format z:num, which refers to a z-machine color from 2 to 9.
  • -c <number> β€” (class ContextLines, name contextLines) Specifies the number of context lines used. When scrolling large amounts of text, xfrotz pauses after each screenful with a [MORE] prompt; this option specifies how many lines of a previous screen it'll keep at the top of the next screen.
  • -fg <color> β€” (class Foreground, name foreground) Sets the default foreground color. See -bg above.
  • -fn[-z|[f][b][i]] <font name> β€” (class Font, name font[Z|[F][B][I]]) Sets the fonts to be used for various styles. For example, -fn-fbi sets the font for fixed, bold, italic text, and -fn-z sets the z-machine "picture font," which is used in Beyond Zork and Journey.
  • -i β€” (class IgnoreErrors, name ignoreErrors) Ignore runtime errors. This can be useful when running xfrotz with buggy story files which cause fatal errors. (buggy story files?? not the vibe, but okay 😭)
  • -lm <number> β€” (class Margin, name leftMargin) Sets the left margin.
  • -L <filename> β€” (class LoadThis, name loadthis) When the game starts, load this saved game file.
  • -ol β€” (class WatchObject, name watchObjLocating) Enables watching of testing the location of objects.
  • -om β€” (class WatchObject, name WatchObjMovement) Enables watching of object movement.
  • -p β€” (class Piracy, name piracy) Enable branching on the @piracy opcode. This opcode is seldom used.
  • -R <path> β€” (class Restricted, name restricted) Restricted read/write. Reading and writing files will be restricted only to the provided path. Ordinarily xfrotz will write or read its saves, transcripts, and move recordings in whatever path or directory the user provides when the SAVE, SCRIPT, or RECORDING commands are given. This can be undesirable if xfrotz is run in a restricted environment, by a front end, or by a chatbot. This option will cause xfrotz 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. πŸ•΅οΈβ€β™€οΈ
  • -rm <number> β€” (class Margin, name rightMargin) Sets the right margin.
  • -rs <number> β€” (class RandomSeed, name randomSeed) Set the random seed. By default, the random number generator is initialized based on the system clock; this lets you make the random number generator predictable, for use in recorded scripts or debugging.
  • -sc <number> β€” (class ScriptColumns, name scriptColumns) Set the transcript width (default 80). Set to 0 to disable line splitting in transcripts.
  • -t β€” (class Tandy, name tandy) Set the z-machine's Tandy bit, which affects the behavior of certain Infocom games. For example, Zork I pretends not to have sequels, and Witness has its language censored. (the DRAMA 😳)
  • -u <number> β€” (class UndoSlots, name undoSlots) Set the number of undo slots available. The default number is 25. Note that many Infocom games do not support an "undo" command, and most Inform games do not allow more than one "undo" at a time. Because of this, you may need to use the undo hotkey instead (see below).
  • -x β€” (class ExpandAbbrevs, name expandAbbrevs) With this option enabled, xfrotz 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. ⚠️
  • -xrm <resources> β€” This allows setting resources on the command line.
  • -zs <level> β€” (class ZStrict, name zStrict) Set the reporting level of "Vile Zero Error From Hell" bugs. The possible levels are: 0 to print no error messages, 1 to print just one error message and ignore subsequent errors (the default), 2 to print all error messages, or 3 to exit with a fatal error. Symbolic values of never, once, always, and fatal, respectively, are also accepted.

πŸŽ€ RESOURCES πŸŽ€

xfrotz's resource class is XFrotz, and its resource name is the base name by which it was invoked, usually xfrotz.

In addition to the X resources listed above, there's one more set of resources: by setting colornum (class name Colornum) to the name of a color, you can change the meaning of the z-machine colors. Note that here the z:num syntax is not accepted. πŸ™…β€β™€οΈ


🌈 Z-MACHINE STANDARDS 🌈

Frotz complies with the Z-Machine Standard 1.1 of May 2006, revised February 2014. The authoritative version lives 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 🧚

xfrotz supports the INFOCOM_PATH environment variable. This is a colon-separated list of pathnames in which xfrotz will search for the given story file. Any additional files required β€” like graphics files, sounds directory, or blorb files β€” must be in the same directory as xfrotz finds the story file. ✨


πŸ‘‘ HOTKEYS πŸ‘‘

xfrotz supports several "hotkeys," which interrupt the currently running game to set options or perform certain actions.

  • Mod1+D β€” Sets debugging options by prompting the user. These options are equivalent to specifying -aa, -at, -ol, and -om on the command line.
  • Mod1+H β€” Lists available hotkeys.
  • Mod1+N β€” Starts a new game. Equivalent to the restart command supported by most games.
  • Mod1+P β€” Starts or stops playback from a recorded script.
  • Mod1+R β€” Starts or stops recording player input into a file.
  • Mod1+S β€” Sets the random number generator seed.
  • Mod1+U β€” Undoes one turn.
  • Mod1+X β€” Exits the currently running game.

πŸ”₯ 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/. (bleeding edge?? she's giving main character energy fr fr πŸ’…)

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. 😌

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 😭

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 πŸ’€

  • If run on an 8-bit display, xfrotz will most likely leak the entire color palette, especially if displaying graphics. (not the palette leaking 😭)
  • The window size is fixed at 800x600, with pictures scaled to match; this scaling is hard coded. Also, xfrotz depends on backing store instead of saving the screen's state.
  • If different fonts have different heights, the display might look a bit strange, and things might not line up as they should. This is especially apparent in menus.
  • In order to change the fonts used, you would usually have to specify at least 4 fonts (for normal, bold, italic, and bold italic). This is extremely cumbersome. πŸ™ˆ

okay that's part 1 and there's more coming bestie, so don't go anywhere β€” πŸ’œ

πŸ‘‘ AUTHORS πŸ’–

Okay so the origin story, because bestie deserves the lore:

  • Frotz was written by Stefan Jokisch in 1995-7. Iconic behavior honestly, a whole era.
  • xfrotz is an Xlib port written by Daniel Schepler, based in part on the Unix port by Galen Hazelwood and on WinFrotz by Rich Lawrence. A whole collab, the group project that actually ate. πŸ’…
  • The Unix port is currently maintained by David Griffith <dave@661.org> β€” go say hi, be normal about it 🫢

🌈 SEE ALSO ✨

The friend group, the extended universe, the "if you liked this you should also stream…" section, no skips:

Go read them all, collect them like stickers, you'll be so smart fr fr πŸ“šπŸ’œ


πŸŽ€ And that's the whole page bestie, you made it to the end, lowkey proud of you. This was X11 Frotz v2.55, dated 2025-02-01, filed under XFROTZ(6). πŸŽ€

Now go play some interactive fiction, you've earned it. mwah πŸ’–βœ¨

πŸ“¦ where this page comes from