This is an overview of many of the new features in TinyMUSH 2.0 with respect to the Pern variants of TinyMUSH. More details can be gotten from the help files included with the source (and also available on sites running TinyMUSH 2.0). Player-level differences: @list: Return lots of useful information. @list with no args tells you what args you can use. version: display verison and server build date. Several commands now have command switches. The format is <command>/<switch> with no spaces around the /. See @list switches VERBOSE flag for debugging MUSH programs. NOSPOOF flag for showing (definitively) who is saying/posing/emitting what. @switch/first only runs first match, not all matches. @clone can clone VISUAL objects owned by others. @decompile <obj> - output commands to recreate <obj> (THINGs only) @doing <string> - Set Doing string in WHO report. @dolist <list> = <command> - Runs command once for each item in list, replacing ## with the current item in list. Semaphores: @notify <obj>=<count>; @wait <obj>=<command>; @wait <obj>/<time>=<command>; and @drain <obj>. Emit commands: @emit, @pemit, @oemit, @roomemit. INHERIT flag for limiting your objects' ability to @force you. Set an object INHERIT if you want it to be able to @force you, set yourself INHERIT to give _all_ your objects this power (the old behavior) @femit, @fpose, and @fsay: @force <obj> = @emit/pose/say that doesn't require INHERIT. @listmotd: display message-of-the-day again. @ps/long displays enactor and parameters of queue entries. @sweep displays whether object @listen's checks for $-cmds or both. examine <obj>/<attr> shows just that attribute. LOGOUT disconnects you from your character without breaking the net connection. There is an idle timeout (default 1 hour). HALTED flag split out from HAVEN flag. LEAVE and ENTER attribute families are now processed for all object types (even rooms). Also OXLEAVE and OXENTER. MOVE attribute family is run on the moving player/object after it moves from one place to another. EQ, NEQ, GT, GTE, LT, LTE relational funcitons. AND, OR, NOT, XOR logical functions. OBJ, POSESS, SUBJ pronoun-izing functions. DIST2D and DIST3D functions for distance calculations. TYPE, FLAGS, HASFLAG, LOCK, ELOCK, HOME, MONEY, NEARBY functions for getting info about objects. STARTTIME, SECS, VERSION miscellaneous functions. LWHO, LEXITS, LCON functions for returning object lists. LATTR function for returning the list of attributes on an object. BEFORE and AFTER string-handling functions. User-named attributes: Set attributes with &<attrname> <obj>=<value> or @set <obj> = <attr>:<value>. User-named attributes can be read with get(), but may NOT be abbreviated. Owned attributes. You can keep ownership of an attribute when someone else @chowns the attribute by locking it with @lock <obj>/<attr>. Also: @unlock <obj>/<attr> and @chown <obj>/<attr>. Locked attributes may not be changed by anyone. Attribute locks: You can lock to any attribute, the lock will FAIL unless you own the attribute on the object being tested (unless it is a public attribute like sex). Attribute locks check the object AND its contents, only one object needs to satisfy the test. $-commands: A number of predefined attributes (like DESC, SUCC, etc) are not checked for $-commands. In addition, there is a command to disable the check on a per-attribute basis (@set <obj>/<attr> = [!]no_command). Parser improvements: []'s may now be nested, escaping special characters ( ie, []();,%{} ) works consistently, and many security holes have been plugged. %-substitutions now offer all the functionality of the v() function except for v(attribute) but with better performance. There are no security issues with %-substitutions as opposed to v(). ADISCONNECT now gets the reason you disconnected in %0. Wizard-level differences: @motd command for setting player and wizard messages-of-the-day. @enable and @disable commands to turn logins, building, and command queueing on and off. @timewarp and @kick commands for dealing with stuck queues. Objects must have the INHERIT flag set to have wizard privileges. Non-INHERIT objects cannot modify or trigger INHERIT objects. Setting the INHERIT flag on a player gives INHERIT privileges to all his/her objects (which is the old behavior). @chownall and @toad take an optional argument of who to @chown the objects to. @mark, @mark_all, @apply_marked commands for doing database-wide operations. @mark has the same syntax as @search, but sets or clears the MARKED bit that @apply_marked uses. TIMEOUT and ALLOWANCE attributes for setting idle timeout and daily allowance values for individual players different from the default. Maintainer/God-level differences: Most things that used to be #define constants in either the code or in config.h are now specified in a runtime configuraiton file. There is no more need to recompile to change behavior. You can set things up in the configuration file to transmit WHO data to a remote RWHO server. Command access rights (ie, who may execute what command), and attribute access rights (who may see or modify what attribute) may be set from the configuration file. Think long and hard before doing this. An optional Master Room, which is checked for exits after checking for exits in the current room, and which is checked for $-commands after checking for $-commands around the player. This allows game-wide commands to be added easily. TinyMUSH 2.0 is able to read TinyMUD, TinyMUSE, TinyMUSH 1.x and PernMUSH database files. PernMUSH files need to have a header line put at the beginning of the file identifying them as such. A database integrity checker that is much more thorough than sanity-check.c (and which works on MUSH databases!) is included. The attribute strings are stored in a separate disk-based file and only brought into memory when needed. Recently-accessed attributes are cached (cache size is configuragle) to speed access. Online database repair is possible with the @fixdb command. Site lockout and per-site registration is available. Individual sites or subnets may also be marked suspect, so that connects from them are reported to logged-in wizards. Players idle for more than one hour (configurable) are automatically disconnected, along with players who don't connect within two minutes and players who have 3 login failures. Most of the linear table scans in the old code have been replaced with hash table lookups.