ZZT-OOP Programming Language guide CREDITS Created by P-Bends, the man philip2020@hotmail.com Finished May 06, 2003 Version 1.01 Special thanks to... -The mysterious "ZZT-OOP Programming Language Reference Manual" -The creators of ZZT for making this awesome, primitive game -GameFAQs for giving me purpose to write something like this -The people at my school for giving me the nickname P-Bends TABLE OF CONTENTS 1. Introduction 2. Format a. Symbols b. Text 3. Messages 4. Directions 5. Flags a. Flag variables b. Internal flags 6. Commands 7. Music a. Notes and Rests b. Parameters c. Sound effects 8. Objects vs. Scrolls 9. CHAR list 1. INTRODUCTION ZZT-OOP, or ZZT-Object Oriented Programming, is a very easy and concise language. It doesn't contain much, and is easy to learn. I have a file called "ZZT-OOP Programming Language Reference Manual." I have no idea how I got it, but would like to credit it as an outside source, for it is what taught me the language which I can assist everyone at GameFAQs in learning. ZZT came to me in two doses, and I don't know if this reference manual came with either, or if I or someone else in this household who used ZZT typed it up. However, I have it now and it is very useful. ZZT-OOP is used in the text of objects and scrolls. However, objects and scrolls bear major differences that will be described in Chapter 8. I will hereafter speak only of "objects," but know that most of what I describe applies to both, except where there are differences, which will be listed. Anyway, read on and email me if there is a question. 2. FORMAT (Symbols) ZZT-OOP contains 8 symbols that tell ZZT what comes after is not to be treated as regular text. The symbols are: @ # : / ? ! $ ' @objectname The "at" symbol denotes, in the first line of code, the title of the object. The title is shown to the user as its name and is used to receive messages from other objects. If the object has no title, or the title contains space bars, the object cannot receive messages from other objects. #command The pound sign denotes a command to the object. Commands will be listed in Chapter 6. :label The colon denotes a point in the code that can be accessed later using the SEND command. There are five specific labels that can also be accessed through other interaction; those will be described in Chapter 3. /direction The forward slash tells the object to move in the given direction. For more information, see the GO command. ?direction The question mark tells the object to try movement in the given direction. For more information, see the TRY command. !message;text The exclamation point denotes a menu choice accessed by the user. These are choices that the user can highlight and press "Enter" to be sent to a label in the code. $text The dollar sign denotes a line of text that will be centered to the user and appear white. It does nothing special except make the text look better. 'comment The apostrophe denotes a line of comment code. Comment code is for the programmer only, and is completely ignored by ZZT. (Text) Text is what the user reads while playing ZZT. This text is denoted by having none of the above symbols before the text. The only other types of code visible to the user are the buttons (!) and the centered text ($). 3. MESSAGES There are five special messages that are accessed not only by using the SEND command. These five messages are: :TOUCH, when the player touches the object. :SHOT, when the object is hit with a bullet. :BOMBED, when the object is in the blast radius of a bomb. :THUD, when the object hits a wall during the WALK command. :ENERGIZED, when the player touches an energizer. 4. DIRECTIONS Movement in ZZT is initiated with the valid directions, which range from the basic compass directions to random directions. The directions are: N (NORTH), S (SOUTH), E (EAST), and W (WEST), the compass directions. I (IDLE), the stationary direction. SEEK, toward the player. FLOW, the current direction. OPP , opposite to the given direction. CW , clockwise from the given direction. CCW , counter-clockwise from the given direction. RNDNS, random, north or south. RNDNE, random, north or east. RNDP , a random direction perpendicular to the given direction. 5. FLAGS (Flag variables) Flag variables are true/false variables. They are either SET or CLEAR/ Their status is changed with the SET and CLEAR commands. (Internal flags) Internal flags have to do with an object's surroundings. They include: ALLIGNED, whether the object is aligned horizontally or vertically with the player. CONTACT, whether the object is touching the player. BLOCKED , whether the object's path is obstructed in the given direction. ENERGIZED, whether the player is currently under the effect of an energizer. 6. COMMANDS Commands tell the object to perform a specific action. Commands include: #BECOME tells the object to change into the specified type of item or terrain. If no color is specified, the object retains its original color. #BIND changes the object's code to that of the specified object. #CHANGE changes all occurrences of a certain type of item or terrain into another. If no color is specified, it changes every color. #CHAR changes the object's character to that of the specified number. #CLEAR changes the status of the specified flag variable to CLEAR. #CYCLE changes the cycle speed of the object to the specified number. Speed ranges from 1 (fastest) to 255 (slowest). The default is 3. #DIE removes the object from the game. #END ends interaction with the object until it is triggered again. #ENDGAME removes all the player's health, ending the game. #GIVE gives the specified amount of the specified item to the player. Items to give are AMMO, GEMS, TORCHES, HEALTH, and SCORE. #GO moves the object in the specified direction. If movement is blocked, the object will stand until it can move or until another message is received. This is equivalent to / #IDLE keeps the object stationary for a moment. This is equivalent to /I #IF [THEN] tests the value of the specified flag, and if it is SET, sends programming to the specified message. The THEN is not required. #LOCK puts the object into "locked" mode, which means it cannot receive incoming messages. #PLAY plays the specified music. Music information is listed in Chapter 7. #PUT puts the specified type of item or terrain in the specified direction. #RESTART sends interaction to the first line of the object's code. #RESTORE restores the first instance of the specified label that was ZAPped. #SEND sends interaction to the specified label. #SEND : sends interaction of the specified object to the specified label. #SET changes the status of the specified flag variable to SET. #SHOOT fires a bullet in the specified direction. #TAKE [] takes from the player the specified amount of the specified item. If the player does not have enough, none is taken and, if a message is specified, interaction is sent there. #THROWSTAR sends a star, which tries to hit the player, in the given direction. #TRY tries to move the object in the given direction. If movement is blocked, the command is ignored. This is equivalent to ? #UNLOCK takes the object out of "locked" mode, which means it can receive incoming messages. #WALK makes the object start to walk in the specified direction. The object will keep moving that way until it receives the WALK IDLE command or until it walks into a wall, in which case the THUD message will be sent. #ZAP changes the pound sign at the beginning of the first instance of the specified message to an apostrophe, making it comment code and rendering the message "zapped." The message can be restored with the RESTORE command. 7. MUSIC Music is played with notes and rests preceded by parameters that describe the length of the note, among other things. (Notes and Rests) X is rest A - G are basic piano notes sometimes followed by: # is sharp ! is flat (Parameters) T denotes a 32nd note. S denotes a sixteenth note. I denotes an eighth note. Q denotes a quarter note. H denotes a half note. W denotes a whole note. 3 denotes triplets, meaning the three notes that follow take up the time of the one length specified. . denotes time-and-a-half, meaning the note that follows takes up one and a half times as long. + denotes going up one octave. - denotes going down one octave. (Sound effects) 0 tick 1 tweet 2 cowbell 4 high snare 5 high woodblock 6 low snare 7 low tom 8 low woodblock 9 bass drum 8. OBJECTS VS. SCROLLS Objects and scrolls both contain ZZT-OOP language. However, they have many differences. The interaction differences are that objects begin with their first line of code upon entering the room, while scrolls do when touched, and that objects simply stand idle when interaction ends, while scrolls die. Other major differences are that scrolls cannot move or change character. Which also means that their beginning character is always the same, and that color is not specified. Other than that, objects and scrolls are the same. Scrolls can shoot or change terrain types just like objects, etc. 9. CHAR LIST This is a list of the characters for objects in ZZT so they can be changed using the CHAR command. I have also listed if any CHARs share their character with that of a set item or terrain. 1 Hollow happy face 2 Filled happy face, ZZT player without background 3 Solid heart 4 Solid diamond, ZZT gem 5 Solid club, ZZT ruffian 6 Solid spade 7 Solid circle 8 Solid block with missing circle 9 Solid ring 10 Solid block with missing ring, ZZT door without background 11 "Male" symbol, ZZT bomb 12 "Female" symbol, ZZT key 13 Single music note 14 Double music note 15 Star burst 16 Solid right-facing triangle, ZZT pusher-east 17 Solid left-facing triangle, ZZT pusher-west 18 Up-and-down arrow, ZZT slider-northsouth 19 Double exclamation point 20 Paragraph symbol 21 Section / numbered clause symbol (jointed S) 22 Thick underscore 23 Underlined up-and-down arrow 24 Up arrow 25 Down arrow 26 Right arrow 27 Left arrow 28 Small "L" rotated 90 degrees clockwise and mirrored horizontally 29 Right-and-left arrow, ZZT slider-eastwest 30 Solid up-facing triangle, ZZT pusher-north 31 Solid down-facing triangle, ZZT pusher-south 32 Space bar 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 *, ZZT slime, ZZT ricochet 43 + 44 , 45 - 46 . 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O, ZZT centipede segment 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127 Small house-shaped pentagon (three sides of a square with triangle top), ZZT energizer 128 Uppercase C with small s underneath 129 Lowercase u with two dots 130 Lowercase e with right-facing accent mark 131 Lowercase a with carat 132 Lowercase a with two dots, ZZT ammo 133 Lowercase a with left-facing accent mark 134 Lowercase a with small circle 135 Lowercase c with small s underneath 136 Lowercase e with carat 137 Lowercase e with two dots 138 Lowercase e with left-facing accent mark 139 Lowercase i with two dots 140 Lowercase i with carat 141 Lowercase i with left-facing accent mark 142 Uppercase A with two dots 143 Uppercase A with small circle 144 Uppercase E with right-facing accent mark 145 Two S's together 146 Capital A and E joined together 147 Lowercase o with carat 148 Lowercase o with two dots 149 Lowercase o with left-facing accent mark 150 Lowercase u with carat 151 Lowercase u with left-facing accent mark 152 Lowercase y with two dots 153 Capital O with two dots, ZZT bear 154 Capital U with two dots 155 Cent sign 156 British pounds sign 157 Japanese yen sign, ZZT torch 158 Uppercase P with lowercase t tucked under it 159 Italic cursive f 160 Lowercase a with right-facing accent mark 161 Lowercase i with right-facing accent mark 162 Lowercase o with right-facing accent mark 163 Lowercase u with right-facing accent mark 164 Lowercase n with tilde 165 Uppercase N with tilde 166 Underlined superscript a 167 Underlined superscript o 168 Reverse upside-down question mark 169 Small "L" rotated 90 degrees clockwise 170 Small "L" rotated 90 degrees clockwise and mirrored vertically 171 One half 172 One quarter 173 Upside-down exclamation point 174 Much less than symbol (two < together) 175 Much greater than symbol (two > together) 176 Spread dot pattern block 177 Close dot pattern block, ZZT breakable wall 178 Bricks block, ZZT normal wall 179 Vertical line 180 Vertical line with left horizontal 181 Vertical line with double left horizontal 182 Double vertical line with left horizontal 183 Double halfway vertical line up with left horizontal 184 Halfway vertical line up with double left horizontal 185 Double vertical line with double left horizontal 186 Double vertical line 187 Double halfway vertical line up with double left horizontal 188 Double halfway vertical line down with double left horizontal 189 Double halfway vertical line down with left horizontal 190 Halfway vertical line down with double left horizontal 191 Halfway vertical line up with left horizontal 192 Halfway vertical line down with right horizontal 193 Halfway vertical line down with both horizontals 194 Halfway vertical line up with both horizontals 195 Vertical line down with right horizontal 196 Horizontal line 197 Vertical line with both horizontals 198 Vertical line with double right horizontal 199 Double vertical line with right horizontal 200 Double halfway vertical line down with double right horizontal 201 Double halfway vertical line up with double right horizontal 202 Double halfway vertical line down with both double horizontals 203 Double halfway vertical line up with both double horizontals 204 Double vertical line with double right horizontal 205 Double horizontal line 206 Double vertical line with double both horizontals, ZZT blinker 207 Halfway vertical line down with double both horizontals 208 Double halfway vertical line down with both horizontals 209 Halfway vertical line up with both double horizontals 210 Double halfway vertical line up with both horizontals 211 Double halfway vertical line down with right horizontal 212 Halfway vertical line down with double right horizontal 213 Halfway vertical line up with double right horizontal 214 Double halfway vertical line up with right horizontal 215 Double vertical line with both horizontals 216 Vertical line with both double horizontals 217 Halfway vertical line down with left horizontal 218 Halfway vertical line up with right horizontal 219 Solid block, ZZT solid wall 220 Bottom half of solid block 221 Left half of solid block 222 Right half of solid block 223 Top half of solid block 224 Lowercase Greek alpha 225 Lowercase Greek beta 226 Uppercase Greek gamma 227 Lowercase Greek pi, ZZT tiger 228 Uppercase Greek sigma 229 Lowercase Greek sigma 230 Lowercase Greek mu 231 Uppercase Greek upsilon 232 Uppercase Greek phi, ZZT scroll 233 Lowercase Greek theta, ZZT centipede head 234 Uppercase Greek omega, ZZT lion 235 Lowercase Greek delta 236 Lowercase Greek omega 237 Lowercase Greek phi 238 Lowercase Greek epsilon 239 Upside-down U 240 Three horizontal lines, ZZT passage without background 241 Plus-or-minus sign 242 Greater than or equal sign 243 Less than or equal sign 244 Right-face cane 245 Upside-down left-face cane 246 Divided by sign 247 Approximately equal sign 248 Degrees sign 249 Centered period 250 Tiny dash 251 Radical 252 Superscript n 253 Squared (superscript 2) 254 Solid block, ZZT boulder