TinyMUD 2.4 Quick Reference Sheet
Order of command parsing:
verb calls verb on room or player
object calls _invoke on object
verb object calls verb on object
verb object1 prep object2 calls verb<prep on object1 or verb>prep on object2
$text is set to other object
verb text calls verb on room or player with
$text set to text
text calls _default on room or player with
$text set to text
Variables:
x object
?x boolean
$x string
%x number
&x action
@x set
~x time
'.' may be used as a dereferencing operator, e.g.
george.last_victim.girlfried.mother.hairdresser.$name
gets the name of george's last victim's girlfriend's mother's
hairdresser.
Certain variable-like expressions have special meaning; see below.
Special variables (cannot be set):
me object performing an action
variables which are not specified with a '.' are always
relative to me, e.g. $name is equivalent to me.$name
you player who invoked the action
next loop iteration variable
$text unparsed text from command line
~time current time
%id id number of object or string, e.g. me.%id, me.$name.%id, "foo".%id
%count counts contents list
@x.%count counts elements in set
%random random number
?true true boolean value
?false false boolean value
nothing the null object
$null the null string
location location of an object, e.g. george.location
create returns a new object each time it is called, owned by the
caller, or nothing if the caller does not have ?wizard set.
System variables:
?player this object is a player; can be set only by ?wizard objects
?builder meaningless flag; can be set only by ?wizard objects
?programmer player can use @ command, settable only by ?wizard objects
?wizard object controls all non-administrator objects;
can be set only by ?admin objects
?admin object cannot be controlled by any other object, has
certain special privileges.
?connected object is connected; maintained by the system,
settable only by ?admin objects
?paranoid tells to this object are annotated with their source
?open if ?true, objects can be moved into this object freely
without normal destination restrictions
owner owner of an object; can be set only by ?wizard objects
parent object from which an object inherits methods
and non-set variables.
$aliases strings which lists aliases, separated by '|'
Arithmetic operators:
+, -, and mod are unusual in that they can be used on times:
n + m yields a number
~t + n yields a time (~t plus n seconds)
n + ~t yields a time
n - m yields a number
~t - n yields a time
~t - ~s yields a number (number of seconds between ~s and ~t)
n mod m yields a number
~t mod n yields a number (~t mod 60 = secs; ~t mod 3600 / 60 = min., etc.)
The following work only on numbers:
* / multiplication and division
unary -
String operators:
| concatentation, e.g "foo" | 2 yields "foo2"
Comparison operators:
< > <= >= can be used on numbers or times;
~s < ~t means ~s is earlier than ~t
= != work on any two expressions of the same type
Logical operators:
! (logical negation)
and or evaluate their right-hand argument only if necessary
Predicates:
$x matches y true if $x is a name of y
x contains y equivalent to y.location = x
@x contains y true if y is an element of @x
Statements:
All statements return ?true if they are successful, ?false otherwise.
set <var> to <value> sets a (non-set) variable, e.g.
set location.$name to "Fred's Place."
clear <var> removes a variable, e.g.
clear location.$name
when a variable has been cleared it no
longer shadows inheritance
clear @x sets @x to the empty set
add x to @y sets @y to @y union {x}
take x from @y sets @y to @y - {x}
move x to y attempts to move x to y
tell <string-list> to y string-list is a sequence of expressions
of any type except object or boolean,
separated by spaces.
delay ~t sends _tick method at time ~t
delay t sends _tick at time ~time + t
destroy x destroys the object; only usable by wizards.
Control:
The following two forms can be used to iterate over contents lists or
set variables, possibly touching only those elements matching a given
string. The next special variable returns the current object in each
iteration. Loops may not be nested.
in x [matching $y] do <statements> end
in @x [matching $y] do <statements> end
break (exit the containing loop immediately)
if ?x then <statements>
[elseif ?y then <statements>]* [else <statements>] endif