Game Development Reference
bullet subgraph and cleans up the internal entity that it uses to represent
the bullet. It then proceeds to synchronize the shader inputs for all the
currently visible entities with the attributes of their respective nodes. In
doing so it pulls the new color value from the character's attribute, and
when the relevant batch is rendered, the character is now tinted red.
Praetorian: The Brief History of Aspects
Praetorian, Cohort Studios' proprietary engine, was developed using the aspect-
based architecture described. The engine's purpose was to enable the company
to quickly develop prototypes of games within a wide range of genres and then
to rapidly bring the most promising projects to full production.
Initially it was planned to develop these games using middleware to save de-
velopment time; however, while evaluating third-party engines, it became clear
that they were often better suited to one genre or another or they placed re-
strictions on the features that could be added. Therefore it was decided to allow
a small group with limited resources to begin work on an internally developed
engine that could be used across the wide range of projects envisaged.
An alternative agile-themed approach might have been to develop engine func-
tionality directly within projects, refactoring the code as the project developed
until any common functionality fell out into modules that could be shared. How-
ever, such an approach might take far longer to produce an engine that could be
used as the foundation for a wide range of games with several projects needing
to reach completion.
The first goal of the new engine was to reduce the amount of new code that
needed to be written, reusing existing technology or incorporating third-party
APIs wherever possible. In that light, it made sense to create a core scene repre-
sentation onto which these disparate modules could be attached.
The term aspect was originally encountered in research regarding multithreaded
access to a single scene graph in OpenSG [Voss et al. 02], indicating that each
thread or remote client would maintain a specific viewpoint on the contents of
the scene graph. This diverged from simple multithreaded access into the idea of
such viewpoints differing based on the task required and then into the concept of
aspects as described in this article.
Further research suggested that adopting an aggregation-based approach to
entities over inheritance would further increase the flexibility of the system [Ca-
frelli 01]. This would neatly sidestep the issue of developing a hierarchy of entities
that could meet the needs of all the aspects without creating dependencies be-
The last component of the core to be implemented was the event system.
Although it was in the initial design, it had been dropped to help speed up the
development of the aspects that depended on the core interface being complete.