From: Adam D Beeman <beeman%cats.UCSC.EDU@ucscc.ucsc.edu>
Subject: Text based world-building in MUDs, esp. LP-mud (LONG)
Date: 6 Aug 91 18:28:30 GMT
Organization: University of California, Santa Cruz; Open Access Computing



	Aha, it's finally breaking into the VR newsgroup, I knew it was
only a matter of time.  MUD is the poor-man's Virtual Reality, and I can
sense a growing movement of new interest in it.

	Currently there are several types of "MUD", such as TinyMud,
TinyMUCK, Dikumud, LPmud, Abermud, TinyMage, MOO, and probably a few other
ones that I haven't seen before.  All of these have various similarities and
differences, and people have already spent hundreds of net postings (and thus,
according to the warnings of USENET, hundreds of thousands of dollars) argueing
back and forth about which variation is best and why.

	It is my feeling that the one called "LPmud" has the most potential
right now due to the fact that it has in my opinion the most programmability.
Currently I have been devoting a great deal of time learning the language of
this "system", and in the last year and a half I've seen a great deal of
evolution within the game and the affecting the worlds created by it.

	Just because you don't have the high-resolution 3-D stereo headgear
and fiber-optic suits doesn't mean you can't start making virtual spaces...
all you have to do is have an internet connection, free time, and an active
imagination.  There is, of course, a great deal of disagreement as to what
lpmud (or any mud) is good for, and to a certain extent some of it is good
for teenage boys who would rather play a computerized multi-user Dungeons and
Dragons-type game, and at the same time not good for any system administrators 
who don't understand what it is...

	A mud, from creation, begins as (usually) a small "village", a handful
of rooms and "monsters", and a language for making more of this.  Different 
types of mud have different ways of dealing with the data involved... For
example TinyMud uses a database, in which objects are assignment a number and
a description, as well as a number of other functions.  LP-mud, on the other
hand, uses a directory, and a few unix-like commands for privelidged users who
are thus able to manipulate their own files from within the system. 

	Currently I am working on a developemental lpmud site that I feel has
a lot of potential, because of the approach we are taking: we aren't afraid to
throw out the old to find a better way th do things.  Someone mentioned, in an
earlier posting, a number of things about lpmud that I don't like much myself.
Chris Shaw, in article 1876, alluded to a strict level-based system with lousy
documentation, in which the only way to get the programming privledges was
by killing enough monsters to earn the number of experience points to become
a "wizard".  Not his words, there, but in any case I find that there are 
number of things found in the "standard" release of lpmud that I don't find
ideal.

	However, at least on the system I am working on (we call it 
"Warhammer II" in reference to an earlier release) we are attempting to
break some of these conventions.  While not anybody can become a wizard on
our mud, there is much more flexibility.  The original level system is gone,
replaced with a complex system of player skills and statistics.  We are also
at some point soon going to make our roommaker tools available to players,
and thus people will be able to create complex mazes and describe "rooms",
linking them to one another, and adding details as they see the need, all 
without requiring the player to learn a new language, merely how to use the
tools.

	The "roommaker" is one of the most fascination concepts to me, because
it will surely evolve into something quite magnificent.  To show my point,
when we finally do have full-fledged Virtual Reality available, how many people
are going to want to type in an abstract, complex language, when they could
just wave some sort of object, select from various choices, set the 
description, a few other variables, and suddenly have a virtual room?

	Or, for the people who wish a more in depth experience, there is a
language specifically for LP-mud, known as LPC.  A variant of C, LPC has
many special funtions available specifically for dealing with many objects
swimming around in a virtual space... However I do see a difficulty in the
fact that to program a realistic simulation of anything, the simulation can
new be comletely perfect, and the coding involved becomse longer and more
complex wwith each detail added... the language is still useful, however:

/* This is the cocpit for the spacecraft. 
This spacecraft was written by Buddha */
string cap_name;
object craft, ob1;


	/* what you see when you look */
long() { write("This appears to be the main control room of the spacecraft.\n"+
	"You can see numerous controls and digital displays that fill the\n"+
	"room.  There is a ladder going down through a portal, and also\n"+
	"there is an instruction manual here you can read.\n"); }

short() { return "spacecraft control room"; } /* a short name */

reset(arg) {    /* this function is called when loading the object */
	if (arg) { enable_commands(); return; } 
	cap_name = "Alien Spacecraft console";
	enable_commands(); /* this function makes the object alive */
	set_light(1); }

query_craft() {
	craft = find_object("room/air/spacecraft.c"); /* find it */
	if (!craft) call_other("room/air/spacecraft", "short");
		/* if it can't find it, load it. */
		return craft; } 

query_realm() { return "spacecraft"; }
help() { write("Why don't you read the manual?\n"); return 1; }

init() {     /* these are commands you can type, and the functions they call */
	add_action("out", "exit");
	add_action("out", "out");
	add_action("help", "help");
	add_action("go", "go");
	add_action("manual", "read");
	add_action("open", "open");
	add_action("close", "close");
	add_action("look_out", "peer");
	add_action("beam_up", "beam");
	add_action("announce", "announce");
}

out(str) { if (query_craft()) /* if there a ship?  */
	craft->out(); /* call the out function in the ship object */
	return 1; }

look_out(str) { write("You peer out the window.\n");
	if (query_craft())
		craft->look_out();
	else
		write("You can't see anything!\n");
	return 1; }

open(str) { if (query_craft())
	craft->open(str);
	return 1; }

close(str) { if (query_craft())
	craft->close(str);
	return 1; }

go(str) { if (!str) { write("Go where?\n"); return 1; } /* no direction */
	if (query_craft()) {
		craft->go(str); /* call a movement function in the ship */
		return 1; } }

beam_up(str) { if (query_craft())  /* if the spaceraft is loaded */
	craft->beam_up(str);  /* call a "beam_up" function in the other file */
	return 1; }

announce(message) {
	if (message) { if (query_craft()) { if (craft->speak(message)) {
			tell_room(this_object(), "The spacecraft booms: "+
			message + "\n");
		return 1; } } }
	write("You hear static.\n");  /* if there was no message */
	return 1; }

manual(str) { 
	if (!str) return 0;
	cat("/room/air/directions");    /* display the help file */
	return 1; }

/* note that the rest of the code for this object is in another file
   that it references, and that they communicate with each other to 
   send the appropriate messages to the user... */


	I could go on for much longer, but that is for another day.  I will,
however, leave for now with an invitation: if after all of this, you would
like to know more about  this Virtual net game, you can either send me
mail or drop in on our test site to look around.

We're currently running at 129.97.32.42 2112, you can simply:
telnet 129.97.32.42 2112 if you care to take a quick look around...  
I would welcome hearing from either curious Virtual Reality people
or serious mudders, especially (but not only) if you can offer us a better
machine (closer, faster, lots of disk space) to run our site from than
the NeXT we're using that's in Canada...  kind of a setback when most of
our people are from California, because of the slow net connection...

If you should drop in, tell them you saw the posting by "Buddha" in
sci.virtual-worlds... that is me, or at least my character name...


-Adam Beeman

/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
||  Adam Beeman, undergraduate                  The bubbles fill the space   ||
 || designer of alternate realities.                             o   O      ||
||  Another twisted philosophical type.                 o       o       o    ||
 ||     beeman@cats.ucsc.edu                                      o   0     ||
||      beeman@ucscb.ucsc.edu   (408) 464-2375                  O       O    ||
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
 ||     Disclaimer: The views represent views, nothing more.  So what?      ||
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/


