Background

This document describes some of the details involved in implementing the client for the Virtual Cell game. The cheif technical difficulties involved in constructing the client involve constructing a VRML world which conforms to a world maintained on a centrally located server. In one respect, the VCell client is yet another multi-user VRML client.

It is probably unimpressive to admit, but in one respect, the VCell client is simply a MOO client which is using VRML to do the rendering. The saving graces of this approach are

References

The following technologies are being used in implementing the client

NodeStub and Thing

In order for the scene graph construction and maintenance algorithms to work for the client, the local representation for each object is divided into two halves To connect each of these two halves, each representation has a property Class which is used by the NodeStub to instantiate the local implementation. As of February 2, 1999, the following subclasses of Thing have been implemented

Scene Graph Maintenance

In VRML terminology, the objects in a scene are organized into a scene hierarchy. Since the scene displayed to the user is supposed to change in response to changes in the overal environment, updating the scene becomes one of the primary responsibilities of the client.

The algorithm used during connection is approximatley

Animation

The glue which binds the scene graph on the client side together is a prototype called the RotationSocket. Currently the individual components of this prototype include a Transform node, a Group node, a TimeSensor, a PositionInterpolator, an OrientationInterpolator, a Script node, and routing information sufficient to provide smooth gliding and rotation for all displayed objects.

Other forms of animation are possible as supported by VRML for the various geometries, but care must be taken that different users viewing the same world receive appropriate versions of the animation.

User Interface

At the moment, the user interface is fairly minimal. Other than the interaction provided by VRML objects, only enough functionality to connect to the server and disconnect nicely are provided. This functionality will be extended as needed to support the learning goals of the project.

In response to user activities, the server can instruct the client to display windows containing informational text, windows for selecting actions to perform on various objects, and so on. Work is currently also underway on more task orientated (and thus less general) portions of the user interface, such as a lab book for the students.

Communication Protocol

The LambdaMOO server uses the TCP/IP telnet protocol for communication with client applications. Because it has very little support for binary mode communications, information is transmitted to the client in the form of directive strings. The basic format for these directives is #Directive|ValueList with the following interpretations
Directive
A sequence of characters not including a | character
ValueList
One of

At present, the directive system is used for displaying windows for dynamically generated text, and for displaying windows containing commands. The directive system is also used for communicating the player's identity, object representations, and value updates to the client.

In order to simplify the coding of the server, the convention of Give the client only the updates it has asked for is used. Rather than attempting to guess or assume what the client is interested in, the client is required to request state updates for any object it is maintaining a representation of.

One benefit of the LambdaMOO server is that a text based implementation of remote proceedure calls to the server is fairly simple. At present, the mechanism is fairly basic, and support for synchronous proceedure calls has not been necessary. The design details for synchronous proceedure calls are known, however, so they will be available if the need arises.