KevEdit v1.1.3 (Windows)

1.1 MB
No rating
(0 Reviews)
Board Count
None / None

Modern ZZT Editing With KevEdit

Because ZZT's Own Editor Is So 1991

Authored By: Dr. Dos
Published: Jul 10, 2017
RSS icon

Page #3/3
< 1 2 3

There are a few more features to show off from the main editor interface that can be potentially be useful, but typically don't get too much use.

The first is buffer drawing with "shift" + "tab". This method of drawing automatically cycles through the buffer (backwards for some reason?) as you move around with drawing on. This lets you draw a pattern like this one without having to plot it tile by tile since each tile differs from the previous one.

KevEdit also has support for custom object libraries which can be accessed with "o". This feature lets you save an object like you'd save a board and then reuse it later in other files. There's rarely a need for this and KevEdit doesn't include a default library to use here so I have nothing to show off. I believe the format used by KevEdit is shared with ZZTAE's which did include some simple objects that animated as doors swinging open which had some use. It's not very practical because you need to open the menu, select that you want to open from a library, select the library, and then select the object. Often it's faster to just switch to a board with the object already on it and grab it from there if needed.

One of the stranger features is a built in text editor accessed with "!". Then again, maybe it's not strange because ZZT itself has one on the same key! This brings up an editor so you can save text using the same interface for editing ZZT-OOP. You'll almost certainly rather to just use notepad or something, but you can do easy line wrapping if you want your text file to fit in ZZT's own scroll windows.

Using "control" + "s" opens up the stat list. Here you can see a list of every element on the board that's counted towards the stat list. The list is in the order the stats were created, and this is the order ZZT will update each element with a stat as needed. You can hit "enter" on one of these to open the element editor you'd get by selecting the tile with the cursor. The controls listed mention arrows and +/- to adjust values but they have no effect. KevEdit doesn't have any way to rearrange stats, and if you find yourself in a situation where you do need to reorder them, you're stuck adding the stat element to the buffer, deleting it, and placing a new copy of it to make its stat the last on the list. Fortunately the stat order rarely matters for anything but more complex engines.

Also note that the player is always the first stat, ZZT expects it to be (board transitions even force the first stat to be a player), and if you manage to change the first stat to something else via a glitch to destroy the player you'll get some weird behavior.

Back on the title screen, let's place an object and show off the coding interface offered by KevEdit. Find an empty tile, hit "F2" for creatures, and "o" for object. You'll get a smiley face. Select it with "enter" and you'll see a few different settings to adjust.

Firstly is the edit program button, we'll save this for last since there's a lot to point out in there. Below it is the character which defaults to char 1, an outline of a smiley face. You can use the arrow keys here to adjust the objects character, or press enter to bring up the same character selection seen when placing special characters as text.

I'm selecting character 32, the character used for a space, to make the object invisible. Characters 0 and 255 would also work. ZZT uses 32 for empties, monitors, and invisible walls. If you ever decide to make a custom font, you're going to want to keep 32 blank.

After changing characters, the other options can be left alone. The locked state determines if an object can be sent to labels in its code from other objects or player interactions like touching and shooting. You can lock an object in advance rather than use the "#lock" command to save some space if needed.

The cycle value was mentioned earlier when making our landmines. ZZT defaults objects to cycle 3, but often you'll want them to run at cycle 1 to ensure they run their code as fast as possible. Like locking, you can set "#cycle 1" or do so in advance here. This is useful for more than just memory since a cycle 3 object will take 3 cycles to process any code including changing to a faster cycle.

The advanced tweaking offers the same X/Y step values we saw with our bullets earlier. Objects that are told to move in a direction repeatedly with "#walk" will set these values and move based on them. Like the bullets you can set them to diagonals or jumps if you mess with these values.

The data values hold the objects character value and locked state. Data 3 goes unused.

The Bind to option lets you set "#bind" in advance. ZZT lets an object stop executing its own code and start pointing to another object with "#bind ". You can do so in advance here. Keep in mind that binding is pointing to a different object's code, and doesn't make a copy for itself. If the object being bound "#zaps" a label, the object binding it will have the same zap apply. This makes memory management difficult when making action games in ZZT with object based enemies that take multiple shots to defeat.

Lastly is program instruction, which is the offset in the object's code for where it should begin execution. This is measured in bytes of code not lines. You'll basically never need to adjust this.

Let's edit a program!

The program editor brings in plenty of features over ZZT's that make it more user friendly. For one, it has syntax highlighting. ZZT makes everything yellow text while KevEdit differentiates commands, parameters, labels, and makes it easy to find some typos because of it. (If you had "#change whte solid blue solid" the "whte" would be gray rather than cyan.

ZZT also has an unfortunate issue where sometimes object code will just randomly be deleted. Losing code be tedious to reproduce, and losing text meant to give exposition to the player will mean a complete rewrite if it wasn't preserved elsewhere. Speaking of writing text, KevEdit has wordwrap! In ZZT if you can't fit a word on a line you'll need to erase it and then manually advance to the next line and rewrite it. (The "alt" + "+"/"-" buttons to adjust the wrapping don't seem to work.)

If you need help with your ZZT-OOP "F1" will open the ZZT-OOP section of ZZT's help files (or your equivalent, it's possible to replace these).

KevEdit also supports copying and pasting code (via it's own clipboard, not the one for your OS), saving code to a file, replacing code with a file, or inserting a file into the object's code.

There's "insert" to toggle insert mode and just overwrite text, and "control" + "y" to remove a line entirely.

You can see some more syntax highlighting here. ":touch" is a ZZT reserved label so it's bright red, but the ":1" and ":2" are custom labels and dark instead.

Special characters can be inserted with "control" + "a". This can be combined with "#char" commands to change an object's appearance where the selected character will be converted to the numeric value needed which is much nicer than having to look up a character's value and type it in manually. Note that this only happens if the line starts with "#char". A line of code like "#if visible #char 2" is valid ZZT-OOP, but rather than writing the 2, "control" + "a" will instead place the smiley face character instead of the number.

Lastly, there's "control" + "t" to test music. This isn't all that accurate to ZZT unfortunately, but it can help get you going when composing music. It will begin playing from the cursor's position to the end of the code. Pressing "escape" cancels it which can be useful if there's a lot of code for it to scan. Keep in mind that not only is the audio itself inaccurate, but also that the music preview won't handle things like idle commands or jumps to code that would alter when the next "#play" command would be reached during ZZT's actual code execution.

That's all to show off in the code editor! Now let's pretend we haven't opened this file in a month and don't remember where we put our object on the board. How do we find it? "control" + "o" will reveal all objects on the board.

The object reveal command will make every object show up as a smiley face until the cursor is moved or "escape" is pressed. If you're trying to hide the inner workings of your engine during gameplay this will make editing those hidden objects much easier.

I think that covers everything! I am sorry the game that got made isn't really much of anything, but I wanted to focus on KevEdit itself. So let me give a few recommendations for worlds to check out if you're interested in making a ZZT game with (or without) KevEdit!

Further Exploration

This guide was meant to just be an overview of the features offered by KevEdit rather than a guide on making a ZZT game, but if you're making your first game, you can probably use some resources like that! So here are a few worlds worth taking a look at:

Demo by Tim Sweeney - The included Demo world with ZZT offers a brief overview of all the standard items, creatures, and terrains. It's definitely the first thing to check out if you want to make a ZZT world and have no experience with playing ZZT worlds.

Mega ZZT by Chris Kohler - Mega ZZT is a small collection of objects that might be of use in making a ZZT game. The objects are very simple and serve as good examples of what you can do with objects to turn into basic gameplay that follows ZZT's expected "move and shoot" mechanics.

The ZZT Encyclopaedia 3C compiled by Chronos30 - This is a massive resource into all aspects of ZZT engines. It includes numerous tricks that can be done with clever use of ZZT elements. It has a successor, the ZZT Encyclopaedia Online which is a bit less friendly to navigate due to being split up over many files.

ZZT Syndromes by Barjesse - The prior suggestions were all to show off what you can do with ZZT. Syndromes is an explanation of what you shouldn't do with ZZT. It goes over design and gameplay decisions that should be avoided to keep your worlds playable and enjoyable by their audience.

ZZT Crime by DavidN and Scorch3000 - A more modern successor to ZZT Syndromes. It's a tad more opinionated with what makes a ZZT game good or not, but it still offers some generally good ideas, just don't treat it as pure gospel.

Page #3/3
< 1 2 3

====== A Worlds of ZZT Production ======

The Worlds of ZZT project is committed to the preservation of ZZT and its history.

This article was produced thanks to supporters on Patreon.

Support Worlds of ZZT on Patreon!
Top of Page
Article directory
Main page