This is the NOTES file for TinyMUSH 2.0.
Changes from TinyMUSH 1.0:
-------------------------
This section lists the commands, attributes, and flags that are different
between TinyMUSH version 1 (as described in Croaker's MUSH Manual) and
TinyMUSH 2.0. There are *many* new commands for both players and wizards,
several new flags and functions, and a few new attributes. With the additon
of a runtime configuration file, the game becomes much more configurable,
eliminating in most cases the need to recompile in order to change command
costs, permissions, and other global parameters.
Players
New Commands
@decompile <thing>
Outputs the sequence of commands needed to re-create <thing>.
@doing <text>
Sets your doing string that appears in the WHO report.
@dolist <list>=<command-list>
Executes <command-list> once for each item in the space-separated
<list>, substituting the characters ## for the item from <list>.
@drain <object>
Removes any commands waiting on <object> as a semaphore without
executing them.
@emit <text>
Sends <text> to everyone in the current room withoug prefixing
your character name.
@femit <object>=<text>
Forces <object> to emit <text>, regardless of the setting of INHERIT
bits.
@fpose <object>=<text>
Forces <object> to pose <text>, regardless of the setting of INHERIT
bits.
@fsay <object>=<text>
Forces <object> to say <text>, regardless of the setting of INHERIT
bits.
@last <player>
Tells the time and hostname of your last few connections to the game,
as well as info about recent failed connect attempts.
@list <arg>
Lists information from the internal tables of the MUSH. If entered
without arguments, tells you the things you can list.
attributes - Predefined attributes.
commands - Built-in commands.
costs - How much various commands and actions cost.
default_flags - The flags new objects get created with.
flags - The flags an object can have.
functions - Built-in functions, like ADD() or NEXT().
options - Various internal options and limits.
switches - Command switches available on predefined commands.
@listmotd
Displays the message-of-the-day again.
@mvattr <object>=<from>,<to1>[,<to2>]...
Copies an attribute to one or more new attributes on the same object,
and then deletes the original attribute.
@notify <object> [= <count>]
Runs the first <count> commands that are waiting on <object> as a
semaphore (default 1).
@oemit <player> = <message>
Emits <message> to everyone in the current room except for <thing>.
@pemit <player> = <message>
Emits <message> just to <player>.
use <object>
Triggers the USE, OUSE, and AUSE attributes on <object>.
version
Displays the version of MUSH currently running, along with when
it was built.
LOGOUT
Disconnect from your character without breaking the net connection.
You may the log back in as yourself or someone else.
SESSION
Tells you how many characters you have sent and received from the
MUSH.
Changes to Existing Commands
@chown <obj>[/<attrib>] [=<who>]
You can now @chown things to 'me', as well as leave off the <who>
entirely (in which case it defaults to the player doing the @chown).
You may also @chown attributes of objects (to yourself if you own
the object, and to the owner of the object if you own the attribute
but not the object.
@clone
It is possible to clone VISUAL objects owned by others.
The object number of the new object is reported.
/inherit switch to retain an INHERIT bit on the new object.
@create
The object number of the new object is reported.
@dig
You can create a link back to your current room (if it is LINK_OK)
Syntax: @dig <name>=<out-exitlist>,<back-exitlist>
@edit
If '^' is specified as the 'from' string, then the 'to' string is
added to the beginning of the attribute. If '$' is specified as the
'from' string, the 'to' string is added to the end.
You can specify a wildcarded attribute name, and @edit will apply
the changes to every attribute that matches.
@entrances <object>
You can specify the object to check. The command also gives a little
more information about other objects that link to the object being
checked.
@halt <object>
You can now halt specific objects.
@lock <object>/<attrib>
Locks <attrib> on <object>, so that it doesn't change ownership when
the object is @chowned. Locked attributes are also not checked for
$-commands.
@open <direction-list> [= <room>[, <return-directionlist>]]
If <return-directionlist> is specified, make an exit back to the
original room if possible.
@ps[/<switches>] [<object>]
Lists commands on the queue for everything you own, or for just
<object>. @ps/long also displays the enactor and the arguments,
@ps/summary just displays a count of the number of commands in the
queue.
@search [<player>] [<key>=<value>]
New key: eval. This key evaluates <value> for each object, replacing
## with the object being checked. Objects that cause true (nonzero)
evaluations are listed.
@set <object>=<attr>:<value>
If <attr> does not exist, it is created as a user-named attribute.
@set <object>/<attr>=[!]no_command
Enables or disables checking for $-commands on <object>'s <attr>.
@sweep
Now lists whether objects are listening or looking for commands.
DIsplays more detailed information about what objects are listening
for which events.
New switches to only check for objects listenening for certain
events: /commands /connected /listeners /players.
New switches for selecting where to @sweep: /here /inventory
@switch[/<switches>] <target> = <val1>,<cmd1>[,<val2>,<cmd2>]...[,<dflt>]
New switch /first: causes only the first match to be executed,
instead of all matches.
@unlock <object>/<attrib>
Unlocks <attrib> on <object>, so that it will change ownership when
the object is @chowned. Also allows the attribute to be checked for
$-commands, except if you don't own the object.
@wait <object>[/<secs>] = <command>
Waits on <object> as a semaphore. <command> will not be executed
until <object> has been notified with a @notify command.
If <secs> is specified, the command will be run when <object> is
notified or after <secs> seconds pass, whichever comes first.
examine <object>[/<attribute>]
If yoy specify the optional attribute, only attributes whose names
match (after processing wildcards) are listed.
WHO <prefix>
If <prefix> is specified, only players who match it are listed.
WHO also displays the doing string for connected players.
New Flags
unfindable(U)
Prevents players from being located by @whereis or the loc() funciton.
jump_ok(J)
Indicates that anyone may @tel there. LINK_OK and ABODEused to
control this functionality.
halted(h)
If set, the object may not run commands or have attributes triggered.
quiet(Q)
Prevents 'Set.', 'Triggered.', etc. messages from appearing.
visual(V)
Lets anyone examine the object and see all of its attributes.
verbose(v)
Tells you every command that the object runs as it runs.
nospoof(N)
Tells you who really is saying/posing/emitting things.
transparent(t)
If set on an exit, shows you the description of what is on the other
side when you look at it.
inherit(i)
Lets the object @force you and your other INHERIT objects. If set on
a player, makes all of that player's objects operate as if they were
set INHERIT.
Changes to existing flags
haven(H)
No longer prevents commands from running.
abode(A)
No longer gives the right to @teleport in.
link_ok(L)
No longer gives the right to @teleport in.
New Functions
AFTER(s1, s2)
Return portion of s1 that follows s2.
AND(x, y)
AND two logical values.
BEFORE(s1, s2)
Return portion of s1 that comes before s2.
CAPSTR(str)
Capitalize the first letter.
CAT(s1, s2)
Concatenate two strings.
COMP(s1, s2)
Case-sensitive string compare.
DELETE(str, startchar, len)
Remove characters from string.
DIST2D(x1, y1, x2, y2)
Distance in two dimensions.
DIST3D(x1, y1, z1,x2, y2, z2)
Distance in three dimensions.
ELOCK(lockobj, checkobj)
Does checkobj pass the lock on lockobj?
ESCAPE(str)
Insert a \ before characters the parser treats specially.
EQ(n1, n2)
Numeric equality test.
FLAGS(obj)
List of flags set on obj.
GT(n1, n2)
Numeric greater than test.
GTE(n1, n2)
Numeric greater than or equal test.
HASFLAG(obj, flag)
Does object have flag set?
LATTR(obj)
List of attributes for obj.
LCON(obj)
Contents list for obj.
LCSTR(str)
Convert to lowercase.
LNUM(count)
Generate a list of numbers from 0 to count-1.
LOCK(obj)
Text of lock for obj.
LT(n1, n2)
Numeric less than test.
LTE(n1, n2)
Numeric less than or equal test.
LWHO()
List of logged-in users.
MONEY(obj)
Value of obj.
MUDNAME()
Return the name of the mud.
NEARBY(obj1, obj2)
Are they near each other?
NEQ(n1, n2)
Numeric not equals test.
NOT(n1)
Logical NOT.
OBJ(obj)
Objective pronoun for obj.
OR(n1, n2)
Logical OR.
POSS(obj)
Posessive pronoun for obj.
REVERSE(str)
Reverses the characters in str.
REVWORDS(str)
Reverses the order of the words in str.
ROOM(obj)
Return the outermost room that obj is in (not any intermediate
containing objects or players).
SECS()
Seconds since 00:00 1/1/1970
SECURE(str)
Remove characters that the parser treats specially.
STARTTIME()
ASCII time that the MUSH was started.
SUBJ(obj)
Subjective pronoun for obj.
TYPE(obj)
Type of object (ie player, room, exit, thing)
UCSTR(str)
Convert to uppercase
VERSION()
Version of MUSH that is running.
WORDPOS(string, pos)
Which word is character pos in?
XOR(n1, n2)
Logical XOR.
New and Changed Attributes
aconnect
Run when you connect.
adisconnect
Run when you disconnect. %0 is the reason for disconnect.
aenter, enter, oenter
Run in a place right after someone enters it.
oxenter
Message sent to others in the place the arriving object has left.
aleave, leave, oleave
Run in a place right before someone leaves it.
oxleave
Message sent to others in the place the leaving object goes.
alias
Another name for the object. Right now, just a comment.
amove, move, omove
Run on the moving object right after it moves
ause, use, ouse
Triggered when someone 'use's the object.
Wizards
New Commands
@apply_marked <command>
Run command for each marked object
@chownall <old> = <new>
@chown all objects owned by <old> to <new>.
@disable <flag>
Turns off internal flags, such as logins, building, command queueing.
@enable <flag>
Turns on internal flags, such as logins, building, command queueing.
@kick <count>
Immediately run <count> commands from the player queue.
@list <choice>
Lists all kinds of neat and useful (sometimes only for debugging)
stuff.
@list_file <file>
List one of the standard message files.
@listmotd
Lists messages-of-the-day.
@mark[/<switches>] [<player>] <type>=<value>
Same syntax as @search, except it sets or clears the marked bit of
selected objects.
@mark_all[/<switches>]
Set or clear the mark bits on all objects.
@motd[/<switch>] <message>
Sets one of the messages-of-the-day.
@note <message>
Makes a note in the log.
@readcache
Rereads changed text files and indexes into memory.
@timewarp[/<switch>]
Warps time for the wait queue and/or periodic events such as database
dumping, RWHO data updating, etc.
slay <obj>
Kill <obj> without paying insurance.
wizhelp
Display help on wizard commands and topics.
DOING
Shows WHO output as the players see it. (including @doing info)
SESSION
Displays the number of characters connected players have sent and
had sent to them. Useful for finding network problems.
Changes to Existing Commands
@chown[/<switches>] <object>
/preserve switch for preserving the original owner in the clone.
@ps[/<switches>] <object>
By default you see your own queue. Use /all to see the entire queue.
@toad <victim> [=<recipient>]
You can now specify who gets ownership of the victim's (halted)
objects.
@wall[/<switches>] <message>
Several new switches that do useful things.
@wizwall
Renamed to @wall/wiz
WHO
Shows players' current location, number of commands typed, and
host from which they connected.
New Flags
gagged(g)
Prevents the player from saying, emoting, etc.
slave(s)
Prevents the player from doing things that would change the database.
marked(m)
A temporary flag used by @mark, @mark_all, and @apply_marked.
suspect(u)
Notify connected wizards when this player connects, disconnects,
or does any of a few other interesting things.
immortal(i)
Prevents the object from being killed.
New Attributes
allowance
Sets a daily allowance different from the default.
comment
A player-invisible attribute intended for notes about the player.
timeout
Idle timeout for the player if different from the default.
Game Maintainers
New Commands
@admin <directive> = <value>
Change configuration directive at runtime.
@attribute[/<switch>] <attr> [= <value>]
Change access to, rename, or delete user-named attributes.
@fixdb[/<switch>] <obj> = <value>
Manually repair damage to database.
@rwho[/<switch>]
Starts or stops RWHO information transmission.
General:
The parser has been rewritten to close some security holes and fix some
long-outstanding bugs. As a result, some things that worked before will
not work any more, but most of these 'features' were not documented in the
MUSH manual.
- Delimiter nesting is both more reliable and stricter. You now need to
include a closing ) or ], previously you could sometimes get away with
omitting them.
- You can now nest uses of the [ and ] delimiters.
- The \ character is the escape character, and it can be used to escape
characters treated specially by the parser, such as delimiters and
the comma character. To get a single \ in a string, use \\.
- The construct '$exec *:%0' does not work any more. Use something like
'$exec *:@force me=%0' instead. Note that this gives anyone near
the object access to your objects and is poor programming practice.
- Note that the { and } delimiters do not defer evaluation, but are used
to group commands and arguments together, preventing a ; or , from
ending the command or argument.
Players may define their own attributes on objects in addition to the
predefined attributes. These attributes are called user-named attributes.
It is possible for #1 to globally change the access to particular user-named
attributes that are to be used for special purposes (such as making Level or
Hitpoints only settable by wizards on a mush with a built-in combat system).
Attributes may be owned independently of objects. By default the owner
of an object owns all the attributes and the ownership of attributes changes
when the object is @chowned, but individual attributes can be locked against
the ownership change. You can only change an attribute if you own both
the attribute and the object it is stored on.
Attribute locks have changed somewhat. You can now lock against any
attribute, and the object testing the lock and all of its contents are
checked against the lock value, and the lock succeeds if any of the objects
checked passes the lock. In order for the lock to succeed, the locked
object must have the same owner as the attribute (or the attribute must
be a public attribute such as sex), and the value of the attribute must
match the pattern set in the lock.
Players can use objects they own as semaphores. One use of semaphores
is to implement mutual exclusion locks, so as to prevent a particular
part of an object's code from being executed for more than one player at
the same time.
You can set up one room to contain global exits and $-commands that are
available from anywhere on the MUSH. This room is called the Master Room.
This room should be owned by a wizard, set FLOATING, have no entrances
(except perhaps one locked to current wizards), and not be JUMP_OK, LINK_OK,
or ABODE. A good idea to improve security further is to set the room
INHERIT and have its AENTER check that the owner of the arriving object is
a wizard, and if not @tel the object somewhere else.
The LEAVE and ENTER family of attributes are now run whenever you leave
or enter any location, not just an object. Also, the MOVE family of
attributes are run on you whenever you move from one place to another.
Access to commands and attributes may be changed from the configuration
file or with the @admin command. Access to individual user-named attributes
can be changed with the @attribute command.
Configuration Directives:
------------------------
This section lists all the configuration directives that may be included in
the .conf file that mush reads when it starts up. Directives which affect
similar things are grouped together under one heading. Most of these
directives can be set while the game is running by player #1 with the @admin
command, the ones that cannot are usually ones that are only used during
startup or those that contain names of files to be read from the system that
the mush is being run from.
Internal/debugging
abort_on_bug - Abort on internal inconsistencies (not implemented)
log - Specify types of events to log.
log_options - Specify types of information to be included about players
causing log messages.
Configuration control
config_access - Change runtime access to configuration directives
include - Read configuration directives from file
Compression control
compress_program - Program to compress struct database if database
compression is enabled
compression - Should the struct database be compressed when written/
uncompressed when read?
internal_compress_string - Should the internal bigram-based string
compression system be used?
space_compress - Should multiple spaces be compressed to single spaces?
uncompress_program - Program to uncompress struct database if database
compression is enabled
Database files
crash_database - Where a copy of the struct database gets written
when the game panics (not implemented)
gdbm_database - Name of the gdbm file to use.
initial_size - Number of objects to allocate for the struct portion of
the database when creating a new database.
input_database - Read the struct database from this file
output_database - Write the struct database to this file when dumping.
Database dumping
dump_interval - Time between automatic database dumps.
dump_message - Message sent to all connected users when a dump is
performed.
dump_offset - How long after startup is the first automatic dump
performed?
fork_dump - Should dumps be performed by a fork()'ed process?
fork_vfork - Should the vfork() call be used instead of fork()?
garbage_chunk - Garbage-collect this many objects each second (obsolete).
gdbm_cache_size - Size of the gdbm cacke in kbytes.
Text files and Messages
badsite_file - A file containing what someone who connects from a forbidden
site sees
connect_file - A file containing what someone sees when they open a
connection from a site that doesn't enforce registration.
connect_reg_file - A file containing what someone sees when they open a
connection from a site that does enforce registration.
down_file - A file containing what someone sees when they try to login but
fail because logins are disabled.
down_motd_message - A wizard-settable messages that players see when they
try to login but fail because logins are disabled.
guest_file - File shown to people connecting to the guest character
in place of the motd_file.
help_file - The name of the file containing the help text.
help_index - The name of the file containing the help index.
motd_file - A file containing what players see right after they connect
to their characters.
motd_message - A wizard-settable message that players see right after the
motd_file.
news_file - The name of the file containing the news text.
news_index - The name of the file containing the news index.
newuser_file - A file containing information shown to players the first
time they connect to their characters in place of motd_file.
quit_file - File containing what you see when you QUIT.
register_create_file - FIle containing what players see when they try to
use the 'create' command from a site for which registration is enforced.
wizard_help_file - The name of the file containing the wizard help text.
wizard_help_index - The name of the file containing the wizard help index.
wizard_motd_file - A file containing what wizards see when they connect to
their characters.
wizard_motd_message - A wizard-settable message that only wizards see when
they connect to their characters.
Network control and monitoring
command_quota_increment - Add this to connected players' command quota
every timeslice
command_quota_max - Don't increment command quota over this value
check_interval - Interval between idle checks
check_offset - When to perform first idle check
conn_timeout - Allow players this long to connect before dropping
net connection
forbid_site - Disallow connects from a host, subnet, or network.
hostnames - Does the wizard WHO report use hostnames instead of
IP addresses when possible?
idle_interval - How long between checks for idle users.
idle_timeout - Players idle longer then this get the @boot.
output_limit - The max number of characters a player may have queued for
output.
permit_site - Allow connections from this host or network, and allow new
characters to be created with the 'create' command.
port - Network port to listen on for new connections.
register_site - Allow connections from this host or network, but don't allow
new characters to be created with the 'create' command.
retry_limit - Close the net connection after this many failed login
attempts.
suspect_site - Notify connected wizards of any connects and disconnects from
this host or network.
timeslice - How often does the command quota for connected players get
updated?
trust_site - Don't notify connected wizards of connects and disconnects from
this host or network. Undoes suspect_site.
Command queue management
player_qeue_limit - How many commands may a player have in the queue at
once?
queue_active_chunk - Number of commands to run from the queue when there has
been network activity.
queue_idle_chunk - Number of commands to run from the queue when there has
been no network activity.
Defining new commands and aliases
alias - Create an alias for a command or command/switch combination
attr_alias - Create an alias for a predefined attribute
flag_alias - Define an alias for a flag name.
logout_cmd_alias - Define an alias for a logged-out command.
master_room - Room containing global default exits and $-commands.
Access to commands, switches, etc.
access - Change access to commands and switches
attr_access - Change access to an attribute
attr_cmd_access - Change access to all attribute setting commands at once
list_access - Change access to items under the @list command.
logout_cmd_access - Change access to logged-out commands (like WHO, QUIT)
power_access - Change access to powers/capabilities. (Not implemented)
user_attr_access - Change default access for new user attributes.
Player limits/controls/capabilities
guest_char_num - db number of the Guest char. The Guest character
is typically not allowed to do things like create objects or change
his name or password.
match_own_commands - Should objects other than players check themselves
for $-commands?
pemit_any_object - Can players @pemit to objects they don't own that are
far away?
pemit_far_players - Can players @pemit to players that aren't nearby?
player_listen - Should @listen/@ahear be obeyed on players?
player_match_own_commands - Do players check for $-commands on themselves?
recycling - Is object destruction allowed.
robot_speech - Are robot players allowed to speak in public areas?
sweep_dark - Can players @sweep dark rooms they don't own?
secure_homes - Should HOME be validated before using?
Default values
default_home - Where objects go when they go home and the home location
is invalid
exit_flags - What flags are new exits created with?
player_flags - What flags are new players created with?
player_starting_home - What is HOME of new players set to?
player_starting_room - Where do new players start out?
robot_flags - What flags are new robots created with?
room_flags - What flags are new rooms created with?
switch_default_all - Does @switch perform all matches by default?
thing_flags - What flags are new things created with?
Output formatting and options
dark_sleepers - Are disconnected players dark?
examine_flags - Does EXAMINE list flag names?
examine_public_attrs - Does EXAMINE show public attributes by default?
money_name_singluar - The name of one coin (ie. penny, zorkmid)
money_name_plural - The name of many coins (ie. pennies, zorkmids)
public_flags - Are the flags of an object readable by anyone with flags()?
quiet_look - Does the look command also show attributes?
quiet_whisper - Do others in the room notice you whispered something?
read_remote_desc - Are the descriptions of distant objects readable with
examine and get()?
read_remote_name - Are the names of distant objects readable with
examine and name()?
see_owned_dark - Do you see your own DARK objects when looking?
whereis_notify - Does the target of a @whereis get told you did it?
Economics
clone_copies_cost - Does @clone copy the cost of the cloned object?
create_max_cost - The maximum cost that may be used to create an object.
Using more wastes the excess.
create_min_cost - The minimum cost that may be used to create an object.
destroy_sacrifice - Does dropping an object in a temple @destroy it?
dig_cost - How much does the @dig command cost?
earn_limit - Earning more than this much money is difficult.
find_money_chance - Players have a 1 in f_m_c chance of finding a penny
each time they move.
kill_guarantee_cost - Amount to spend on a kill command to guarantee
success.
kill_max_cost - Maximum amount that may be gainfully spent on a kill
command. Anything over this amount is wasted.
kill_min_cost - Minimum amount that may be gainfully spent on a kill
command.
link_cost - Cost to make a link.
machine_cmd_cost - 1 in m_c_c commands run by a machine cost one penny.
open_cost - The cost to create a new exit.
page_cost - The cost of the page command (and @pemits to faraway players).
paycheck - Players get this much money each day they connect.
robot_cost - The cost of making a robot with the @robot command.
sacrifice_adjust - Adjustment to sacrifice value applied after dividing the
cost by sacrifice_factor.
sacrifice_factor - Divide the object's cost by this (before applying
sacrifice_adjust) to determine its value.
starting_money - How much money do new players start out with?
wait_cost - Deposit required to put a command on the queue.
Building Quotas
exit_quota - How much quota does it take to make an exit?
player_quota - How much quota does it take to make a (robot) player.
quotas - Are building quotas enforced and maintained?
room_quota - How much quota does it take to dig a room.
starting_quota - How much quota do new players start out with?
thing_quota - How much quota does it take to create a thing?
RWHO information
mud_name - The name of the MUD that is sent to the RWHO server as well
as reported by the mudname() function.
rwho_data_port - Port to read RWHO information from in response to a local
RWHO command (if configured).
rwho_dump_interval - How often to transmit RWHO information to the server.
rwho_host - Host to send RWHO information to.
rwho_info_port - Port to write RWHO information to.
rwho_password - Password sent with RWHO data.
rwho_transmit - Should we transmit RWHO data?