ZZT Format

From ModdingWiki
Jump to: navigation, search
ZZT Format
Format typeSaved game
Save locationsUnknown
Elements savedAmmo, gems, keys, scores, many others
Games

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