TAVERN is a VM and authoring system for text adventure games. It is also fully public domain. There is a reference implementation in C, although full documentation is available to allow other implementations.
The programming language used is Forth-like, although it is also possible to make other authoring systems that can target the TAVERN VM. At this time, although the compiler is written, the "standard adventure library" is incomplete (anyone who wishes to help may do so, however). (The author also thought that a future version of ZILF could perhaps also be capable of targeting TAVERN, although so far this is not done.)
It is designed such that it could be compatible with old computers as well as new ones.
To compare with other systems such as Z-machine and Glulx, here is a list of some of its features:
- A vocabulary table (similar to Z-machine), but it is not stored in addressable memory; it is separate.
- Bank switching. A story can therefore include a large amount of text (and possibly other data), even if the computer lacks sufficient RAM.
- Feature testing, with the FEATURE.SET and FEATURE.HNT lumps, and optionally a compatibility script that comes with the interpreter. You can detect compatibility without needing to attempt to execute the story file.
- Extensions to the system are supported; you can use FEATURE.SET and the FEATURE? instruction and compatibility scripts to determine compatibility.
- Customizable status panels (an optional feature).
- Formatting controls are inline with the text, rather than being separate commands like Z-machine and Glk.
- A better way of doing computer speech (an optional feature).
- The entire story and all of its resources is normally stored in one file (a Hamster archive). Unknown lumps can simply be ignored.
- The CATALOG.RDF lump, which contains metadata which is not used by the interpreter nor used by the game.
- Accelerated functions, similar to Glulx, although they are not defined dynamically, and do not require any new opcodes; it instead uses lumps, which will be ignored by an implementation which does not support them; the game will still work even if they are not supported.
- Cross game variables (an optional feature).
- Alternate character set (an optional feature).
- Five standard text styles: "normal", "title", "fixpitch", "reverse", and "emphasis". Of these, "reverse" is the only one which isn't defined in Glk.
- Data stack is shared between all functions (like in Forth), rather than being a separate stack frame per function (like Z-machine and Glulx).
A portable TAVERN story file is a Hamster archive. To determine the IFID of a portable TAVERN story file, look for the lump named "UUID"; its contents is the IFID in text format.
Maybe later TAVERN32 might be made up, being a 32-bit VM (rather than 16-bits like TAVERN), having some good features from TAVERN and Glulx and avoiding the bad features of Glulx.