Skip to main content
A cartoon depiction of the author, wearing a hoodie and smiling motd.co

ZZT Cartography

Last year my friend Allison learned a bit about a Python library called ctypes, which allows you to use compiled dynamic libraries from within Python scripts, making calls to the functions in those libraries written originally in C or C++. Allison showed me how she had managed to get this working with a compiled copy of zztlib2, a library by Kevin Vance made for the purposes of interpreting the world file format for the ZZT game creation system (which we had both used during its heyday). By using this, she was able to read information about worlds, extract text from their various components, and even draw the “boards” which made up each screen of a game by dumping them to an RGBA file format and then converting them using the imagemagick toolchain into a regular image format such as PNG.

Intrigued by the sight of the individual boards as a set of images, it occurred to me that the ZZT boards had properties that could be set that told the interpreter that if the player tried to move their character off of a given side of the screen, what board they should be moved to. By doing this, you could create a 2D plane of connected boards— a map— and most games used this to some extent.

There are no strict rules about how you set these properties. If I told ZZT that going east from Board A led to Board B, I could still tell it that going west from Board B went to Board C. However, many games tried to create actual coherent maps that made sense when drawn out in one big grid, and I thought that maybe I could actually build a data model out of that information that would allow me to automatically generate larger images that tiled the boards appropriately.

And that’s exactly what I did. The algorithm is naïve; it doesn’t work well for a number of games that “cheat” and create strange distortions in the 2D grid nor can it handle complicated cases like art (such as a staircase) implying a different 3D plane that overlaps with the rest of the world’s plane. That said, it was pretty easy to just run the script on every ZZT game available on the z2 archive, filter it down to just the maps that ended up being larger than a 2x2 grid, and then manually search through, looking for interesting maps.

So I present to you my findings; the most interesting (as determined arbitrarily by me) 2D maps created from ZZT games throughout its history. Make sure to click through for the full detail; a couple of them in particular are almost stunningly huge.

Ultimate Adventure: Part 2: The Journey to Ang-Mar

Acecaves

Battle Tech 2: Alienated

The Adventure of Bertil

Bloodlines

Boof Remix

Banana Quest

Legend of Brandonia

Carrot War

Castle of ZZT

Code Red 1

Die Anna

Fantasy World Dizzy

Dungeons of ZZT

Dragon Woods

Gem Hunter

Gem Hunter Special Edition

The Guardian

Invasion ZZT

Search for the Floating Isle

Karateka

Landing

L.O.M.E.

nightplanet

Neesboy’s Fantastic Adventure

Nightmare ZZT

Piromaze

Plankton: Undersea Adventure

Pyramid

Into the Maelstrom Part II: Hardpoint on Remulo III

Smash or Be Smashed

Shades of Gray

Starbase ZZT

Temple of Souls

Unlimited Maze Works

Winter