This is getting to be a long conversation that's diverging from Ruby and
onto more generic mud-related topics. But anyway:

Whoops, I seem to have caused some confusion in my last reply. There's
two things I had in mind here while writing that:

1) I verged off a bit and discussed both client and server bits.
(i.e: MXP, and having MXP deal with markup - and this includes color,
html-like clickable links, even urls to sound files, etc.)

2) I'm from a PennMUSH background. I used to be big on Smaug, Rom and
other Diku-Derivatives up until I discovered Penn. Now I won't go back.
:D. (Can you play scrabble, all forms of poker, boggle, chess, bridge,
and many, many more games on a Diku? How about writing 'softcode'
on-game to make almost anything imaginable?)

MUSHes (PennMUSH, TinyMUSH, and Muxes) are not only entirely created
online, but also entirely scripted online. They provide a very powerful
scripting engine to its users that fairly resembles what you'd get if
you had lisp with string interpolation and function(...) rather than
(function,...) The "programming" available on Diku derivatives is like
using old Apple ][e BASIC for making websites in comparison.)

On protocols:

This is important to both the server and the client. Many users or
clients would enjoy an ability to have certain lines of input flagged as
for a certain purpose. For you mudders, this may be "shout"s or "OOC" or
other channels. For MUSHers, we have explicit channels that begin with
<channelname>

Now suppose your client wanted to filter shouts into a separate window
so you can follow a global conversation while you're hacking a hundred
monsters to bits. It would miss multi-line shouts:

Joe the Slayer shouts, "This is a
shout with more
than one line!"

Your shout window would catch: 'Joe the slayer shouts, "This is a'

Not too fun. Having some form of protocol *available* to (but not forced
upon) the user is a Good Idea (tm). i.e:

<Chat: Shout>Joe the slayer shouts, "This is a
shout with more
than one line!"</Chat>

On text manipulation:

MUSHes provide ways for world-builders to customize the description of
all the rooms at the same time. You can write "who" listings, combat
systems, and more - all through string manipulation. String manip in
'mushcode' is considerably easier to deal with than Ruby.

For example, a common 'room parent' would be:

@descformat room parent=[repeat(-,10)]r[wrap(%0,10)]%r[repeat(-,10)]

@desc room 1=This is a fairly long description that is wrapped at 10 characters.

look
----------
This is a
fairly
long
descriptio
n that is
wrapped at
10
characters
.
----------

Toss in ansi hilighitng, and it can get messy fast, especially when you
have columns of things, etc.

Terminal settings, or: "Why we should send width and height"

As for the terminal sending its width/height: users can access each
other's terminal sizes by using width(<user>) and height(<user>). Plug
that in to the above @descformat and use:

repeat(-,sub(width(%#),2))%r[wrap(%0,sub(width(%#),2))]%r[repeat(-,sub(width(%#),2))]

And all your rooms will have their descriptions cleverly hard-wrapped to the
user's terminal size.


- Greg. aka Walker @ M*U*S*H

(If you're interested in taking a look at PennMUSH, btw - feel free to
check out M*U*S*H: http://mush.pennmush.org - I'm Walker on there.)