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.