DynamixMUSH Mini Tutorial

Introduction
Objects and attributes
Creating things
Non-standard attributes and adding commands to things
Making rooms and exits
Standard exit attributes
Examining MUSH objects
Colors
Other stuff

***Mini MUSH tutorial***
I am often asked by new players how to learn to build and code on a MUSH.
Some time ago, I wrote a tutorial for a friend on how to do things on
Dynamix. I have sent this 'mini-tutorial' out to over a dozen players now
and decided finally to put it into Dynamix help files.

This tutorial is by no means complete, but intended to give you the very
basics of building and coding on DynamixMUSH. A very complete (if somewhat
outdated) mush manual can be found at http://www.godlike.com/mushman
The MUSH101 web site also is an excellent place to go. Among other things,
it contains logs of lectures given by the 101 staff for people who want
to learn coding just like you. Go to http://www2.mmind.net/nemo/mush101/
That aside, I hope you will find my tutorial to be a quick way to get your
hands dirty and begin learning to build and code on MUSH, here goes...

Many times in the following I will put things in angle brackets <> You are
meant to substitute something in at those places, without any angle
brackets. For example: @desc here=<whatever>
means you should enter some description instead of <whatever>

This tutorial was written specifically for DynamixMUSH. I will put (*) next
to items that are specific to Dynamix and probably will not work on other
MUSHes.

***Objects and attributes***
The mush has 4 kinds of things in it:
Player objects, Room objects, Exit objects, Thing objects

These objects have some standard attributes that can be set on them.
The syntax for setting standard attributes is:
     @<attribute name> <object>=<whatever>

For example, to set the describe attribute of the room you are in:
     @desc here=Nice cozy room.

To set the description of an ice cream cone object in your posession:
     @desc ice cream=Tasty chocolate scoop.

To see a list of standard attributes, type: @list/attribs
For help on any attribute, type: help @<attribute name>
For example, help @desc

***Creating things***
You can also make up your own attributes. These would be called
non-standard attributes. For example, you want to make a TV object. To create
the object you use the @create command like this:
     @create <object>
     In this case: @create TV
All objects have the no_command flag set on them by default when they are
created. Flags can give mush objects certain properties and are very
important to mush coding. Without going into details about the MUSH server,
the no_command flag makes the server more efficient if set on objects that
do not respond to commands. But we want the TV to do something. To unset the
no_command flag (the ! means NOT):
     @set TV=!no_command
We will put a user-defined command (also called a $-command) on the TV. For
help with user-defined commands, type: help user-def

***Non-standard attributes and adding commands to things***
Now, back to non-standard attributes. The syntax for setting non-standard
attributes is: 
     &<attribute name> <object>=<whatever>
In this case we will make a TURNON attribute that will respond to the
dollar command - turn tv on
     &TURNON TV=$turn tv on:@emit %N turns on the TV and you see that
         Happy Days is on.

Let's break this up and see what it does:
  &TURNON TV=  - means we are setting the TURNON attribute of the TV object.
  $turn tv on: - is the text that the TV object will be waiting for. Typing
    this text in the future will trigger the commands following the colon.
  @emit - is a command meaning the object will 'emit' the text following it.
    For more information on that, type: help @emit
  %N - is replaced by the enactor's name. For more information about percent
    substitutions, you can type: help substitutions
  The rest of the text will also be emitted for others in the room to hear.

Now, if I type 'turn tv on' in the presence of the TV object, everyone and
everything in the same room as the TV will see: Javin turns on the TV and
you see that Happy Days is on.

***Making rooms and exits***
Rooms and exits can be added to the mush with the @dig command:
     @dig <room name>=<exit into the room>,<exit out from the room>

For example, we are in the Living Room. We want to make a Dining Room next
to the Living Room. Here is how we would do it:
     @dig Dining Room=Dining Room;din;dr;d,Living Room;liv;lr;l
In this example, din,dr,and d are all aliases to for Dining Room exit. It is
nice to have some aliases so that the full exit name need not be typed to go
there, any one of the aliases will take you through the exit as well.

This is just one form of the @dig command. For more help on digging rooms,
type 'help @dig'. You can also make exits with the @open command.

***Standard exit attributes***
When you make a new exit, you should set the standard exit attributes succ,
osucc, and odrop, here is what they are:
     succ - is seen by the person going through the exit
     osucc - is seen by others in the room the person is leaving
     odrop - is seen by others in the room the person is going to

So to continue the example, lets set the dining room exit attributes:
     @succ din=You go into the dining room.
     @osucc din=goes into the dining room.
     @odrop din=steps in from the living room.

The osucc and odrop are preceded automatically by the enactor's name.
To set the attributes on the living room exit that leads from the dining
room back to the living room, we have to go into the dining room where the
Living Room;liv;lr;l exit is.

(*) I am not very creative with these attributes, so I made a global command
that sets all three attibutes to some defaults. For example, to set the
attributes to defaults for the exit from the dining room to the living
room, you would go into the dining room and type: +exit <database number of
exit>

To find out what the database number is for that exit, examine it, like this:
     ex liv
which might show you it is #1345, so you would have typed: +exit #1345

***Examining MUSH objects***
To examine anything, type ex <object/exit/person name>
To examine the TV: ex TV
To examine the room you are in: ex here
To examine yourself: ex me
To examine the living room exit: ex liv

Examining an object gives you the list of the object's attributes and the
values of those attributes. It tells a variety of other information about
the object as well including the creator, the flags set on it, locks on it,
etc. You can only see all this examine information for objects you own.


***Colors***
PennMUSH supports the use of ansi colors to make the text a bit more
colorful. Some people like it, some don't. On Dynamix, the staff agreed 
early on to use colors in specific ways to help new players here.
(*)Green tips you off what to type
(*)Magenta is used for virtual +view-able objects
(*)Blue is for bar separators.

To make colored text, you use the ansi function.
Example of using ansi function:
"[ansi(g, hi there)]
The " means you 'say' it.
The [ tells the interpreter that you are about ready to call a function
ansi is the function name
The ( separates the parameter list
The g is the first parameter meaning 'green'. (*)Type +color to see the others.
The hi there is what will be said, in green.
The ) ends the paramter list
The ] ends the function call

Functions are very important to MUSH coding and there are a variety of
useful functions available. Type 'help function' for more.

(*)ransi, bar, cbar, and tbar are global functions I made. For example:
@desc here=This is Javin's [ransi(cool)] pad!
would make the word cool some random color.

@desc here=[bar(1,b)]%r<some description>%r[bar(2,r)]
The %r 's are forced carriage returns.
The bar separators are produced by the bar function calls, try it and see...

***Other stuff***
There is a lot of useful information in the news and help files. Here are
some things to try:
news
(*)news globals
(*)news map
help function list
help substitutions
help commands
help $-commands
help flag list
help <flag name>
help MONITOR
help listen
help @-attributes
help @-general

The key to learning mush coding is reading and understanding the help files.
I taught myself everything I know about it by reading the help files and
experimenting with things. It does take some time, but I hope you will find
it to be worth while. Hopefully this tutorial has given you some insight into
how the mush is organized and how to read and use the help files. Good luck
and have fun!