Free Hero Mesh

Artifact [d1a7e6c979]
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 d1a7e6c979820fd24abbbf46ca04b7f165eb4f8f:

Wiki page [Class definition file] by zzo38 on 2018-11-19 05:43:35.
D 2018-11-19T05:43:35.242
L Class\sdefinition\sfile
P da18d1c794d9121a4bdcb9a2b091a97d6bbaf310
U zzo38
W 9365
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. See documentation about moving objects for further details.
  *  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>(Arrivals)</tt>: (TODO)
  *  <tt>(Climb)</tt>: Put a number. Defines how high the object can climb; see the documentation about moving objects for details about what this does.
  *  <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>(DefaultImage)</tt>: After the word DefaultImage is some numbers, or () with nothing in between or you can have a range by using () with two numbers in between. This defines which images are available for selection in the editor. If you write <tt>(DefaultImage ())</tt> then this class is not available to place objects in the editor at all. If the DefaultImage command is not included, all images can be used.
  *  <tt>(Density)</tt>: Put a number. Defines the density of the object. If there are multiple objects at the same location, this defines which ones are on top (meaning not obscured by others; does not mean its Y coordinate differs) and on bottom (meaning may be obscured by other objects) and the stuff in between. The object with the lowest density is on top, and highest density on bottom.
  *  <tt>(Departures)</tt>: (TODO)
  *  <tt>(EditorHelp)</tt>: After EditorHelp is one or more strings. Each is a line of help text for the composer.
  *  <tt>(Hard)</tt>: (TODO)
  *  <tt>(Height)</tt>: Put a number. Defines the height of the object; see the documentation about moving objects for details about what this does.
  *  <tt>(Help)</tt>: After Help is one or more strings. Each is a line of help text for the player.
  *  <tt>(Image)</tt>: After the word Image is several strings, which are the name of images in the [Picture file format|.xclass file] (without the .IMG suffix). Those are the pictures used as the images of this class; the first one listed is image number zero.
  *  <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. Puzzles should generally avoid using this, since it is supposed to be a game of complete information.
  *  <tt>(Shape)</tt>: (TODO)
  *  <tt>(Sharp)</tt>: (TODO)
  *  <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>(Strength)</tt>: Put a number. Defines the strength of the object; see the documentation about moving objects for details about what this does.
  *  <tt>(SUBS)</tt>: A block of program instructions which is not associated with a message. It is not really that helpful (since you can use labeled blocks instead); it is provided in order to convert Hero Mesh puzzles into Free Hero Mesh.
  *  <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.
  *  <tt>(Volume)</tt>: Put a number. Defines the volume of the object; see the documentation about moving objects for details about what this does.
  *  <tt>(Weight)</tt>: Put a number. Defines the weight of the object (it probably should be "Mass" instead of "Weight", but it isn't); see the documentation about moving objects for details about what this does.

It can also include blocks of program instructions, which can start with a label, a message name (either built-in or user message), or the <tt>SUBS</tt> keyword.
Z 2c9410188ce8b648fb51d7e6642239c6