Narya -*- outline -*-

* What is it?
Narya is a platform on which multiplayer networked games may be developed.
The various packages that comprise Narya attempt to be as loosely
connected as possible so that they may be used individually without having
to buy into our entire system. In some cases, packages depend wholesale on
other packages but that is generally only when the depending package
extends or makes serious use of the depended package (the networking layer
is used by the group management layer which is in turn used by the parlor
game layer).

** You brought presents?
One basic service of the Narya platform is a simple information sharing
mechanism based on the concept of distributed objects. This layer is
called Presents for reasons explained and apologized for in the Presents
design notes.

A distributed object has a set of subscribers. Whenever a modification is
made to that object, all of that object's subscribers are notified. This
has the beneficial effect of providing a framework in which to conceive a
distributed application based on who needs to know what. If information
need be shared among a set of clients, a distributed object can be created
to represent that information and those clients would subscribe. Then
modifications to that object (as well as simple notifications) can be
easily delivered to those clients and those clients only.

As one discovers after further use of the system, the distributed object
concept turns out to be a useful one for other reasons when designing
distributed applications (a subset of which are multiplayer networked
games). The distributed objects fit nicely as the model in the model,
view, controller pattern as well as into other useful patterns.

The primary value of the design is to bring the level of abstraction up
from network connections and packets, to objects and events.

** Three's a crowd
Atop the Presents package, we've built the Crowd package: a framework for
providing rooms (called places), with occupants (also called bodies) and
mechanisms for the people to move between those rooms. Within the rooms,
we provide some useful basic services like the ability to chat among the
occupants of the room, as well as some non-room-specific facilities like
person to person messaging from anywhere in the system and a location
directory.

Not all games developed with the platform will want to use the room
concept, therefore we attempt at this layer and in all subsequent layers
to decouple our services as much as possible. This allows a game with
special needs or for whom our half-baked analogies don't apply, to
leverage some of the useful services without having to bend their design
in uncomfortable ways or hack up some additional interface to the services
we provide.

** Come into my parlor
The Parlor services branch off into all sorts of interesting directions
based on the different kinds of games that are implemented with the
system. Parlor provides matchmaking services, the concept of a game room
which is an extension of the place concept provided by Crowd, a framework
for managing generic turn-based games, and various other useful
services. Again the philosophy is to provide consistently designed, but
decoupled services that can be used within and along side whatever design
works best for your game.

** Visualized whirled peas
The Whirled services provide support for building online world games that
are composed of myriad scenes between which the user can navigate. It
provides a simple extensible framework for defining your scenes and
dynamically loading them into the server when a user traverses into them.

** Miso
A tile-based isometric rendering engine.

** Media
Various image and sound related services.

** Resource
Services for distributing bundles of resources to clients and making sure
they are up to date.

** Nodemap
Services for displaying maps made up of connected nodes.

** MiCasa
Services for hosting and matchmaking games built with Parlor.
