Closer Look: ZIG

Previous Post
Next Post

Closer Look: ZIG

April 10, 2017, 11:25 p.m.

Where can I get ZIG?

ZIG and its associated worlds are available on z2, but there's no way to just browse ZIG worlds there! ZIG isn't hosted on the Internet Archive's MS-DOS collection either. You're going to have to break out Dosbox on this one.
You can't even explore the worlds on the Museem site because wow do I have better things to be working on than support for ZIG files. But you can at least browse ZIG worlds specifically on the Museum of ZZT Public Beta.



By: Jacob Hammond, with worlds by various others
R.I.P. 1997-2001

It's April, and for most people, April Fool's Day on the Internet is usually frustrating event full of good ideas for things that aren't actually happening but fans would love or sites that decide a great thing to do would be to become completely unusable for a day!

But for the Worlds of ZZT project, it's a perfect excuse to bend the rules a bit and take a lot at a lot of ZZT adjacent content! The month started off with a livestream of Super ZZT's Monster Zoo, and it's going to keep going for pretty much the entire month.

ZZT was released in 1991, and as anybody will tell you, it was pretty outdated from the start. Super ZZT shuffled things around a bit, creating a more action focused environment with large scrolling boards, and a few enhancements like additional flags, a hint system, as well as a much larger array of colors available without additional tools.

The most powerful as well as the most (read: only) successful ZZT clone was Alexis Janson's MegaZeux, released in 1994. It kept the 16-color 255-character aesthetics, but brought with it a significantly more powerful language known as Robotic, customizable board sizes, support for mod music, mouse support, sprites, and a whole slew of things over the years. It's still being developed, one of the benefits of its source code having never been lost to time.

In the late 90s however, MegaZeux as an alternative to ZZT had a few issues to overcome. Firstly it was a very picky program, and a lot of people just could not manage to get it working with their PCs. Others would suffer from a lack of audio support or only be able to get the program to run with a forked version that removed the program's editor entirely to save memory. I was unable to get a fully working copy until the early 2000s, shortly before the first Windows port became available. So MegaZeux is mostly a blind spot to me.

Of course, even if you could run MegaZeux, it had its own share of issues with creating games. ZZT's limitations are a blessing and a curse. MegaZeux's considerable freedom in comparison makes it significantly more difficult to produce something of quality.

While all this was going on, ZZT in the late 90s and early 2000s was by contrast easy to make something in, but difficult to make what you actually wanted. When trying to produce your teenage masterpiece in ZZT, you'd be dealing with flag limits, board sizes, PC speaker audio, very restrictive numbers of objects, and so forth.

And lo', Jacob Hammond saw this plight and created this "ZZT-Inspired Game Creation System" that came to be called ZIG.

"ZIG is a GCS that fills the gap between ZZT and MegaZeux. It has the simplicity and ease-of-use of ZZT, but with the power of MegaZeux."


A noble premise, and one that would serve the ZZT community well. So let's take a look at each released ZIG world and figure out why ZIG just never took off.

ZIG v2.0 demo


We'll start off with the program's included demo file, showing off several of the features ZIG has to offer to put ZZT to shame. Right away things already look more advanced than ZZT with these much smoother gradients consisting of non-default EGA colors. Some attempts at curves and slants show up in ZIG's default character set as well.


And it starts on the wrong board.


Jumping back to the main main menu we get this colorful screen and a not quite ZZT style sidebar. ZIG's sidebar is customizable and items can be added or removed via its scripting language, XOP. The documentation doesn't say what XOP stands for, but if my memory serves it's eXtended Object-oriented Programming.

There's also no instance of a "player" like ZZT. The player at the keyboard uses arrow keys and an object is coded to react to them being pressed to navigate the menu's selections.


The about section brings up a scroll with no useful information. Super ZZT feels rushed and incomplete, but "close enough". ZIG is much the same way, but is explicitly so rather than just a feeling.

As I scroll the text up and down there are some ghosting issues seen with the asterisks continuing onto later lines. This will come up a lot.


The introduction looks like something you would see in a MegaZeux game, large text fading in and out of the screen, as well as being moved up the screen into frame by shifting the camera offsets for the board. The sidebar is also gone in these boards as it can be turned off entirely. It's also an intro that takes place over multiple boards as objects can trigger a board switch instantly as in MegaZeux without relying on clunky machinery of duplicators, player clones, and passages that one would have to use for ZZT.

The "II" here refers to this being ZIG version 2.1a.


The demos section brings up an overview of some of ZIG's features that might be worth checking out. Here there's a standard ZZT player that can be moved into the passages.


The player demo is essentially just showing off ZIG's ability to reproduce basic ZZT gameplay. There are some scrolls explaining how to move and shoot, which are identical to ZZT's controls, and the cyan boulders are in fact boxes of ammo which act like ZZT's ammo.


Upon rounding the corner the monsters charge towards the player. They're ZIG reconstructions of ZZT's lions, tigers, and ruffians, but they feel rather off. We'll get into detail as to why that is in the next demo.


A few of the monsters lock up entirely and just don't move. That's all for this first demo.


The second demo is the big reveal. ZIG doesn't quite have built-ins like ZZT, Super ZZT, and MegaZeux. Nearly everything in ZIG is an object running XOP, with few exceptions. Those enemies fought earlier? They were all hand-coded. Even the player is an object! It's completely possible to have up move the player south, or place another object, or anything else really.

The demo shows this off with a few objects that modify the player's properties. Fast speed of increases the player's movement speed, confusion causes them to move randomly without any input from the player, and racecar mode forces the player to always move forward with right and left steering them clockwise and counter-clockwise.

There's also a second player controlled using the numeric keypad and using the 0 key to shoot! We'll see a lot of attempts at crude multiplayer using this technique in other ZIG worlds.


There's also "Inventory Land", demonstrating using keys to access a player's inventory. It's a much cleaner solution than ZZT's repurposing of its cheat system to set a flag and open an inventory.


One of ZIG's biggest features (something even more complex than MegaZeux's equivalent) is just casually mentioned by this sign.


ZIG has a layering system! No longer are all parts of a tree walls for the player to avoid, now they can casually pass behind them, or in front of them.

ZZT has only one layer, and elements with stats can keep track of what they're on top of to prevent fake walls from disappearing when walked over, but ZIG's is completely customizable. Each board defaults to 3 layers, with the main layer being 2, leaving one foreground and one background, but the number of layers can be adjusted, which could be used for some awesome effects in theory.


Smokey the Bear needs some help putting out a camp fire.


The whole process is straightforward enough, grab the bucket, use bucket on water, use filled bucket on camp fire.


Good job player. That's all for this demo.


The next demo is board edges. Just as in ZZT and its clones, the player can walk off the edge of one screen and onto a connecting board.


A cute little touch is that the player can be programmed to change its character on a keypress, thus moving and also facing the direction they're heading in.

There's not a whole lot to it really.


This demo showcases ZIG's improved audio capabilities. With support for mod files and waves, you can create sounds without any real limits (other than your poor 56k dialup Internet connection downloading it all).


And here we run into our first big ZIG problem. Its audio engine is not a very good one. ZIG was notorious back in the day for sound not working for anybody but Hammond. It should have been a big improvement over ZZT, but instead ZZT's PC speaker effects reigned supreme by virtue of working.


No sound plays.


Directional Operators is the title of this demo, and it's pretty much all the same as ZZT's. You've got random movement, cardinal directions, clockwise and counter-clockwise flow (where a walking object rotates which direction it walks in), and of course seek and opp seek for chasing down or escaping from the player.


The seek monster can be let out and hunt down the player, and there's also this effect that looks like pixel based movement rather than tile based that's done by manipulating the board's character set while it's running, shifting rows of pixels upwards. The effect can be used to handle some simple animations like this, but ZIG is still fixed to a grid.


Flags and variables are next. Flags are on/off values just like in ZZT, but there is no set limit on how many are supported. Similarly, there are variables which can be set to integer, decimal, or string values. MegaZeux at the time had a limited number of counters, another instance where ZIG actually outperformed the alternatives.


Our next demonstration is scrolling and viewports.


As you'd expect, the demo consists of a room where only a fraction is visible at any given time.


It's a vast improvement over ZZT's dark rooms, and has the added benefit of being adjustable in code, letting a game dynamically change how much of a board is visible. In order to escape the maze, the player is supposed to collect all the rubies and give them to an object.


A small gray object runs across the floor and ran into me, reducing me into a pile of blood and guts.


And then an error occurred. ZZT will play a sound and display a message when it encounters an error, but afterwards the object just fails to continue running. ZIG offers some alternatives with continuing to execute, stopping execution, or ending the game entirely, making things much nicer for debugging.


Also I gain the ability to move around a a pile of guts. \m/


The final demo is simply miscellaneous.


Character shifting is shown again, touching the gem causes its character to shift one pixel horizontally and one vertically.


There are some objects on a lower layer, which move randomly but can simply be walked over by the player.


There's also a bridge!


You can go over the bridge.


But also you can go under the bridge!


Lastly, there's an effect where when moving south, rather than fixing the camera to the player, it instead pans its way down after the player reaches a certain coordinate. This simulates the behavior seen when going from room to room in Zelda game.

And that's all for the demo itself! Before moving onto our next title, let's take a quick look at the editor.

Previous Post
Next Post