zap

From Wiki of ZZT
Jump to navigation Jump to search

#zap and #restore are ZZT-OOP commands for disabling labels. #zap will disable the first active occurence of label by turning it into a comment, while #restore will turn all comments "label" back into labels. (with caveats - see below). They allow selective disabling of labels on a given Object, as well as multiple meaningful destinations of the same label name.

Syntax

  • #zap <label>
  • #restore <label>

Bugs/Quirks

  • #restore does not work for labels located on the first line, as it relies on a newline preceding the label to locate it. For example, the following will not work correctly, because the touch label is on the first line of the program.
'touch
This will never be called!
#end
:shot
#restore touch

This can be worked around by using any non-label for the first line (a command like #end, a program name, or even a blank line).

  • #restore fails to restore labels after the first zapped-matching occurence if the line succeeding them starts on an alphabetic character or an underscore. For example:
#end
'touch
/iFirst line.
#end
'touch
Second line.
#end
:shot
#restore touch

This code will only restore the first touch label upon being shot; the second label will only be restored upon being shot a second time. This is because the second succeeding line starts with an alphabetic character S. Conversely, the following code:

#end
'touch
/iFirst line.
#end
'touch
/iSecond line.
#end
:shot
#restore touch

will restore both touch labels upon being shot just once. This is because the succeeding lines start with a non-alphabetic character (/).

  • #zap restart and #restore restart will always edit the second character of the targetted Object's code into ' or : respectively.
  • #zap and #restore edit the code of an Object - this means that, if the code is being used by other bound Objects, labels will be changed on all of them.
  • Due to a code quirk, #zap allows remotely zapping labels on other targets - for example, #zap all:label will zap one occurence of label on every object on the board.
    • #restore also allows doing this, but only for the first occurence of a given zapped label on every object.
      • One can, therefore, use #restore self:label to only restore the first zapped label in an object.