From Wiki of ZZT
Jump to navigation Jump to search

The ZZT-OOP commands #set and #clear are used to set and clear flags from the world's flag list. Flags are strings limited to 20 characters in length, and only 10 flags can be set at a time. Internally, flags are converted into uppercase when set.

When using #set flag, ZZT checks to see if the flag has already been set. If it has been set already, then it does not set the flag again. If the flag has not been already set, then the flag is set in the first open flag slot. If no flag slot is open, then the last flag is overwritten.

The #clear flag command removes the flag from the flag list, replacing it with an empty string. Given how small the flag limit is, be sure to #clear flags when you are done with them. (If the flag list has been modified in an external editor to have multiple flags with the same name, then the last flag with the name will be removed.)

The presence of a flag can be detected using the #if command. For example:

#set flag
#if flag /e
#if not flag /w

The object in this scenario will move east, but will not move west.

Using the ? cheat prompt, the player can type +flag or -flag to set and clear flags manually. Several games have the player use this feature intentionally (eg to open an inventory menu) and not as a cheat.

Super ZZT

In Super ZZT the flag limit has been increased to 16. Additionally, a flag prefixed with the letter "Z" can serve as the name for the Stones of Power counter. (Note that Super ZZT expects the initial "Z" to be uppercase, so keep that in mind if you choose to use an external editor to have the name of the Stones counter be mixed-case.)


#set <flag> #clear <flag>


  • Due to how the interpreter works, flags set with ZZT-OOP are limited to letters (a-z), numbers (0-9), colons (:) and underscores (_). The first character is not allowed to be a number. Other symbols will cut the string off: for example, #set brick-wall will assign the flag "BRICK".
  • ZZT will technically allow setting flags with the same names as built-ins (contact, blocked, etc.), but attempting to read them with #if statements will always query the state of the built-in flag.