High Level Architecture
SDxWiki

An attempt at an orbital-height view of the major components in involved in the sort of space-based MMOG that we've been discussing.

When we get to 'small enough' subsystems, I would like us to assign an 'owner' to each one, who will be the primary driver of the subsystem's design.

Some guidelines:

The game is all about simulating things in a variety of realms - physical, economic, sociopolitical, etc. In a sense, even the front-end user interfaces are a simulation -- of a spaceship's control interfaces, or of a terminal for interacting with a trading network, for instance. It may serve us well to organize the system around discrete simulations that can be programmed and executed relatively independently, although they may communicate with one another. This will simplify the programming by treating each simulation as a single-threaded unit. Multi-processing and distribution issues can be handled primarily in the communications channels between simulations, and related interfaces to the environment within which a simulation is executing. As an initial design, each simulation could run in a separate process. Later, alternative implementations of the communications channels would allow us to consider a multi-threaded, single-process aggregation of some simulations.

This approach leads to a design based heavily on message flow. Top loops of simulations may be message-driven, or clock-driven, as appropriate for the simulation. Clock-driven loops, for instance the user interface, will arrange for the handling of incoming messages as needed.

The biggest downside to this arrangement is probably in the performance-critical player client, where such a strict separation discourages the sharing of memory between the rendering code (which is part of the ship interface simulation) and physical modelling code. The physical simulation benefits from this sort of design because it needs to be executable in two very different environments; on the player's machine, and on network servers. On the latter class of machines, physical simulation is needed to verify and arbitrate among the physical simulations running on player's computers. However, the amount of information flowing between the physical simulator and the renderer might not be that high. The renderer will have its own data structures describing the models and such, most likely in a different form than needed by the physical simulator. The renderer will need periodic updates on position and orientation of all objects. Should performance become an issue, the physical simulator could support an alternate direct-call interface to provide this data more efficiently.

Subsystems, areas of expertise and concern:


Istvan: Proposed additional subsystems: ;;Sociopolitics simulation engine: visualized at the moment as mostly a database holding information on relationships among abstract entities-not-players. However, because I conceive of the data being adjusted dynamically based on in-game events, this system is not just storage but also must include functions that act on the data, and preferably a simple toolset that allows manual adjustment of stored data. The easiest events upon which to trigger change on stored relationships would be such things as missions/tasks (also stored in a subset of the game database), because mission-end conditions can be tracked.

Dan Muller wonders if this shades over into AI? Can/should the sociopolitical environment be simulated indirectly by the interaction of various AI components? (Admittedly, the distinction between 'simulation components' and 'AI components' may be a matter of opinion in some cases.) Istvan: qualified 'maybe'. I don't think the admittedly simplistic "engine" I thought really quite makes it into 'AI' - However, I could see a potential for the handler functions being made more sophisticated and managing the relationship database in a more complex manner. More likely, however, I see a real valuable role for true 'AI components' as the sociopolitical 'actors' which execute the decisions behind each 'non-player' Org, or entity as I'm calling them in some places. The handlers would work off the AI generated events and do so no differently than they would off player generated events. Much more importantly, the AI actors would examine the present state of the relationship table when making decisions about what actions to prioritize with their resources, and what other actors to target/influence.