Previous Post
Next Post

Closer Look: ZIG

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

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.


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.


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.


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.


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.


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.


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.


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


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.


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


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.


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


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.


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.


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


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.


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


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.


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


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.


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.


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.


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.


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.


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.


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.


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


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.


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


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


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.


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.


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.


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.


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.


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.


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.


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


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.


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.


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


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.


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

Previous Post
Next Post