eac87300d2
its own separate project and it fits in more nicely now that we've renamed everything. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@433 542714f4-19e9-0310-aa3c-eee0fc999fb1
85 lines
3.9 KiB
Plaintext
85 lines
3.9 KiB
Plaintext
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.
|