- Engine Choices
- Necessary Downloads
- What About DOSBox?
- Launching ZZT
- For ZZT v3.2 Users
- For ClassicZoo Users
- For ZZT v3.2 Users
- For ClassicZoo Users
- The Main Menu
- Additional Menu Options For ClassicZoo Users
- DOS Errors
- Gameplay Controls
- Unpausing The Game
- Basic Gameplay
- Lighting Torches
- Becoming Invincible
- Text and Hyperlinks
- Changing Boards
- Re-Enter When Zapped
- Time Limits
- ZZT v3.2 Cheats
- ClassicZoo Enhanced Cheats
- ClassicZoo Exclusive Cheats
- Cheating Death
- Cheating Detection
- Adding New Worlds
- Advanced Gameplay
- Using Counters For Alternative Purposes
- ?+I And Other Custom Cheats
- Using Spacebar For Actions
- Melee Combat
- Arbitrary Warps
- ZZT's Elements: Items, Creatures, and Terrains
- Subsection links for this heading are available on page two
As of writing there are two major general purpose releases of ZZT used for playing ZZT worlds: ZZT version 3.2 and ClassicZoo (version 4.35 at time of writing).
ZZT version 3.2 is the final official release of ZZT dating all the way back to 1992. It is safe to assume that ZZT v3.2 was the expected environment for almost every released ZZT world released prior to 2020, with most worlds released afterwards still targeting compatibility (and making it clear when they don't). ZZT v3.2 is an MS-DOS program and will not run on modern systems without an emulator. Today, the emulator of choice is Zeta, an emulator designed solely to run ZZT and Super ZZT, making it more lightweight than full MS-DOS emulators designed to run far larger quantities of software.
ClassicZoo is a modern source port that is under active development. Its goal is "to improve the ZZT experience while sticking close to the original engine's feel and keeping full compatibility". Today it has native releases for Windows, Linux, MS-DOS, and more. (At the time of writing there is no official Mac build.)
Other variants exist as well with changes that may or may not maintain compatibility with worlds designed for ZZT v3.2. Examples include CleenZZT which removes unwanted sounds and default messages, game-specific builds that modify behavior and limits such as Variety or Bear With Me, and general-use enhancements that seek to add additional features to ZZT intended to be used for many releases by many authors such as Weave ZZT.
For the purposes of this manual, coverage will be focused on ZZT v3.2 and ClassicZoo. Worlds that require unique versions of ZZT typically either bundle their modified executable with the rest of the files or include documentation with information on how to run their contents properly.
At this time, ClassicZoo is likely the friendlier option due to its enhancements and bug fixes. ZZT v3.2 itself is more recommended for those after the most authentic experience, warts and all.
- The latest release of ClassicZoo or ZZT v3.2
- If using ZZT v3.2 or an MS-DOS build of ClassicZoo, the latest release of the emulator Zeta is required on systems not compatible with MS-DOS programs. (Anecdotally, ZZT has been ran up through Windows XP without issue and also ran fine on Windows Vista era machines with the exception that fullscreen mode would not work. Your mileage may vary.)
This article does not cover third-party editors for ZZT or go into detail on ZZT v3.2's editor or the enhanced editor contained within ClassicZoo. If you are interested in creating ZZT worlds yourself, the editors zedit2 and KevEdit are the preferred tools for creating ZZT worlds today. ClassicZoo's enhanced editor may be useful as well. ZZT v3.2's default editor is not recommended as it lacks the ability to access many colors, elements, and settings exposed by other editors. The default editor lacks in many staple features like copy/paste support for code, block operations to reposition tiles, and has its share of bugs that can result in glitchy elements or worse: erased code.
If you have any interest in creating your own worlds for ZZT you may find these Museum of ZZT articles helpful:
- Modern Tools and Resources (2021)
- ZZT to the Masses - Publishing to the Museum and Itch.io (2020)
- ZZT Oops - Common Mistakes By Beginners(2020)
- Modern ZZT Editing With KevEdit (2017)
- The Joy of ZZT (2020)
You should also consider joining the Worlds of ZZT Discord server, where the ZZT community can be easily reached. The server is full of folks happy to provide information, help, feedback, and play testing.
What About DOSBox?
Although ZZT does indeed run under the popular MS-DOS emulator DOSBox, it does suffer from a few issues that generally make it less than ideal to play ZZT worlds with. The way keyboard input is handled in ZZT results in a significant delay when changing movement directions under DOSBox. Audio stuttering is a common occurrence. More demanding worlds will eventually bog down resulting in ZZT slowing down, often to unplayability. These issues do not occur when playing ZZT with Zeta or using non-DOS based source ports like ClassicZoo.
However, as there was a period of time in which DOSBox was the only solution for playing ZZT worlds on modern systems, a small handful of titles are designed around DOSBox's behavior. While all these worlds should still be perfectly playable outside of DOSBox, it may still be desired to play them as they were specifically intended, quirks and all. This article can help you set up a DOSBox environment for ZZT, though it should again be stated that unless a world specifies that it should be played using DOSBox, you should use a modern port or the Zeta emulator instead.
One last reason for using DOSBox are for titles that contain arbitrary code execution exploits which require specific memory layouts that vintage hardware and DOSBox can provide, but Zeta and ports cannot. These worlds are few and far between and will make it clear that DOSBox is mandatory for them to run properly.
For ZZT v3.2 Users
Extract the contents of the ZZT v3.2 zip file into a directory. Extract the contents of the Zeta zip file into the same directory. Running zeta86.exe will launch the emulator and automatically run ZZT.EXE. The zeta emulator will look for ZZT.EXE, then SUPERZ.EXE for a default program. Other programs can be ran using the commandline argument -e such as zeta86.exe -e WEAVEZZT.EXE. See the documentation included with zeta as well as the ZZTing with Zeta article for more details.
For ClassicZoo Users
Extract the contents of the ClassicZoo zip file into a directory. Run ZZT.EXE.
Several other executables may be included with ClassicZoo's zip file depending on the distribution. ClassicZoo has a dedicated executable, SUPERZ.EXE, for running Super ZZT worlds: the sequel to ZZT which never quite caught on for various reasons. The codebases share a significant overlap so while this manual will not translate perfectly between playing ZZT and playing Super ZZT, much of it is the same, and being familiar with how to play ZZT worlds will make it quite easy to adapt to Super ZZT. Other distributions may also include ZZTRUN.EXE and SZRUN.EXE. These executables are exclusively for playing ZZT and Super ZZT worlds, with the editor functionality removed entirely in order to better support systems with limited memory.
For ZZT v3.2 Users
On launch, ZZT will begin with a configuration screen. The user is first prompted user to select one of (up to) three input methods:
- [K] Keyboard - The nearly always correct option. Nearly every ZZT world is designed to be played using keyboard controls first and foremost.
- [M] Mouse - ZZT's mouse support rarely lends itself well to any given world. The player can be moved around by moving the mouse. Shooting is done by holding the left button and moving the mouse in a direction. Holding the right mouse button down and moving the mouse in a direction will cause the player to move in that direction constantly until the button is released. Worlds that expect mouse input will make it known to the player.
- [J] Joystick - ZZT's joystick support is rather limited, only supporting moving and shooting. To shoot, hold the first button down and move the joystick in the direction you wish to fire.
Note that when using non-keyboard methods of input, the keyboard is still required to perform some actions such as lighting torches. If you wish to play ZZT with a modern gamepad, using a program to translate gamepad inputs to keyboard presses will provide a better experience.
After selecting an input method, the second and final option is to select a graphics mode:
- [C] Color - The nearly always correct option. ZZT is designed for color displays.
- [M] Monochrome - Forces ZZT to only use black, white, and one shade of gray. Unless specified by a ZZT world (a rare occurrence), this option has little purpose.
And with a press of [K] and [C] you're done! Until next time. ZZT does not save this configuration requiring you to select your options every time.
For ClassicZoo Users
ClassicZoo skips ZZT's standard configuration screen entirely, defaulting to keyboard controls and color graphics automatically. These options and many more can be accessed from the main menu instead. See the next section for details.
The Main Menu
After setting your options, ZZT will open to a message window containing information about ZZT. This can be closed by pressing [ENTER] or [ESCAPE].
The default world will be loaded based on what's written in ZZT.CFG, typically Town of ZZT or Demo. The sidebar will contain a list of commands and keys to press.
- [W] World - Opens up a list of worlds to load and displays the title screen of the selected world.
- [P] Play - Starts a new game using the currently loaded world.
- [R] Restore game - Opens up a list of saved games to restore. Selecting one will automatically load the save and place you where you left off.
- [Q] Quit - Asks for confirmation before closing ZZT. You may bring up this prompt with [ESCAPE].
- [A] About ZZT! - Brings up the message window containing information about ZZT.
- [H] High Scores - Brings up a message window containing a list of high scores for the currently loaded world if one exists.
- [E] Board Editor - Opens ZZT's editor for creating new worlds or modifying existing ones. Again, third-party editors are strongly preferred.
- [S] Game speed: - Allows you to speed up or slow down the speed ZZT runs at. Most worlds are designed for the default speed of five. Those which aren't will indicate the intended speed. This value cannot be changed during gameplay in ZZT v3.2, requiring you to save, quit, adjust the speed, and then restore a save in order to change it during gameplay. Also of note is that the fastest speed is unbound, often making worlds run unplayably fast on more powerful systems.
Additional Menu Options For ClassicZoo Users
The majority of main menu options remain the same between ZZT v3.2 and ClassicZoo. A few differences between shared commands exist, and a few unique commands exist as well.
[W] World / [R] Restore game - In addition to opening the list of worlds in the current directory, ClassicZoo supports folders which can be selected to navigate to worlds and save files located in subdirectories from the working directory that contains ClassicZoo.
[B] Browse/Web - Desktop builds of ClassicZoo for modern systems add an additional menu option that lets you quickly download ZZT worlds from the Museum of ZZT. It provides options to search for worlds by title, author, company, and genre. Results will be returned (with truncated names if they are too long) and selecting a file will automatically download and extract it to a newly created subdirectory.
In addition to search functions, the web component of ClassicZoo provides a special list of recommended worlds (curated by ClassicZoo's author asie), as well as links to browse all newly created ZZT worlds and all newly added worlds to the Museum of ZZT. Lastly, an option to browse all files is available.
[A] Options/About - ClassicZoo provides a lengthy list of options as well as the ability to access the "About" text seen at startup. This includes a help section going into full details on each option, but a few worthy of highlighting here include:
- Neuromotor Assist - An accessibility option that makes gameplay turn-based. Other elements only get to act after the player has. In this mode [P] is used to wait in place for a cycle of gameplay rather than pausing.
- Video - Allows toggling between ZZT's color and monochrome video modes.
- Input - Allows selecting between keyboard, mouse, and joystick methods of input
- Volume - Controls the default output volume of ZZT's sounds
- Charset - Allows custom character sets to be used. Historically this was done with .COM files, though the Zeta emulator and ClassicZoo also support .CHR files in the format used by MegaZeux.
- Palette - Allows custom graphical palettes to be used in .PAL and .PLD format.
At times, ZZT may give a generic error message when attempting to play a world. This is most often caused by a mismatch between the world's filename not matching the world name stored within the file itself. Renamed ZZT files will have differing values causing some assumptions about filenames made by ZZT to become invalid. Usually, you can fix this issue by re-selecting the file from the world menu directly.
Once [P] has been pressed to begin playing a world, the world will begin in gameplay mode with the sidebar now displaying the values of various counters and controls for the player.
Most controls are listed on the sidebar at this time which include:
- [↑↓→←] Move - Used to move the player in four directions.
- [Shift + ↑↓→←] Shoot - By holding shift before pressing an arrow key, the player will instead shoot a bullet in that direction. While not listed on the sidebar, pressing [SPACE] will fire a bullet in the last direction the player moved.
- [T] Torch - Used to light a torch to provide light in dark rooms. This requires that the player has a torch to light in the first place. Torches can only be lit in dark rooms, and will automatically extinguish after a set time has passed.
- [B] Be quiet/Be noisy - Used to toggle ZZT's sounds off and on. The current label indicates what will happen if the [B] key is pressed, so "Be quiet" means that sound is currently on, while "Be noisy" means that it is off.
- [H] Help - Opens a message window that displays a few basic tips and information about using the keyboard, mouse, and joystick for input.
- [S] Save game - Opens a prompt to save your game. The prompt will remember the last name entered. ZZT allows you to save at any time. See the section below for more information on the dangers of when you choose to save.
- [P] Pause - Pauses the game causing everything to stop in place. When paused, the player may only move to unpause or quit the game. Pausing with this command may lead to a soft-lock. See the section below for more details.
- [Q] Quit - Brings up a prompt to confirm that you wish to end the current game and return to the main menu. As with quitting ZZT from the main menu, [ESCAPE] may also be used.
Unpausing The Game
When the game is paused, pressing [P] a second time will not unpause the game. The only way to unpause is to move the player onto a walkable tile. This means that if the player is currently surrounded by walls, objects, or other obstructions that the player can't step on, they will be unable to resume the game and soft-locked. Many ZZT worlds will surround the player with objects used to control another object rather than manipulating the player directly. Take care not to pause the game when you're surrounded!
The easiest way to avoid this issue is to use [Q] or [ESCAPE] to bring up the confirmation to quit the game instead. While this prompt is active the game is effectively paused as well, and simply declining the prompt will resume gameplay without requiring the player move.
However, new games and loaded saves start the world in a paused state! If you make a saved game while surrounded, loading that save will result in the player being unable to move and unpause the game. Take care to look before you finish saving your game. If you realize you are surrounded, pressing [ESCAPE] will cancel the save.
The number of actions the player can take in ZZT are rather small in number. The good news is that makes it very easy to go from world to world. Just dabbling with Town of ZZT and Demo will get you 90% of the way there.
In every ZZT v3.2 compatible game, no matter how complex the coding may be, you will always control the player () by moving, shooting, and interacting with elements on a given board. These include items to collect, creatures to shoot, and terrain to obstruct, push, and be pushed by the player.
Moving is done with the arrow keys to move the tile from tile to tile. Attempting to walk onto an element will cause an interaction to occur if there is one. Stepping on items will collect them, stepping on a creature will hurt the player, etc.
Most importantly, the player can touch objects by trying to move into them. If they are coded to respond to touch the object will react to this in some way. They can display messages, manipulate counters, set and clear flags, or end the game. You'll have to use the context of your surroundings to decide if an object is friend or foe. Beware, your assumptions may be wrong!
If the player has ammo, they may be able to shoot a bullet to defeat creatures. This requires that the player have one ammo, and that the number of player-fired bullets on the board not be equal to the maximum number of shots defined for the current board (which may be zero, in which case a special message is produced indicating that shots can't be fired). The maximum shots on a given board isn't displayed anywhere, so the only way to know if you can shoot is to try.
By default there is no limit, and most boards maintain that setting. Disabling shots entirely is common as well either to create a greater challenge or to keep the player from damaging scenery and possibly having to code in reactions for shooting objects that aren't intended to be shot. It is also reasonably common to restrict the player to just one bullet at a time which allows for fighting, but makes accuracy essential. Any number from 0-255 may be used for a shot limit, though values other than 0, 1, and 255 are much rarer.
If a room is a dark, the vast majority of elements won't be visible, instead being replaced with darkness (). If the player has a torch they may light one with [T] to create a small radius of light. Once a torch is lit, the torch is consumed with no way to stop it and save the remaining light it provides for later. Torches burn for roughly twenty seconds.
Very few elements are visible in darkness without the light of a torch. Only the player, passages, and torches can be found. In most worlds running out of torches in a dark environment is effectively a game over as it's so impractical to navigate in total darkness, especially if there are enemies that can't be seen.
Some worlds give the player a long lasting torch by manually setting the value of torch cycles remaining to the maximum value of 32767. This makes ZZT act as if a torch is lit for more than fifty minutes of playtime. Any game which is designed around this has to be completed in that time, as any torches lit afterwards will only burn for the standard duration.
An item known as an "energizer" () may be collected to make the player (mostly) invincible for a short duration of roughly seven and a half seconds. Once collected the player will begin to flash colors and characters with accompanying music to indicate the invulnerable state. Any creatures which would harm the player when touched will now be destroyed instead, however other forms of damage such as being caught in a blinkwall's ray or an explosion will still hurt the player.
Being energized will also have an affect on the board's creatures as well. Most creatures have an intelligence value that determines how likely they are to move towards the player rather than in a random direction. When the player is energized, a successful intelligence check will move them away from the player instead, so expect to chase down your enemies!
Text and Hyperlinks
Objects and scrolls are capable of presenting text to the player. If the text can fit on a single line, it will be displayed on the bottom of the screen in flashing colors for a few moments until it disappears on its own. (Don't worry, the flashing isn't anything too extreme, though other effects can be.) For longer messages, a message window will be opened, pausing the game until the window is closed.
Message windows can be navigated with the arrow keys. The very top of the message window contains a line dedicated to displaying the object's name if one is set. If not, it will default to "Interaction" for objects or "Scroll" for scrolls.
Message windows can have extra complexity via hyperlinks. If a line is prefixed with a purple arrow () that line is treated as a hyperlink.
Hyperlinks can be selected by pressing enter when the line has been highlighted. The current line for highlighting purposes is the one between the two sets of red double arrows (and ). Selecting a hyperlink will cause the element to jump to a new part of its code which may produce additional messages or perform any other action. You'll find them used in ZZT worlds to do things like make purchases at shops, choose dialog options, or input passwords. When you have a hyperlink highlighted, the name component of a message window will change to read "«Press ENTER to select this»"
Message windows may be closed with [ENTER] on a non-hyperlink line, or [ESCAPE] on any line of text. It is possible for an object to respond to a window being closed without a selection being made by re-opening the same window.
A glitch in how ZZT handles multiple message windows may sometimes cause blank lines of text to display the "«Press ENTER to select this»" indicator. This is a bug and hitting [ENTER] on such a line will close the window as any non-hyperlink text would. It is not possible for authors to hide hyperlinks in this manner.
A well-coded world will properly handle not selecting any hyperlink when the player is expected to make a decision. If you choose not to decide, some worlds may not handle your choice gracefully, potentially locking up or causing other issues. Be careful when trying to opt out of decisions.
Only one board is active in ZZT at a time. When you leave a board, the previous board is left exactly as it was. Boards may be changed by touching a passage (). Passages may be any color combination, not just the white on dark red shown here. Changing boards via a passage will warp the player to the new board, and pause the game, allowing you to take a moment to get your bearings before resuming the action.
Passages can have matching foreground and background colors, rendering them invisible. This is uncommon for reasons other than hiding secrets, so don't go touching every wall if you don't have reason to believe that there will be a passage somewhere.
You may be able to change boards by walking off the edge of the screen (or into the sidebar). Board connections in ZZT are arbitrary, so it's very possible for a board A to connect to the east to board B, but for board B to connect to the west with board C. In practice, this isn't used too often, but you may run into some mazes, secrets, or sometimes even shortcuts where a linear path lets you return from the end all the way to the beginning.
Changing boards by walking to a board edge will put the player on the destination board opposite the side they were just on. Since the destination tile is known in advance when walking off edges the game will not pause. Watch out for creatures waiting in ambush!
ZZT doesn't indicate board exits. A well designed world will make it apparent where they are, but more poorly designed ones may not make the connections obvious. Some games may also not align exits properly. If the destination tile on the target board is already occupied, the board won't change. (In fact, the path leading "Downtown" in the above GIF from City of ZZT is actually wider than the path back uptown, making it a good example of the mistake.)
Re-Enter When Zapped
Boards may be marked as having "Re-Enter When Zapped" set. When this is the case, being harmed by anything other than an object directly manipulating the health counter will cause the player to be returned to the tile they entered the board from when they are zapped (hurt).
(In some places ZZT refers to the player taking damage as being "zapped". This term is rarely used as there's also a zap cheat and zap command in the ZZT-OOP programming language that are all unrelated to one another.)
Be careful! ZZT provides no indication to the player when this property is set. It's up to the author to communicate this information, or for the player to find out for themselves when they take damage.
Board may also have a time limit that ticks every second (well, roughly). This information is displayed on the sidebar above the player's health in rooms that have an active timer on them. When the time expires, the player is hurt for ten health. Usually boards with time limits also enable "Re-Enter When Zapped" as otherwise the player can just keep going as the timer resets when it expires. Some boards may place passages that lead to the same board as a way to create a "checkpoint" as any reloading of the room will restart the timer.
When the time remaining reaches 10 seconds, a message will display and sound will play to alert the player that they really need to hurry up.
There is a common misconception that collecting gems gives the player more time. This is not the case, and stems from misinterpreting the "Time" text in Town of ZZT's "Prison" board as meaning that the gems will provide time, rather than to consider how much time you have left before making a detour to collect some gems.
Whether for poor design or for poor play, it's very much possible to find yourself in an unwinnable situation in a number of ZZT worlds if you're not careful! Fortunately, in addition to being able to edit worlds, ZZT offers a decent assortment of cheats to help get you out of most jams. Source ports like ClassicZoo provide a significant number of additional cheats and allow more fine-tuning of the ones found in ZZT v3.2.
To open the cheat prompt, press [?]. This will open a text entry input similar to the one used when saving a game. Entering certain commands here can perform certain actions.
Cheats are not case sensitive, though they are conventionally written in all caps. Some worlds integrate the cheat prompt into gameplay, and may need to tell the player a cheat to enter in certain situations. (See Advanced Gameplay for more information.) In this case cheats are often written in the form of "?CHEAT", with the question mark prefix used to make it clear the character should be entered on the cheat prompt. Nothing (except for one ClassicZoo specific cheat) should necessitate typing a question mark into the actual prompt.
ClassicZoo is also unique in that its cheat prompt can hold more text than it displays. This allows for longer cheats which may be required to input certain parameters.
ZZT v3.2 Cheats
|KEYS||Receive all seven colored keys.|
|DARK||Makes a bright room dark.|
|-DARK||Makes a dark room bright. Coincidentally clears a flag named "DARK".|
|TIME||+30 seconds of time.|
|ZAP||The four tiles adjacent to the player are destroyed, turned into empty spaces. CAUTION: This can allow the player and other elements to get outside the normal boundaries of the board leading to undefined behavior and outright crashes. Board edges will remain destroyed until ZZT itself is restarted.|
|+DEBUG||Activates debug mode. Displays free memory. Coincidentally sets a flag named "DEBUG".|
|-DEBUG||Ends debug mode. Coincidentally clears a flag named "DEBUG".|
|+<FLAG>||Sets a player-entered flag. (ie ?+ROPE is equivalent to an object executing |
|-<FLAG>||Clears a player-entered flag. (ie ?-ROPE is equivalent to an object executing |
ClassicZoo Enhanced Cheats (as of version 4.35)
|AMMO [X]||+X ammo. (Default 5)|
|TORCHES [X]||+X torches. (Default 3)|
|GEMS [X]||+X gems. (Default 5)|
|KEYS [COLOR]||Receive a key of the specified color. If no color is specified receive all seven colored keys.|
|HEALTH [X]||+X health. (Default 50)|
|DARK||Makes a bright room dark.|
|NODARK||Makes a dark room bright.|
|TIME [X]||+X seconds of time.|
|ZAP||The four tiles adjacent to the player are destroyed, turned into empty spaces.|
|DEBUG||Activates debug mode.|
|NODEBUG||Ends debug mode.|
|+<FLAG>||Sets a player-entered flag. (ie ?+ROPE is equivalent to an object executing |
|-<FLAG>||Clears a player-entered flag. (ie ?-ROPE is equivalent to an object executing |
ClassicZoo Exclusive Cheats (as of version 4.35)
|?||Display a list of all cheats and how to use them.|
|ENERGIZE [X]||Energize the player for X cycles. (Default 75)|
|BLINK||Enables blinking colors rather than high-intensity color backgrounds.|
|NOBLINK||Enables high-intensity color background rather than blinking colors.|
|SPEED [X]||Sets the game speed to X. If no value is provided for X, the speed may be set as if the option was selected from the main menu.|
|SHOW [ELEMENT]||Makes all elements of the provided type blink.|
|NOSHOW [ELEMENT]||Makes all elements of the provided type not blink.|
|NOSHOW ALL||Disables blink highlighting on all elements that have it applied.|
|FREEZE||Freeze non-player tiles, preventing other elements from getting a chance to act.|
|NOFREEZE||Thaw non-player tiles, allowing them to act again.|
|PASSAGE||Displays a list of all boards. Selecting one with [ENTER] will change to that board and pause the game. [ESCAPE] may be used to cancel the prompt without changing boards.|
|FLAGS||Displays a list of all current set flags.|
Note that some of these cheats are only available in ClassicZoo builds which contain an editor as the lighter builds are designed to save memory. If you're playing on vintage hardware using ZZTRUN.EXE a few of these will not work. See the ClassicZoo documentation for specifics.
When the player's health reaches zero, the game ends, and is set to maximum speed. Despite the player being restricted from most action, they can still open the cheat prompt. By using the ?HEALTH cheat, it is possible to return the player back to life. Once you're alive again the game speed can be return to normal by either saving and restoring the save or for ClassicZoo with ?SPEED to adjust the speed back to normal.
Today cheats are seen as a functional tool that can allow others to finish a world that they otherwise would not. Historically, the attitude that players shouldn't be allowed to cheat was more common. While there is no way to disable cheats in ZZT without modifying the executable in some way, some cheats can be checked for and certain worlds may end the game and/or destroy vital objects and passages if they discover the player cheated.
The most common anti-cheat implementation is to detect when the player brightens a dark room with ?-DARK. As this also clears any flag named DARK, by setting such a flag and then detecting that the flag is not currently set a world can determine that the player cheated to turn the lights on. ClassicZoo gets around this by renaming ?-DARK To ?NODARK, but ZZT v3.2 users should proceed with caution.
To a lesser extent, some worlds may also try to detect ?ZAP. This can be done by filling the board with fake walls (including black on black ones that are identical to empty tiles). When an object finds an empty tile exists on the board, the game may end. This can be avoided in ClassicZoo by using NOCLIP instead to allow the player to walk over the tiles rather than destroying them to create a path.
Detecting other cheats is far less common as it typically involves specific requirements in the world's design in order to work. As an example, a world may require the player collect seven gems. If a player cheats for gems and winds up with more than seven at any point, this can potentially be detected and acted on. Again, ClassicZoo can get around these as cheating for specific amounts of counters is possible rather than the fixed values by ZZT v3.2's cheats.
Adding New Worlds
ZZT is more than just the handful of included worlds! Over the years thousands of worlds have been created, with more being made to this day. For the full experience other worlds need to be added to ZZT so they may be played as well.
The process is as simple as downloading them from the Museum of ZZT (or other source), and extracting all files into the directory that contains ZZT.EXE. From there, they will show up in the list of available worlds from the main menu accessed by pressing [W].
Most files will contain nothing more than a .ZZT file and perhaps a text file for documentation.
For ZZT v3.2, all files must be in the same directory as the executable. For ClassicZoo, you may wish to keep your ZZT directory clutter free by placing them in folders. Filenames for both ZZT and ClassicZoo as well as folder names just for ClassicZoo must be limited to eight characters in length (See: 8.3 Filenames on Wikipedia), otherwise they may be ignored or otherwise not function correctly.
The message windows used to display world and save filenames have an upper limit of 1024 entries.
For world recommendations see The Best of ZZT series on the Museum of ZZT.
Many ZZT worlds were made with the assumption that those who were playing them were also knowledgeable ZZTers themselves. This is an unfair assumption to make, so here are a few common variations on ZZT's basic gameplay that may be useful to have some knowledge of in advance in case the world you wish to play doesn't explain things thoroughly for newcomers.
Using Counters For Alternative Purposes
ZZT doesn't offer much in the way of variables you'd see in typical programming languages. Numbers may only be stored in a few counters which are displayed on the sidebar. These have hardcoded names like "ammo" and "gems". Since these names can't be altered, many ZZT worlds will instead call these counters something else, despite what the labels read. Don't be surprised if a game has you casting spells with mana represented by score, tracking an opponent's health with torches, and storing your number of rations as gems.
Engine is the term used by ZZTers to describe the use of objects to create unique gameplay styles. Often the player is partially or fully surrounded by objects that look like arrows which translate the player's input into commands to a different object. Expect to see ZZT engines that turn ZZT into a platformer, RPG, racer, shoot-em-up, or something else you might not expect ZZT to be capable of!
Remember not to save when the player has no tile they can step on!
?+I And Other Custom Cheats
If you've looked at the section on cheats, you'll read "?+I" as being told to enter a cheat that sets a flag named "I". ZZT has a wide variety of games that are inspired by or outright conversions of LucasArts, Sierra, and other adventure games. These often use an inventory system similar to those in other games of the genre that can be accessed by using the cheat prompt.
Sometimes the system will carry over to other types of games as well. Some action games may have the player reload their weapon with "?+R", consuming a clip (a torch perhaps?) and setting ammo to a specific value afterwards.
Watch out if you make a mistake on the cheat prompt and set the wrong flag! ZZT only allows for ten flags to be set at a time, and your mistake won't be cleared by the game's code which can lead to a scenario where no flags are available and one being overwritten unexpectedly. If you make a mistake, use ?-<TYPO> to clear it! A few worlds will use clearing flags rather than setting them to avoid the issue, but setting is far more commonly encountered.
Using Spacebar For Actions
Some worlds will use the spacebar's ability to shoot in the last direction the player moved to to detect any shooting and perform an action like opening a menu. Instead of telling the player to shoot in any direction, pressing the spacebar tends to be natural. Some games may simply say to shoot in order perform an action, and your fingers will thank you if you just press space when the direction you're firing in doesn't matter.
Shooting is the intended method for the player to go on the offense against enemies, but authors will often make games where shooting is limited or not present at all. While ZZT's built-in creatures will harm the player on touch, objects don't have to and can be used to create new enemies with different methods of fighting.
The exact mechanics will differ based on how objects are coded, but keep an eye out for enemies that change between two (usually related) characters likeand . Often authors will use the character to represent when an object is vulnerable to player attacks and when the player is vulnerable to the object instead.
ZZT-OOP provides no way to force the currently loaded board to change. Due to this, ZZTers had to innovate and discovered that by duplicating a passage onto a player, the board will change to the passage's destination. This can also be done with a special board edge element as well. Due to the way duplicators are timed, it may be a few moments before the board actually changes.
As stories in ZZT got more complex, worlds frequently created cinematic boards to tell the story while the player watched. Typically these boards will put the player in a corner and block off a passage leading to the exit until the cinematic is complete.