Old Design Notes

Note that currently these pages are still works in progress, and may sometimes contain outdated, incomplete, duplicate, or conflicting information.

TODO: Cleanup the structure, separate into features, different games, common use cases, domain objects, and supporting architecture?

Central libraries

 * Java 1.5+ is used as the main development language
 * JavaMonkeyEngine (JME) provides a 3D Scenegraph.
 * Darkstar, or Sun Game Server, was open sourced at the end of August 2007. It provides a server back end for a MMOG, with persistency, task handling, scaling, etc.  We will use it for the low lever server layer, as well as for the network communication.

We are not going to use the Scala programming language, as it is still evolving and gathering tool support. We might support it later when it gets more stable and better supported.

Core Architecture

 * Protocol - The protocol used to communicate between the client and server.


 * Client Architecture - How the client is structured, and how it represents the game world.


 * Spatial Data Model - Describes the interface for accessing the different spatial features in the 3D game universe.
 * Physical Architecture - Describes game entities, containers and environments.
 * Avatar Architecture - Describes avatars, effectors, sensors, commands, and perceptions.
 * Information Architecture - Describes information objects.


 * Libraries - Describes Info Libraries, which are basically collections of Designs.


 * Game UI - How to implement the game UI.


 * Module Architecture - How to make it possible to add functionality to the core in modules.

Various features

 * Chat - talking with nearby people in-game.


 * 3D Rendering - Various techniques that we can use when rendering the 3D landscape and characters

Systems
TODO: Remove and replace with outline below.


 * System - A description of component based systems in general, describes the common part for most systems.
 * Texture System - Procedurally defined textures, used for the procedural creatures for example.

= Subdomains =

This is mostly a braindump of a rough list of features, to guide the creation of domain objects for the  rchitecture.

Important domains are bolded. They will have some interfaces created, to find out their interdependencies, and to make it easier for contributors to get started with them. Importance is determined both based on what needs to be done to get a simple game up and running, as well as for things that potentially have large effects on the architecture that should be taken into account early.

Accounts

 * Login handling. (handling incoming connections, allowing them to log in, and opeing their account, or allowing them to create new accounts.
 * User accounts. Keeps track of user characters, allows starting character creation.  Admin user can give tags to user accounts that allows characters controlled by them to e.g. alter the world (those rights should not automatically propagate everywhere, instead would have to be assigned manually to world editing objects/tools/domain objects inside the game, or the world editing tools/commands could ask for the privilegies (we should avoid accidental click through acceptance attacks and such though - maybe special right also for uploading tools/commands/scripts that requires special rights).

Administration

 * Applying content. A way to apply some info objects(?) describing some part of the world. (and unapply them?).  E.g. a game designer could design a house and paste it into the game world (without requiring in-game construction of it), or a game designer could edit the terrain directly.
 * Direct Editing. Allow view to game objects and their fields, as well as editing and mass editing of them.
 * Shutdown. A way to shutdown / restart the server.

Base Game Objects

 * Game Objects (game objects, actions, perceptions, users, user access rights management)
 * Tags for game objects / persons. Assigning properties for game objects by some other entity.  (Used for mini-game ranks, organization status, access rights, etc?).  A tag can be read only, and issued by some identified game object (player, organization, the server, etc).  Some kind of tag data structures can allow adding various comments etc (commenting - the comment stream should perhaps be separate model object thou).
 * Component System (add port concept to game objects, allow connecting game objects through ports)

Information Objects and Networks

 * Information Objects. Copyable, there can be several instances.  Maybe each info object could have its license (cc style) as metadata?.  Used for various player created content, as well as for game designer created terrains, NPC AI, etc.
 * Info Object Libraries. Allows persons and organizations and such to collect categorized libraries of various information objects (designs, scripts, musical scores, layouts, paintings, etc.etc.  The libraries could be accessible with the right tags, or just be private.
 * Network concept, where nodes can be connected together to form a network where information objects / data packages / actions & perceptions (remote controlling an object) can be sent.

Containment and Shapes

 * Physical Object. Has position, velocity, acceleration, shape, appearance, material, mass, etc.  See Physics for simulating various physical forces.
 * Basic item container system. Containers, inventories, spaces, moving items, portals, positions, velocities, accelerations.
 * 3D Space. Can have terrain, and handles collision detection between objects and between objects and the terrain.
 * Item shape. Distinct items (simple references, or possibly generated on the fly when needed with a random seed), grouped items with varying properties (100 apples with size and color distribution), gaseous objects (trail of gas, expanding gas cloud (dissappears and merges with ambient atmosphere when large enough), liquid object (trail of falling liquid, liquid small pool on ground, liquid stream on ground, liquid sea on ground, rain of liquid), hot gas/fire?, roads and other things located along lines on ground, lakes, caves?, buildings?, etc.

UI

 * 3D World Renderer
 * UI (take game object proxies, create UI to show them and manipulate them, and allow the UI itself to be edited)
 * Renderer for some kind of page/text description format (subset of xhtml?) for allowing people to add content to their homepages, or to written documents.
 * UI Editor (use common editor framework? save UI Layouts as one type of player created content/artifacts?)

Physical Modelling

 * Physics. gravitation, buoyancy, pressure, wind, densities, friction, collision handling(?) with ground and other objects, force fields.
 * Materials. Properties of a material, and definitions of common materials?  Simulation of material reactions to heat, etc.

Environment

 * Gathering. Picking up things, picking berries, collecting stones, cutting lumber, digging ore, harvesting plants.
 * Landscape. Defining, generating, editing, simulating.  Different terrain types.  Gatherable resources / plants / minerals.  River systems, roads, land ownage, etc.  Allow editing the map.
 * Roads. Automatically created trails along much walked routes.  Player built roads.  Procedurally generated road networks, both rural and in cities.
 * Cities. Generating cities based on parameters (cultures, neighbourhoods, etc).  Administration of cities?  Simulating people living in a city?  Designing (mostly game designers)
 * Buildings. generating, designing, simulating (with inhabitants / users / customers / organizations).
 * Weather. Changing weather, depending on geography and changing weather process, and time of year etc.  Could maybe also be affected by player activity (minimal: sky lit by ciy / fire, smoke, maximal: weather control spells, global warming, snowball planet, etc).
 * Ecology. Plant and animal species, their distribution, meeting animals, patterns of animals, animal trails(?), change to populations through hunting, migration, introduced species, calamities, time of year, etc.
 * Water Systems. Rivers, lakes, seas.  Model flow speed and water levels?  Create procedurally, first create big trunks, then smaller branches.

Biology

 * Body (biological simulation) Health, wounds, power output, running speed, endurance, sleepiness, hunger, thirst, etc.
 * Species design. Evolving or engineering different species, using some common components / parametrized base forms.  Allows design of animals as well as plants (maybe somewhat different editors thou - animals have motions, as well as link to AI planner). (the choreography editor could be used for motion/animations).

Engineering

 * Crafting. Creating more complex objects from simpler raw materials, using some known form as goal, parametrized in some way.
 * Coating. Effect of coating an item in some material / other wrapper item.  e.g. dipping a piece of cake in chocolate, falling into a lake, putting on a coat, painting a wall.  (related to crafting, maybe just one crafting technique).
 * Machine system. Machine components connectible together, affecting the world.  Also allows player created UI:s to be attached to them
 * Services (and interactive products?). Vending machines, or order systems, or virtual auctions, or virtual user created in-game networked board games, or weather report interfaces on the internal game net.  (Could also include products that present (complex) custom interfaces to the user?).  Can use custom interface components, or could be embedded on a gameweb page, and reachable through the in-game internet.

Economy

 * Contracts. Specifying exchange of goods or services or assets or roles/tags, and ensuring the transaction is executed in a secure way when the required conditions are met.
 * Economy & Trading. Trading screen/interface, monetary systems, auctions, stocks (owning organizations), loans, insurances, etc.
 * Transport. Package delivery service (server enforced sealed and return-on-timeout packages to prevent abusing the system?  Or delivery services that just have to earn trust?  Or sealed but breakable packages (locks, etc), and insurance system (how can it verify loss of property?)?)
 * Banking, currencies. Ripple could maybe be implemented in-game, allowing characters and organizations to grant credit to friends, and thus form a banking system / currency.  As Ripple develops, the in-game Ripple network could be connected to real world ripple networks also, allowing seamless integration and exchange of in-game and out-of-game money and credit.  As an aside, this would allow virtual NPC:s to participate in real world economics - quite an interesting thought. :-)

Modeling People

 * Character creation. The process through which an user account can create a character in a game world. Can use some interface that provides an UI, some actions and perceptions, and that returns / activates the resulting avatar when ready.
 * AI. Knowledge base, planning, movement, etc..  Initially, create only the interfaces that allows AI to control characters.
 * Skill system? Attributes and skills of a character, and how they affect performance (also mood affects it?)  (related to body system, at least basic attributes?)
 * Emotion system (model mood (and emotes?) of characters, allow changing it, etc.
 * Scripting / behaviour system (for controlling simple devices, up to complex NPC:s).
 * Cultures. Define typical members of a culture, or typical values, beliefs, skills, appearances, etc. for a culture.  One person can belong to several cultures (with different weights) (cultures can overlap, smaller subcultures also).  Cultures also have city patters, etc.  Cultural simulation can be used for long term simulation of change (geopolitical & national).  Short term rumor / knowledge / meme system can keep track of how knowledge and practices spreads in a culture.
 * Memes / Information objects. Ideas that can replicate by people telling them to other people (or writing them down in books, etc).  Can be any kind of information object, or observation.
 * Observation. Observation should be recordable / memorable in some way, to allow people to relay observations, scouting, gossiping, etc.  Observations are memes / info objects.

Organizing People

 * Organizations. Members, roles, ranks, decisions / motions / laws / proposals, owned assets, rules for how decisions are made and the rules changed, relations to other organizations and individuals (issued tags?), etc.  Can have logos, maybe even issued currency, etc.
 * Land ownership and Governance. How to claim land?  How to conquer land?  What does land ownage entitle to?  Taxation?
 * Rules / Instructions / Orders / Tasks for hired NPC:s (also related to modelling people)

Player Created Games

 * Mini-games, rules, signing up, play area (board, 'real' world area, etc), tournaments, ranking, etc. From board games to sports, contests, competing for contracts, etc.  Games can also be observable (audience)
 * Scores. High score tables, result tables, recordings / transcriptions of games, rankings of people, etc.  This is information objects, that can be published etc.

Combat

 * Fighting. How to enter fight state, and prevent griefing.  How to make fighting an interesting challenge, affected by player as well as character skills (about 50%-50% - no levels), as well as by character equipment (this can have a large effect too).  Duelling? (a form of sport = mini-game).
 * Death and Resurrection. How to handle death / great injury of a character, and how to revive it?  Specific spawn points?  Penalties for death?  Different zones?  Taxation?  Specific rules?  Different realms?  Permadeath? (configurable server parameters probably)
 * War. The rules of war - challenges, capturable bases?  Respawn points?  How to ensure wars can not be abused for griefing?  Truce and peace ageements.

Socializing, Bookkeeping, History

 * Chat Channels. Commenting on some object, or some general channel topic, used for channels, private communication, forums?, feedback, etc.   Can have a set topic, different polls, etc.  Allows posted links to various game concepts.
 * Journal. In-game personal journal / blog (Journal sounds better, more fantasy-esque and less buzzworded).  Keep track of activities done, places visited, people met, documents created, etc.  Allow publication of some things.  Allow plugged in custom applications / scripts? (see facebook, one laptop per child, etc).  Also organizations, services, and various concepts can have journals.  Could be automatically updated, useful for looking what happened while one was offline, etc (stores incoming notes, allows direct chat, etc).  Give/calculate journal entries an inportance in percent, that can be used for filtering, as well as for deleting old entries when space is running low.  Could be implemented with the chat system.
 * (Home)pages for organizations / people / things + blogs(using Journal with Commenting)

Fine Arts

 * Architecture. Design a house, using rooms with variable shape and materials.  Add furniture.  Build house according to design.  Could also be used for any arrangement of physical objects and the terrain?  Like garden / landscape / road design?
 * Choreography. Create movements for characters (could maybe even be functional moves, like fighting moves??), use some kind of IK system?  Allow parametrization.  Could be used for emotes, group animations (marching, dancing, handshake, etc).  Special editor, usable by players as well as content creators to create animations.  Can mix in actions and dialogue too (scripting).
 * Writing. For blog of person / organization / service / thing? / concept / product / etc, or in-game book or document.  Allow wiki-like linking, allow collaborative editing.  Version control too?  In-game paper type / uses in game paper and writing implements?  Embed links to other in-game information objects (game objects, their blog/comment pages, statistics pages, etc?).  Could be used for in-game visible signposts too, as well as for notices, etc.
 * Painting. Allow shared painting.  Different inks and brushes (based on parametrized, created in-game inks and brushes - a mixer board in the paint application for preparing (or at least mixing) them, parametrizing them, etc.)  Limited amount of ink based on in-game availability.  Can paint on separate canvases, or directly on walls, clothes, signposts, etc.  Pictures could be copied (requires artist & paint, or photocopier / press?).  Allow importing pictures, that can be rendered in-game on different objects using different techniques (murals, charcoal sketch, oil painting, colored flowers in flower bed).
 * Music. Creating songs and tunes.  Tracker like interface.  Allow crafting different kinds of musical instruments, with parametrized sounds (both build time parameters, and playing parameters (volume, pitch, timbre?, etc).