ZZT Format
A world file (.ZZT, .SZT) contains information about a game world, status of the player, and all its boards. Saved games (.SAV) are the same format as world files with a different extension and a different setting for the Lock byte.
While there are built-in editors for these games, they do not provide full editing functionality.
Limits
ZZT and Super ZZT have limits imposed either by the game itself or by the data types used to store information about the world's contents.
Limitation | ZZT | Super ZZT |
---|---|---|
Board count (including title screen) | 101 | 33 |
Board size (in bytes) | 32767 | 32767 |
Board size (in tiles) | 60x25 | 96x80 |
Status Elements per board (including Player) | 151 | 129 |
Flag strings | 10 | 16 |
Realistically, the original ZZT can only support boards up to around 20k due to the code itself. ZZT 4.0 by WiL, a hack of the original game executable, can support the full 32k.
World Format
There are two formats for a world file. One is for ZZT and the other is for SuperZZT. The formats are very similar. All 8-bit (byte) values are unsigned. All 16-bit (short) values are signed. Boolean values (such as a player's keys) are represented with 0 for false and 1 for true; any other values may cause inconsistent behavior.
World Name is used by the game to determine which file to load after the player quits and restarts the game. Therefore if a world contains a world name that is actually the filename of another world, after the player quits and restarts the game, the world with the matching filename will be loaded!
There are some unused bytes after the world information that are ignored by the game. While it is safe to put any data whatsoever into this unused space, it is not saved back to disk by the game engine and will be converted to empty padding. ZZTAE is an editor that uses this space to store extra information such as the author and genre.
Common world information
The storage of this information is the same between the two formats. After this part of the file, the format will differ slightly.
Offset | Hex | Data type | Description |
---|---|---|---|
0 | 0x000 | INT16LE | WorldType Used to identify the world's format. ZZT uses -1 (FF FF) and SuperZZT uses -2 (FE FF). |
2 | 0x002 | INT16LE | NumBoards Number of boards in the world, not including the title screen. Increment by 1 for the real number of stored boards. A value of 0 means only the title screen exists. |
4 | 0x004 | INT16LE | PlayerAmmo Player's ammunition. |
6 | 0x006 | INT16LE | PlayerGems Player's gems. |
8 | 0x008 | char[7] | PlayerKeys Player's keys. A nonzero value means the player has the specified key. The keys are in this order: Blue, Green, Cyan, Red, Purple, Yellow, White. |
15 | 0x00F | INT16LE | PlayerHealth Player's health. |
17 | 0x011 | INT16LE | PlayerBoard In a world file, this will be the starting board for the player (the title screen, board 0, is always shown first). In a saved game, this will be the board that the player is currently on. |
ZZT world header
This is the second half of the header specific to a .ZZT file. After this information, storage of the boards starts at byte offset 512 (hex 0x200).
Unused values are preserved. Data not listed here is overwritten with zeroes when saving worlds.
Offset | Hex | Data type | Description |
---|---|---|---|
19 | 0x013 | INT16LE | PlayerTorches Player's torches. |
21 | 0x015 | INT16LE | TorchCycles Game cycles left for a torch to remain lit. |
23 | 0x017 | INT16LE | EnergyCycles Game cycles left for an energizer to be effective. |
25 | 0x019 | INT16LE | (unused) |
27 | 0x01B | INT16LE | PlayerScore Player's score. |
29 | 0x01D | UINT8 | WorldNameLength Length of the internal name of the world. |
30 | 0x01E | char[20] | WorldName Internal name of the world. |
50 | 0x032 | UINT8 | Flag0Length Length of the name of Flag 0. |
51 | 0x033 | char[20] | Flag0 Name of Flag 0. |
71 | 0x047 | UINT8 | Flag1Length Length of the name of Flag 1. |
72 | 0x048 | char[20] | Flag1 Name of Flag 1. |
92 | 0x05C | UINT8 | Flag2Length Length of the name of Flag 2. |
93 | 0x05D | char[20] | Flag2 Name of Flag 2. |
113 | 0x071 | UINT8 | Flag3Length Length of the name of Flag 3. |
114 | 0x072 | char[20] | Flag3 Name of Flag 3. |
134 | 0x086 | UINT8 | Flag4Length Length of the name of Flag 4. |
135 | 0x087 | char[20] | Flag4 Name of Flag 4. |
155 | 0x09B | UINT8 | Flag5Length Length of the name of Flag 5. |
156 | 0x09C | char[20] | Flag5 Name of Flag 5. |
176 | 0x0B0 | UINT8 | Flag6Length Length of the name of Flag 6. |
177 | 0x0B1 | char[20] | Flag6 Name of Flag 6. |
197 | 0x0C5 | UINT8 | Flag7Length Length of the name of Flag 7. |
198 | 0x0C6 | char[20] | Flag7 Name of Flag 7. |
218 | 0x0DA | UINT8 | Flag8Length Length of the name of Flag 8. |
219 | 0x0DB | char[20] | Flag8 Name of Flag 8. |
239 | 0x0EF | UINT8 | Flag9Length Length of the name of Flag 9. |
240 | 0x0F0 | char[20] | Flag9 Name of Flag 9. |
260 | 0x104 | INT16LE | TimePassed Amount of time in seconds that has passed on the current board. Only applicable if the board the player is on has a time limit. |
262 | 0x106 | INT16LE | TimePassedTicks This contains information about sub-seconds on time limited boards. |
264 | 0x108 | UINT8 | Locked A nonzero value indicates the world is actually a saved game. Additionally, worlds with a nonzero Locked byte can't be edited using the built-in editor. |
265 | 0x109 | UINT8[14] | (unused) |
Super ZZT world header
This is the second half of the header specific to a .SZT file. After this information, storage of the boards starts at byte offset 1024 (hex 0x400).
Unused values are preserved. Data not listed here is overwritten with zeroes when saving worlds.
Offset | Hex | Data type | Description |
---|---|---|---|
19 | 0x013 | INT16LE | (unused) |
21 | 0x015 | INT16LE | PlayerScore Player's score. |
23 | 0x017 | INT16LE | (unused) |
25 | 0x019 | INT16LE | EnergyCycles Game cycles left for an energizer to be effective. |
27 | 0x01B | UINT8 | WorldNameLength Length of the internal name of the world. |
28 | 0x01C | char[20] | WorldName Internal name of the world. |
48 | 0x030 | UINT8 | Flag0Length Length of the name of Flag 0. |
49 | 0x031 | char[20] | Flag0 Name of Flag 0. |
69 | 0x045 | UINT8 | Flag1Length Length of the name of Flag 1. |
70 | 0x046 | char[20] | Flag1 Name of Flag 1. |
90 | 0x05A | UINT8 | Flag2Length Length of the name of Flag 2. |
91 | 0x05B | char[20] | Flag2 Name of Flag 2. |
111 | 0x06F | UINT8 | Flag3Length Length of the name of Flag 3. |
112 | 0x070 | char[20] | Flag3 Name of Flag 3. |
132 | 0x084 | UINT8 | Flag4Length Length of the name of Flag 4. |
133 | 0x085 | char[20] | Flag4 Name of Flag 4. |
153 | 0x099 | UINT8 | Flag5Length Length of the name of Flag 5. |
154 | 0x09A | char[20] | Flag5 Name of Flag 5. |
174 | 0x0AE | UINT8 | Flag6Length Length of the name of Flag 6. |
175 | 0x0AF | char[20] | Flag6 Name of Flag 6. |
195 | 0x0C3 | UINT8 | Flag7Length Length of the name of Flag 7. |
196 | 0x0C4 | char[20] | Flag7 Name of Flag 7. |
216 | 0x0D8 | UINT8 | Flag8Length Length of the name of Flag 8. |
217 | 0x0D9 | char[20] | Flag8 Name of Flag 8. |
237 | 0x0ED | UINT8 | Flag9Length Length of the name of Flag 9. |
238 | 0x0EE | char[20] | Flag9 Name of Flag 9. |
258 | 0x102 | UINT8 | Flag10Length Length of the name of Flag 10. |
259 | 0x103 | char[20] | Flag10 Name of Flag 10. |
279 | 0x117 | UINT8 | Flag11Length Length of the name of Flag 11. |
280 | 0x118 | char[20] | Flag11 Name of Flag 11. |
300 | 0x12C | UINT8 | Flag12Length Length of the name of Flag 12. |
301 | 0x12D | char[20] | Flag12 Name of Flag 12. |
321 | 0x141 | UINT8 | Flag13Length Length of the name of Flag 13. |
322 | 0x142 | char[20] | Flag13 Name of Flag 13. |
342 | 0x156 | UINT8 | Flag14Length Length of the name of Flag 14. |
343 | 0x157 | char[20] | Flag14 Name of Flag 14. |
363 | 0x16B | UINT8 | Flag15Length Length of the name of Flag 15. |
364 | 0x16C | char[20] | Flag15 Name of Flag 15. |
384 | 0x180 | INT16LE | TimePassed Amount of time in seconds that has passed on the current board. Only applicable if the board the player is on has a time limit. |
386 | 0x182 | INT16LE | TimePassedTicks This contains information about sub-seconds on time limited boards. |
388 | 0x184 | UINT8 | Locked A nonzero value indicates the world is actually a saved game. Additionally, worlds with a nonzero Locked byte can't be edited using the built-in editor. |
389 | 0x185 | INT16LE | PlayerStones Player's stones of power. If this value is negative, no information is shown in-game about them. If this value is >= 0, it uses a flag to describe this value in the status bar of the game. The flag used is the first one found that is preceded with a Z. "The Lost Forest" contains a flag called "ZSTONES" which shows as "STONES" on the status bar, for example. |
391 | 0x187 | UINT8[11] | (unused) |
Board Format
Boards can be stored individually in .BRD files. Since ZZT and Super ZZT use the same extension for boards and there is no world information stored with them, it isn't immediately apparent whether the board is a ZZT or a Super ZZT board. Testing the validity of the board information with both world types should be a good way to determine the type of world a board belongs to.
Format layout
Boards consist of 4 parts: Board Header, RLE Tiles, Board Properties, and Status Element Properties. Status Elements are elements on the board that the game actively processes - these include the player, enemies, any animating blocks, and Scrolls and Objects which can contain ZZT-OOP code.
ZZT board header
ZZT boards are 60x25 tiles.
Offset | Hex | Data type | Description |
---|---|---|---|
0 | 0x000 | INT16LE | BoardSize Size of the board, in bytes (excluding the two bytes from this value). Even if the board was corrupted by the built-in editor (which happens sometimes) this value will be correct; the rest of the boards remain intact and in place. |
2 | 0x002 | UINT8 | BoardNameLength Length of the board's name. |
3 | 0x003 | char[50] | BoardName Board's name. |
53 | 0x035 | ZZT_RLE | Tiles Start of the RLE tile data. |
Super ZZT board header
Super ZZT boards are 96x80 tiles.
Offset | Hex | Data type | Description |
---|---|---|---|
0 | 0x000 | INT16LE | BoardSize Size of the board, in bytes. Even if the board was corrupted by the built-in editor (which happens sometimes) this value will be correct; the rest of the boards remain intact and in place. |
2 | 0x002 | UINT8 | BoardNameLength Length of the board's name. |
3 | 0x003 | char[60] | BoardName Board's name. |
63 | 0x03F | ZZT_RLE | Tiles Start of the RLE tile data. |
Run-length encoded tile data
Tile data is represented as sets of 3 bytes. These sets are repeated until the board is completely filled. For ZZT, this will be 60*25=1500 tiles. For SuperZZT, this will be 96*80=7680 tiles. The tiles are unpacked from left to right, top to bottom.
Data type | Description |
---|---|
UINT8 | Count Number of tiles. |
UINT8 | Element Element of the tiles. |
UINT8 | Color Color of the tiles. |
A small quirk of this RLE format is when the number of tiles is set to zero. Due to the way the decoder is set up, a Count of 0 means there are actually 256 tiles encoded. The built-in editor does not encode tiles using this value despite being decoded correctly in the game, and it will probably crash some older external editors.
ZZT board properties
This information follows directly after the tile RLE data.
Offset | Hex | Data type | Description |
---|---|---|---|
0 | 0x000 | UINT8 | MaxPlayerShots Maximum number of player-owned projectiles allowed at once. |
1 | 0x001 | UINT8 | IsDark When set to 1, the board is covered in darkness which can only be revealed by using a torch. |
2 | 0x002 | UINT8 | ExitNorth Board # that is traveled to when moving off the North side of the board. |
3 | 0x003 | UINT8 | ExitSouth Board # that is traveled to when moving off the South side of the board. |
4 | 0x004 | UINT8 | ExitWest Board # that is traveled to when moving off the West side of the board. |
5 | 0x005 | UINT8 | ExitEast Board # that is traveled to when moving off the East side of the board. |
6 | 0x006 | UINT8 | RestartOnZap When set to 1, the player will teleport to the location where they entered the board whenever they are hurt. |
7 | 0x007 | UINT8 | MessageLength Length of the on-screen message. |
8 | 0x008 | char[58] | Message On-screen message. This is used internally and is not loaded by the game. |
66 | 0x042 | UINT8 | PlayerEnterX X-coordinate of the tile where the player entered the board. |
67 | 0x043 | UINT8 | PlayerEnterY Y-coordinate of the tile where the player entered the board. |
68 | 0x044 | INT16LE | TimeLimit Time limit of the board, in seconds. The player is hurt when time runs out. |
70 | 0x046 | UINT8[16] | (unused) |
86 | 0x056 | INT16LE | StatElementCount Number of Status Elements on the board, not including the player. Increment by 1 to get the real stored number of status elements. |
Super ZZT board properties
This information follows directly after the tile RLE data.
Offset | Hex | Data type | Description |
---|---|---|---|
0 | 0x000 | UINT8 | MaxPlayerShots Maximum number of player-owned projectiles allowed at once. |
1 | 0x001 | UINT8 | ExitNorth Board # that is traveled to when moving off the North side of the board. |
2 | 0x002 | UINT8 | ExitSouth Board # that is traveled to when moving off the South side of the board. |
3 | 0x003 | UINT8 | ExitWest Board # that is traveled to when moving off the West side of the board. |
4 | 0x004 | UINT8 | ExitEast Board # that is traveled to when moving off the East side of the board. |
5 | 0x005 | UINT8 | RestartOnZap When set to 1, the player will teleport to the location where they entered the board whenever they are hurt. |
6 | 0x006 | UINT8 | PlayerEnterX X-coordinate of the tile where the player entered the board. |
7 | 0x007 | UINT8 | PlayerEnterY Y-coordinate of the tile where the player entered the board. |
8 | 0x008 | INT16LE | CameraX X-coordinate of the viewport. This value is not used when loading worlds. |
10 | 0x00A | INT16LE | CameraY Y-coordinate of the viewport. This value is not used when loading worlds. |
12 | 0x00C | INT16LE | TimeLimit Time limit of the board, in seconds. The player is hurt when time runs out. |
14 | 0x00E | UINT8[14] | (unused) |
28 | 0x01C | INT16LE | StatElementCount Number of Status Elements on the board, not including the player. Increment by 1 to get the real stored number of status elements. |
Status Elements
This follows directly after board properties. It is repeated for each Status Element. The first element stored is always the player-controlled element. This element may contain strange values for Step, Leader and Follower information - this is because these values are used internally by the game.
Offset | Hex | Data type | Description |
---|---|---|---|
0 | 0x000 | UINT8 | LocationX X-coordinate. Location coordinates are 1-based, unlike any other coordinates in the file. |
1 | 0x001 | UINT8 | LocationY Y-coordinate. |
2 | 0x002 | INT16LE | StepX X-step value. This pair of values represents a vector that typically points in one of the four cardinal directions. Its use differs for each type of element. |
4 | 0x004 | INT16LE | StepY Y-step value. |
6 | 0x006 | INT16LE | Cycle Cycle. This represents the frequency, in ticks, at which the game will process this status element. |
8 | 0x008 | UINT8 | P1 Parameter 1. Its use will differ depending on the type of element. |
9 | 0x009 | UINT8 | P2 Parameter 2. Its use will differ depending on the type of element. |
10 | 0x00A | UINT8 | P3 Parameter 3. Its use will differ depending on the type of element. |
11 | 0x00B | INT16LE | Follower Follower status element. Its value determines if another status element is linked behind this one. Typically used for linking centipedes. |
13 | 0x00D | INT16LE | Leader Leader status element. Its value determines if another status element is linked in front of this one. Typically used for linking centipedes. |
15 | 0x00F | UINT8 | UnderID Element of the tile under this status element. |
16 | 0x010 | UINT8 | UnderColor Color of the tile under this status element. |
17 | 0x011 | INT32LE | Pointer Stores the location in memory of the code that this status element is using. Status elements typically point to their own code until they #BIND the code of another - in which case this memory location value is replaced with the new one. ZZT does not use this value when loading worlds, and always sets it to 0 when saving worlds. |
21 | 0x015 | INT16LE | CurrentInstruction The offset in bytes of the code block to execute ZZT-OOP from. Only Objects and Scrolls can execute ZZT-OOP. |
23 | 0x017 | INT16LE | Length There are two uses for this value: If this value is positive, it represents the number of bytes that are in the code block. If this value is negative, the absolute value of this value represents the Status Element number to copy code from. This saves space by removing redundant code duplication. Since code is shared in this way, all modifications to code will affect any other Status Elements using it. |
In ZZT (not Super ZZT), 8 bytes of padding will follow.
If "Length" is positive, the code will be stored here.
Element Lists
This is a list of all valid built-in elements that can be used. Using any elements outside this range produce undefined behavior which is dependent on whatever was residing in memory at the time the game was loaded. Most often, it will crash.
Element properties
These are all possible internal properties for each element. Note: The addresses shown are not really significant- you should only consider which ones share the same code to cut down on how many element behaviors to consider.
Property | Description |
---|---|
Id | Id number of the element |
Hex | Hexidecimal representation of the Id number |
Name | Known name of the element, which may not be present internally |
Character | ASCII character for the default draw code, which may be ignored if special draw code is enabled |
Color | Default color. If the color is 0xFE, then new tiles will be created with the primary color as the background and a white foreground. If the color is >= 0xF0, any primary color is allowed, but in the editor you can't choose the color unless the default color is 0xFF |
Destructible | Element can be destroyed by bullets and by being crushed by puzzle pieces |
Pushable | Element can be pushed. The NS/EW sliders are a special case in the code, so they will not be marked with this flag |
Editor Floor | When using the editor, actors such as enemies can be placed on top of elements marked with this flag. Has no effect during gameplay. |
Floor | Elements with this flag can freely be moved upon by actors |
Shown | ZZT only. Elements marked with this flag will always be shown, even on dark boards |
Special Draw | If this flag is set, the default draw code is bypassed with different draw code |
Draw Code | Offset of the routine that performs the drawing, if Special Draw is set |
Cycle | Default cycle. If this is -1, the element is not generated as an actor. Creatures will have cycles above zero |
Act Code | Offset of the routine that performs standard behavior. For example: creature movement, bomb countdown |
Interact Code | Offset of the routine that handles when a player touches the element. For example: item pickups, entering a passage |
Menu# | Number of the editor menu where this element can be found |
Key | Key press which is mapped to this element in the editor |
Internal Name | Name of the element used in the editor. It is also used by OOP- the parser will remove all symbols and spaces and compare that |
Category | When it comes time to display this element in the editor, if present, the category will be drawn in yellow first. |
Edit P1 | Text to show when editing the P1 of an actor that uses this element |
Edit P2 | Text to show when editing the P2 of an actor that uses this element |
Edit P3 | Text to show when editing the P3 of an actor that uses this element |
Edit Board | Text to show when selecting the target board |
Edit Step | Text to show when selecting the target direction |
Edit Code | Text to show when editing an actor's code (scroll or object OOP) |
Points | When an actor using this element is killed by the player, it's worth this much score |
ZZT elements
Id | Hex | Name | Character | Color | Destructible | Pushable | Editor Floor | Floor | Shown | Special Draw | Draw Code | Cycle | Act Code | Interact Code | Menu# | Key | Internal Name | Category | Edit P1 | Edit P2 | Edit P3 | Edit Board | Edit Step | Edit Code | Points |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0x00 | Empty | 0x20 | 0x70 | Yes | Yes | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | Empty | 0 | ||||||||||||
1 | 0x01 | Board Edge | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x3973 | 0 | 0 | |||||||||||||||
2 | 0x02 | Messenger | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0039 | 0x0010 | 0 | 0 | |||||||||||||||
3 | 0x03 | Monitor | 0x20 | 0x07 | 0x0020 | 1 | 0x4481 | 0x0010 | 0 | Monitor | 0 | ||||||||||||||
4 | 0x04 | Player | 0x02 | 0x1F | Yes | Yes | Yes | 0x0020 | 1 | 0x3E2F | 0x0010 | 1 | Z | Player | Items: | 0 | |||||||||
5 | 0x05 | Ammo | 0x84 | 0x03 | Yes | 0x0020 | -1 | 0x0000 | 0x3289 | 1 | A | Ammo | 0 | ||||||||||||
6 | 0x06 | Torch | 0x9D | 0x06 | Yes | 0x0020 | -1 | 0x0000 | 0x37B6 | 1 | T | Torch | 0 | ||||||||||||
7 | 0x07 | Gem | 0x04 | Any (0xFF) | Yes | Yes | 0x0020 | -1 | 0x0000 | 0x3306 | 1 | G | Gem | 0 | |||||||||||
8 | 0x08 | Key | 0x0C | Any (0xFF) | Yes | 0x0020 | -1 | 0x0000 | 0x3169 | 1 | K | Key | 0 | ||||||||||||
9 | 0x09 | Door | 0x0A | Any BG (0xFE) | 0x0020 | -1 | 0x0000 | 0x33DA | 1 | D | Door | 0 | |||||||||||||
10 | 0x0A | Scroll | 0xE8 | 0x0F | Yes | 0x0020 | 1 | 0x2F9F | 0x308B | 1 | S | Scroll | Edit text of scroll | 0 | |||||||||||
11 | 0x0B | Passage | 0xF0 | Any BG (0xFE) | Yes | 0x0020 | 0 | 0x0000 | 0x3372 | 1 | P | Passage | Room thru passage? | 0 | |||||||||||
12 | 0x0C | Duplicator | 0xFA | 0x0F | Yes | 0x2A15 | 2 | 0x2BFF | 0x0010 | 1 | U | Duplicator | Duplication rate?;SF | Source direction? | 0 | ||||||||||
13 | 0x0D | Bomb | 0x0B | Any (0xFF) | Yes | Yes | 0x1872 | 6 | 0x18DA | 0x19F3 | 1 | B | Bomb | 0 | |||||||||||
14 | 0x0E | Energizer | 0x7F | 0x05 | 0x0020 | -1 | 0x0000 | 0x2034 | 1 | E | Energizer | 0 | |||||||||||||
15 | 0x0F | Star | 0x53 | 0x0F | Yes | 0x1D5D | 1 | 0x1DE9 | 0x00F5 | 0 | Star | 0 | |||||||||||||
16 | 0x10 | Clockwise | 0x2F | Any (0xFF) | Yes | 0x171C | 3 | 0x176C | 0x0010 | 1 | 1 | Clockwise | Conveyors: | 0 | |||||||||||
17 | 0x11 | Counter | 0x5C | Any (0xFF) | Yes | 0x17C7 | 2 | 0x1817 | 0x0010 | 1 | 2 | Counter | 0 | ||||||||||||
18 | 0x12 | Bullet | 0xF8 | 0x0F | Yes | 0x0020 | 1 | 0x0F65 | 0x00F5 | 0 | Bullet | 0 | |||||||||||||
19 | 0x13 | Water | 0xB0 | 0xF9 | Yes | 0x0020 | -1 | 0x0000 | 0x3B03 | 3 | W | Water | Terrains: | 0 | |||||||||||
20 | 0x14 | Forest | 0xB0 | 0x20 | 0x0020 | -1 | 0x0000 | 0x38D0 | 3 | F | Forest | 0 | |||||||||||||
21 | 0x15 | Solid | 0xDB | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 3 | S | Solid | Walls: | 0 | ||||||||||||
22 | 0x16 | Normal | 0xB2 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 3 | N | Normal | 0 | |||||||||||||
23 | 0x17 | Breakable | 0xB1 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 3 | B | Breakable | 0 | |||||||||||||
24 | 0x18 | Boulder | 0xFE | Any (0xFF) | Yes | 0x0020 | -1 | 0x0000 | 0x34E3 | 3 | O | Boulder | 0 | ||||||||||||
25 | 0x19 | Slider (NS) | 0x12 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x34E3 | 3 | 1 | Slider (NS) | 0 | |||||||||||||
26 | 0x1A | Slider (EW) | 0x1D | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x34E3 | 3 | 2 | Slider (EW) | 0 | |||||||||||||
27 | 0x1B | Fake | 0xB2 | Any (0xFF) | Yes | Yes | 0x0020 | -1 | 0x0000 | 0x3949 | 3 | A | Fake | 0 | |||||||||||
28 | 0x1C | Invisible | 0xB0 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x3848 | 3 | I | Invisible | 0 | |||||||||||||
29 | 0x1D | Blink wall | 0xCE | Any (0xFF) | Yes | 0x242E | 1 | 0x2445 | 0x0010 | 3 | L | Blink wall | Starting time | Period | Wall direction | 0 | |||||||||
30 | 0x1E | Transporter | 0xC5 | Any (0xFF) | Yes | 0x1CC5 | 2 | 0x1C85 | 0x1C41 | 3 | T | Transporter | Direction? | 0 | |||||||||||
31 | 0x1F | Line | 0xCE | Any (0xFF) | Yes | 0x122A | -1 | 0x0000 | 0x0010 | 0 | Line | 0 | |||||||||||||
32 | 0x20 | Ricochet | 0x2A | 0x0A | 0x0020 | -1 | 0x0000 | 0x0010 | 3 | R | Ricochet | 0 | |||||||||||||
33 | 0x21 | Blink Ray (Horizontal) | 0xCD | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
34 | 0x22 | Bear | 0x99 | 0x06 | Yes | Yes | 0x0020 | 3 | 0x054F | 0x00F5 | 2 | B | Bear | Creatures: | Sensitivity? | 1 | |||||||||
35 | 0x23 | Ruffian | 0x05 | 0x0D | Yes | Yes | 0x0020 | 1 | 0x0351 | 0x00F5 | 2 | R | Ruffian | Intelligence? | Resting time? | 2 | |||||||||
36 | 0x24 | Object | 0x02 | Any (0xFF) | Yes | 0x2B85 | 3 | 0x2AA5 | 0x2BB7 | 2 | O | Object | Character? | Edit Program | 0 | ||||||||||
37 | 0x25 | Slime | 0x2A | Any (0xFF) | 0x0020 | 3 | 0x20AE | 0x2295 | 2 | V | Slime | Movement speed?;FS | 0 | ||||||||||||
38 | 0x26 | Shark | 0x5E | 0x07 | 0x0020 | 3 | 0x2321 | 0x0010 | 2 | Y | Shark | Intelligence? | 0 | ||||||||||||
39 | 0x27 | Spinning gun | 0x18 | Any (0xFF) | Yes | 0x11D0 | 2 | 0x12A7 | 0x0010 | 2 | G | Spinning gun | Intelligence? | Firing rate? | Firing type? | 0 | |||||||||
40 | 0x28 | Pusher | 0x10 | Any (0xFF) | Yes | 0x3517 | 4 | 0x358A | 0x0010 | 2 | P | Pusher | Push direction? | 0 | |||||||||||
41 | 0x29 | Lion | 0xEA | 0x0C | Yes | Yes | 0x0020 | 2 | 0x0113 | 0x00F5 | 2 | L | Lion | Beasts: | Intelligence? | 1 | |||||||||
42 | 0x2A | Tiger | 0xE3 | 0x0B | Yes | Yes | 0x0020 | 2 | 0x022D | 0x00F5 | 2 | T | Tiger | Intelligence? | Firing rate? | Firing type? | 2 | ||||||||
43 | 0x2B | Blink Ray (Vertical) | 0xBA | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
44 | 0x2C | Head | 0xE9 | Any (0xFF) | Yes | 0x0020 | 2 | 0x06BF | 0x00F5 | 2 | H | Head | Centipedes | Intelligence? | Deviance? | 1 | |||||||||
45 | 0x2D | Segment | 0x4F | Any (0xFF) | Yes | 0x0020 | 2 | 0x0EED | 0x00F5 | 2 | S | Segment | 3 | ||||||||||||
46 | 0x2E | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | ||||||||||||||||
47 | 0x2F | Text (Blue) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
48 | 0x30 | Text (Green) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
49 | 0x31 | Text (Cyan) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
50 | 0x32 | Text (Red) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
51 | 0x33 | Text (Purple) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
52 | 0x34 | Text (Brown) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
53 | 0x35 | Text (Black) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 |
Super ZZT elements
Internal properties for each of these elements can be found in the Super ZZT Elements Pastebin.
Id | Hex | Name | Character | Color | Destructible | Pushable | Editor Floor | Floor | Special Draw | Draw Code | Cycle | Act Code | Interact Code | Menu# | Key | Internal Name | Category | Edit P1 | Edit P2 | Edit P3 | Edit Board | Edit Step | Edit Code | Points |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0x00 | Empty | 0x20 | 0x70 | Yes | Yes | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | Empty | 0 | |||||||||||
1 | 0x01 | Board Edge | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x3FA5 | 0 | 0 | ||||||||||||||
2 | 0x02 | Messenger | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0039 | 0x0010 | 0 | 0 | ||||||||||||||
3 | 0x03 | Monitor | 0x02 | 0x1F | Yes | 0x0020 | 1 | 0x4B76 | 0x0010 | 0 | Monitor | 0 | ||||||||||||
4 | 0x04 | Player | 0x02 | 0x1F | Yes | Yes | 0x0020 | 1 | 0x4596 | 0x0010 | 1 | Z | Player | Items: | 0 | |||||||||
5 | 0x05 | Ammo | 0x84 | 0x03 | Yes | 0x0020 | -1 | 0x0000 | 0x37E7 | 1 | A | Ammo | 0 | |||||||||||
6 | 0x06 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
7 | 0x07 | Gem | 0x04 | Any (0xFF) | Yes | Yes | 0x0020 | -1 | 0x0000 | 0x397D | 1 | G | Gem | 0 | ||||||||||
8 | 0x08 | Key | 0x0C | Any (0xFF) | Yes | 0x0020 | -1 | 0x0000 | 0x36F2 | 1 | K | Key | 0 | |||||||||||
9 | 0x09 | Door | 0x0A | Any BG (0xFE) | 0x0020 | -1 | 0x0000 | 0x3A63 | 1 | D | Door | 0 | ||||||||||||
10 | 0x0A | Scroll | 0xE8 | 0x0F | Yes | 0x0020 | 1 | 0x3517 | 0x3603 | 1 | S | Scroll | Edit text of scroll | 0 | ||||||||||
11 | 0x0B | Passage | 0xF0 | Any BG (0xFE) | 0x0020 | 0 | 0x0000 | 0x39ED | 1 | P | Passage | Room thru passage? | 0 | |||||||||||
12 | 0x0C | Duplicator | 0xFA | 0x0F | Yes | 0x2E32 | 2 | 0x3177 | 0x0010 | 1 | U | Duplicator | Duplication rate?;SF | Source direction? | 0 | |||||||||
13 | 0x0D | Bomb | 0x0B | Any (0xFF) | Yes | Yes | 0x1DBD | 6 | 0x1E25 | 0x1F3F | 1 | B | Bomb | 0 | ||||||||||
14 | 0x0E | Energizer | 0x7F | 0x05 | 0x0020 | -1 | 0x0000 | 0x2581 | 1 | E | Energizer | 0 | ||||||||||||
15 | 0x0F | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
16 | 0x10 | Clockwise | 0x2F | Any (0xFF) | Yes | 0x1C67 | 3 | 0x1CB7 | 0x0010 | 1 | 1 | Clockwise | Conveyors: | 0 | ||||||||||
17 | 0x11 | Counter | 0x5C | Any (0xFF) | Yes | 0x1D12 | 2 | 0x1D62 | 0x0010 | 1 | 2 | Counter | 0 | |||||||||||
18 | 0x12 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
19 | 0x13 | Lava | 0x6F | 0x4E | Yes | 0x0020 | -1 | 0x0000 | 0x4155 | 3 | L | Lava | Terrains: | 0 | ||||||||||
20 | 0x14 | Forest | 0xB0 | 0x20 | 0x0020 | -1 | 0x0000 | 0x3EAF | 3 | F | Forest | 0 | ||||||||||||
21 | 0x15 | Solid | 0xDB | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 3 | S | Solid | Walls: | 0 | |||||||||||
22 | 0x16 | Normal | 0xB2 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 3 | N | Normal | 0 | ||||||||||||
23 | 0x17 | Breakable | 0xB1 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 3 | B | Breakable | 0 | ||||||||||||
24 | 0x18 | Boulder | 0xFE | Any (0xFF) | Yes | 0x0020 | -1 | 0x0000 | 0x3B5A | 3 | O | Boulder | 0 | |||||||||||
25 | 0x19 | Slider (NS) | 0x12 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x3B5A | 3 | 1 | Slider (NS) | 0 | ||||||||||||
26 | 0x1A | Slider (EW) | 0x1D | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x3B5A | 3 | 2 | Slider (EW) | 0 | ||||||||||||
27 | 0x1B | Fake | 0xB2 | Any (0xFF) | Yes | Yes | 0x0020 | -1 | 0x0000 | 0x3F6C | 3 | A | Fake | 0 | ||||||||||
28 | 0x1C | Invisible | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x3E23 | 3 | I | Invisible | 0 | ||||||||||||
29 | 0x1D | Blink wall | 0xCE | Any (0xFF) | Yes | 0x285B | 1 | 0x2872 | 0x0010 | 3 | X | Blink wall | Starting time | Period | Wall direction | 0 | ||||||||
30 | 0x1E | Transporter | 0xC5 | Any (0xFF) | Yes | 0x2216 | 2 | 0x21D6 | 0x2192 | 3 | T | Transporter | Direction? | 0 | ||||||||||
31 | 0x1F | Line | 0xCE | Any (0xFF) | Yes | 0x17C3 | -1 | 0x0000 | 0x0010 | 0 | Line | 0 | ||||||||||||
32 | 0x20 | Ricochet | 0x2A | 0x0A | 0x0020 | -1 | 0x0000 | 0x0010 | 3 | R | Ricochet | 0 | ||||||||||||
33 | 0x21 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
34 | 0x22 | Bear | 0xEB | 0x02 | Yes | Yes | 0x0020 | 3 | 0x09C1 | 0x014C | 2 | B | Bear | Creatures: | Sensitivity? | 1 | ||||||||
35 | 0x23 | Ruffian | 0x05 | 0x0D | Yes | Yes | 0x0020 | 1 | 0x07C3 | 0x014C | 2 | R | Ruffian | Intelligence? | Resting time? | 2 | ||||||||
36 | 0x24 | Object | 0x02 | Any (0xFF) | Yes | 0x30FD | 3 | 0x2EC2 | 0x312F | 2 | O | Object | Character? | Edit Program | 0 | |||||||||
37 | 0x25 | Slime | 0x2A | Any (0xFF) | 0x0020 | 3 | 0x25E8 | 0x27CF | 2 | V | Slime | Movement speed?;FS | 0 | |||||||||||
38 | 0x26 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
39 | 0x27 | Spinning gun | 0x18 | Any (0xFF) | Yes | 0x1663 | 2 | 0x1811 | 0x0010 | 2 | G | Spinning gun | Intelligence? | Firing rate? | Firing type? | 0 | ||||||||
40 | 0x28 | Pusher | 0x10 | Any (0xFF) | Yes | 0x3B8E | 4 | 0x3C01 | 0x0010 | 2 | P | Pusher | Push direction? | 0 | ||||||||||
41 | 0x29 | Lion | 0xEA | 0x0C | Yes | Yes | 0x0020 | 2 | 0x016A | 0x014C | 2 | L | Lion | Beasts: | Intelligence? | 1 | ||||||||
42 | 0x2A | Tiger | 0xE3 | 0x0B | Yes | Yes | 0x0020 | 2 | 0x0284 | 0x014C | 2 | T | Tiger | Intelligence? | Firing rate? | Firing type? | 2 | |||||||
43 | 0x2B | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
44 | 0x2C | Head | 0xE9 | Any (0xFF) | Yes | 0x0020 | 2 | 0x0B31 | 0x014C | 2 | H | Head | Centipedes | Intelligence? | Deviance? | 1 | ||||||||
45 | 0x2D | Segment | 0x4F | Any (0xFF) | Yes | 0x0020 | 2 | 0x1375 | 0x014C | 2 | S | Segment | 3 | |||||||||||
46 | 0x2E | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
47 | 0x2F | Floor | 0xB0 | Any (0xFF) | Yes | Yes | 0x0020 | -1 | 0x0000 | 0x0010 | 5 | F | Floor | Terrains: | 0 | |||||||||
48 | 0x30 | Water N | 0x1E | 0x19 | Yes | Yes | 0x0020 | -1 | 0x0000 | 0x0010 | 5 | 8 | Water N | 0 | ||||||||||
49 | 0x31 | Water S | 0x1F | 0x19 | Yes | Yes | 0x0020 | -1 | 0x0000 | 0x0010 | 5 | 2 | Water S | 0 | ||||||||||
50 | 0x32 | Water W | 0x11 | 0x19 | Yes | Yes | 0x0020 | -1 | 0x0000 | 0x0010 | 5 | 4 | Water W | 0 | ||||||||||
51 | 0x33 | Water E | 0x10 | 0x19 | Yes | Yes | 0x0020 | -1 | 0x0000 | 0x0010 | 5 | 6 | Water E | 0 | ||||||||||
52 | 0x34 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
53 | 0x35 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
54 | 0x36 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
55 | 0x37 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
56 | 0x38 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
57 | 0x39 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
58 | 0x3A | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
59 | 0x3B | Roton | 0x94 | 0x0D | Yes | Yes | 0x0020 | 1 | 0x03A8 | 0x014C | 4 | R | Roton | Uglies: | Intelligence? | Switch Rate? | 2 | |||||||
60 | 0x3C | Dragon Pup | 0xED | 0x04 | Yes | Yes | Yes | 0x05A3 | 2 | 0x0563 | 0x014C | 4 | D | Dragon Pup | Intelligence? | Switch Rate? | 1 | |||||||
61 | 0x3D | Pairer | 0xE5 | 0x01 | Yes | Yes | 0x0020 | 2 | 0x05E6 | 0x014C | 4 | P | Pairer | Intelligence? | 2 | |||||||||
62 | 0x3E | Spider | 0x0F | Any (0xFF) | Yes | 0x0020 | 1 | 0x06EB | 0x014C | 4 | S | Spider | Intelligence? | 3 | ||||||||||
63 | 0x3F | Web | 0xC5 | Any (0xFF) | Yes | Yes | Yes | 0x17EA | -1 | 0x0000 | 0x0010 | 5 | W | Web | 0 | |||||||||
64 | 0x40 | Stone | 0x5A | 0x0F | Yes | 0x38A1 | 1 | 0x38C3 | 0x385E | 5 | Z | Stone | 0 | |||||||||||
65 | 0x41 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
66 | 0x42 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
67 | 0x43 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
68 | 0x44 | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | |||||||||||||||
69 | 0x45 | Bullet | 0xF8 | 0x0F | Yes | 0x0020 | 1 | 0x13ED | 0x014C | 0 | Bullet | 0 | ||||||||||||
70 | 0x46 | Blink Ray (Horizontal) | 0xCD | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | ||||||||||||||
71 | 0x47 | Blink Ray (Vertical) | 0xBA | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | ||||||||||||||
72 | 0x48 | Star | 0x53 | 0x0F | Yes | 0x22AE | 1 | 0x233A | 0x014C | 0 | Star | 0 | ||||||||||||
73 | 0x49 | Text (Blue) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | ||||||||||||||
74 | 0x4A | Text (Green) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | ||||||||||||||
75 | 0x4B | Text (Cyan) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | ||||||||||||||
76 | 0x4C | Text (Red) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | ||||||||||||||
77 | 0x4D | Text (Purple) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | ||||||||||||||
78 | 0x4E | Text (Brown) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 | ||||||||||||||
79 | 0x4F | Text (Black) | 0x20 | Any (0xFF) | 0x0020 | -1 | 0x0000 | 0x0010 | 0 | 0 |
Credits
This file format was reverse engineered by SaxxonPike, Kev Vance, WiL and David Hammond. If you find this information helpful in a project you're working on, please give credit where credit is due. (A link back to this wiki would be nice too!)