Croaker's TinyMUSH Manual
Last update: December 8, 2004
Author: Croaker
Editor: Josh Juran <wanderer@metamage.com>
URL: <http://www.metamage.com/mush/croaker/>
1. Introduction
1.1. History
TinyMUSH was written as a direct result of the original TinyMUD's crash and burn due to terminal database bloat. This problem was solved in MUSH by using more efficient methods of data storage as well as the implementation of a destroy command, which allowed for the removal of unwanted objects from the database.
After the @destroy command was implemented, additional features were added, either from the author's own ideas or player's requests. It was not unusual to see one's suggestion running on MUSH the next day, or even in several hours. During this time, MUSH began wandering from site to site. It started at smelt.berkeley.edu, and then moved to sigh.berkeley.edu. After a brief vacation in Kentucky, it returned to sigh. However, sigh was later removed from service after a failed OS upgrade, and TinyMUSH, as of this writing, is no more (although there is a backup of it's data base.) Fortunately, several other MUSHs have come online. The two major ones, TinyTIM and TinyCWRU, have added their own home-grown modifications to the original MUSH, which may at a later date become "official." This manual will attempt to cover these additions as well. Not included in this version of the manual are the last additions that were made on TinyMUSH, since they have not made it to any other MUSH.
1.2. MUSH Overview
Programming in TinyMUSH can be likened to traditional object oriented programming. All actions are achieved as a result of objects reactions to their environment and to each other. Objects can modify themselves and each other, as well as create new objects (spawn processes) that can handle a task and then terminate (destroy themselves.) Some low-level math is provided, as well as 26 "registers" per object which can either hold data or program code. Objects can also perform most of the actions that real players can, so that they can interact with players.
Objects can be set to respond to a number of different stimuli, such as things they "see" or hear, receiving pennies, being dropped or killed. This allows for the creation of autonomous machines which can be running even if a player is not logged in. These machines can fulfill many of the purposes that robots were used for on TinyMUD, and allows mere mortals to create robot-like objects.
A quick nomenclature of objects in MUSH (in hopes of establishing up a standard.) An object which is under the direct control of a player and/or is relaying what it hears back to its owner is called a puppet. Objects which are "running a program" so to speak are called machines. Machines may interact with players, react to what they hear, or may just go about randomly ignoring the outside world. Robots are either players that are under the control of a remote program (such as Julia of TinyMUD fame) or special players which are under the control of other players. Quite often people will refer to machines as "bots," but are not to be confused with the genuine article. MUSH resembles a "shell scripting" language more than anything else.
If all of the above seems a bit complex, don't worry. Programming in MUSH is usually simple if you know the commands, and now that you have this manual, you will.
1.3. Manual Objectives and Assumptions
First, this manual assumes you know the basics of TinyMUD. If you have never been on a TinyMUD (or one of its derivatives) before, it is highly recommended that you get a manual on TinyMUD and learn the basic commands before you try any of the advanced material in this manual. A introductory guide to TinyMUD is probably available from the same place you got this document. Most, if not all of the commands in MUD should work on MUSH.
Second, this manual is not designed to give away all of the "tricks of the trade" in MUSH programming. It is impossible to cover everything that can be built in MUSH in a finite document. Just remember that all the things in MUSH are made up of the commands in this document, and you should be able to figure out a way to do just about anything.
The majority of this manual is excerpts from session logs of my character, Croaker, creating things. To clarify just what is going on, the following conventions will be observed. The extracts from the script will be sectioned off from the text by a header line consisting of two dashed lines around a statement of what the example shows. A greater-than sign, ">", at the beginning of a line will indicate text typed in by the player (me.) If you wish to duplicate the example, you should type the text after the ">." Please note, to avoid confusion, if the typed text "wraps around" the screen (i.e. is continued on the next line) there will not be a ">" on the next line. Also, the output from a command will be separated from the next command by a blank line. All comments added in later for clarification will be enclosed in a ">>" and "<<." Finally, to indicate the end of an example session will be another dashed line.
[Editor's note: I have removed Croaker's typographical markup and replaced it with HTML. A set of transactions appears in a <pre> block, alternating typed text indicated by <kbd> with the output. Plain text comments may follow. The entire session occurs inside <blockquote>, preceeded by a heading. You may find that by default, your browser does not distinguish between the different components of the transcript, in which case some reconfiguration is recommended. -- Silicon*Mage]
Example: an example session
"This would be a command that I typed in. You say "This would be a command that I typed in."This is a comment, and the line directly above is the output from MUSH in response to my command.
Several more notes. A lot of the things in here are much easier to do if you are running TinyTalk. I won't go into creating TinyTalk macros and such, but be aware that they can make your MUSHing experience a lot easier. Also, through out the following sections, I may use the term "player" with respect to commands. All commands also work for objects (whether they are operating autonomously or under player control.) The use of the word "player" in these sections therefore means "players and objects" except where stated otherwise. To be concise, I will use the terms TinyMUSH and MUSH interchangeably. Also, MUD will refer to TinyMUD, not the original MUD or AberMUD or WhateverMUD.