Modal actions are actions that require a mode, or rather, take specific parameters (called "modes") that are not related to anything in the world. Things like:
go west look up walk east
...where west, up, and east do not refer to objects in the world, but are specific enough for TAME to check the validity of.
action [MODIFIERS] modal [IDENTIFIER] [NAME_CLAUSE] [MODES_CLAUSE] ;
An optional declaration of one or more additional modifiers for action behavior.
strict: Apply "strict behavior" to the handling of this action. "Strict" modal actions do not tolerate additional things typed at the interpreter past a valid parsed mode after the action.
|[IDENTIFIER]||An internal identifier that represents this action in the rest of TAMEScript. This is used to find what entry blocks throughout the code should be executed when a name associated with this action is parsed by the interpreter or when a specific action is queued by another command. This identifier must not be used to describe another element.|
The keyword named followed by a comma-delimited list of strings that the
interpreter is supposed to associate with this command. The compiler does not check for
name duplicates - equivalent names overwrite their association. Names, internally, are
sanitized to what the interpreter accepts.
This clause is optional - if no names are declared, this is not parse-able in the interpreter. Leaving this out is a way to make "private" actions.
After the list of action names, the keywords uses modes are required as well
as a comma-delimited list of strings that the interpreter uses as valid modes for
Unlike the [NAME_CLAUSE], this is still mandatory.
The following are a few examples of modal action declarations:
action modal a_go named "go", "travel" uses modes "north", "south", "west", "east"; action strict modal a_select named "select" uses modes "1", "2", "3"; action modal a_update uses modes "items", "people";
Modal actions are handled by the current room, the current player, or the world, via the onModalAction(...) block on that element. If that block does not exist, a different block will be called to handle it.