ZZT-OOP/Syntax
ZZT-OOP has a very simple syntax, as demonstrated by the following example:
@Fred 'Objects run their programs right away; 'the following command will temporarily 'halt program execution. #end :touch $This is an object named Fred! !move;Tell Fred to move around. #end :move /rndp rndne/rndp rndne ?n?n?n?n?s?s?s?s FRED: I moved around!
The first character of each statement determines how the rest of the line is treated. For example, the first line begins with the "at" symbol (@), which makes it a name; the second line begins with an apostrophe, which makes it a comment, etc... Our discussion of ZZT-OOP syntax continues with a list of all the possible starting characters and their effects.
' (Comment)
[edit | edit source]This is a comment, it does nothing but inform you or whoever looks at your code what a function does. If you have a very large file (>320KB), get rid of any of these you may have (not including ones used as zapped labels). Also: this statement isn't a comment in fact, but a pre-zapped label (that means you can jump to it only after you restored it)
(Text), $(Text)
[edit | edit source]This prints a line of text at the bottom of the screen, or if there is more than one line, print a scroll. Using $(Text)
prints text in a scroll centred and in white.
:(Label)
[edit | edit source]This is a label. You can jump to labels. Yes. You can also make other programs jump to labels.
!(Label);(Text)
[edit | edit source]This prints a line of text in a scroll in white with a pink arrow as a bulletpoint. This is an option. Selecting it will call the label given.
@ (Object Name)
[edit | edit source]The "@" character indicates that the rest of the line is the object's name. In the example above, the line @Fred
gives the object the name "Fred." The only limit on object names is that they must be stated on the first line of the program; "@" statements elsewhere in the file are ignored.
If a named object opens a text box, the object's name appears at the top of the textbox, replacing the generic title "Interaction." It is not necessary to give an object a name.
# (Generic Command)
[edit | edit source]The "#" character indicates a command, or a jump to a label. For example, the example program uses the command #end
to stop program execution. Many other commands exist; they will be discussed in detail in the next couple of chapters. For now, it is good enough to know what they look like.
/ and ? (Movement)
[edit | edit source]The "/" character instructs the object to move. The direction that the object moves is indicated by the text that follows; for example, /n
causes the object to move one space to the north (move up one space). When "/" is used and the object cannot move in the specified direction, the object will simply wait until it can move in that direction; this results in the object waiting forever if it is facing something that does not move, such as a wall. The "?" character works like "/", but with one difference: "?" movement commands will be ignored if the object cannot move in the specified direction.
Both "?" and "/" are unique because they can be "stacked"; this means that a movement instruction can be followed by another statement. For instance, in the example program, you saw the code ?n?n?n?n?s?s?s?s
. When this code runs, the movement instructions will be followed from left to right; the object will try to move four spaces upward, then four spaces downward. Types of statement can be mixed; for example, it is perfectly alright to say /n?n?n/n
or even /n/n/s/s#end
. However, you cannot stack a statement onto a non-movement statement. That is to say, /n/s/e/w#end
is valid ZZT-OOP, but /n/s/e/w#end/n
is not.