Free Hero Mesh

Artifact [00cffefd12]
Login
This is a mirror of the main repository for Free Hero Mesh. New tickets and changes will not be accepted at this mirror.

Artifact 00cffefd12fe9d61b7d939212affca53c71c4b2e:

Wiki page [Class definition file] by zzo38 on 2018-11-19 05:26:44.
D 2018-11-19T05:26:44.239
L Class\sdefinition\sfile
P bfd13735f26e086ab36f381ca9c1c5434f7c9405
U zzo38
W 6733
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>(Background 1)</tt> but replace 1 with the background colour from 0 to 255 (the default value is 1, which is normally black).
  *  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

<h2>Class definition blocks</h2>
The class definition block starts with the class name, and then the various things inside, which can be:
  *  <tt>Compatible</tt>: Enable better compatibility with Hero Mesh, including that some standard variables are now limited to sixteen bits. For new puzzle sets, it is normally better to avoid this flag, although not always.
  *  <tt>,Compatible</tt>: Similar to Compatible but does not limit variables to sixteen bits.
  *  <tt>(EditorHelp)</tt>: After EditorHelp is one or more strings. Each is a line of help text for the composer.
  *  <tt>(Help)</tt>: After Help is one or more strings. Each is a line of help text for the player.
  *  <tt>Input</tt>: Causes the KEY message to be sent to all objects of this class when a move is played and no popup quiz is waiting.
  *  <tt>Invisible</tt>: Objects of this class are invisible at runtime.
  *  <tt>(Misc4)</tt>: After the word Misc4 is one or more numbers; bit constants are also allows. Defines the Misc4 value (a 32-bit number) for this class as the bitwise OR of all numbers specified. The game engine does not use the Misc values; it is for your own use.
  *  <tt>(Misc5)</tt>: Like Misc4 for sets Misc5 instead.
  *  <tt>(Misc6)</tt>: Like Misc6 for sets Misc5 instead.
  *  <tt>(Misc7)</tt>: Like Misc7 for sets Misc5 instead.
  *  <tt>Player</tt>: Indicate that the object of this class is the player object.
  *  <tt>Quiz</tt>: Hide values of local variables from the player by default. Can be overridden in the user configuration file.
  *  <tt>Shovable</tt>: This object is pushable in any direction (if the object pushing it is strong enough).
  *  <tt>(Shovable)</tt>: Specifies which directions it can be pushed. After the word Shovable is either a 8-bit number, or can be one or more directions, which can be E, N, W, and S (diagonal shoving is not allowed).
  *  <tt>Stealthy</tt>: If this object moves, does not cause arrival and departure triggers.
  *  <tt>(Temperature)</tt>: After the word Temperature is a number. Defines the Temperature attribute of this class. Like the Misc values, it is not used by the game engine and is only for your own use.
  *  <tt>UserState</tt>: Does nothing, but can be used for your own purpose.
  *  <tt>VisualOnly</tt>: Most interactions of this object with other objects are suppressed.

Z e5dc4f218ddc6bc912cce09b80337623