ZZT: history and ZZT-OOP - y2kmallrat.comx

โ˜… GAME 2 ยท Installs on your phone

ZZT

The 1991 text-mode game that taught a generation to make games.

๐Ÿ“– Open the ZZT wiki
Contents
  1. Overview
  2. History
  3. How ZZT plays
  4. The editor
  5. ZZT-OOP
  6. Community and legacy
  7. About ZZTboii
  8. Phone controls
  9. Games you can play here
  10. Further reading

Overview

ZZT is an action-adventure puzzle game and game-creation system for MS-DOS, made by Tim Sweeney and released on January 15, 1991. It is played entirely in text mode: the walls, monsters, keys and doors are all characters from the PC's built-in character set, and you are a white smiley face on a blue background (โ˜ป).

What made ZZT special was not any one game. The world editor came in the box, and objects in the world could be given small programs written in a built-in scripting language, ZZT-OOP. Anyone who bought or downloaded ZZT could make their own worlds, share them as a single small file, and have other people play them. For many people it was the first time they made a game, or wrote any code at all.

ZZT is also where a famous company began. Sweeney's company, first called Potomac Computer Systems and later Epic MegaGames, is today Epic Games, the company behind the Unreal Engine.

History

Origins

Tim Sweeney began ZZT in 1989โ€“90, working from his parents' house in Potomac, Maryland. It started as a text editor written in Turbo Pascal; to make the project more fun he added game-like elements to it, and that grew into ZZT. He sold it under the name Potomac Computer Systems.

The name ZZT does not stand for anything. It was chosen because it would sort last alphabetically in shareware catalogs and on bulletin board file lists.

Shareware

ZZT was distributed as shareware. The first world, Town of ZZT, was free to copy and play. The other official worlds, Caves of ZZT, Dungeons of ZZT and City of ZZT, were sold by mail order. Because the free version already included the editor, players could make and trade their own worlds right away, which is a large part of why ZZT spread.

Epic MegaGames

Around the end of 1991 Sweeney renamed the company Epic MegaGames, a name meant to sound bigger than a one-person business. ZZT's success pushed the company toward publishing shareware games, and Epic grew from there. Super ZZT, a follow-up that uses larger boards which scroll as you move, was also released in 1991 (version 2.0 followed in 1992).

Community, then silence, then revival

Epic moved on to other games, but ZZT's community did not. Fans kept making worlds, traded them on bulletin boards, disks and later the web, and built their own tools. Today the Museum of ZZT collects and preserves the community's worlds. In 2019 the Zeta emulator made ZZT easy to run on modern computers and in browsers.

On March 15, 2020, Adrian Siekierka (the author of Zeta) published the Reconstruction of ZZT: a rebuild of the Turbo Pascal source code of ZZT 3.2 whose output is byte-for-byte identical to the original program. It was released with Tim Sweeney's blessing under the MIT license, which means ZZT's engine and documentation can now be freely used, studied and built on.

How ZZT plays

A ZZT world is a set of boards. Each board is one screen, 60 characters wide and 25 tall, with a sidebar showing your health (you start at 100), ammo, torches, gems, score and the keys you carry. You walk around the board, shoot, solve small puzzles and talk to characters. Boards are connected by passages and by the board edges.

Things you will meet

KindWhat they do
GemsCollect them for score and a little health.
Ammo and torchesAmmo lets you shoot. Some boards are dark, and a torch lights up the area around you for a while.
Keys and doorsA key opens the door of the same colour.
Scrolls and objectsTouch them to read a message or talk to a character. Objects run ZZT-OOP programs and can do almost anything.
PassagesDoors that take you to another board.
EnergizersMake you briefly invincible.
Boulders, sliders, pushersThings to push, and things that push back: the building blocks of puzzles.
Conveyors, transportersMove you or the things around you.
Water, forests, breakable wallsWater blocks you (but not bullets), forests can be walked through, and breakable walls can be shot away.
Lions, tigers, bears, ruffiansChasers and shooters of different kinds and tempers. Bears wait until you come near.
Centipedes and spinning gunsSnakes of linked segments that follow you, and turrets that spin and shoot at you when you line up with them (and in random directions otherwise).

Keys you press in ZZT

KeyWhat it does
โ† โ†‘ โ†’ โ†“Move. Walking into an object touches it.
Shift + an arrowShoot in that direction.
SpaceShoot in the direction you last moved.
TUse a torch.
PPause. Move to carry on.
BTurn the sound on or off.
SSave the game.
HOpen the help pages.
Esc or QQuit (it asks first; answer Y or N).
EnterChoose in menus and message boxes.
P W R E S H on the title screenPlay, pick a World, Restore a saved game, open the Editor, change game Speed, see High scores. Also A About and Q Quit.
?Open the debug console (used for cheating and testing).

The editor

Pressing E on the title screen opens the board editor. You choose a kind of thing from a menu, pick a colour and a character, and place it on the 60ร—25 board. Everything in the game was made this way, including the official worlds, so there is no gap between "playing" and "making": you can open any world, look at how it was built, and change it.

Whole worlds are saved as single .ZZT files, and a saved game is a .SAV file. That made worlds tiny and easy to share. It also made them easy to learn from.

ZZT-OOP

ZZT-OOP (ZZT Object-Oriented Programming) is the small scripting language built into ZZT. You write a program for an object in the editor, and the object runs it as the game plays. Objects can talk, walk, shoot, give or take items, play music, change the board and send messages to each other. Most of ZZT's characters, shops, doors, puzzles and cutscenes are ZZT-OOP programs.

This is a short guide. For every command, the engine details and working recipes, see the ZZT Wiki.

How a program runs

  • Every object has a cycle that sets how often it gets a turn (#CYCLE). On each turn it runs commands from where it left off, one after the other, until it moves, waits, or ends.
  • A program is a list of lines. What a line does depends on its first character (the table below).
  • Objects talk to each other with messages. A message jumps to a label: a line that starts with a colon, such as :touch.
  • When the game itself does something to an object, it sends it a system message: TOUCH (the player walked into it), SHOT (a bullet hit it), BOMBED, THUD (it ran into something) and ENERGIZE (the player picked up an energizer; every object gets it). Add a label with that name to react.

Line types

Line begins withMeaning
@nameGives the object a name so other objects can message it. Must be the first line.
:labelA label: where a message jumps to.
#commandA command (see below).
/directionMove in that direction (shorthand for #GO).
?directionTry to move that way once. If it is blocked, give up for this turn (unlike /direction, which keeps waiting).
'commentA note for yourself. It does nothing.
$textCentered white text, for titles in a message box.
!label;textA clickable choice in a message box. Choosing it sends label.
anything elsePlain text, shown to the player as a message (or as a scrolling box when there are several lines).

Commands

CommandWhat it does
#SEND labelJump to a label. #SEND name:label messages another object; #SEND ALL:label and #SEND OTHERS:label message every object, or every object but this one.
#GO directionMove one step, pushing things out of the way.
#TRY direction [label]Move if the way is clear; if blocked, send the optional label.
#WALK directionKeep moving that way on every turn until told otherwise.
#SET flag / #CLEAR flagTurn a named flag on or off. Flags are yes/no memory for puzzles.
#IF [NOT] condition [THEN] labelSend a message if a flag or condition is true (or, with NOT, false).
#GIVE item amountGive the player AMMO, TORCHES, GEMS, HEALTH, SCORE or TIME.
#TAKE item amount [label]Take an item. If the player doesn't have enough, send the optional label instead.
#SHOOT direction / #THROWSTAR directionFire a bullet or throw a star.
#PUT direction kindPlace a thing on the board next to the object.
#CHANGE kind kindTurn every thing of one kind on the board into another.
#BECOME kindTurn this object into something else.
#CHAR numberChange the character the object is drawn with (1โ€“255).
#CYCLE numberSet how often the object gets a turn (1 or more; 3 is normal).
#PLAY musicPlay a tune (see below).
#LOCK / #UNLOCKStop or allow incoming messages.
#ZAP label / #RESTORE labelSwitch a label off (turn it into a comment) or back on.
#BIND nameShare another object's program.
#IDLE / #RESTART / #END / #DIEWait a turn / start the program again / stop running / vanish.
#ENDGAMETake away all the player's health.

Directions and conditions

Directions are N, S, E, W (or NORTH, SOUTH and so on), I (stay), SEEK (toward the player, or away while the player is energized) and FLOW (the direction the object is currently walking, set by #WALK). Modifiers change a direction: CW (clockwise), CCW (counter-clockwise), OPP (opposite), RNDP (a random perpendicular), RNDNS (north or south, at random) and RNDNE (north or east).

Conditions for #IF are ALLIGNED (lined up with the player, spelled that way in the language), CONTACT (touching the player), BLOCKED direction, ENERGIZED, ANY colour thing (for example ANY BLUE KEY), or the name of any flag you have set.

Music

#PLAY takes a string of notes. Letters A to G are notes, X is a rest, # makes a note sharp and ! flat. + and - move up and down an octave. Durations are set by T (32nd), S (16th), I (8th), Q (quarter), H (half) and W (whole), and a . after a duration letter makes the notes that follow it half as long again (q.cde), while 3 makes them triplets. With no duration letter, notes are very short (T). The digits 0 to 9 play drum sounds.

Examples

A sign that talks. The program ends right away and waits; touching it jumps to :touch. The #end after the choices matters: a label line does not stop the message box, so without it the next text would show too. Press โ†“ to the choice, then Enter.

@sign
#end
:touch
$Welcome to the village!
Walk with the arrow keys.
!more;Tell me more
!bye;Goodbye
#end
:more
Gems give you health. Keys open doors.
#end
:bye
Safe travels!

A guard that patrols. It tries to step east three times, then west three times, forever.

@guard
:patrol
?e
?e
?e
?w
?w
?w
#restart

A shopkeeper. It takes five gems and gives a torch, or says what is missing.

@shop
#end
:touch
#take gems 5 short
Thanks! Here is a torch.
#give torches 1
#end
:short
Come back with 5 gems.

A tune. A rising scale in quarter notes.

#play qcdefgab+c

Community and legacy

  • Worlds. Thousands of fan-made worlds exist, from tiny experiments to full games. The Museum of ZZT collects, preserves and discusses them.
  • Editors. KevEdit, by Kev Vance and Ryan Phillips, is a popular, widely recommended editor.
  • Emulation. Zeta by Adrian Siekierka (2019) emulates only the parts of DOS that ZZT needs, which makes ZZT run well in a browser.
  • Source. The Reconstruction of ZZT (2020) is the engine's source code under the MIT license.
  • Heirs. MegaZeux, by Alexis Janson, began as a ZZT-inspired game-creation system for DOS and is often compared with ZZT.

ZZT's long reach comes from one idea: a game that comes with its own tools and invites you to open it up. A lot of people who now make games, or software, remember ZZT as where they started.

About ZZTboii

ZZTboii is a way to play real ZZT on your phone. It runs the original ZZT 3.2 engine, via the Zeta emulator and the Reconstruction of ZZT, inside your browser. Nothing is installed and nothing is uploaded: your saved games stay in your browser on your device.

On an iPhone, open ZZTboii in Safari, tap Share, then Add to Home Screen. It then opens like an app and works offline, because everything it needs is downloaded to your phone the first time.

Phone controls

ZZT was made for a keyboard, so ZZTboii has an on-screen keyboard with a button for every key you might press. It has three pages, chosen with the tabs under the screen.

PageWhat is on it
PlayTwo thumb pads: the left one moves, the red one on the right shoots in the direction you press (this is Shift + arrow). Slide your thumb across a pad to change direction without lifting it. Below them: Esc, Enter, Space, and the keys ZZT uses: Torch, Pause, B sound, Save, Restore, World, Help, Quit, Yes, No, ? and a one-tap Load.
KeysA full keyboard for typing save names, cheats and editor commands. โ‡ง Shift, Ctrl and Alt are sticky: tap once to use them for the next key only, tap twice to lock them on.
MoreF1โ€“F10, Home, End, PgUp, PgDn, Ins, Del, Tab, plus extra arrows.

The View button switches between the board, the sidebar and the whole screen, and โ˜ฐ opens the menu. Turn your phone sideways and the board fills the screen with the keys floating over it. ZZT shows its prompts, such as "Save asโ€ฆ" and "End this game?", in the sidebar, so ZZTboii shows the sidebar for a moment when you press those keys.

The keyboard is a separate module driven by a plain list of keys, so the same keyboard can be reused for other simple DOS games later.

Games you can play here

  • Lighthouse by Claude & y2kmallrat.com, 2026
    Light the lamp before the fisherman's boat is lost. A small adventure in five boards.
  • Metal Saviour Bia by Agent Orange, 2020
    A shoot-'em-up through a glowing tunnel. Use the red pad to fire. Museum of ZZT page
  • Winter by myth, 1999
    A quiet, atmospheric journey. Featured on the Museum of ZZT. Museum of ZZT page
  • War-Torn by Madguy, 1998
    A moody war adventure. Featured on the Museum of ZZT. Museum of ZZT page
  • The Mask of Cortez by David Bishop, 1993
    A bold early adventure with a big colourful title screen. Museum of ZZT page
  • Dogfight by Barney9651 & Yenrab, 1995
    Air combat over the clouds. Use the red pad to fire. Museum of ZZT page
  • Land of ZZT by Ethan Fleischer, 1993
    A classic ZZT adventure, version 2.0. Museum of ZZT page
  • Svynar's Quest by Lincoln Sayger & Tony Sayger, 1999
    A 53-board fantasy quest. Museum of ZZT page
  • Preposterous Machines by Drake Wilson, 2009
    A ZZT tech showcase: tiny working machines built from objects. Museum of ZZT page
  • Anthropoid by Nuero (Random Inc.), 2001
    A three-part action adventure. Contains strong language. Museum of ZZT page

Every game belongs to its author, and each one is included with the author's permission, or under the licence stated in the game's own files.

Further reading

y2kmallrat.com · a mall of internet finds and homemade things
About this site & credits
A hand-made site of games, music and screensavers, dressed up as a Windows 98 desktop. Not affiliated with Microsoft, Nuvio, TorBox or any service mentioned. Downloads come straight from each project's GitHub releases. Links marked as referral help support this site.
Emoji art in the Nuvio collection tiles: Twemoji © Twitter, Inc. and other contributors, used under CC-BY 4.0.
ZZT: history and ZZT-OOP