Component Entity System

msappler posted this information on a Component Entity System, written in Clojure, to the mailing list: here (Update: he has posted more details in a blog post (includes video). I will update this page as I get time)

In a component entity system, everything is an entity and an entity is really just an identifier which can be mapped to a collection of components. Components are behavioral traits which are composited to create different kinds of entities and are generally just chunks of data. Systems, on the other hand, are the implementations of the behaviors implied by a component. That is, they take the components as input and process them.
A specific kind of entity, for example, a monster, is created by combining the required components togehter through composition. By adding a new component to an entity, that entity takes on the components logic and data. Through combining different components, many different kinds of entities can be constructed.

In msappler's component entity system, a monster can be created using defmonster and specifying a list of components to add to that monsters entity (and each components parameters, if they have any). This is a straightforward operation:

The entity system provides a special function used to spawn monsters at a specified position on the map:

Creating the player character is a little bit more work, but essentially boils down to the same thing - specifying and initializing a collection of components which are combined to create the player character:

Note: this short article was written from the few bits of information posted on the mailing list and will be improved if I can get more information on this specific implementation of a component entity system in clojure. Perhaps msappler can provide more details or extend this article.