Subject: Inter-MOO communication...

From: Andrew Wilson <[email-masked]>
Date: Fri, 31 Jul 1992 10:49:24 -0700

Hi,
	has anyone had a serious look at allowing MOOs to communicate?

I'm experimenting with the idea of a 'virtual' room, sort of VR in VR
if you like.  To the player, a virtual room (a VROOM) looks like any other
and has a single exit 'out'.  When a player enters a VROOM she/he/it can
interact with other players that appear in the room by use of the commands
'say' and 'emote'.  Typing 'look' works the same way too.
	So far, so what!  Well, it works out that not ALL the players
you see when you enter a VROOM are PHYSICALLY located on the same MOO as
you!

To allow two different MOOs to communicate, each will need to know:

  1.	The site name and port number of the other's MOO server.
  2.	The name and password of a 'special' player on the other MOO.

Let's say that there are two sites, LambdaMOO and GodNet that want to
set up a connection to allow their players to talk to one another.

At LambdaMOO, a special player is created for the GodNet MOO to use:

	create JeanMichel heretic

and JeanMichel's home is set to be a VROOM in LambdaMOO.

At GodNet, a special player is created for the LambdaMOO MOO to use:

	create SurfMonster wipeout

and SurfMonster's home is set to be a VROOM in GodNet.

The players JeanMichel and SurfMonster are both VPLAYERs, a class which inherits
from the player class and has a few extra verbs defined on it.

Now we need to join the MOOs together.  This could be done
automatically, but let's assume a wizard at each site makes the connection.
A wiz at LambdaMOO would execute code defined for the VROOM that looked
something like:

	"$vroom:listen
	$vroom.vplayer = open_network_connection("godnet.somewhere.edu", 7777);
	notify($vroom.vplayer, "connect SurfMonster wipeout");
	while (1) 
		line = read($vroom.vplayer);
		fork (0)
			$vroom:broadcast(line)
		endfork
	endwhile

Where $vroom:broadcast(line) is a verb which displays 'line' to
every player in the VROOM.  It does NOT send 'line' to any VPLAYERs in the room.
	
Thereafter, read(vplayer) would read from the connection set up between
LambdaMOO and SurfMonster on GodNet.

Now suppose that people in SurfMonster's VROOM on GodNet start talking:

Frederique is standing next to SurfMonster and says:

	"Hello everyone!

SurfMonster sees this and GodNet's server sends all the things that SurfMonster
sees back down the connection to LambdaMoo.  At LambdaMoo, the code
defined in $vroom:listen which is listening to the connection to GodNet
picks up the string 'Hello everyone!' and broadcasts it to every non VPLAYER
in the VROOM.

BigMac is standing in LamdaMOO's VROOM and hears (sees):

	Frederique says, Hello everyone!

(This WORKS!!  It DEFINETELY works.)

So far we have it that players in the LambdaMOO VROOM can 'hear'
and 'see' everything that happens in the VROOM at GodNet.  But when BigMac
types 'look' all he/she/it gets is a description of the VROOM in LambdaMOO.

To take this description further lets assume that a wizard at GodNet has
connected to LambdaMOO using the VPLAYER JeanMichel.  So things look
like this:

LambdaMOO
+-----------------------+
|			|
|	BigMac		|
|			|
|	JeanMichel<-----+---+
|			|   |
+-----------------------+   |
		   ^        |
		   |        |	GodNet
		   |        |	+-----------------------+
		   |        |	|			|
		   |        +-->|	Frederique	|
		   |    	|			|
		   +------------+------>SurfMonster	|
				|			|
				+-----------------------+

Ok, so redefine $vroom:look so that it:
	1. Prints a description of the GodNet VROOM and its contents and then;
	2. Prints a description of the LambdaMOO room and its contents.
The nasty way to do this is for the code for 'look' to ask SurfMonster what
he can see in GodNet's VROOM.  You could code this as:

	"$vroom:look
	notify($vroom.vplayer, "look");
	pass(args)

And when SurfMonster 'looks' in GodNet's VROOM all the text that he sees
will be delivered back down the connection to LambdaMOO and will be broadcast
to BigMac.  The code will then call the ordinary 'look' verb for $room.

So then, BigMac typed 'look' and the reply was:

	This is GodNet's VROOM, a connection to the MOOniverse.
	Beware, not everyone you see is really here!
	Frederique and SurfMonster are here.
	This is LambdaMOOs VROOM, a link to all known MOOs.
	People and things are NOT as they seem.
	JeanMichel is here.

Not perfect, but details are usually someone else's problem I find!
A better response would be (perhaps) for both VROOMS to have the same
descriptions and to have some way of getting a list of player names from
the GodNet room.  Basically I'm thinking along the lines of:

	$vplayer:who_else
		"print out the names of players in my vroom
		<Some code>

So then $vroom:look would look like:

	"$vroom:look a better version:
	pass(args);
	notify($vroom.vplayer, "who_else");

So now when BigMac types 'look' he gets:

	This is a VROOM.
	People and things are not as they seem.
	JeanMichel is here.
	Frederique and SurfMonster are here.

Like I said, details.

RECAP:

	We can connect two MOOs together and set up two-way communications
using VPLAYERs to transmit and recieve information.  To do this we
need to know the name and password of a VPLAYER on another site and that
VPLAYER needs to be in a VROOM.  Players can then interact with 'say',
'emote' and 'look' and can be understood by players on other MOOs.
This does NOT mean that you can 'take' anything that appears in the description
from the 'other' MOO's VROOM.

FUTURE DEVELOPEMENTS:

	Why limit it to two-way communications?  Become an ambassador
for your MOO!  Get a VPLAYER set up on another site, make a VPLAYER for
that site to use as well and hack your 'listen' verb so that it connects
you to that site too!  Just imagine!  A VROOM linking 3 or 4 or 5 MOOs
all at the same time.  Millions of people to talk to and none of them
really in the same room as you!  (Sounds familiar).

	You COULD make it even more simple to implement by placing
all the VROOM-specific code in VPLAYER.  So VPLAYER will execute the 'look'
code.  Details, details!  Let someone else do the thinking for a while!

DEEP BREATH:

Please note:  I'm not suggesting a mechanism for physically transferring
objects between MOOs.  I'm just trying to set up a way for players
on different MOOs to communicate.

Has anyone done this already and if not WHY NOT!  Post replies to
[email-masked] so we can all join in.

Luv,
	Andrew Wilson - Wizard @ Various MOOs Nobody's Ever Heard Of!
		      - A PhD by October, hopefully.

ps.  My understanding of 'processes' in MOO is a little flakey.  So the code
might not be 100% correct.  It works for me though, as far as I know.

---

From: [email-masked] (Frank Crowell)
Date: Fri, 31 Jul 1992 14:49:20 -0700

First of all, i like the idea of VROOM; it allows for a lot
of multi-MOO interactions without having to deal with nasty
details such as characters and objects moving all around the  
different servers.

So my question is how are whispers handled?
	-everone hears				say <msg>
	-only those on serverA hear		w serverA <msg>
	-only Cybercrud hears			w Cybercrud <msg>

Finally, do you think its strange that we handle all those MOO
issues through email?  After, many of us claim that MU* can be
used for things other than games and role-playing.  Its seems
that the best way to learn and advance MU* ideas is through a MU*
Laboratory. I find it strange that the Mud Institute is the only
site that offers such an environment for LPmud and MUDOS.

---

From: [email-masked] (Jay A. Carlson)
Date: Sat, 1 Aug 1992 01:52:58 -0700

> Its seems that the best way to learn and advance MU* ideas is
> through a MU* Laboratory. I find it strange that the Mud Institute
> is the only site that offers such an environment for LPmud and
> MUDOS.

The original intention of DistortionMOO was to give people a place to
fool around with ideas like this without having to worry about
breaking stuff for a huge (non-programmer) populace.  We seem to have
stagnated worrying about correctness issues, though.  Perhaps it's
time to revive the original concept.  I'd offer Distortion, but I'm
not sure I want to break its theoretical correctness (and believe me,
any correctness it has is in theory, both literally and figuratively.)

:ducks vegetables from Distortion pun-haters.

Anybody have a site for an all-programmer chaos MOO?

--Jonny, archwizard of Distortion Midwest

---

From: Ryan Daum <[email-masked]>
Date: Sat, 1 Aug 1992 10:42:10 -0700

> --Jonny, archwizard of Distortion Midwest

Hi, it's Comrade.

I have a site available for a all programmer chaos MUD, but I'm not sure MOO is the best system to run for such a system.

It seems to me that the problems of MOO (speed, database size, lack of multinheritance, hardwired parser, fixed permissions, etc.) outweigh it's value in a new MUD.

I'm looking at CoolMUD with more and more seriousness everyday now.  All it will take is someone with "C" programing ability to add an `eval' builtin to it (which is a necessity.)

I *can* put up a all-programmer "chaos" MOO -- in fact I basically did that with Floodplain.  The thing is, I think MOO is on it's way down in comparison to the power of both FMPL and CoolMUD.

	-- Comrade Sandino