Hacker News new | past | comments | ask | show | jobs | submit login
ZZT: Epic’s First Game (howtogeek.com)
176 points by mariuz on Feb 22, 2021 | hide | past | favorite | 59 comments



ZZT holds a special place in my heart. I played the shareware "Town of ZZT" as a teenager, made my own (very incomplete) worlds, and had fun with the programming language, ZZT-OOP -- a very quirky beast.

Every few years I have a silly notion I want to write a similar game but with a real programming language like Lua (or one of my own creation). Then I sketch up the easy stuff for a bit, but give up as soon as it gets hard. :-)

I think there's been something of a resurgence of ZZT stuff in recent times, thanks in no small part to Adrian Siekierka's work, particularly his "Reconstruction of ZZT", a reverse engineering of the lost Turbo Pascal source code. That project is incredible to me -- the reconstructed source code, when compiled with Turbo Pascal 5.5, compiles to an executable file that's byte-for-byte identical to the original ZZT.EXE. His description is here: https://blog.asie.pl/2020/08/reconstructing-zzt/

One fun thing I did do was take Adrian's Pascal source code, and write a Pascal-to-Go transpiler to produce a Go version of the same. It kinda works: https://benhoyt.com/writings/zzt-in-go/

There's also a fully functioning Rust port, which was written before the reconstructed source was available: https://github.com/yokljo/ruzzt


I played ZZT a lot, and found that you could unlock the other levels with a hex editor by just changing their name in the binary. From there, you could open it up in the editor and figure out how they implemented a lot of their stuff. ZZT-OOP was very quirky, but so cool for the time!


I went back to this since I was just a wee lad when I did this, and it's not quite what I remembered but I was close. You have to change the string "SECRET" in the header to anything else. At this point you can load the file into the board editor and see how things were done.

Here is an image of TOWN.ZZT loaded into the editor: https://i.imgur.com/mb9OFno.png

And here is the pascal string "SECRET" changed to "NECRET": https://i.imgur.com/kbh5xAm.png

I'm surprised that 12-year old me thought to do this.


To be exact, what you're editing is an array of ten 20-byte Pascal strings (so length-prefixed) which contain the world's flags. A ZZT Object can set or clear flags which are carried across boards; this mechanism was repurposed to add the "SECRET" flag, which blocks editing with the built-in ZZT Editor.

Unless... you use the "?" key to open the cheat console, and type in "+DEBUG" as a command (in ZZT 3.1+, IIRC) - then it will let you open the worlds and edit them as-is.


Yes, I dug in a bit further and found where it was checked in the editor. (at least in the reconstruction!)

https://github.com/asiekierka/reconstruction-of-zzt/blob/mas...

It looks like the SECRET flag was intended to prevent editing of both save files and built-in worlds.


The save file check is separate to the SECRET flag, but they are both meant to not be editable. (Of course, community-made external editors like KevEdit lift this restriction.)


I understand. With that being said, changing "SECRET" to "NECRET" and then saving results in a .SAV file with "SECRET" in place again.


Source reconstructions efforts are one of those things in programming that make me realise how little I know and how bad I actually am at this job!


If the Town of ZZT holds a special place in your heart, I _strongly_ recommend the Town Remix.


I also have fond memories of ZZT; my first encounter with it was a shareware disc of "SuperZZT's Monster Zoo", which I gather was a somewhat less-popular sequel with a screen that was allowed to scroll rather than paging over. Some of the fan-made worlds were really impressive in how they managed to accomplish visual and gameplay effects.


Holy crap I just figured the timeline there. 1989 he gets his first IBM compatible PC.

'91 zzt. Then in 92 they go hellishly rapid-fire - from 92 to 95 we get Jill of the Jungle, Epic Pinball, Zone 66, Solar Winds, Xargon, OMF 2097, Jazz Jackrabbit, Radix, and Tyrian.

Within the small pond of PC shareware games, every single one of those was a hit. They had some of the best 2D art and music available in PC games at the time and were solidly fun. Some of them are a bit stiff by modern standards, but they were excellent for their day.

How the hell did Sweeney go from "I just got a computer" to that in so few years?

I've wasted my life.


One clever thing Epic did was recruiting developers and artists from the European demo scene. That’s where you could find people who knew more about PC graphics and sound than practically anyone in USA, and also were relatively cheap to hire.


That does explain a lot. The music and artstyle definitely have the demoscene look to them. Also explains why the music took the center stage in terms of sound design.


Also explains the smooth scrolling performance of Jazz Jackrabbit.


Solar Winds was a very interesting game. I also remember it specifically for a planet called "Ilac" which produced medicine. Ilac means medicine in Turkish.


Man I had forgotten about all those great games. Tyrian was amazing, so was Solar Winds.


Despite ZZT being 30 years old, the Museum of ZZT (mentioned briefly at the end of the article) has attracted a small but vibrant community. Zeta sets ZZT free from DOS and DOSBox, and because Zeta can be even compiled to JS, games can be published to places like Itch.

Example: The King In Yellow Borders, a horror game: https://stale-meme-emporium.itch.io/the-king-in-yellow-borde...

The other massive shot-in-the-arm for ZZT was asiekierka's disassembly and reconstruction of the original Pascal source code: https://github.com/asiekierka/reconstruction-of-zzt (Tim Sweeney allowed the reconstruction to be released under the MIT licence.)

As an accidental 30th birthday celebration, the community remixed the first world - Town of ZZT - and Dr. Dos livestreamed the first half of it just the other day: https://museumofzzt.com/file/t/TOWNRMIX.zip

Also, Dr. Dos was recently interviewed on "Preserving Worlds", discussing ZZT, the Museum, and Zeta: https://www.youtube.com/watch?v=JhCYQI_XBl0


Since I imagine there are many HN readers that might not get it: "The King in Yellow Borders" is a ZZT inside joke. When editing a ZZT world, new boards by default are created with a yellow border of what (if memory serves me) in Unicode would be U+2593 "dark shade" blocks. A game containing boards that maintain these borders in an unironic way would generally be perceived as... well, I'd say "amateurish" but ZZT creators were generally all amateurs, so let's go with "unrefined".

(It's also a pun on The King in Yellow but that reference is explained in the itch.io page.)


In those days we called them char 178 (from Code Page 437, and possibly others).


I didn't want to show my age (any more than I already did by knowing about ZZT). Also due to said age I couldn't remember the character number in CP437... though I did remember that the shaded blocks were mysteriously separate from the solid one at 219.


Minor correction regarding Zeta: It's still technically an emulator of a DOS environment - just an incredibly bare-bones one, with enough implemented to run ZZT/Super ZZT and little more. However, being made to run a specific executable lets it do some other tricks - such as reduce input lag or introduce an "idlehack" to prevent 100% CPU usage. Zeta was designed over a year before the Reconstruction of ZZT was even a seriously entertained idea, and I'd have certainly gone about it differently had I had hindsight.

Also, Zeta is a JavaScript/WebAssembly project in this regard (the C part of the codebase is compiled to WASM, but can also produce an SDL-based desktop variant) and developed as such; not just JS!


You're absolutely correct, of course. I was more saying that Zeta allows you to get ZZT without having to own a DOS machine or be good at configuring DOSBox.


This writer must not remember the way Fortnite originally released. It has had such a weird history.

The game originally was not battle royale, and released as a paid early-access title. To this day, you still have to pony up 15$ to get access to the game as it was released back in 2017. The battle royale expansion was added after the game completely flopped on release and the absolutely insane energy around DayZ and PubG started bubbling over to the rest of the industry. Fortnite : Battle Royale was the only way at the time to play a royale-type game on a minimally spec'd machine and thus quickly became a total hit.


Wrt to the last sentence - PUBG ran like a old dog when it was in it's infancy so there was a big gap for fortnite to take.


Oh totally, and the various Arma mods that this all spawned out of were on par or even worse


Wasn’t Battle Royale, the ArmA II mod is what kicked this entire genre off? Everyone was looking for a non DayZ/non Life/RP game mode. I think you have the history backwards.


Well it's only backwards if you think DayZ had nothing to do with the start of the Arma modding craze. The Battle Royale mod you're talking about was literally called "DayZ: Battle Royale", and was based largely on the DayZ mod. The random spawn point with no gear, and gearing up by scavenging random loot was directly ripped from DayZ


Potentially unpopular opinion: I much preferred the zombie apocalypse objective game that Fortnite was in early access. Now it's just a generic battle royale.


It’s only generic if you just look at screenshots, beneath the surface it’s not generic at all! There’s really no competitive game like it, where you build your own battlefield in real-time. Each player acts like a level designer, trying to structure the level to give advantages to themselves and disadvantages to their enemies.

The fact that Fortnite is popular with kids has blinded most people to the fact that it’s the most strategically interesting competitive game to arrive in ages.


This was not my experience at all.

Building in Fortnite is a race and the gameplay is too frenetic to "design" anything. It's just a matter of building higher, quicker (or farther if you're rushing). After a while you just go through the motions.

There is no strategic depth to it and it really detracts from the strategic positioning and obstacle navigation that other BRs have, so IMO it's a net loss.


I’ll agree. As a somewhat terrible ocational player, some people can build way to fast and they aren’t fun to play against.

Fortunately I play squads and that can even the score against these architects.. it’s fun, a little silly and they keep iterating on the game to keep it from going stale .


The amount of worthwhile short games and art created with ZZT in the past has always made me feel rather astonished. That people are still making new, high-quality productions in it in the present - even moreso.

By the way - If you're a ZZT (or MegaZeux!) user from the 90s/early 00s and still have archives from that period of any kind - that is world collections, etc. - we'd love to hear more! A common misconception is that we have preserved almost all ZZT worlds ever released to the public. Unfortunately, that's not true; while it's getting better thanks to modern efforts (with hundreds of previously unknown worlds archived in the past two-three years), archives especially from the BBS and AOL-centric eras (1991-1998) remain particularly spotty.


I remember places like Zeuxworld would try to archive everything (even before DigitalMZX came around) and was impressed with the size of their library. But then I'd stumble on personal websites on places like Geocities or Angelfire where people would post their ZZT and MegaZeux worlds. The worlds on these personal sites weren't in any of the archives. I wouldn't be surprised if there were still a handful of these on the web alone. Who knows how many old hard drives out there still hold rare games and engines


For the past 2-3 years, I've been working on archiving many of these games made by the ZZT and MegaZeux communities. I do have to say, though, that the DigitalMZX administrators have already been making attempts to keep track of and locate known lost games for over a decade. As always, however, more hard drive backups and other sources would certainly help find and preserve more works!


I downloaded ZZT off a BBS when it came out, and to begin with it wasn't particularly impressive.

I remember switching into edit mode on the 'Town of ZZT', and tweaking the responses of the characters.

I was learning to program with Turbo C++ at the time, and actually it was ZZT's 'OOP' that really helped connect some of the concepts in my brain to what Objects were (although ZZT's objects were really sort of Actors that responded to, and could send messages).

I would come back over the years, and I remember on IRC in 94' there was a pretty vibrant community writing games.

What I loved doing was exploiting various ZZT bugs. You could for instance place the player object next to another object, and the next time the player moved they would warp to the object. You could then 'zap' the player object to release them.

One thing you could do is place a stairway to another level, and place the player object on the stairway, and the player would remain on the original level, but the graphics for the other level would be overlaid on it.

I used this to make an RPG engine, where the ASCII art for different encounters were on these other levels, and there was a special level that would basically clear portions of the ascii art to reveal the selected enemy.

There were all sorts of clever hacks developers came up for checking health by converting it to torches, and back, and all sorts of other crazy things.


I went to highschool with Tim and remember when he was writing this in his parents basement while going to UMD. Little did we know what would come from his tiny shareware business.


I'd like to ask a fairly specific question as a ZZT archivist/researcher; it's okay if you don't remember the answer.

Based on interviews with Tim Sweeney, it is said that he would let other people playtest pre-release versions of ZZT. What wasn't clear from the context is if anyone else ever had their own copy of these pre-release versions, which have been for a long time - due to some features and traits present in some of the pack-in worlds which were not possible to achieve with the editor as released - a source of speculation in the community. Do you happen to have any recollection of that?


Any memories of your interactions with him that you wouldn't mind sharing?


That's amazing! Were you friends with him?


If curious, past threads:

The Reconstruction of ZZT - https://news.ycombinator.com/item?id=22609474 - March 2020 (39 comments)

Museum of ZZT - https://news.ycombinator.com/item?id=17656822 - July 2018 (14 comments)

The Last ZZT Disk - https://news.ycombinator.com/item?id=6772696 - Nov 2013 (6 comments)

zztmmo - classic zzt game engine + node.js + jQuery - https://news.ycombinator.com/item?id=1323888 - May 2010 (6 comments)

Others?


I have so many good memories of being a part of the amazing ZZT community and the surprisingly solid games a bunch of teenagers made for fun (burger joint, november eve, the zelda trilogy), as well as making my own crappy little games for friends to play.

The engine for ZZT was so quirky with lots of limitations, so it was fascinating to see the ideas that people came up with to make elaborate games like RPGs, survival horror, etc.

People would ship games they called toolboxes, which had unique and interesting objects or unnaturally colored blocks that you could use for your own games.

There was a series called ZZTV that was an anthology of small games, stories, and teenage rants https://museumofzzt.com/article/422/closer-look-zztv-3


>People would ship games they called toolboxes.

The term was "toolkits". While most probably followed the convention due to Alexis Janson's 1994 Super Tool Kit, or STK - which utilized hex editing to unlock far more color variants than the engine itself offered - there were actually earlier, based on using in-world interactions to get a more limited set of color variants - such as "Tim's Toolkit" from 1992.



Despite what the article said about no programming required, ZZT was a very fun early programming environment. The creatures in the game were literally called Objects and passed messages to each other to activate each other's functions to store information, move, sing, shoot, etc. By doing this in conjunction with the easy level builder, it was possible to manage fairly complex world and story state. Alan Kay may have approved, if he ever saw it.


I learned a fair bit from ZZT, maybe more than I did from MegaZeux - even if I did find the latter more fun to build stuff in, mainly just because it was more capable overall.


I was going to say that ZZT-OOP was the first language I ever programmed in, but then I remembered poking around inside `GORILLA.BAS` to figure out how to make my own game, and writing a custom zone in DikuMUD's scripting language for my local BBS (age 11 or 12?). Extending games was my entry to programming, and it probably shaped a lot of opinions I have about how open software should be.


ZZT was (is?) amazingly accessible and versatile. I created many worlds in it, most small, some big. I even tried to emulate the classic 1983 DOS game Digger and got pretty far before running into the limits of what it could do.

I won't say I learned programming from it, because that started with GW-Basic, but it definitely expanded my understanding at a crucial time in my development.


Worth reading the Boss Fight's book on ZZT: https://www.amazon.com/ZZT-Boss-Fight-Books-Book-ebook/dp/B0...

The book is more of a personal account, but it does a great job placing ZZT in a time that was pre-Internet and pre-creator tools (for most people) and how it was capable of empowering people in ways that were not common before then.


I enjoyed the story of how he chose the name for the game. When I ran an online marketplace, companies would start to change their names to add numeric characters to the front in order to show up first in their listings. There's a reason, for example, that there are so many businesses called A1.

My solution when getting hit with calls every week was a custom sort to push numeric names to the back end of the search results.


UnrealEd was originally written with Visual Basic with a rendering core with C/C++. I was astonished to find out about the Visual Basic part.


>try it out using this neat HTML5-based emulation

Click on the link and get met with an "Unable to load Adobe Flash plugin" box. Not HTML5 so much I think. :)


ZZT Ultra is an older project to try and re-implement ZZT in ActionScript 3; it did receive an HTML5 port attempt a few years later, though.

The best way to play ZZT on the web currently is to use the dedicated Zeta emulator; it's integrated with the Museum of ZZT, as well as used by most ZZT-based games published on Itch.


I had way too much fun building levels and playing this game growing up. I loved these types of games where you could focus on building and trying out different constructs without any goal in mind.

I wish I had known about ZZT-OOP. I had no clue that was underneath it all.


Ah ZZT, I spent so much time playing and coding ZZT games. So much fun.

I still have my original ZZT 3.5" floppy disk, along with the cardboard map it came with.


I got interested in programming partly because of ZZTOOP, the built-in programming language that you could use to give interesting behavior to objects in the game.


Recently I recalled an extended-ASCII action game from the era that wasn’t ZZT, but I can’t remember anything else.

Anyone know what I might be thinking of?


Megazeux?


Did ZZT allow consumers to use other programmers' programs on their programming system so that these other programs could be run within ZZT or was the ZZT platform an unethical and walled garden? Was the walled garden an antitrust violation? Why were other "app stores" not allowed?!


zzt allowed you to do anything you wanted, same with unreal and unreal script




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: