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.

zig_000

ZIG

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."

zig_018

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

zig_019

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.

zig_021

And it starts on the wrong board.

zig_030

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.

zig_033

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.

zig_034
zig_035
zig_037

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.

zig_038

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.

zig_039

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.

zig_045

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.

zig_048

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

zig_051

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.

zig_061

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.

zig_062

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

zig_065

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.

zig_070

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

zig_076

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

zig_077

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

zig_081

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.

zig_086
zig_087
zig_093
zig_094

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.

zig_021

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).

zig_022
zig_023

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.

zig_025

No sound plays.

zig_098

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.

zig_103

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.

zig_106

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.

zig_110

Our next demonstration is scrolling and viewports.

zig_113

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

zig_116

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.

zig_119

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

zig_120

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.

zig_122

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

zig_124

The final demo is simply miscellaneous.

zig_127

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

zig_135

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

zig_136

There's also a bridge!

zig_137

You can go over the bridge.

zig_139

But also you can go under the bridge!

zig_140
zig_141

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.

zig_144

Here we see the setup object for the viewport demo. Its code style is very similar to that of ZZT-OOP, with a few instances of adapting usabilty features from MegaZeux. The choice of colors is pretty messy here with comments in a nearly unreadable black on dark blue.

You can see a viewport command for resizing the visible area to a pair of coordinates, and commands for manipulating the HUD and assigning some values to variables. The #addstat command also has the character to show on the HUD selected by providing a string. In ZZT, the #char command which changes an object's appearance requires the numeric value for that character which can make code hard to read, and requiring lookups to find the number to write in the code as well. External editors like Kev-Edit offer character selection tools where users can select the character they want from a grid and have the editor insert the numeric value for them.

zig_145

The color selection is the complete range of all 256 possible combination of foregrounds and backgrounds. High intensity backgrounds are supported rather than ZZT's unfortunate insistance on blinking allowing for some very vibrant combinations not normally possible.

zig_146

I draw some walls, of which the usual solid/normal/breakable/water patterns are represented. However, any character can be made into a type of wall here. This also gives us our first overview of ZIG's default character set. Some ASCII characters have been altered to fit in with how they've been used in ZZT such as the club and spade glyphs becoming two sizes of trees. ZZT's door character is very much a door now. There are a lot of different smiley faces covering those with bigger eyes, monsters, shocked expressions, and cool dudes in sunglasses. Plus a few snakes!

Of course, ideally ZIG worlds would be editing graphics for their own purposes, so a lot of what else is included consists of generic building blocks for various slopes, curves, and dithering.

zig_150

Another feature of ZIG is the ability to highlight blocks and act on them. They can be copied and pasted, but it's also possible to highlight a region and update everything selected to match the currently selected color or character.

zig_151
zig_153

I'm jealous that Kev-Edit doesn't have support for the color/tile replacement functionality, but it does have copy/paste as well as support for non-rectangular selections.

zig_154

The board information lists a good amount of properties, sizes, offsets, viewports, layers. You can specify a music file to automatically play on the board rather than having to make an object for it.

There's also a "controller" object which is somewhat like MegaZeux's global object. This is a per-board object whose code runs, but isn't actually on the screen anywhere. Compared to ZZT's habit of leaving the pieces of its engines scattered into every corner, ZIG provides a more elegant solution.

zig_155

Tools for palette editing are built right in, with RGB components being adjustable sliders from 0-63 for a total of 262,144 possible colors, though like ZZT and MegaZeux, only 16 can be displayed at once.

zig_156

I replace red with a sickly zombie looking green and the board updates accordingly.

zig_157

The character editor can be used to manipulate the graphics, and save them to a file for an object to load again later. It has all the cools you'd expect and the luxury of hotkeys to revert characters to both their ZIG default as well as their original ASCII display.

zig_161

The world can also be modified a bit, allowing the world to have a proper name rather than ZZT's filename display, and setting which board is the title screen and which is the starting board. ZZT always sets the board that was saved on last as the starting board, and ZIG offers this as a toggle. Game overs can also be disabled as well if the person making their game wants to handle it manually, perhaps using a system of extra lives when health is depleted.

zig_162

ZIG is very well documented at the very least, AKWende is credited with writing the manual which is very thorough and does an excellent job going through all its new commands compared to ZZT.

We can come back to the XOP language at the end, for now let's move on to our next ZIG world which is also included with ZIG itself.

zig_163
zig_164
zig_164
zig_166

There's a simple tech demo of the Interactive Fantasies logo the ZZT/MZX company used at the start of several of their MegaZeux games. I bet if the sound worked it would even play their little company jingle.

It's a simple example of what MegaZeux can do, but putting it in a more ZZT environment, it serves as a good example that ZIG is still plenty powerful.

zig_167

Next up is Demominer by MasterTMC. Flexible palettes are used to make some barely legible text! With great power comes great responsibility.

zig_170
zig_171

Upon starting the game, a MegaZeux style intro plays with a smiling face being drawn and a blue-gray background fading in with a few twinkling sparkles.

zig_172

The main menu gets right to it, with the only choices being controls and playing the game itself. I have no idea what I'm getting into here.

zig_174

The controls make it sound like something that might be like Bomberman?

zig_175

There's also this interesting prompt for which OS you're running ZIG under. The game's text file says to be sure to pick windows if you're running the game in a non-fullscreen window. I have no idea why that would make a difference.

zig_178

Lastly is this level selection. There are quite a few choices here, and I picked the forest stage for no particular reason.

zig_179

The forest stage lives up to its name, with a red and blue water drop looking thing on opposite ends of the map and some trees that can be used as cover to hide behind.

Before I can do anything, I am immediately taken aback as a mod file begins to play! This is the first time I have ever heard ZIG produce audio in my entire life.

tipituf.mod

Give it a listen. In fact, if you want a true ZIG experience set it to loop.

zig_182

Demominer is revealed to be a 2-player turn based deathmatch game. Each player takes turns moving or dropping bombs. These actions take action points shown on the HUD above. The goal is to kill the other player first.

zig_183

Bombs have a fixed timer and you can't get very far from them before they explode so it looks like it's far wiser to drop a bomb before moving rather than after.

zig_187

I play around with it a bit, but it's not very fun, and I doubt having an actual second player would do much to improve it. The game's controls are very slow to react and there's a lot of health to burn through. Powerups do spawn to give bazooka or remote mines, but moving is such a tedious process that I wouldn't want to chase them down. I think actually playing this would result in both players getting within range and than trading blows until whoever attacked second lost.

It's worth noting however, that though this game works perfectly fine locally with two players sitting at a keyboard, it's actually designed with online multiplayer in mind! Now, ZIG doesn't actually have netplay capabilities on its own, but around this time the ZZT community briefly toyed with the use of a screen and keyboard sharing program, Microsoft NetMeeting, to turn these games into online experiences. Keep in mind this would be screen sharing in an era where a large number of ZZTers would still be on dial-up.

NetMeeting was generally proposed as a way for two ZZTers to collaboratively create a ZZT world together (which sounds like a nightmare with two people sharing the editor), but with ZIG it offered a chance to make games feel that much more modern via crude, laggy, netplay.

zig_190

Eventually I let player 1 win the game and it just stops. No indication that somebody won, just suddenly the objects can't move. There isn't even a warp back to the main menu. I'm forced to quit and move along to our next title.

zig_191

MasterTMC is back again with Dysan's Temple and Dysan's very dark palette.

Oh. By the way, tipituf.mod is still playing despite a new world being loaded.

zig_194

Dysan's Temple is an arcade style dungeon crawler. Not exactly Gauntlet, but with enough similarities that it would seem like the best comparison. The player explores the temple going from room to room collecting gems, coins, and daggers while fighting off monsters.

zig_197

Gems are quickly revealed to be used to gate progression through the game as three of the passages from the starting chamber require a certain amount of them to be opened.

zig_199

The northern branch is open and has a pile of daggers for the player.

zig_201

The dungeon is full of monsters which can be defeated by throwing daggers at them. It only takes one hit to kill, but their number is limited, and there's a windup as the dagger is thrown making it very tough to hit enemies that aren't charging after the player.

zig_202

Killing an enemy will cause them to drop coins which spin like you'd see them doing in a modern Mario game.

zig_203

The game gets very difficult very quickly as these red enemies shoot bolts of energy at the player when they're lined up.

zig_204

Daggers will destroy the blasts and keep traveling, but the enemies fire much faster and the player is locked in place during the dagger throwing animation. If the windup was faster and the daggers were more prevalent this could actually be a fun little game. It's a simple concept but it does a good job of showing you what can be done with ZIG, and this sort of combat isn't something you could do in ZZT.

zig_205

But as it stands its not long at all before the player gets overwhelmed and killed, where they're transported to a game over screen.

zig_207

One very frustrating flaw of ZIG is that the program has to use the game's palette for its own UI, which leads to situations with unusable interfaces as colors become impossible to navigate menus with.

zig_208

Our next title is "Incredible Nigel" by Twigz. This is their only release for ZIG as well as ZZT, and doesn't do much to instill a sense of quality from its title screen.

tipituf.mod continues. Always and forever.

zig_209

Nigel is a cute little character and an incredibly badly written sidescroller. Sidescrollers exist in ZZT and MegaZeux. In ZZT they're very rough as the engine doesn't have a lot of the tools you'd need to make a proper platformer. MegaZeux fares better, with its player not needing to touch objects that send messages to other objects telling them how to move and jump. More modern MegaZeux sidescrollers can use larger sprites to create a more smooth feeling experience, but most still use a single tile on the board and feel very rigid due to sticking to such a low-res grid.

ZIG should be capable of doing what most basic MegaZeux games did, but this game manages to feel worse than sidescrollers in ZZT even. Pressing up jumps, but with no horizontal movement at all. I had to look at the game's text file to figure out how to make it up a ledge.

zig_219

To jump horizontally, the player has to hold left/right and then press jump. Then they'll jump straight up just as before, but then take two steps to the side before they begin their descent. This makes for some incredibly slow jumps with no player control over their height or distance.

The manual says you can press down when you land on an enemy to kill them, but I was never even able to time a jump to land on an enemy to begin with. Instead I'd wind up alongside them and get hit for one damage.

zig_221

One of the objects managed to push me into solid ground. Thankfully I was able to leave it, and it's not an issue specific to Incredible Nigel as it happened in various better coded ZIG titles as well.

zig_225
zig_228

Upon entering the castle the player is treated to the game's barebones plot.

zig_230

This path also leads to a dead end. I have to go all the way back to the start and left from here to continue Nigel's quest.

zig_232

West of the starting area are more monsters and some trees. The bright green trees are in a foreground layer meaning Nigel and the enemies can't be seen behind them which leads to blind jumps hoping your timing is good enough to pass over them.

zig_233

I persevere because somehow this is still the most playable ZIG title so far.

zig_234
zig_235

The credits mention a ZZT platformer for the engine, but on checking said game's engine doesn't lock the player's trajectory like this one does.

zig_238

Next on the list is one I'm really curious about, Star Trek: Battle Commander.

zig_239

NMZmaster's Star Trek: Battle Commander is the most ambitious of the ZIG worlds available. I was excited for it, expecting it to be a port of the vintage BASIC Star Trek game. It seemed like it would be possible to replicate in ZIG and would be a real show-stopper in terms of complexity.

zig_240

The compilation time before the game can actually be played takes a moment. For the other titles it's been near instantaneous or done in just a few seconds, but this one actually takes a bit of time to load. Still nothing to absurd to wait through, but not what you'd expect from a ZZT clone.

zig_241

The game's menu mimics the Enterprise's own systems.

zig_242
zig_243

The credits show off the non-functioning coloring methods for text and give a few shoutouts to various folks.

zig_244

The game's documentation lays plans for a thick tome.

zig_245

The controls show quit a bit of complexity. There's a lot to do here.

zig_246

None of the tactics sections are implemented, but it again sounds like this game should have huge amounts of content available with all these different races available.

zig_247

It's frankly overwhelming. Thankfully none of this stuff is actually written other than the engines which work as you'd expect, increase or decrease them to change speed.

zig_249

The game itself places the Enterprise into combat immediately. There are clearly lots of stats and information on this HUD, but I'll be damned if I can tell you what any of it means.

zig_250

The enemy ship moves in towards my own while I'm still fumbling trying to so much as move around anything other than extremely slowly. ZIG's keyboard handling XOP causes some issues with responsiveness. If an object is moving at cycle 5, it will only check for input every 5th frame making it difficult to even get menus opened as input will usually just get dropped at the end of each frame.

zig_252

I have no idea what ECM or ECCM levels are.

zig_254

EVASIVE MANEUVERS

zig_255

I need to fight back and modulate my weapons?

zig_257

What am I looking at?

zig_258

I. Do. Not. Understand.

zig_259

I AM NOT GOOD WITH COMPUTERS

As much as I flail around I cannot figure out how to attack the enemy, but this seems to put us on even ground as the enemy ship never fires at me ever again.

zig_260

I crack open the editor, curious what the code for all this looks like. And it looks like this. The Enterprise ship has more than TWO THOUSAND lines of code.

There's clearly a ton of work put into this, but it's completely obtuse and the lack of any of my button mashing have a visible effect leads me to believe that if I had more than a cursory knowledge of Star Trek that it wouldn't be any better.

Or maybe I didn't modulate properly. I don't know. I'm getting out of here.

zig_262

None of those strategy games for me, I'm up for some straightforward deathmatch with MasterTMC again, this time accompanied by Avi Schranz in ZIG Arena GOLD

zig_264
zig_268

Oh yeah, tipituf.mod is still going.

zig_269
zig_271

ZIG Arena is a singeplayer arena shooter that is very clearly inspired by Quake 3.

zig_274

The goal is to defeat all the opponents to escape from the arena, and use money earned from the fights to buy better weapons and ammunition.

zig_275

Plenty of weapons and ammo to purchase, though not enough starting money to get anything but more clips. Also shotguns use clips in this game.

zig_277
zig_278

Another object tells the player about the weapons available. The shotgun is the big daddy of the pistol.

zig_279
zig_280
zig_281

Can I tell you, the typo "tacticle" is really good?

zig_282
zig_283

I head to the arena to face off with my first opponent. He moves diagonally throughout the arena, bouncing off walls at a 45 degree angle and shooting when lined up with the player.

The sheer size of the board makes it very easy to avoid him so there's no trouble with staying alive.

zig_285

Unfortunately that also works in reverse making him extremely difficult to hit. He has infinite ammo.

zig_286

You don't. I did hit him a few times, but there's no indication for doing so. This game is a mess.

zig_287
zig_288
zig_289

Some of the backgrounds for the other arenas are pretty cool looking at least.

zig_292
zig_293
zig_295

The ending, not so much.

And look, it took us this long for something called ZIG to be hit with a reference to All Your Base!

zig_302

Oh, but of course ZIG Arena actually has a sequel. A single digit number of titles released (and I'm being generous since they're almost all just demos) and we managed to get a sequel.

I feel like there should be something in the top half of this title screen rather than just a gradient.

zig_305
zig_306

Some more introduction logos that feel like they had more time put into them than anything in ZIG Arena did...

zig_307

The sequel is an improvement though.

zig_308

Well, mostly. The objects highlighting the selected option immediately desynced on me like this. The credits are mostly the same, but I can't wait to hear about Clan-ZA.

zig_313

Again the broken color formatting strikes, ruining the ASCII art. Sign up for the clan and get to beta more arenas for the series.

zig_314

The story rehashes the previous game pretty quickly.

zig_316

On starting the game, a cutscene of the previous game's final fight replays, with the player shooting a rocket at this red lion guy.

zig_317
zig_318
zig_319
zig_320
zig_321
zig_323

Not gonna lie, I do like the depth effect here as the illusion of being drawn into the screen plays out.

zig_329
zig_330

The player is taken to this hideous looking world map where two more arenas need to be conquered.

zig_332
zig_333

Inside the arena the player needs to challenge each opponent to move onto the next. It's pointless structure that keeps the player out of the action.

zig_334

On challenging the first enemy the player is warped to another menu with the new store interface and some interesting new features.

zig_335

There's a system called ZIGpot which can let the player essentially add mods to the game, unlocked by defeating foes. A password system is also implemented to let the player save their progress.

I guess it hasn't come up yet, but ZIG doesn't have the ability to save games implemented. A password system is the only way to track progress, and this is honestly probably the biggest issue against its adoption.

zig_337
zig_338
zig_339
zig_340
zig_341

There are a whole lot of options to unlock, but only crate mode is available at the start. This is a shame because I feel like being able to play fast and rocket mode would do a lot to mitigate the issues with the large board sizes and difficulty hitting targets the original ZIG Arena had.

zig_343
zig_344

The first arena is a fiery one with volcanoes the erupt regularly, spewing damaging lava.

zig_347

There's also indication that you're hitting the enemy successfully. A little feedback goes a long way.

zig_350

I actually win a fight! It's still not fun though. I'm warped back to the arena and have to walk across the room to the next opponent.

zig_354
zig_355

I really wanted to buy a rocket launcher, but wouldn't have had any money for rockets. Instead I buy a shotgun, some health, and ammo to prepare for the 2nd fight.

zig_357
zig_359

I don't notice any difference with my shotgun, but I did just realize the grenade mode says to hit 8 to select grenades so I most likely had to press a key to switch weapons. Whoops.

zig_361

I win a second fight!

zig_362

And then I realize this game still isn't any fun, and just because I can make progress in it unlike the first game doesn't mean I should.

It's definitely an improvement over the original, but it's still very tedious and repetitive combat.

zig_364

But it's still not over. There's also this pack of multiplayer levels meant to be played online! This pack isn't as complex as the Arena games, with just a single weapon available, and no campaign mode.

zig_366

This is adorable! You're supposed to name your "server", and once the players are ready, they pick a map and star up a game.

I immediately jump into 2fort.

zig_368
zig_369

Compared to the ZIG Arena series, the multiplayer pack is a lot more simplistic. It plays no differently than you'd expect a 2-player ZZT to work.

zig_374

All of these netplay focused deathmatch games are clearly inspired by major players in the FPS market at the time like Unreal, Quake, and Team Fortress. Yet despite this inspiration, the gameplay doesn't even attempt to crib anything more than weapons and maps. This one life with a lot of health fighting is very ZZT when ZIG would've been easily able to implement a point based scoring system with respawns.

Instead, once a player is defeated here the game comes to a stop. There's no victory screen, no way to replay the map, and no way to return to the main menu. From the start these games are trying to bite off more than ZIG can chew, but there's a lot of expected functionality that ZIG could easily do that just goes ignored making what's already no more than a novelty at best even less appealing.

Most of the other maps are similar, though some at least take advantage of board layers to create hiding spaces or add a bit more tension as bullets temporarily vanish from view.

zig_379

But the game does aspire to something a bit more with its conversion of Team Fortress's Hunted game mode. Here an AI president follows a player controlled body guard who must escort them to the exit without the assassin killing them.

There are interesting character choices here. I feel like a secret service agent would be the one in sunglasses rather than the president, but I guess it keeps things consistent with the other maps' players.

zig_382

The president unfortunately immediately sabotages everything by moving me into a corner, trapping the bodyguard and making them unable to leave! This sort of pushing around happens in ZZT as well, but can be prevented by checking if the object is next to the player before moving towards them again. This really simple technique isn't used here making it unplayable, and even more so if the player controlling the bodyguard is the one with a 200ms ping over dialup being shoved around constantly.

It does make me wonder if these maps were tested online or if the creators lived nearby and just played on a single keyboard locally.

zig_386

The president also shoves their bodyguard into a solid wall.

zig_499
zig_500

The main menu also includes information on how to play the game online.

zig_501

There's also some information about the purpose of making this, and a vain hope to find a program to prevent lag. I love it.

zig_502

Lastly is this incredibly crude way of communicating with another player by highlighting messages from this list on the menu to let the other player read them.

zig_503
zig_504

These messages are REALLY GOOD. If I were the type to use textbinds I'd definitely be adding "I've got mail, but you've got owned".

There's just one game remaining, and it's the reason I wanted to feature ZIG this month.

zig_389
zig_393

The Legend of Aelk (demo of course), is the closest thing ZIG has to a killer app. It looks good, takes advantage of ZIG's features, and doesn't try to overdo things by falling into the trap of "netplay". It's a singeplayer action RPG that could probably be done in ZZT, but not nearly as nicely.

Kuja (aka Mrs. Clause) partially created a ZIG title that feels like the sort of thing Jacob Hammond had in mind when creating the engine.

zig_394

There's a flashing company logo, very ZZT but with various shades of pink and purple prior to the game starting.

zig_396

You play as a mailman named Aelk who has a letter to deliver.

zig_397
zig_399
zig_400
zig_401
zig_402
zig_403

And so Aelk begins with the player taking control of him just before reaching the location the letter's been addressed to. Aelk himself stands out already compared to the other ZIG titles by making use of a 2x1 character. His pants are the main object, what would be the player in ZZT, and his head and body are on a higher layer allowing Aelk to partially obscure what he's walking in front of. It's the sort of thing you'd see in NES titles like Crystalis.

zig_405

Some skulls hop around after him, and he can stab with his sword to attack them. One complaint is that the sword is only a single tile long which makes combat very dangerous.

zig_411

Another complaint is that objects can push the player, severing Aelk. This unfortunately happens quite often. Here Aelk is facing left, stabbing right, and the sword's hitbox is to the right of his pants rather than where the sword actually appears.

zig_414
zig_415
zig_417

With no response and a broken door, the postman enters.

zig_418

Okay, second complaint, these palettes were not chosen with message boxes in mind. The house is a mess and Aelk can only assume the home's occupant is down in the basement.

zig_421

Gone are the blocky kitchens of ZZT. Aelk takes advantages of adjustable charsets to create an actual kitchen with clearly defined counters, cabinets, and shelves. You can even have chairs that face north or south without having to shrug and settle for the ^ and v characters.

zig_422

There's a pearl to pick up which is the game's currency, but otherwise nothing else to explore but the stairs to down below. Upon descending the game shifts to a cutscene.

zig_426

We get a nice overview of Galshina for a moment, and it's a very nicely detailed board. The castle walls and towers look fantastic for something that small. The trees and plants add some greenery and look far smoother than anything ZZT offers.

zig_427
zig_429
zig_431
zig_432

The scene shifts to inside the throne room where the dark knight Terek is called to figure out what's taking the hermit they summoned so long to arrive.

zig_434

He might be evil.

zig_435

Then Terek calls out the king on having the same body characters used by the queen as well. He's a jerk!

zig_436

The palette flashes for a moment before the game takes us back to Aelk.

zig_437

Is it just my monitor? I can barely see a thing here other than Aelk and what looks to be a very dead hermit by a pool of blood.

zig_438
zig_441

Terek catches Aelk in this compromising location and asks if Aelk killed the hermit.

zig_442

In a panic, Aelk runs off and the game shifts to an overworld screen.

zig_444

It's a bit sparse compared to the more richly detailed boards for the outside of the hermit's home and Galshina. It's also sparse in content right now, with there only being a single location that can be visited to the north.

zig_445

A message explains the controls and Aelk's destination, the same forest mentioned as being a pain to get through in the game's opening board.

zig_448
zig_449
zig_450

Again the palette is too dark for my tastes. I suppose it is a spooky forest though. Toggling the sidebar HUD allows the player to see more of the screen and discover a chest behind a boulder that would otherwise be obscured.

zig_451

Some small green monsters attack and push away Aelk's pants once more. It's easier to just run than fight as enemies don't actually drop anything.

zig_457

Up ahead are some more monsters, an accessible chest, and another person by some boulders.

zig_458
zig_460

He'll tell the player they'll need to break the rocks to get past, and that an object to break them can be found at a nearby shrine. (Spoilers: It's a hammer.)

zig_466

My pants and body are extremely broken by this point because I wanted to get a screenshot of defeating a monster where it animates dissolving away. It's a nice little animation! I'm also fond of the glowing red eyes in the trees.

zig_467

The blue item on the eastern side of the board is revealed as a health herb. Health is pretty much all Aelk will find on this adventure.

zig_469

To the west is the shrine entrance, protected by a few flying creatures. It's better to run from them rather than fall apart again.

zig_473

Inside the shrine are some large mushrooms, and decorative statues. The palette manages to get even worse making it very difficult to tell where you can and can't go. There's a barely visible door Aelk is standing in front of here which leads into the next room.

zig_474

The next screen, helpfully indicated as B1 holds some more flying enemies as well as a brown face which is a newer and stronger enemy. The face can fire a projectile making it the toughest foe yet by far. The red ball here being one of its shots.

zig_475

At some point, pants pushing combines with objects pushing things into walls and Aelk's pants escape the confines of the shrine entirely. This basically softlocks the game as there's no way back inside.

zig_480

The next screen has another face and more flies? bats? There's also a chest with more health to collect before moving to the shrine's boss.

zig_481

The boss of the shrine is this red/purple looking diamond thing. It takes a lot of hits and changes colors as its damaged.

zig_483

It's not very strong itself however, with only melee attacks that it seems very slow to use.

zig_486

When the diamond is defeated, the shutters open and Aelk can claim the hammer as his prize.

zig_487

"I suppose this hammer will come in great use. I can feel it's power, kind of like the excaliber of hammers."

It's a good hammer needless to say. Again the palette choices are absurdly difficult to read.

zig_490

The hammer can smash the rock at the forest's entrance, revealing a chest with 200 Pearlous that can't be used for anything in the demo.

The hammer can also be used to get out of the forest, the other rocks lead straight to the end of the demo here.

zig_493
zig_494

The Aelk demo just comes to a standstill with no closing remarks, just Aelk overlooking a cliff at night with plans to travel onward to the next village.

That's all there is of Aelk, and well, maybe I lavished a bit too much praise on it earlier. Of course, all the other ZIG games have managed to have bad gameplay and bad graphics so one that looks pretty (when you can see it) is a big improvement.

Aelk was a ZIG game that at least felt like its creator had come to grips with what they were doing. It's still a demo, so if work continued after its release I can definitely imagine the palette choices being tweaked to be more visible and not ruin the message windows.

The taller player is a cool idea that breaks too easily, but I think ZIG has enough capabilities that it could also be avoid by always teleporting the head to be above the legs which would do a lot to make desyncs only last for a moment rather than permanently.

Like any ZIG game though, ultimately it sits forgotten.

That's all there is to play around with in ZIG, but before this article ends let's take one last look at XOP to really get a feel for what ZIG would enable ZZTers to do.

What makes ZIG so powerful compared to ZZT is its extended programming capabilities. Let's take a quick look at the commands it adds or modifies from ZZT-OOP:

#addstat name var char
This is how variables are added to the sidebar. Pick a name, a variable to display, and a character to represent the variable. #delstat can remove a stat.

#become objectname
While ZZT can have an object become another element, ZIG offers the (not yet implemented) ability to transform an object into an object defined in an object library.

There is an included library that for whatever reason wasn't recognized by the editor, but I do remember it working back when ZIG was a new release. It includes recreations of ZZT's player, ammo, torches, keys, doors, lions, tigers, and bears. So people new to ZIG didn't have to immediately code a player from scratch like I would have.

#bind objectname
ZZT's #bind can be used to tell an object to discard its own code, and instead point to another object's. Good for memory, less good when you realize that means #zapping labels like objects that take multiple shots to be destroyed ends up making every single object with that code has its label zapped.

ZIG takes a more practical approach in a world where a decent computer may well have over 128 megabytes of memory and just copies the code rather than pointing to it. This would be extremely useful for action games which constantly hit memory issues in ZZT due to not being able to use #bind effectively.

#bindappend objectname
This one appends code onto an existing object.I'm not sure what the intent with this is, but I'm sure you can be clever with it somehow.

#change [color] char [color] char
This command is similar to ZZT's but since ZIG only has objects, the match is based on the object's character. In addition, the colors support can be done in MegaZeux's style of "cFB" with a hex number 0-F for the foreground and background, giving it a broader reach over ZZT's seven defined color names.

#changearea x1 y1 x2 y2 [color] char [color]
#change but only to a certain rectangular region on the board!

#char char
Same as ZZT, change an object's appearance.

#clear/#set flag
Same as ZZT, set a boolean flag off or on. ZIG has no restrictions on how many flags can be defined compared to ZZT's 10 however.

#clone objectname x y
Creates a copy of an object as the given coordinates. In ZZT there is no way to duplicate an object without waiting for a duplicator to trigger. This could easily be used for spawning enemies.

#color color
Like #char, but for an object's color. Although ZZT will execute #become red object, this causes a new red object to be spawned and the current object's code to be lost. (Using #put s red object and having a different object try to overwrite the other does work though? ZZT is weird.)

#cycle n
Sets the object's speed. ZIG allows for decimal numbers for more precise control of speed compared to ZZT where every cycle is ~0.10 seconds.

#die
Destroys the object, just like ZZT, however ZIG prevents the board's last object from dying.

#end
Stops running code! Same as ZZT.

#endgame
Ends the game's execution until the player presses escape. Same as ZZT if you ignore the ability to cheat when dead and bring the player back to life.

#fade out/restore speed
Fades the screen to black over speed number of cycles. Having a visual effect as a single line of code instead of having to mess with palettes makes things a lot easier. #fade restore will fade back in.

#focus
Sets an object as the focus object. Only one object can be the focus in ZIG, and that object is the only one that can send :touch messages to other objects and also is the target referenced when an object tries to #go seek to move towards what is most likely the player.

#ghost/#solid
Disables collision for an object until #solid is used.

#give var amount/#take amount var [label]
Gives and takes an amount from a variable. This is the same as ZZT and can be used instead of performing arithmetic.

#go dir (or /dir)
Moves an object! This is the same as ZZT where the object will try to move in that direction endlessly until it succeeds.

#try dir [label]
Moves an object, but gives up if it can't. An optional label allows handling a failed move. This is the same as ZZT.

#walk dir
Moves an object endlessly in the given direction. This is the same as ZZT.

#idle (or /i)
Idles for a cycle. Same as ZZT. The manual here says that a single tick is 0.25 seconds, but that has to be a typo as a cycle there is again, 0.10 seconds. ZIG feels about as fast as ZZT normally.

#if (condition/flag) then (command)
Allows comparing values and jumping to labels or executing commands like ZZT. The lack of elements means comparisons like #if not any lion nolions is no longer an option. Similarly, the manual makes no mention of #if contact label to jump to a label when adjacent to the focus object. This command may actually be more versatile in ZZT.

#lines 25/43
ZIG actually supports changing the text mode from a 25 line mode to a 43 line mode.

zig_497
zig_498

This causes only the top 8 pixels of a character to be rendered, but the same character set is used. The idea of square characters is a good one, but ZIG's implementation of it doesn't seem very friendly. The manual also warns anybody who uses 43 line mode to remember to switch back to 25 when the game ends.

#loadfont filename.zch
Loads a font. This allows for even more dynamic graphics if 256 characters aren't enough.

#loadmod modname.mod
Loads and plays a MOD file. If you're lucky enough to hear it.

#playmod/#pausemod
Plays/Pauses the currently loaded MOD file.

#move x y [layer]
Moves the object to the specified coordinates and layer. Object teleportation like this is completely impossible in ZZT.

#movetoboard board
Moves the object to a different board. ZZT has a player on every board which is moved around as needed when switching boards, but here you can move anything anywhere.

#offset x y / auto
Sets the board's view offset for camera panning. Auto centers the view on the object that called it. I'm surprised there isn't a command to center it on the focus object.

#playwav filename
More sound! This time for wav files.

#lock/#unlock
Locking an object prevents it from receiving external messages until it is unlocked. This is the same as ZZT.

#restart
Jumps to the beginning of the object's code, just like ZZT.

#restore/#zap
Zaps a label, preventing it from being matched next time a label is searched for like :touch or :shot. #restore undoes this. In ZZT #restore unzaps every zapped label. The ZIG manual doesn't mention if this is still the case.

#scroll x1 y1 x2 y2 x y
Not implemented. This scrolls a section of the board x times horizontally and y times vertically.

#send [(all/all but) / objectname]:]label
Sends an object to a label like ZZT. #send dance will send the executing object to :dance. #send frank:dance will send any object named frank to :dance. #send all:dance will send every object to :dance. ZZT has all of these as well.

ZIG adds #send all but frank:dance where every object except for frank would jump to :dance. ZZT has #send others:dance where every object excluding the one that called the command makes the jump. I'm not sure why ZIG doesn't implement this.

#shiftchar c x y
Shifts a character x pixels vertically and y horizontally. This was shown in the demo with the gem.

#sidebar 1/0
Toggles whether the sidebar is displayed.

#transport board / #transportfocus board
Changes the board that's rendered. This can optionally transport the focus object as well. Contrast with #movetoboard which would move an object, but keep the current board on screen.

#viewport x1 y1 x2 y2
Sets a rectangle for the visible potion of the screen to be rendered.

#vislayers a b c...
Toggles visibility of layers on or off. Something like the "Galshina" text in Aelk's cutscene could have been on their own layer and then hidden to show more of the town underneath with this.

That's all of ZIG's commands in XOP, but there are still some more features with variables. Some of them are read-only, but the author can create more which can be modified

%me.x / %me.y / %me.layer / %me.char / %me.color
These return the relevant values of an object.

%curboard
This returns the number of the board that is currently loaded.

%prop1 - 4
ZIG's object libraries allow authors to define custom parameters to be filled in which use these four variables. Similar to ZZT's settings for enemies like intelligence or firing rate.

%mess.x / %mess.y / %mess.color / %mess.time
Unlike ZZT's messages which always appear as color changing text along the board's bottom row, ZIG's can be moved around. %mess.time is left unexplained but presumably is how long the message stays on screen.

Custom variables can be simply defined with the %name syntax, and these can be referenced by the HUD or other objects. There's no mention of variable scope so I'd assume any user variable is global compared to MegaZeux where variables can be local if necessary.

Lastly, there are a few operators. Interestingly, the first one is "alligned" with two l's, matching the typo in ZZT-OOP but no support for "aligned". To be fair, I didn't know aligned only had a single l for years after discovering ZZT so perhaps Jacob Hammond had the same issue.

There's also keyb key which is how custom controls are handled. An object loops and checks for things like #if keyb m missiles.

There's a not operator for inversing values, blocked for checking if an object has anything next to it.

rnd # can be used to generate random integers, something miles beyond ZZT's awful hacks for attempting randomness.

There are the basic arithmetic operators, +, -, *, /, >, <, and = for making comparisons.

Perhaps the most notable one is getobjname dir, which can be combined with #send to send a message to an adjacent object.

The XOP language offers quite a bit of options to those willing to work with it. It's not as accessible as ZZT, but is still simple enough that I feel like a child could pick up the essentials at least.

Final Thoughts

ZIG has a lot of tools, and while what's there is miles beyond anything ZZT can do, it just never went anywhere. Its core concept of being an in between of MegaZeux's power and ZZT's simplicity was a sound one. That's a niche that certainly had merit in the early 2000s. At the time, MegaZeux was difficult to run and ZZT had essentially peaked in terms of new mechanics to exploit.

ZIG had a few tricks up its sleeve to boost its chances of success. ZIG games were permitted to be uploaded to z2 meaning that any releases would get put on the front page. There was a continual exposure to ZIG in the ZZT community. (It's also for the best since it makes ZIG easily the best preserved failed ZZT clone of which there were many.) If you were a ZZTer at the time, you were exposed to ZIG.

ZIG's issues weren't as severe at the time as well. Releasing MS-DOS programs in the 21st century was an odd choice, but it worked. Mainstream gaming may have been releasing titles solely for Windows, but as long as Windows had its MS-DOS compatibility, ZIG was safe. Had ZIG been more successful, ports outside of MS-DOS would have become essential just a few years down the line, but with its source code available, it would have been "easy", at least compared to ZZT where you're working with a disassembly or just eyeballing it.

However, ZIG was unable to overcome its shortcomings from a lack of save support and notoriously broken audio support. This definitely slowed its adoption from the very beginning and no saves is probably the single biggest strike against ZIG. ZZT games of the era were longer and more story driven worlds where having to start from scratch every time. The lack of saves' influence can be seen in what ZIG worlds were released. Everything is tailored towards being short and direct games. Arcadey dungeon crawls and horrible platformers whereas Aelk's Zelda-like inspiration is the exception.

ZIG also never took off with the big names at the time. Most of the authors of ZIG's games were ZZTers that nobody really thought twice about when it came to their releases. That so many of ZIG's games aren't fun to play didn't do them any favors either. A considerable number of ZIG games are focused on online multiplayer, something ZIG wasn't designed for, taking advantage instead of screen and keyboard sharing as some loophole to crudely pull it off. Aelk and Dysan's Temple are the only ZIG games that really feel like they were created to work with what ZIG offered rather than shoehorn a gameplay mechanic into ZIG.

ZZT as a medium was always about compromising and working with and around its designed limitations. It works because people quickly learn to expect that sort of thing. To an outsider, surrounding a player with objects, which then send a message to another object to control comes off as bizarre, but it's what often needs to be done in ZZT. Torches representing clips of ammunition or gems being used as magic points involves the person at the keyboard accepting these things the way one accepts the scenery in a play. It's obviously a masquerade, but there's an agreement to go along with it.

ZIG meanwhile gives the programmer a chance to do away with all that, the object in a platformer jumping and falling from gravity really is the object controlled by the player. The sidebar can say clips or magic. The need for constant compromise is greatly subdued, but instead all these online games are immediately going back to requiring compromise with the nature of lag and the illusion that your ZIG.EXE file is in fact a deathmatch sever. You can still play along with these conceits, but the whole point of ZIG is that it's supposed to stop players from having to do so.

ZIG was a good idea, and honestly one that was well executed for what it was trying to do. In the end, what ZIG actually could do and what people wanted to do with ZIG just weren't compatible.

The Closer Looks series is a part of the Worlds of ZZT project, committed to the preservation of ZZT and its history which sometimes isn't actually ZZT at all.
Support Worlds of ZZT on Patreon!