Code Architecture

Servers

Bulk assets are kept here. An Asset is an immutable set of bits
with a unique ID. Examples are an artifact model, a texture, a text message, a
terrain deformation.
The Asset Server will serve signed assets (ID and content checksum encrypted
with Asset Server private key). Clients may freely exchange authenticate assets
in a bit-torrent-style mesh.
APIs are available to fetch an asset, query the availablility of a set of
assets, upload assets, set and query asset management attributes.

Zone Server

A zone server animates a subset of the World by creating
Realtime Differential Streams (RDS) for all moving artifacts and avatars in a
Zone. Each Client is subscribed to a small set of RDS feeds that are used to
render their current view.
RDS can be distributed P2P if desired, especially when Clients are co-located.
RDS data can be encrypted using a key provided by the Zone Server, so each
sharing Client can authenticate the stream.
Note that only physics is simulated on the Zone Server. Object poses are
rendered on each Client station, though they may be parameterized by the Zone
Server (e.g. “at rest”, “jumping style 3”).
Our goal is to transmit NO basic terrain info to the Client. The terrain will
be algorithmically generated based on a location seed.All Clients use the same algorithm and seed,
so see the same landscape.

World Server

A World Server contains the Rule Engine. It tracks avatar
states, artifact conditions, processes and triggers. All user requests are
executed here. Processes such as growing, weather and aging are executed here.
CAC and SAM streams define the engine API.

NPC Server

Unoccupied avatars are animated
using algorithms that run on the NPC Server. Also herd, lair and unique
creatures have processes here (vermin run on the Zone Server).

Login Server

A single-sign-in login is provided thru SSL HTTP/SOAP. The
credential returned is authenticatable by every other CSC Server (and anyone
else for that matter). A Client can gain access to any server by providing
their credential.
Credential: Signed {user id,payment option (free player/standard/gold)} ?

Database Servers

All models, artifacts, avatars, users, processes and terrain
modifications are kept in a database. It is back-end, accessed only by Login,
Zone and World servers.
Scalability can be achieved through “sharding”, where rows of large tables are
hashed by key to choose the database?
Assets are NOT kept in a database, though their IDs may be indexed here.

Client

CSC will create a “dumb terminal” client that is distributed
free or at duplication-cost. This facilitates viral adoption of the game.

Rendering Engine

Some OpenGL tool set like DarkStar/Havok/Speedtree.

Terrain model

Terrain includes everything from continental forms to the layout
of trees in a forest.

Credence uses a proprietary algorithmic terrain generator.
This allows an infinite world, and drastically reduces the need to download
models and textures.

Deformation is tracked thru model updates, which are
identified by the Zone Server from data provided by the World Server, and
downloaded by the client from the Asset Server. Deformation and asset
information is signed and shared P2P as needed.

Object model

Scene objects are abstract, provided by the Zone Server with
a physical description for rendering/animating. Each object is identified with
a set of uuids calling out class, subclass, instance.
Attributes can be queried in bulk e.g. a container capacity, owner, purpose. Attributes let the client guide the user in using
objects appropriately through the GUI e.g. can it be wielded? consumed? carried? ridden?

User requests to use an object are communicated to the World
Server as a state change. If valid, the World Server communicates with the Zone
Server which controls animation for the containing Zone, which in turn
communicates to the client a change in orientation/location/pose for the
affected object.

Incremental release

The Credence Client Application is released as a set of granular
libraries. Each library supports some feature: terrain generation, rendering
adapter, object handler, attribute interpreter, GUI
control.

As features change, only the affected libraries need be
re-released. They can be loaded by the Client app on-demand, from the Asset
Server.