.
D 2018-11-19T00:25:00.373
L Class\sdefinition\sfile
P 2768d76d562a864733decd3016d7970a69a312cb
U zzo38
W 4349
The class definition file is a plain text file, which conists of a stream of tokens. Encoding is with [https://en.wikipedia.org/wiki/Code_page_437|PC character set] (a superset of ASCII, although it is recommended to just use ASCII and to escape any non-ASCII characters).
The possible kind of tokens are:
* Open: Write <tt>(</tt> to begin a block.
* Close: Write <tt>)</tt> to end a block.
* Plain name: A plain word without the prefix to indicate what kind (although <tt>,</tt> and <tt>=</tt> prefixes may still be possible). The set of possible plain names is fixed; you cannot define your own.
* Number: A 32-bit integer. Can be positive or negative (with <tt>-</tt> prefix), or can be hexadecimal with <tt>0x</tt> at first, or octal with <tt>0o</tt> at first.
* String: A quoted string. See also [formatting controls]. Any backslashes and quotation marks must be escaped, and there should not be unescaped line breaks.
* Class: A name with <tt>$</tt> at first. Class names are global, are user-defined, and do not need to be declared before they are used (but must still be declared in the same file).
* User sound: A name with <tt>!</tt> at first. Must be a sound name in the [Picture file format|.xclass file], without the .WAV suffix.
* User local variable: A name with <tt>%</tt> at first. Local variable names are scoped to the definition of a class, and need not ever be declared.
* User global variable: A name with <tt>@</tt> at first. Global, and need not be declared.
* User message: A name with <tt>#</tt> at first. Global, and need not be declared.
* Label: A name with <tt>:</tt> at first. Scoped to the definition of a class. Must exist within that class (although it can be in a different message block) to jump to it.
* User function: A name with <tt>&</tt> at first. Global, and must be declared if used.
* Key name: A name with <tt>'</tt> at first. You can't define your own; see [Hero Mesh key name] for a list. These are not necessarily bound to the same physical keys that they are named, however.
Also:
* Names: All names are case-sensitive. Valid characters include all digits 0 to 9, letters A to Z and a to z, plus, minus, underscore, question mark, period, forward slash, and asterisk.
* Prefixes: Many kind of tokens also accept a <tt>=</tt> and/or <tt>,</tt> prefix. These are used as modifiers to indicate the use in a different case.
* Comments: Start with <tt>;</tt> (outside of a string literal) and up to the next line break is a comment.
* Macros: See [Preprocessor].
<h2>Top level blocks</h2>
At the top level (outside of any other blocks, and after the preprocessor has run, if any), the following kind of blocks are possible (all must be in parentheses):
* Class definition: The first token is the class name. See below section for details. Each class must be defined only once.
* Global user variable: The first token is the global variable name, and second is the initial value (a constant). If not specified, the initial value is zero. Example: <tt>(@money 100)</tt>
* Background color: Something like <tt>(Backgroud 1)</tt> but replace 1 with the background colour from 0 to 255 (the default value is 1).
* Max animation steps: Something like <tt>(Animate 32)</tt> but replace 32 with the maxinum number of animation steps allowed, from 1 to 256. The default value is 32.
* Volume: Something like <tt>(Volume 10000)</tt> but instead of 10000 you can specify a different number; the default value is 10000. Any number can be used; this determines the volume limit to move diagonally between objects.
* Default message handler: A message block like in a class definition, but no local user variables are allowed. If the class does not include this message lock, then this one is used by default. If no message block is defined at all, then the message does nothing and always returns zero.
* Function: A function definition. The first token is a user function name (such as <tt>&AddScore</tt>), and then the instructions for that function. No local user variables are allowed.
<h2>Constants</h2>
Where a constant value (of any type) is expected, you may use any of the following:
* Number
* Direction
* String
* Key code
* Class
* Message
* Sound
* Bit constant
Z ffc2f5362fa6dbb5001e8154f283dc8a