variable substitutions now work as follows:: $0 through $whatever = specific parameter $# = parameter count $me = player $self = player's permissions context $actor = actor $here = location $subv/$objv/$posv = now return defaults if not set (!) $* = all parameters concatenated $+number = param "number" and all following concatenated ${@thing} = objid of *matched* thing (or nothing if not matched or nonunique). numeric values are permitted. E.g: ${@Mol.name} will match anything in the room that matches "Mol" and will return its name. ${!number} = objid of *matched* parameter number (or nothing if not matched or nonunuque). the numeric value must be within provided parameter count. E.g: ${!1.name} will print the name of the object matching the fragment of the first parameter. if there is an object in the room named: "The large stripy cat" and I have a command: "set me cmd pet=@do pets ${!1.nam}" which is invoked as: "pet stripy" The following emote is issued: "foo pets The large stripy cat" Chaining of attributes is performed as follows:: Some attributes are marked as "public" and can be seen by anyone. Otherwise only the wizard or the owner of the object can access the attribute. As long as an attribute continues to resolve to a valid and readable object, the attribute names are looked up iteratively. For example: _echo ${me.location.name} will first grab "me" (which resolves to an object-id) and then look up my location (which is also an object-id) and will then return the name of it. If I own object 45@HereMUD, and issue: _echo ${@45@HereMUD.location.name} and own the object's location, I will get its name back. If I do NOT own the location, nothing is returned. (or should be!) Note that attributes can be named either by long-name or by short name, so that either: _echo $me.desc or _echo $me.description will work.